diff --git a/DEPS b/DEPS index 1f406f2..bb015e2 100644 --- a/DEPS +++ b/DEPS
@@ -206,11 +206,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': '2d2f82c00aeb8d82f37911621a287fe7cee00dbc', + 'skia_revision': '01771c17f1d64201a644ca894af0aac81b1a101d', # 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': 'd20e0a345b623a1373a8833f30c5f7f153b902d7', + 'v8_revision': 'd82ff002381657c44563e830ec337d103b99d565', # 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. @@ -218,11 +218,11 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling ANGLE # and whatever else without interference from each other. - 'angle_revision': '9d160b0bba68f5cebb8f66c894c84f95b608eb72', + 'angle_revision': '99f9277c5bcb2f83c491c5d5bb5d9e465bf00eeb', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. - 'swiftshader_revision': '85d9d5d4bbc6ef1a8382df21d92bc6dc0bed4057', + 'swiftshader_revision': '84f5eeb6dd9b225f465f93737fa76aad7de355cf', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling PDFium # and whatever else without interference from each other. @@ -257,7 +257,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling freetype # and whatever else without interference from each other. - 'freetype_revision': '80389cab7f5823e7c3b3fe4190a7c337439317de', + 'freetype_revision': '6a2b3e4007e794bfc6c91030d0ed987f925164a8', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling HarfBuzz # and whatever else without interference from each other. @@ -269,7 +269,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': '2fb0633adec8dcad80fad839ccf265f4b3c8c787', + 'catapult_revision': '2d615e49c1cba8191c7c8b8318741ad5490db0aa', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libFuzzer # and whatever else without interference from each other. @@ -277,7 +277,7 @@ # Three lines of non-changing comments so that # the commit queue can handle CLs rolling devtools-frontend # and whatever else without interference from each other. - 'devtools_frontend_revision': 'bd66f2d951865e98f1924808f3f14c5c179b8cd7', + 'devtools_frontend_revision': 'ee87b994218e9052f0297e672af5710b53d0192e', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling libprotobuf-mutator # and whatever else without interference from each other. @@ -329,7 +329,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': 'e9c99e93e75ec13ecf143478b9defe92230fc83e', + 'dawn_revision': 'e2cbcc9565886e0a066580e3be7426b9924be72f', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -912,7 +912,7 @@ }, 'src/third_party/depot_tools': - Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + '792630c498fc14ec1525e3b85591f96d4326432e', + Var('chromium_git') + '/chromium/tools/depot_tools.git' + '@' + 'f736cabba58b374aeb96d7512813a39f30567b5a', 'src/third_party/devtools-frontend/src': Var('chromium_git') + '/devtools/devtools-frontend' + '@' + Var('devtools_frontend_revision'), @@ -963,7 +963,7 @@ Var('chromium_git') + '/codecs/libgav1.git' + '@' + 'a9449e612bc251b4271bbe1e3a0d12e9809bf74c', 'src/third_party/glslang/src': - Var('chromium_git') + '/external/github.com/KhronosGroup/glslang.git' + '@' + '3ead01191215942f7e8d6f3ada712db37805215a', + Var('chromium_git') + '/external/github.com/KhronosGroup/glslang.git' + '@' + 'ea52b3c2d270ed37a4bb0dea771a6ec289af0f4b', 'src/third_party/google_toolbox_for_mac/src': { 'url': Var('chromium_git') + '/external/github.com/google/google-toolbox-for-mac.git' + '@' + Var('google_toolbox_for_mac_revision'), @@ -1265,7 +1265,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + 'be6747613d78aa1a7d88423b063d7a74fa3899e0', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '9606cffa66d00945b91a729d98c39fb4af259074', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1535,7 +1535,7 @@ 'packages': [ { 'package': 'skia/tools/goldctl/linux-amd64', - 'version': 'ikTOCf4Bt8qV4csQ2QeAWQwnDdKV4rH8bvkUgV-zFTsC', + 'version': 's4io-2tGPYRC7r5NKMb_6S-dd-xm-4p7J69tDFPq8OgC', }, ], 'dep_type': 'cipd', @@ -1545,7 +1545,7 @@ 'packages': [ { 'package': 'skia/tools/goldctl/windows-amd64', - 'version': 'XxwGBMgOMB-RL51eSZcbadG4yUHFe_y3WZoPzJHB494C', + 'version': '6JFI1DhhYVfuJu5O5hIqAMI3vsd1fGoBEjuuyfrv5GAC', }, ], 'dep_type': 'cipd', @@ -1555,7 +1555,7 @@ 'packages': [ { 'package': 'skia/tools/goldctl/mac-amd64', - 'version': 'PneSzkHF8Nz33sG7ImNPHXJB6xST4vtAsHOBRMwzO6kC', + 'version': '-sWJ6Y-_28CBu5970u_9tllKY3mY-_75kBm4Ikavq24C', }, ], 'dep_type': 'cipd', @@ -1569,7 +1569,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@a87909398b713aea9b1aee41fe7cebbedc627e58', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@7b3ad4f25a179e097a130c7bf5ec4f2ca177ba4a', 'condition': 'checkout_src_internal', },
diff --git a/WATCHLISTS b/WATCHLISTS index e0eeffc..f4af75d 100644 --- a/WATCHLISTS +++ b/WATCHLISTS
@@ -892,6 +892,9 @@ '|chrome/browser/chromeos/printing/'\ '|printing/', }, + 'cursor': { + 'filepath': 'ui/base/cursor/', + }, 'custom_proxy': { 'filepath': 'services/network/network_service_proxy_delegate.*', }, @@ -2438,6 +2441,7 @@ 'crostini': ['crostini-ui@chromium.org'], 'cups_printing': ['print-reviews+cups@chromium.org', 'cros-printing-reviews@google.com'], + 'cursor': ['hferreiro@igalia.com'], 'custom_proxy': ['lbendig@opera.com', 'wdzierzanowski@opera.com'], 'custom_tabs': ['amalova+watch@chromium.org',
diff --git a/ash/BUILD.gn b/ash/BUILD.gn index a82cc758..67a12412 100644 --- a/ash/BUILD.gn +++ b/ash/BUILD.gn
@@ -2165,7 +2165,6 @@ "system/phonehub/phone_hub_ui_controller_unittest.cc", "system/phonehub/phone_status_view_unittest.cc", "system/phonehub/quick_actions_view_unittest.cc", - "system/phonehub/silence_phone_quick_action_controller_unittest.cc", "system/phonehub/task_continuation_view_unittest.cc", "system/power/backlights_forced_off_setter_unittest.cc", "system/power/peripheral_battery_notifier_unittest.cc",
diff --git a/ash/app_list/app_list_metrics_unittest.cc b/ash/app_list/app_list_metrics_unittest.cc index e665194..a9a09c3d 100644 --- a/ash/app_list/app_list_metrics_unittest.cc +++ b/ash/app_list/app_list_metrics_unittest.cc
@@ -18,6 +18,7 @@ #include "ash/app_list/views/apps_container_view.h" #include "ash/app_list/views/apps_grid_view.h" #include "ash/app_list/views/contents_view.h" +#include "ash/app_list/views/privacy_container_view.h" #include "ash/app_list/views/search_result_container_view.h" #include "ash/app_list/views/search_result_page_view.h" #include "ash/app_list/views/search_result_tile_item_view.h" @@ -137,15 +138,20 @@ } GetAppListTestHelper()->WaitUntilIdle(); + // Mark the privacy notices as dismissed so that the tile items will be the + // first search container. + ContentsView* contents_view = Shell::Get() + ->app_list_controller() + ->presenter() + ->GetView() + ->app_list_main_view() + ->contents_view(); + Shell::Get()->app_list_controller()->MarkAssistantPrivacyInfoDismissed(); + Shell::Get()->app_list_controller()->MarkSuggestedContentInfoDismissed(); + contents_view->privacy_container_view()->Update(); + SearchResultContainerView* search_result_container_view = - Shell::Get() - ->app_list_controller() - ->presenter() - ->GetView() - ->app_list_main_view() - ->contents_view() - ->search_results_page_view() - ->result_container_views()[0]; + contents_view->search_results_page_view()->result_container_views()[0]; // Request focus on the first tile item view. search_result_container_view->GetFirstResultView()->RequestFocus();
diff --git a/ash/app_list/app_list_presenter_delegate_unittest.cc b/ash/app_list/app_list_presenter_delegate_unittest.cc index e591c9f..ea63310 100644 --- a/ash/app_list/app_list_presenter_delegate_unittest.cc +++ b/ash/app_list/app_list_presenter_delegate_unittest.cc
@@ -21,6 +21,7 @@ #include "ash/app_list/views/apps_grid_view.h" #include "ash/app_list/views/contents_view.h" #include "ash/app_list/views/expand_arrow_view.h" +#include "ash/app_list/views/privacy_container_view.h" #include "ash/app_list/views/search_box_view.h" #include "ash/app_list/views/search_result_actions_view.h" #include "ash/app_list/views/search_result_base_view.h" @@ -467,6 +468,16 @@ TEST_F(AppListPresenterDelegateTest, RemoveSuggestionShowsConfirmDialog) { ShowZeroStateSearchInHalfState(); + // Mark the privacy notices as dismissed so that they do not interfere with + // the layout. + Shell::Get()->app_list_controller()->MarkAssistantPrivacyInfoDismissed(); + Shell::Get()->app_list_controller()->MarkSuggestedContentInfoDismissed(); + GetAppListView() + ->app_list_main_view() + ->contents_view() + ->privacy_container_view() + ->Update(); + // Add a zero state suggestion results - the result that will be tested is in // the second place. Shell::Get()->app_list_controller()->GetSearchModel()->results()->Add(
diff --git a/ash/app_list/views/privacy_info_view.h b/ash/app_list/views/privacy_info_view.h index 3316a1f..a8fd2a1 100644 --- a/ash/app_list/views/privacy_info_view.h +++ b/ash/app_list/views/privacy_info_view.h
@@ -69,7 +69,7 @@ // Indicates which of the privacy notice's actions is selected for keyboard // navigation. - Action selected_action_; + Action selected_action_ = Action::kNone; DISALLOW_COPY_AND_ASSIGN(PrivacyInfoView); };
diff --git a/ash/ash_prefs.cc b/ash/ash_prefs.cc index f4c1241d..4ab3f46 100644 --- a/ash/ash_prefs.cc +++ b/ash/ash_prefs.cc
@@ -38,6 +38,7 @@ #include "ash/wm/desks/desks_restore_util.h" #include "ash/wm/gestures/wm_gesture_handler.h" #include "chromeos/components/quick_answers/public/cpp/quick_answers_prefs.h" +#include "chromeos/constants/chromeos_pref_names.h" #include "chromeos/services/assistant/public/cpp/assistant_prefs.h" #include "components/pref_registry/pref_registry_syncable.h" @@ -82,6 +83,9 @@ registry->RegisterBooleanPref( prefs::kMouseReverseScroll, false, user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PRIORITY_PREF); + registry->RegisterBooleanPref( + chromeos::prefs::kSuggestedContentEnabled, true, + user_prefs::PrefRegistrySyncable::SYNCABLE_OS_PREF); } }
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_iw.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_iw.xtb index 9ad329ad..65f3ec3 100644 --- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_iw.xtb +++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_iw.xtb
@@ -175,7 +175,7 @@ <translation id="7635348532214572995">הזזה של סמל אפליקציה בתצוגת האפליקציות</translation> <translation id="766326951329901120">הדבקת התוכן מלוח העריכה כטקסט פשוט</translation> <translation id="7703010453515335249">סוגר שמאלי</translation> -<translation id="7724603315864178912">חתוך</translation> +<translation id="7724603315864178912">חיתוך</translation> <translation id="7730490981846175479"><ph name="SHIFT" /><ph name="SEPARATOR1" /><ph name="ALT" /><ph name="SEPARATOR2" /><ph name="L" />, ואז <ph name="SPACE" /> או <ph name="ENTER" /></translation> <translation id="7787242579016742662">פתיחת קובץ בדפדפן</translation> <translation id="7952165122793773711">מעבר לכרטיסיות מס' 1 עד 8</translation>
diff --git a/ash/shortcut_viewer/strings/shortcut_viewer_strings_mr.xtb b/ash/shortcut_viewer/strings/shortcut_viewer_strings_mr.xtb index 2c42d56f..6794fc3 100644 --- a/ash/shortcut_viewer/strings/shortcut_viewer_strings_mr.xtb +++ b/ash/shortcut_viewer/strings/shortcut_viewer_strings_mr.xtb
@@ -59,7 +59,7 @@ <translation id="2830827904629746450">एखादी विंडो उजवीकडे डॉक करा</translation> <translation id="2840766858109427815">पुढील पेजवर जा</translation> <translation id="2872353916818027657">प्राथमिक मॉनिटर स्वॅप करा</translation> -<translation id="2914313326123580426">डेव्हलपर टूल पॅनेल दाखवा किंवा लपवा</translation> +<translation id="2914313326123580426">डेव्हलपर टूल पॅनल दाखवा किंवा लपवा</translation> <translation id="292495055542441795">फुल स्क्रीन टॉगल करा</translation> <translation id="3020183492814296499">शॉर्टकट</translation> <translation id="3084301071537457911">तुमच्या शेल्फवरील पुढील आयटम हायलाइट करा</translation>
diff --git a/ash/strings/ash_strings_be.xtb b/ash/strings/ash_strings_be.xtb index 33edec5..cd936488 100644 --- a/ash/strings/ash_strings_be.xtb +++ b/ash/strings/ash_strings_be.xtb
@@ -460,7 +460,7 @@ <translation id="554893713779400387">Уключыць або выключыць дыктаванне</translation> <translation id="556042886152191864">Кнопка</translation> <translation id="5571066253365925590">Bluetooth уключаны</translation> -<translation id="558849140439112033">Перацягвайце, каб выбраць вобласць, якая будзе знята</translation> +<translation id="558849140439112033">Выберыце вобласць здымкі з дапамогай перацягвання</translation> <translation id="5597451508971090205"><ph name="SHORT_WEEKDAY" />, <ph name="DATE" /></translation> <translation id="5600837773213129531">Каб выключыць галасавую зваротную сувязь, націсніце Ctrl + Alt + Z.</translation> <translation id="5625955975703555628">LTE+</translation> @@ -628,7 +628,7 @@ <translation id="7348093485538360975">Экранная клавіятура</translation> <translation id="735745346212279324">Сетка VPN адключана</translation> <translation id="7377169924702866686">Уключаны Caps Lock.</translation> -<translation id="7378203170292176219">Перацягвайце, каб выбраць вобласць, якая будзе запісана</translation> +<translation id="7378203170292176219">Выберыце вобласць запісу з дапамогай перацягвання</translation> <translation id="7378594059915113390">Элементы кіравання мультымедыйным змесцівам</translation> <translation id="7398254312354928459">Пераключана падключэнне да сеткі</translation> <translation id="7405710164030118432">Каб разблакіраваць прыладу, увядзіце бацькоўскі код доступу Family Link.</translation>
diff --git a/ash/strings/ash_strings_bn.xtb b/ash/strings/ash_strings_bn.xtb index 19dbe428..22f7fd4e 100644 --- a/ash/strings/ash_strings_bn.xtb +++ b/ash/strings/ash_strings_bn.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" />-এ <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> হার্জ) কাজ করে না। রেজোলিউশন পরিবর্তন করে <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />) করা হয়েছে। পরিবর্তিত সেটিংস রেখে দিতে 'কনফার্ম করুন' বিকল্পে ক্লিক করুন। <ph name="TIMEOUT_SECONDS" />-এর মধ্যে পুরনো সেটিংসে ফিরিয়ে নিয়ে যাওয়া হবে।</translation> <translation id="1919743966458266018">কার্য পরিচালক খোলার শর্টকাটটি পরিবর্তিত হয়েছে। <ph name="OLD_SHORTCUT" /> এর পরিবর্তে দয়া করে <ph name="NEW_SHORTCUT" /> ব্যবহার করুন।</translation> <translation id="1923539912171292317">স্বয়ংক্রিয় ক্লিকগুলি</translation> +<translation id="1924640696879807758">ফোন থেকে</translation> <translation id="1928739107511554905">আপডেট পেতে, অ্যাটাচ করা কীবোর্ডের মাধ্যমে আপনার Chromebook রিস্টার্ট করার জন্য টাচস্ক্রিন ব্যবহার করুন।</translation> <translation id="1951012854035635156">Assistant</translation> <translation id="1957803754585243749">০°</translation> @@ -687,6 +688,7 @@ <translation id="7904094684485781019">এই অ্যাকাউন্টের অ্যাডমিনিস্ট্রেটর একাধিক সাইন-ইন অননুমোদিত করেছেন৷</translation> <translation id="7933084174919150729">Google অ্যাসিস্ট্যান্ট শুধুমাত্র প্রাথমিক প্রোফাইলেই ব্যবহার করা যায়।</translation> <translation id="79341161159229895">অ্যাকাউন্টটি <ph name="FIRST_PARENT_EMAIL" /> এবং <ph name="SECOND_PARENT_EMAIL" /> ম্যানেজ করছেন</translation> +<translation id="793716872548410480">আপনার ক্লিপবোর্ড দেখতে <ph name="SHORTCUT_KEY_NAME" /> + V প্রেস করুন। আপনার কপি করা শেষ ৫টি আইটেম ক্লিপবোর্ডে সেভ করা হয়েছে।</translation> <translation id="7955885781510802139">হাই-কনট্রাস্ট মোড</translation> <translation id="7977927628060636163">মোবাইল নেটওয়ার্কগুলির জন্য সার্চ করছে...</translation> <translation id="7980780401175799550">Chrome OS নেভিগেট করার নতুন পদ্ধতিগুলি ব্যবহার করে দেখুন</translation>
diff --git a/ash/strings/ash_strings_de.xtb b/ash/strings/ash_strings_de.xtb index f79c06f..0025b19e2 100644 --- a/ash/strings/ash_strings_de.xtb +++ b/ash/strings/ash_strings_de.xtb
@@ -687,7 +687,7 @@ <translation id="7904094684485781019">Der Administrator dieses Kontos hat keine Mehrfachanmeldung zugelassen.</translation> <translation id="7933084174919150729">Google Assistant ist nur für das Hauptprofil verfügbar.</translation> <translation id="79341161159229895">Konto verwaltet von <ph name="FIRST_PARENT_EMAIL" /> und <ph name="SECOND_PARENT_EMAIL" /></translation> -<translation id="793716872548410480">Drücken Sie <ph name="SHORTCUT_KEY_NAME" /> + V, um die Zwischenablage zu öffnen. In der Zwischenablage werden immer die letzten fünf Elemente, die Sie kopiert haben, gespeichert.</translation> +<translation id="793716872548410480">Drücke „<ph name="SHORTCUT_KEY_NAME" /> + V“, um die Zwischenablage zu öffnen. In der Zwischenablage werden immer die letzten fünf Elemente, die du kopiert hast, gespeichert.</translation> <translation id="7955885781510802139">Modus mit hohem Kontrast</translation> <translation id="7977927628060636163">Nach Mobilfunknetzen wird gesucht…</translation> <translation id="7980780401175799550">Neue Navigationsoptionen für Chrome OS</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb index 94632add..3effaecc 100644 --- a/ash/strings/ash_strings_es.xtb +++ b/ash/strings/ash_strings_es.xtb
@@ -415,7 +415,7 @@ <ph name="NOTIFICATION" />, <ph name="IME" /> <ph name="LOCALE" /></translation> -<translation id="4946376291507881335">Capturar</translation> +<translation id="4946376291507881335">Capturar imagen</translation> <translation id="495046168593986294">Desplazarse hacia arriba</translation> <translation id="4961318399572185831">Enviar pantalla</translation> <translation id="4969092041573468113"><ph name="HOURS" /> h <ph name="MINUTES" /> min <ph name="SECONDS" /> s</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb index 6aa5ce0..cea335d 100644 --- a/ash/strings/ash_strings_eu.xtb +++ b/ash/strings/ash_strings_eu.xtb
@@ -489,7 +489,7 @@ <translation id="5860033963881614850">Desaktibatuta</translation> <translation id="5876666360658629066">Idatzi gurasoen sarbide-kodea</translation> <translation id="5895138241574237353">Berrabiarazi</translation> -<translation id="589817443623831496">Puntuen bidez eskaneatzea</translation> +<translation id="589817443623831496">Puntu bidezko bilaketa</translation> <translation id="5901316534475909376">Maius + Ihes</translation> <translation id="5909862606227538307">Lan-eremu inaktiboa.</translation> <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation>
diff --git a/ash/strings/ash_strings_fr.xtb b/ash/strings/ash_strings_fr.xtb index b2f3643..6df01334 100644 --- a/ash/strings/ash_strings_fr.xtb +++ b/ash/strings/ash_strings_fr.xtb
@@ -492,7 +492,7 @@ <translation id="5901316534475909376">Maj+Échap</translation> <translation id="5909862606227538307">Bureau inactif.</translation> <translation id="5911909173233110115"><ph name="USERNAME" /> (<ph name="MAIL" />)</translation> -<translation id="5915278665499293471">Cliquez n'importe où pour effectuer une capture en plein écran</translation> +<translation id="5915278665499293471">Cliquer n'importe où pour effectuer une capture en plein écran</translation> <translation id="5916664084637901428">Activé</translation> <translation id="5920710855273935292">Le son du micro est coupé.</translation> <translation id="594179686076170922">Connexion à votre téléphone…</translation> @@ -753,7 +753,7 @@ <translation id="8563862697512465947">Paramètres de notification</translation> <translation id="857201607579416096">Le menu a été déplacé dans l'angle inférieur droit de l'écran.</translation> <translation id="8594115950068821369">-<ph name="FORMATTED_TIME" /></translation> -<translation id="861041328460089089">Appuyez n'importe où pour effectuer une capture en plein écran</translation> +<translation id="861041328460089089">Appuyer n'importe où pour effectuer une capture en plein écran</translation> <translation id="8627191004499078455">Connecté à <ph name="DEVICE_NAME" /></translation> <translation id="8631727435199967028">Paramètres d'accessibilité</translation> <translation id="8637598503828012618"><ph name="CONNECTION_STATUS" />, force du signal : <ph name="SIGNAL_STRENGTH" />, géré par votre administrateur</translation>
diff --git a/ash/strings/ash_strings_iw.xtb b/ash/strings/ash_strings_iw.xtb index 264f29c3..8907f8bc 100644 --- a/ash/strings/ash_strings_iw.xtb +++ b/ash/strings/ash_strings_iw.xtb
@@ -406,7 +406,7 @@ <translation id="4918086044614829423">אשר</translation> <translation id="4924411785043111640">הפעלה מחדש ואתחול</translation> <translation id="4925542575807923399">מנהל המערכת עבור החשבון הזה דורש שהחשבון הזה יהיה הראשון שיבצעו עבורו כניסה בעת כניסה עם מספר חשבונות</translation> -<translation id="4942878304446937978">מגש סטטוס, זמן <ph name="TIME" />, +<translation id="4942878304446937978">מגש סטטוס, שעה <ph name="TIME" />, <ph name="BATTERY" /> <ph name="NETWORK" />, <ph name="MIC" />, @@ -667,7 +667,7 @@ <translation id="7705524343798198388">VPN</translation> <translation id="7705822912736783206">אימות באמצעות טביעת אצבע</translation> <translation id="7723389094756330927">{NUM_NOTIFICATIONS,plural, =1{הודעה אחת}two{2 הודעות}many{# הודעות}other{# הודעות}}</translation> -<translation id="7724603315864178912">חתוך</translation> +<translation id="7724603315864178912">חיתוך</translation> <translation id="7749443890790263709">הגעת למספר המקסימלי של שולחנות עבודה.</translation> <translation id="776344839111254542">לחץ כדי להציג את פרטי העדכון</translation> <translation id="7780159184141939021">סיבוב המסך</translation> @@ -718,7 +718,7 @@ <translation id="8167567890448493835">המיקום הנוכחי הוא<ph name="LOCALE_NAME" /></translation> <translation id="8192202700944119416">ההתראות מוסתרות.</translation> <translation id="8196787716797768628">במצב טאבלט אפשר לעבור במהירות בין אפליקציות ולבצע פעולות שונות ב-Chromebook באמצעות תנועות.</translation> -<translation id="8200772114523450471">חדש</translation> +<translation id="8200772114523450471">חידוש</translation> <translation id="8203795194971602413">לחיצה ימנית</translation> <translation id="8219451629189078428">בפרק הזמן הזה, יש להקפיד להשאיר את ה-Chromebook פועל ומחובר לחשמל. יש לוודא שהכבלים של המטען או של המתאם מחוברים כראוי אל ה-Chromebook ואל שקע החשמל. אין לכבות את ה-Chromebook.</translation> <translation id="8236042855478648955">הגיע הזמן להפסקה</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb index 441a4347..4982567d 100644 --- a/ash/strings/ash_strings_ja.xtb +++ b/ash/strings/ash_strings_ja.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> は <ph name="SPECIFIED_RESOLUTION" />(<ph name="SPECIFIED_REFRESH_RATE" /> Hz)に対応していません。解像度を <ph name="FALLBACK_RESOLUTION" />(<ph name="FALLBACK_REFRESH_RATE" />)に変更しました。変更を保存するには確定してください。<ph name="TIMEOUT_SECONDS" /> 秒後に以前の設定に戻ります。</translation> <translation id="1919743966458266018">タスク マネージャを起動するショートカットが変わりました。<ph name="OLD_SHORTCUT" /> ではなく <ph name="NEW_SHORTCUT" /> をご使用ください。</translation> <translation id="1923539912171292317">自動クリック</translation> +<translation id="1924640696879807758">スマートフォンから</translation> <translation id="1928739107511554905">アップデートを取得するには、キーボードが接続された状態で、タッチスクリーンを使って Chromebook を再起動してください。</translation> <translation id="1951012854035635156">アシスタント</translation> <translation id="1957803754585243749">0°</translation> @@ -687,6 +688,7 @@ <translation id="7904094684485781019">このアカウントの管理者がマルチログインを許可していません。</translation> <translation id="7933084174919150729">Google アシスタントはメインのプロフィールでのみご利用いただけます。</translation> <translation id="79341161159229895">このアカウントは <ph name="FIRST_PARENT_EMAIL" /> と <ph name="SECOND_PARENT_EMAIL" /> により管理されています</translation> +<translation id="793716872548410480"><ph name="SHORTCUT_KEY_NAME" />+V キーを押すと、クリップボードを表示できます。クリップボードに、コピーした最新のアイテム 5 件が保存されています。</translation> <translation id="7955885781510802139">ハイコントラスト モード</translation> <translation id="7977927628060636163">モバイル ネットワークを検索しています...</translation> <translation id="7980780401175799550">Chrome OS の新しい操作方法をお試しください</translation>
diff --git a/ash/strings/ash_strings_kn.xtb b/ash/strings/ash_strings_kn.xtb index b2d16151..c64ce82 100644 --- a/ash/strings/ash_strings_kn.xtb +++ b/ash/strings/ash_strings_kn.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> ರೆಸಲ್ಯೂಷನ್ <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz) ಅನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ. ಈ ರೆಸಲ್ಯೂಷನ್ ಅನ್ನು <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />) ಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ. ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಲು 'ಖಚಿತಪಡಿಸಿ' ಕ್ಲಿಕ್ ಮಾಡಿ. ಈ ಹಿಂದಿನ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು <ph name="TIMEOUT_SECONDS" /> ನಲ್ಲಿ ಮರುಸ್ಥಾಪಿಸಲಾಗುತ್ತದೆ.</translation> <translation id="1919743966458266018">ಕಾರ್ಯ ನಿರ್ವಾಹಕರನ್ನು ತೆರೆಯಲು ಶಾರ್ಟ್ಕಟ್ ಬದಲಾಗಿದೆ. ದಯವಿಟ್ಟು <ph name="OLD_SHORTCUT" /> ಬದಲಿಗೆ <ph name="NEW_SHORTCUT" /> ಬಳಸಿ.</translation> <translation id="1923539912171292317">ಸ್ವಯಂಚಾಲಿತ ಕ್ಲಿಕ್ಗಳು</translation> +<translation id="1924640696879807758">ಫೋನ್ನಿಂದ</translation> <translation id="1928739107511554905">ಅಪ್ಡೇಟ್ ಅನ್ನು ಪಡೆಯಲು, ಕೀಬೋರ್ಡ್ ಲಗತ್ತಿನೊಂದಿಗೆ ನಿಮ್ಮ Chromebook ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಲು ಟಚ್ಸ್ಕ್ರೀನ್ ಅನ್ನು ಬಳಸಿ.</translation> <translation id="1951012854035635156">Assistant</translation> <translation id="1957803754585243749">0°</translation> @@ -687,6 +688,7 @@ <translation id="7904094684485781019">ಈ ಖಾತೆಗಾಗಿ ನಿರ್ವಾಹಕರು ಬಹುವಿಧದ ಸೈನ್ ಇನ್ ಅನುಮತಿಸಿಲ್ಲ.</translation> <translation id="7933084174919150729">ಪ್ರಾಥಮಿಕ ಪ್ರೊಫೈಲ್ಗೆ ಮಾತ್ರ Google ಸಹಾಯಕ ಲಭ್ಯವಿದೆ.</translation> <translation id="79341161159229895"><ph name="FIRST_PARENT_EMAIL" /> ಮತ್ತು <ph name="SECOND_PARENT_EMAIL" /> ಮೂಲಕ ಖಾತೆಯನ್ನು ನಿರ್ವಹಿಸಲಾಗಿದೆ</translation> +<translation id="793716872548410480">ನಿಮ್ಮ ಕ್ಲಿಪ್ಬೋರ್ಡ್ ಅನ್ನು ವೀಕ್ಷಿಸಲು <ph name="SHORTCUT_KEY_NAME" /> + V ಅನ್ನು ಒತ್ತಿರಿ. ನೀವು ನಕಲಿಸಿದ ಕೊನೆಯ 5 ಐಟಂಗಳನ್ನು ನಿಮ್ಮ ಕ್ಲಿಪ್ಬೋರ್ಡ್ನಲ್ಲಿ ಉಳಿಸಲಾಗಿದೆ.</translation> <translation id="7955885781510802139">ಅಧಿಕ ಕಾಂಟ್ರಾಸ್ಟ್ ಮೋಡ್</translation> <translation id="7977927628060636163">ಮೊಬೈಲ್ ನೆಟ್ವರ್ಕ್ಗಳಿಗೆ ಹುಡುಕಲಾಗುತ್ತಿದೆ...</translation> <translation id="7980780401175799550">Chrome OS ನಲ್ಲಿ ನ್ಯಾವಿಗೇಟ್ ಮಾಡಲು, ಹೊಸ ಮಾರ್ಗಗಳನ್ನು ಪ್ರಯತ್ನಿಸಿ ನೋಡಿ</translation>
diff --git a/ash/strings/ash_strings_mr.xtb b/ash/strings/ash_strings_mr.xtb index 396f2c7..4e9bd3d3 100644 --- a/ash/strings/ash_strings_mr.xtb +++ b/ash/strings/ash_strings_mr.xtb
@@ -786,7 +786,7 @@ <translation id="8850991929411075241">Search+Esc</translation> <translation id="8853703225951107899">तुमच्या पिन किंवा पासवर्डची अद्याप पडताळणी करता आली नाही. टीप: तुम्ही अलीकडेच तुमचा पासवर्ड बदलला असल्यास, जुना पासवर्ड वापरा. तुम्ही साइन आउट केल्यानंतर तुमचा नवीन पासवर्ड लागू केला जाईल.</translation> <translation id="885387440427703469">स्क्रीन कॅप्चर बंद आहे</translation> -<translation id="8870509716567206129">ॲप विभाजित-स्क्रीनला सपोर्ट करत नाही.</translation> +<translation id="8870509716567206129">अॅप विभाजित-स्क्रीनला सपोर्ट करत नाही.</translation> <translation id="8871580645200179206">गडद थीम टॉगल करा. <ph name="STATE_TEXT" /></translation> <translation id="8874184842967597500">कनेक्ट नाही</translation> <translation id="8877788021141246043">रिमाइंडर सेट करा</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb index 6961a55..d05cc8a 100644 --- a/ash/strings/ash_strings_ne.xtb +++ b/ash/strings/ash_strings_ne.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> मा <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> हर्ज) रिजोल्युसन प्रयोग गर्न मिल्दैन। रिजोल्युसन परिवर्तन गरी <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />) बनाइयो। यो परिवर्तन सुरक्षित गर्न पुष्टि गर्नुहोस् नामक बटनमा क्लिक गर्नुहोस्। अबको <ph name="TIMEOUT_SECONDS" /> मा यी सेटिङ परिवर्तन गरी पहिलेको जस्तै बनाइने छ।</translation> <translation id="1919743966458266018">कार्य प्रबन्धक खोल्ने सर्टकटमा परिवर्तन भएको छ। कृपया <ph name="OLD_SHORTCUT" />को सट्टामा <ph name="NEW_SHORTCUT" /> प्रयोग गर्नुहोस्।</translation> <translation id="1923539912171292317">स्वचालित क्लिकहरू</translation> +<translation id="1924640696879807758">फोनबाट प्राप्त</translation> <translation id="1928739107511554905">उक्त अद्यावधिक प्राप्त गर्न, किबोर्ड जोडिएकै अवस्थामा आफ्नो Chromebook लाई पुनः सुचारु गर्न टचस्क्रिनको प्रयोग गर्नुहोस्।</translation> <translation id="1951012854035635156">सहायक</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">यो खाताको प्रशासकले बहु साइन इनलाई अनुमति दिएको छैन ।</translation> <translation id="7933084174919150729">Google सहायक प्राथमिक प्रोफाइलहरूका लागि मात्र उपलब्ध छ।</translation> <translation id="79341161159229895"><ph name="FIRST_PARENT_EMAIL" /> र <ph name="SECOND_PARENT_EMAIL" /> ले व्यवस्थापन गरेको खाता</translation> +<translation id="793716872548410480">आफ्नो क्लिपबोर्ड हेर्न <ph name="SHORTCUT_KEY_NAME" /> + V थिच्नुहोस्। तपाईंले कपी गर्नुभएका पछिल्ला ५ वस्तुहरू तपाईंको क्लिपबोर्डमा सुरक्षित गरिन्छन्।</translation> <translation id="7955885781510802139">उच्च कन्ट्रास्ट मोड</translation> <translation id="7977927628060636163">मोबाइल नेटवर्कहरू खोज्दै...</translation> <translation id="7980780401175799550">Chrome OS नेभिगेसन गर्ने नयाँ तरिकाहरू प्रयोग गरी हेर्नुहोस्</translation>
diff --git a/ash/strings/ash_strings_pa.xtb b/ash/strings/ash_strings_pa.xtb index b9840cc..3bacec5c 100644 --- a/ash/strings/ash_strings_pa.xtb +++ b/ash/strings/ash_strings_pa.xtb
@@ -100,6 +100,7 @@ <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz) ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ। ਰੈਜ਼ੋਲਿਊਸ਼ਨ ਨੂੰ <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />) 'ਤੇ ਬਦਲ ਦਿੱਤਾ ਗਿਆ ਸੀ। ਤਬਦੀਲੀਆਂ ਨੂੰ ਰੱਖਣ ਲਈ ਤਸਦੀਕ ਕਰੋ 'ਤੇ ਕਲਿੱਕ ਕਰੋ। ਪਿਛਲੀਆਂ ਸੈਟਿੰਗਾਂ ਨੂੰ <ph name="TIMEOUT_SECONDS" /> ਵਿੱਚ ਮੁੜ-ਬਹਾਲ ਕੀਤਾ ਜਾਵੇਗਾ।</translation> <translation id="1919743966458266018">ਕਾਰਜ ਪ੍ਰਬੰਧਕ ਖੋਲ੍ਹਣ ਲਈ ਸ਼ਾਰਟਕੱਟ ਬਦਲ ਗਿਆ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ <ph name="OLD_SHORTCUT" /> ਦੀ ਥਾਂ <ph name="NEW_SHORTCUT" /> ਦੀ ਵਰਤੋਂ ਕਰੋ।</translation> <translation id="1923539912171292317">ਆਟੋਮੈਟਿਕ ਕਲਿਕ</translation> +<translation id="1924640696879807758">ਫ਼ੋਨ ਤੋਂ</translation> <translation id="1928739107511554905">ਅੱਪਡੇਟ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ, ਅਟੈਚ ਕੀਤੇ ਕੀ-ਬੋਰਡ ਦੇ ਨਾਲ ਆਪਣੀ Chromebook ਨੂੰ ਮੁੜ-ਚਾਲੂ ਕਰਨ ਲਈ ਟੱਚਸਕ੍ਰੀਨ ਦੀ ਵਰਤੋਂ ਕਰੋ।</translation> <translation id="1951012854035635156">ਸਹਾਇਕ</translation> <translation id="1957803754585243749">0°</translation> @@ -686,6 +687,7 @@ <translation id="7904094684485781019">ਇਸ ਖਾਤੇ ਦੇ ਪ੍ਰਸ਼ਾਸਕ ਨੇ ਬਹੁ-ਗਿਣਤੀ ਸਾਈਨ-ਇਨ ਨੂੰ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੱਤੀ ਹੈ।</translation> <translation id="7933084174919150729">Google ਅਸਿਸਟੈਂਟ ਸਿਰਫ਼ ਪ੍ਰਾਇਮਰੀ ਪ੍ਰੋਫਾਈਲ ਲਈ ਹੀ ਉਪਲਬਧ ਹੈ।</translation> <translation id="79341161159229895"><ph name="FIRST_PARENT_EMAIL" /> ਅਤੇ <ph name="SECOND_PARENT_EMAIL" /> ਵੱਲੋਂ ਖਾਤੇ ਦਾ ਪ੍ਰਬੰਧਨ ਕੀਤਾ ਜਾਂਦਾ ਹੈ</translation> +<translation id="793716872548410480">ਆਪਣੇ ਕਲਿੱਪਬੋਰਡ ਨੂੰ ਦੇਖਣ ਲਈ <ph name="SHORTCUT_KEY_NAME" /> + V ਨੂੰ ਦਬਾਓ। ਤੁਹਾਡੇ ਵੱਲੋਂ ਕਾਪੀ ਕੀਤੀਆਂ ਗਈਆਂ ਆਖਰੀ 5 ਆਈਟਮਾਂ ਨੂੰ ਤੁਹਾਡੇ ਕਲਿੱਪਬੋਰਡ ਵਿੱਚ ਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ ਹੈ।</translation> <translation id="7955885781510802139">ਉੱਚ-ਵਖਰੇਵਾਂ ਮੋਡ</translation> <translation id="7977927628060636163">ਮੋਬਾਈਲ ਨੈੱਟਵਰਕਾਂ ਦੀ ਖੋਜ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ...</translation> <translation id="7980780401175799550">Chrome OS 'ਤੇ ਨੈਵੀਗੇਟ ਕਰਨ ਲਈ ਨਵੇਂ ਤਰੀਕੇ ਵਰਤ ਕੇ ਦੇਖੋ</translation>
diff --git a/ash/strings/ash_strings_uz.xtb b/ash/strings/ash_strings_uz.xtb index 849dc42..3d311b9 100644 --- a/ash/strings/ash_strings_uz.xtb +++ b/ash/strings/ash_strings_uz.xtb
@@ -687,7 +687,7 @@ <translation id="7904094684485781019">Administrator bu hisobga boshqa hisoblar bilan birdaniga kirishni taqiqlab qo‘ygan.</translation> <translation id="7933084174919150729">Google Assistent faqat asosiy profilda ishlaydi xolos.</translation> <translation id="79341161159229895">Hisobni <ph name="FIRST_PARENT_EMAIL" /> va <ph name="SECOND_PARENT_EMAIL" /> boshqaradi</translation> -<translation id="793716872548410480">Klipbordni koʻrish uchun <ph name="SHORTCUT_KEY_NAME" /> + V tugmalarini bosing. Nusxalangan oxirgi 5 ta element klipbordga saqlandi.</translation> +<translation id="793716872548410480">Klipbordni ochish uchun <ph name="SHORTCUT_KEY_NAME" /> + V tugmalarini bosing. Nusxalangan oxirgi 5 ta element klipbordga saqlandi.</translation> <translation id="7955885781510802139">Yuqori kontrastli rejim</translation> <translation id="7977927628060636163">Mobil tarmoqlar qidirilmoqda...</translation> <translation id="7980780401175799550">Chrome OS tizimini yangi usulda boshqaring</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb index a38115a..a16b209 100644 --- a/ash/strings/ash_strings_zh-TW.xtb +++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -460,7 +460,7 @@ <translation id="554893713779400387">切換語音輸入</translation> <translation id="556042886152191864">按鈕</translation> <translation id="5571066253365925590">藍牙已啟用</translation> -<translation id="558849140439112033">透過拖曳選取要擷圖的區域</translation> +<translation id="558849140439112033">拖曳選取要擷圖的區域</translation> <translation id="5597451508971090205"><ph name="DATE" /><ph name="SHORT_WEEKDAY" /></translation> <translation id="5600837773213129531">按下 Ctrl + Alt + Z 鍵即可停用互動朗讀功能。</translation> <translation id="5625955975703555628">LTE+</translation> @@ -628,7 +628,7 @@ <translation id="7348093485538360975">螢幕小鍵盤</translation> <translation id="735745346212279324">已中斷 VPN 連線</translation> <translation id="7377169924702866686">大寫鍵已啟用。</translation> -<translation id="7378203170292176219">透過拖曳選取要錄影的區域</translation> +<translation id="7378203170292176219">拖曳選取要錄影的區域</translation> <translation id="7378594059915113390">媒體控制項</translation> <translation id="7398254312354928459">已切換網路連線</translation> <translation id="7405710164030118432">如要將這部裝置解鎖,請輸入你的 Family Link 家長存取碼</translation>
diff --git a/ash/system/phonehub/locate_phone_quick_action_controller.cc b/ash/system/phonehub/locate_phone_quick_action_controller.cc index fc57ba0..b4c1509 100644 --- a/ash/system/phonehub/locate_phone_quick_action_controller.cc +++ b/ash/system/phonehub/locate_phone_quick_action_controller.cc
@@ -7,7 +7,6 @@ #include "ash/resources/vector_icons/vector_icons.h" #include "ash/strings/grit/ash_strings.h" #include "ash/system/phonehub/quick_action_item.h" -#include "ash/system/phonehub/silence_phone_quick_action_controller.h" #include "base/timer/timer.h" #include "ui/base/l10n/l10n_util.h" @@ -25,19 +24,14 @@ using Status = chromeos::phonehub::FindMyDeviceController::Status; LocatePhoneQuickActionController::LocatePhoneQuickActionController( - chromeos::phonehub::FindMyDeviceController* find_my_device_controller, - SilencePhoneQuickActionController* silence_phone_controller) - : find_my_device_controller_(find_my_device_controller), - silence_phone_controller_(silence_phone_controller) { + chromeos::phonehub::FindMyDeviceController* find_my_device_controller) + : find_my_device_controller_(find_my_device_controller) { DCHECK(find_my_device_controller_); - DCHECK(silence_phone_controller_); find_my_device_controller_->AddObserver(this); - silence_phone_controller_->AddObserver(this); } LocatePhoneQuickActionController::~LocatePhoneQuickActionController() { find_my_device_controller_->RemoveObserver(this); - silence_phone_controller_->RemoveObserver(this); } QuickActionItem* LocatePhoneQuickActionController::CreateItem() { @@ -61,35 +55,20 @@ find_my_device_controller_->RequestNewPhoneRingingState(!is_now_enabled); } -void LocatePhoneQuickActionController::OnSilencePhoneItemStateChanged() { - is_silence_enabled_ = silence_phone_controller_->IsItemEnabled(); - UpdateState(); -} - void LocatePhoneQuickActionController::OnPhoneRingingStateChanged() { - UpdateState(); -} - -void LocatePhoneQuickActionController::UpdateState() { - // Disable Locate Phone if Silence Phone is on, otherwise change accordingly - // based on status from FindMyDeviceController. - if (is_silence_enabled_) { - state_ = ActionState::kNotAvailable; - } else { - switch (find_my_device_controller_->GetPhoneRingingStatus()) { - case Status::kRingingOff: - state_ = ActionState::kOff; - break; - case Status::kRingingOn: - state_ = ActionState::kOn; - break; - case Status::kRingingNotAvailable: - state_ = ActionState::kNotAvailable; - break; - } + switch (find_my_device_controller_->GetPhoneRingingStatus()) { + case Status::kRingingOff: + state_ = ActionState::kOff; + break; + case Status::kRingingOn: + state_ = ActionState::kOn; + break; + case Status::kRingingNotAvailable: + item_->SetEnabled(false); + return; } - SetItemState(state_); + item_->SetEnabled(true); // If |requested_state_| correctly resembles the current state, reset it and // the timer. @@ -104,9 +83,6 @@ int state_text_id; int sub_label_text; switch (state) { - case ActionState::kNotAvailable: - item_->SetEnabled(false); - return; case ActionState::kOff: icon_enabled = false; state_text_id = IDS_ASH_PHONE_HUB_QUICK_ACTIONS_DISABLED_STATE_TOOLTIP; @@ -119,7 +95,6 @@ break; } - item_->SetEnabled(true); item_->SetToggled(icon_enabled); item_->SetSubLabel(l10n_util::GetStringUTF16(sub_label_text)); base::string16 tooltip_state =
diff --git a/ash/system/phonehub/locate_phone_quick_action_controller.h b/ash/system/phonehub/locate_phone_quick_action_controller.h index 955c338..52b72b6 100644 --- a/ash/system/phonehub/locate_phone_quick_action_controller.h +++ b/ash/system/phonehub/locate_phone_quick_action_controller.h
@@ -5,7 +5,7 @@ #ifndef ASH_SYSTEM_PHONEHUB_LOCATE_PHONE_QUICK_ACTION_CONTROLLER_H_ #define ASH_SYSTEM_PHONEHUB_LOCATE_PHONE_QUICK_ACTION_CONTROLLER_H_ -#include "ash/system/phonehub/silence_phone_quick_action_controller.h" +#include "ash/system/phonehub/quick_action_controller_base.h" #include "chromeos/components/phonehub/find_my_device_controller.h" namespace base { @@ -17,12 +17,10 @@ // Controller of a quick action item that toggles Locate phone mode. class LocatePhoneQuickActionController : public QuickActionControllerBase, - public SilencePhoneQuickActionController::Observer, public chromeos::phonehub::FindMyDeviceController::Observer { public: - LocatePhoneQuickActionController( - chromeos::phonehub::FindMyDeviceController* find_my_device_controller, - SilencePhoneQuickActionController* silence_phone_controller); + explicit LocatePhoneQuickActionController( + chromeos::phonehub::FindMyDeviceController* find_my_device_controller); ~LocatePhoneQuickActionController() override; LocatePhoneQuickActionController(LocatePhoneQuickActionController&) = delete; LocatePhoneQuickActionController operator=( @@ -32,20 +30,13 @@ QuickActionItem* CreateItem() override; void OnButtonPressed(bool is_now_enabled) override; - // SilencePhoneQuickActionController::Observer: - void OnSilencePhoneItemStateChanged() override; - // chromeos::phonehub::FindMyDeviceController::Observer: void OnPhoneRingingStateChanged() override; private: // All the possible states that the locate phone button can be viewed. Each // state has a corresponding icon, labels and tooltip view. - enum class ActionState { kNotAvailable, kOff, kOn }; - - // Compute and update the state of the item according to Silence Phone item - // and FindMyDeviceController. - void UpdateState(); + enum class ActionState { kOff, kOn }; // Set the item (including icon, label and tooltips) to a certain state. void SetItemState(ActionState state); @@ -56,15 +47,11 @@ chromeos::phonehub::FindMyDeviceController* find_my_device_controller_ = nullptr; - SilencePhoneQuickActionController* silence_phone_controller_ = nullptr; QuickActionItem* item_ = nullptr; // Keep track the current state of the item. ActionState state_; - // Keep track the state of Silence Phone item. - bool is_silence_enabled_; - // State that user requests when clicking the button. base::Optional<ActionState> requested_state_;
diff --git a/ash/system/phonehub/quick_actions_view.cc b/ash/system/phonehub/quick_actions_view.cc index e3e66a80..df68b14 100644 --- a/ash/system/phonehub/quick_actions_view.cc +++ b/ash/system/phonehub/quick_actions_view.cc
@@ -38,25 +38,20 @@ QuickActionsView::~QuickActionsView() = default; void QuickActionsView::InitQuickActionItems() { - auto enable_hotspot_controller = - std::make_unique<EnableHotspotQuickActionController>( - phone_hub_manager_->GetTetherController()); - enable_hotspot_ = AddChildView(enable_hotspot_controller->CreateItem()); - quick_action_controllers_.push_back(std::move(enable_hotspot_controller)); + enable_hotspot_ = + AddItem(std::make_unique<EnableHotspotQuickActionController>( + phone_hub_manager_->GetTetherController())); + silence_phone_ = AddItem(std::make_unique<SilencePhoneQuickActionController>( + phone_hub_manager_->GetDoNotDisturbController())); + locate_phone_ = AddItem(std::make_unique<LocatePhoneQuickActionController>( + phone_hub_manager_->GetFindMyDeviceController())); +} - auto silence_phone_controller = - std::make_unique<SilencePhoneQuickActionController>( - phone_hub_manager_->GetDoNotDisturbController()); - silence_phone_ = AddChildView(silence_phone_controller->CreateItem()); - - auto locate_phone_controller = - std::make_unique<LocatePhoneQuickActionController>( - phone_hub_manager_->GetFindMyDeviceController(), - silence_phone_controller.get()); - locate_phone_ = AddChildView(locate_phone_controller->CreateItem()); - - quick_action_controllers_.push_back(std::move(silence_phone_controller)); - quick_action_controllers_.push_back(std::move(locate_phone_controller)); +QuickActionItem* QuickActionsView::AddItem( + std::unique_ptr<QuickActionControllerBase> controller) { + auto* item = AddChildView(controller->CreateItem()); + quick_action_controllers_.push_back(std::move(controller)); + return item; } } // namespace ash
diff --git a/ash/system/phonehub/quick_actions_view.h b/ash/system/phonehub/quick_actions_view.h index 7fda6b6..1aa3ccc0 100644 --- a/ash/system/phonehub/quick_actions_view.h +++ b/ash/system/phonehub/quick_actions_view.h
@@ -32,6 +32,10 @@ // Add all the quick actions items to the view. void InitQuickActionItems(); + // Helper function to add an item to the view given its controller. + QuickActionItem* AddItem( + std::unique_ptr<QuickActionControllerBase> controller); + // Controllers of quick actions items. Owned by this. std::vector<std::unique_ptr<QuickActionControllerBase>> quick_action_controllers_;
diff --git a/ash/system/phonehub/quick_actions_view_unittest.cc b/ash/system/phonehub/quick_actions_view_unittest.cc index 3d06312..7baf51515 100644 --- a/ash/system/phonehub/quick_actions_view_unittest.cc +++ b/ash/system/phonehub/quick_actions_view_unittest.cc
@@ -105,14 +105,10 @@ DummyEvent()); EXPECT_TRUE(dnd_controller()->IsDndEnabled()); - // Locate phone should be disabled when do not disturb is enabled. - EXPECT_FALSE(actions_view()->locate_phone_for_testing()->GetEnabled()); - // Togge again to disable. actions_view()->silence_phone_for_testing()->ButtonPressed(nullptr, DummyEvent()); EXPECT_FALSE(dnd_controller()->IsDndEnabled()); - EXPECT_TRUE(actions_view()->locate_phone_for_testing()->GetEnabled()); // Test the error state. dnd_controller()->SetShouldRequestFail(true);
diff --git a/ash/system/phonehub/silence_phone_quick_action_controller.cc b/ash/system/phonehub/silence_phone_quick_action_controller.cc index 678da30..6b7701f 100644 --- a/ash/system/phonehub/silence_phone_quick_action_controller.cc +++ b/ash/system/phonehub/silence_phone_quick_action_controller.cc
@@ -32,18 +32,6 @@ dnd_controller_->RemoveObserver(this); } -void SilencePhoneQuickActionController::AddObserver(Observer* observer) { - observer_list_.AddObserver(observer); -} - -void SilencePhoneQuickActionController::RemoveObserver(Observer* observer) { - observer_list_.RemoveObserver(observer); -} - -bool SilencePhoneQuickActionController::IsItemEnabled() { - return item_->IsToggled(); -} - QuickActionItem* SilencePhoneQuickActionController::CreateItem() { DCHECK(!item_); item_ = new QuickActionItem(this, IDS_ASH_PHONE_HUB_SILENCE_PHONE_TITLE, @@ -102,9 +90,6 @@ item_->SetIconTooltip( l10n_util::GetStringFUTF16(IDS_ASH_PHONE_HUB_QUICK_ACTIONS_TOGGLE_TOOLTIP, item_->GetItemLabel(), tooltip_state)); - - for (auto& observer : observer_list_) - observer.OnSilencePhoneItemStateChanged(); } void SilencePhoneQuickActionController::CheckRequestedState() {
diff --git a/ash/system/phonehub/silence_phone_quick_action_controller.h b/ash/system/phonehub/silence_phone_quick_action_controller.h index c44cd2fd..38c2b8c 100644 --- a/ash/system/phonehub/silence_phone_quick_action_controller.h +++ b/ash/system/phonehub/silence_phone_quick_action_controller.h
@@ -6,8 +6,6 @@ #define ASH_SYSTEM_PHONEHUB_SILENCE_PHONE_QUICK_ACTION_CONTROLLER_H_ #include "ash/system/phonehub/quick_action_controller_base.h" -#include "base/observer_list.h" -#include "base/observer_list_types.h" #include "chromeos/components/phonehub/do_not_disturb_controller.h" namespace base { @@ -17,18 +15,10 @@ namespace ash { // Controller of a quick action item that toggles silence phone mode. -class ASH_EXPORT SilencePhoneQuickActionController +class SilencePhoneQuickActionController : public QuickActionControllerBase, public chromeos::phonehub::DoNotDisturbController::Observer { public: - class Observer : public base::CheckedObserver { - public: - ~Observer() override = default; - - // Called when the state of the item has changed. - virtual void OnSilencePhoneItemStateChanged() = 0; - }; - explicit SilencePhoneQuickActionController( chromeos::phonehub::DoNotDisturbController* dnd_controller); ~SilencePhoneQuickActionController() override; @@ -37,12 +27,6 @@ SilencePhoneQuickActionController operator=( SilencePhoneQuickActionController&) = delete; - void AddObserver(Observer* observer); - void RemoveObserver(Observer* observer); - - // Return true if the item is enabled/toggled. - bool IsItemEnabled(); - // QuickActionControllerBase: QuickActionItem* CreateItem() override; void OnButtonPressed(bool is_now_enabled) override; @@ -75,9 +59,6 @@ // if the requested state is similar to the current state after the button is // pressed for a certain time. std::unique_ptr<base::OneShotTimer> check_requested_state_timer_; - - // Registered observers. - base::ObserverList<Observer> observer_list_; }; } // namespace ash
diff --git a/ash/system/phonehub/silence_phone_quick_action_controller_unittest.cc b/ash/system/phonehub/silence_phone_quick_action_controller_unittest.cc deleted file mode 100644 index 0dae8d45..0000000 --- a/ash/system/phonehub/silence_phone_quick_action_controller_unittest.cc +++ /dev/null
@@ -1,83 +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/phonehub/silence_phone_quick_action_controller.h" - -#include "ash/test/ash_test_base.h" -#include "chromeos/components/phonehub/fake_do_not_disturb_controller.h" - -namespace ash { - -class SilencePhoneQuickActionControllerTest - : public AshTestBase, - public SilencePhoneQuickActionController::Observer { - public: - SilencePhoneQuickActionControllerTest() = default; - - ~SilencePhoneQuickActionControllerTest() override = default; - - // AshTestBase: - void SetUp() override { - AshTestBase::SetUp(); - - dnd_controller_ = - std::make_unique<chromeos::phonehub::FakeDoNotDisturbController>(); - controller_ = std::make_unique<SilencePhoneQuickActionController>( - dnd_controller_.get()); - - controller_->AddObserver(this); - controller_->CreateItem(); - } - - void TearDown() override { - controller_->RemoveObserver(this); - controller_.reset(); - dnd_controller_.reset(); - AshTestBase::TearDown(); - } - - protected: - // SilencePhoneQuickActionController::Observer: - void OnSilencePhoneItemStateChanged() override { ++num_calls_; } - - SilencePhoneQuickActionController* controller() { return controller_.get(); } - - chromeos::phonehub::FakeDoNotDisturbController* dnd_controller() { - return dnd_controller_.get(); - } - - size_t GetNumObserverCalls() { return num_calls_; } - - private: - std::unique_ptr<SilencePhoneQuickActionController> controller_; - std::unique_ptr<chromeos::phonehub::FakeDoNotDisturbController> - dnd_controller_; - size_t num_calls_ = 0; -}; - -TEST_F(SilencePhoneQuickActionControllerTest, ItemStateChanged) { - // Set request to fail to avoid triggering state's changes by the model. - dnd_controller()->SetShouldRequestFail(true); - - // Initially, there's one observer call during initiation. - EXPECT_EQ(1u, GetNumObserverCalls()); - - // Press the button to enabled state will trigger observer. - controller()->OnButtonPressed(false /* is_now_enabled */); - EXPECT_EQ(2u, GetNumObserverCalls()); - - // Item state changed to enabled. - EXPECT_TRUE(controller()->IsItemEnabled()); - - // Press the button to disabled state will trigger observer. - controller()->OnButtonPressed(true /* is_now_enabled */); - EXPECT_EQ(3u, GetNumObserverCalls()); - - // Item state changed to disabled. - EXPECT_FALSE(controller()->IsItemEnabled()); - - dnd_controller()->SetShouldRequestFail(false); -} - -} // namespace ash
diff --git a/ash/wm/native_cursor_manager_ash.cc b/ash/wm/native_cursor_manager_ash.cc index d13de94d..f437b9c 100644 --- a/ash/wm/native_cursor_manager_ash.cc +++ b/ash/wm/native_cursor_manager_ash.cc
@@ -12,7 +12,7 @@ #include "ui/aura/window_event_dispatcher.h" #include "ui/aura/window_tree_host.h" #include "ui/base/cursor/cursor.h" -#include "ui/base/cursor/image_cursors.h" +#include "ui/base/cursor/cursor_loader.h" #include "ui/base/cursor/mojom/cursor_type.mojom-shared.h" #include "ui/base/layout.h" #include "ui/wm/core/native_cursor_manager_delegate.h" @@ -55,7 +55,9 @@ } // namespace NativeCursorManagerAsh::NativeCursorManagerAsh() - : native_cursor_enabled_(true), image_cursors_(new ui::ImageCursors) {} + : native_cursor_enabled_(true), + cursor_loader_(ui::CursorLoader::Create(/*use_platform_cursors=*/false)) { +} NativeCursorManagerAsh::~NativeCursorManagerAsh() = default; @@ -67,11 +69,11 @@ } float NativeCursorManagerAsh::GetScale() const { - return image_cursors_->GetScale(); + return cursor_loader_->scale(); } display::Display::Rotation NativeCursorManagerAsh::GetRotation() const { - return image_cursors_->GetRotation(); + return cursor_loader_->rotation(); } void NativeCursorManagerAsh::SetDisplay( @@ -84,7 +86,7 @@ const float cursor_scale = ui::GetScaleForScaleFactor(ui::GetSupportedScaleFactor(original_scale)); - if (image_cursors_->SetDisplay(display, cursor_scale)) + if (cursor_loader_->SetDisplayData(display.panel_rotation(), cursor_scale)) SetCursor(delegate->GetCursor(), delegate); Shell::Get() @@ -97,13 +99,13 @@ gfx::NativeCursor cursor, ::wm::NativeCursorManagerDelegate* delegate) { if (native_cursor_enabled_) { - image_cursors_->SetPlatformCursor(&cursor); + cursor_loader_->SetPlatformCursor(&cursor); } else { gfx::NativeCursor invisible_cursor(ui::mojom::CursorType::kNone); - image_cursors_->SetPlatformCursor(&invisible_cursor); + cursor_loader_->SetPlatformCursor(&invisible_cursor); cursor.SetPlatformCursor(invisible_cursor.platform()); } - cursor.set_image_scale_factor(image_cursors_->GetScale()); + cursor.set_image_scale_factor(cursor_loader_->scale()); delegate->CommitCursor(cursor); @@ -114,7 +116,7 @@ void NativeCursorManagerAsh::SetCursorSize( ui::CursorSize cursor_size, ::wm::NativeCursorManagerDelegate* delegate) { - image_cursors_->SetCursorSize(cursor_size); + cursor_loader_->set_size(cursor_size); delegate->CommitCursorSize(cursor_size); // Sets the cursor to reflect the scale change immediately. @@ -136,7 +138,7 @@ SetCursor(delegate->GetCursor(), delegate); } else { gfx::NativeCursor invisible_cursor(ui::mojom::CursorType::kNone); - image_cursors_->SetPlatformCursor(&invisible_cursor); + cursor_loader_->SetPlatformCursor(&invisible_cursor); SetCursorOnAllRootWindows(invisible_cursor); }
diff --git a/ash/wm/native_cursor_manager_ash.h b/ash/wm/native_cursor_manager_ash.h index 1df0f7b..fe1450e 100644 --- a/ash/wm/native_cursor_manager_ash.h +++ b/ash/wm/native_cursor_manager_ash.h
@@ -11,7 +11,7 @@ #include "ui/wm/core/native_cursor_manager.h" namespace ui { -class ImageCursors; +class CursorLoader; } namespace ash { @@ -56,7 +56,7 @@ bool native_cursor_enabled_; - std::unique_ptr<ui::ImageCursors> image_cursors_; + std::unique_ptr<ui::CursorLoader> cursor_loader_; DISALLOW_COPY_AND_ASSIGN(NativeCursorManagerAsh); };
diff --git a/base/BUILD.gn b/base/BUILD.gn index e7262be..5f62f2e 100644 --- a/base/BUILD.gn +++ b/base/BUILD.gn
@@ -3382,10 +3382,6 @@ if (is_win) { sources += [ "allocator/winheap_stubs_win_unittest.cc" ] } - - if (use_allocator == "partition") { - sources += [ "allocator/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc" ] - } } if (enable_base_tracing) {
diff --git a/base/allocator/allocator_shim_default_dispatch_to_partition_alloc.cc b/base/allocator/allocator_shim_default_dispatch_to_partition_alloc.cc index deb3c81..1b18beb7 100644 --- a/base/allocator/allocator_shim_default_dispatch_to_partition_alloc.cc +++ b/base/allocator/allocator_shim_default_dispatch_to_partition_alloc.cc
@@ -10,10 +10,6 @@ #include "base/no_destructor.h" #include "build/build_config.h" -#if defined(OS_POSIX) -#include <malloc.h> -#endif - namespace { // We would usually make g_root a static local variable, as these are guaranteed @@ -188,26 +184,6 @@ return base::ThreadSafePartitionRoot::GetUsableSize(address); } -class PartitionStatsDumperImpl : public base::PartitionStatsDumper { - public: - PartitionStatsDumperImpl() = default; - - void PartitionDumpTotals( - const char* partition_name, - const base::PartitionMemoryStats* memory_stats) override { - stats_ = *memory_stats; - } - - void PartitionsDumpBucketStats( - const char* partition_name, - const base::PartitionBucketMemoryStats*) override {} - - const base::PartitionMemoryStats& stats() const { return stats_; } - - private: - base::PartitionMemoryStats stats_; -}; - } // namespace constexpr AllocatorDispatch AllocatorDispatch::default_dispatch = { @@ -244,30 +220,10 @@ #endif // !defined(OS_APPLE) -#if defined(OS_POSIX) +#ifdef HAVE_STRUCT_MALLINFO SHIM_ALWAYS_EXPORT struct mallinfo mallinfo(void) __THROW { - PartitionStatsDumperImpl allocator_dumper; - Allocator().DumpStats("malloc", true, &allocator_dumper); - - PartitionStatsDumperImpl aligned_allocator_dumper; - AlignedAllocator()->DumpStats("posix_memalign", true, - &aligned_allocator_dumper); - - struct mallinfo info = {0}; - info.arena = 0; // Memory *not* allocated with mmap(). - - // Memory allocated with mmap(), aka virtual size. - info.hblks = allocator_dumper.stats().total_mmapped_bytes + - aligned_allocator_dumper.stats().total_mmapped_bytes; - // Resident bytes. - info.hblkhd = allocator_dumper.stats().total_resident_bytes + - aligned_allocator_dumper.stats().total_resident_bytes; - // Allocated bytes. - info.uordblks = allocator_dumper.stats().total_active_bytes + - aligned_allocator_dumper.stats().total_active_bytes; - - return info; + return {}; } -#endif // defined(OS_POSIX) +#endif } // extern "C"
diff --git a/base/allocator/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc b/base/allocator/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc deleted file mode 100644 index 6fdf2e9..0000000 --- a/base/allocator/allocator_shim_default_dispatch_to_partition_alloc_unittest.cc +++ /dev/null
@@ -1,68 +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 "base/allocator/buildflags.h" -#include "base/compiler_specific.h" -#include "build/build_config.h" -#include "testing/gtest/include/gtest/gtest.h" - -#if defined(OS_POSIX) -#include <malloc.h> -#include <stdlib.h> -#endif - -#if BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) && \ - !defined(MEMORY_TOOL_REPLACES_ALLOCATOR) - -// Platforms on which we override weak libc symbols. -#if defined(OS_LINUX) || defined(OS_CHROMEOS) - -NOINLINE void FreeForTest(void* data) { - free(data); -} - -TEST(PartitionAllocAsMalloc, Mallinfo) { - constexpr int kLargeAllocSize = 10 * 1024 * 1024; - struct mallinfo before = mallinfo(); - void* data = malloc(1000); - ASSERT_TRUE(data); - void* aligned_data; - ASSERT_EQ(0, posix_memalign(&aligned_data, 1024, 1000)); - ASSERT_TRUE(aligned_data); - void* direct_mapped_data = malloc(kLargeAllocSize); - ASSERT_TRUE(direct_mapped_data); - struct mallinfo after_alloc = mallinfo(); - - // Something is reported. - EXPECT_GT(after_alloc.hblks, 0); - EXPECT_GT(after_alloc.hblkhd, 0); - EXPECT_GT(after_alloc.uordblks, 0); - - EXPECT_GT(after_alloc.hblks, kLargeAllocSize); - - // malloc() can reuse memory, so sizes are not necessarily changing, which - // would mean that we need EXPECT_G*E*() rather than EXPECT_GT(). - // - // However since we allocate direct-mapped memory, this increases the total. - EXPECT_GT(after_alloc.hblks, before.hblks); - EXPECT_GT(after_alloc.hblkhd, before.hblkhd); - EXPECT_GT(after_alloc.uordblks, before.uordblks); - - // a simple malloc() / free() pair can be discarded by the compiler (and is), - // making the test fail. It is sufficient to make |FreeForTest()| a NOINLINE - // function for the call to not be eliminated, but this is required. - FreeForTest(data); - FreeForTest(aligned_data); - FreeForTest(direct_mapped_data); - struct mallinfo after_free = mallinfo(); - - EXPECT_LT(after_free.hblks, after_alloc.hblks); - EXPECT_LT(after_free.hblkhd, after_alloc.hblkhd); - EXPECT_LT(after_free.uordblks, after_alloc.uordblks); -} - -#endif // defined(OS_LINUX) || defined(OS_CHROMEOS) - -#endif // BUILDFLAG(USE_PARTITION_ALLOC_AS_MALLOC) && \ - // !defined(MEMORY_TOOL_REPLACES_ALLOCATOR)
diff --git a/base/allocator/partition_allocator/partition_bucket.cc b/base/allocator/partition_allocator/partition_bucket.cc index 069ebae..9bcab15 100644 --- a/base/allocator/partition_allocator/partition_bucket.cc +++ b/base/allocator/partition_allocator/partition_bucket.cc
@@ -50,7 +50,7 @@ // Allocate from GigaCage, if enabled. However, the exception to this is when // tags aren't allowed, as CheckedPtr assumes that everything inside GigaCage // uses tags (specifically, inside the GigaCage's normal bucket pool). - if (root->allow_extras && features::IsPartitionAllocGigaCageEnabled()) { + if (root->UsesGigaCage()) { ptr = internal::AddressPoolManager::GetInstance()->Alloc(GetDirectMapPool(), nullptr, map_size); } else {
diff --git a/base/allocator/partition_allocator/partition_root.h b/base/allocator/partition_allocator/partition_root.h index 843f494..37cf9b72 100644 --- a/base/allocator/partition_allocator/partition_root.h +++ b/base/allocator/partition_allocator/partition_root.h
@@ -6,6 +6,7 @@ #define BASE_ALLOCATOR_PARTITION_ALLOCATOR_PARTITION_ROOT_H_ #include "base/allocator/partition_allocator/partition_alloc_constants.h" +#include "base/allocator/partition_allocator/partition_alloc_features.h" #include "base/allocator/partition_allocator/partition_alloc_forward.h" #include "base/allocator/partition_allocator/partition_direct_map_extent.h" #include "base/allocator/partition_allocator/partition_lock.h" @@ -220,6 +221,10 @@ #endif } + bool UsesGigaCage() const { + return features::IsPartitionAllocGigaCageEnabled() && allow_extras; + } + private: // Allocates memory, without initializing extras. //
diff --git a/base/allocator/partition_allocator/pcscan.cc b/base/allocator/partition_allocator/pcscan.cc index 5cc93dbbd..3cfea47 100644 --- a/base/allocator/partition_allocator/pcscan.cc +++ b/base/allocator/partition_allocator/pcscan.cc
@@ -41,7 +41,7 @@ // STL allocator which is needed to keep internal data structures required by // PCScan. template <typename T> -class MetadataAllocator final { +class MetadataAllocator { public: using value_type = T; @@ -218,7 +218,7 @@ } template <bool thread_safe> -size_t PCScan<thread_safe>::PCScanTask::ScanPartition() NO_SANITIZE("thread") { +size_t NO_SANITIZE("thread") PCScan<thread_safe>::PCScanTask::ScanPartition() { static_assert(alignof(uintptr_t) % alignof(void*) == 0, "Alignment of uintptr_t must be at least as strict as " "alignment of a pointer type."); @@ -237,7 +237,7 @@ #if defined(PA_HAS_64_BITS_POINTERS) // On partitions without extras (partitions with aligned allocations), // memory is not allocated from the GigaCage. - if (features::IsPartitionAllocGigaCageEnabled() && root_.allow_extras) { + if (root_.UsesGigaCage()) { // With GigaCage, we first do a fast bitmask check to see if the pointer // points to the normal bucket pool. if (!PartitionAddressSpace::IsInNormalBucketPool(
diff --git a/base/android/java/src/org/chromium/base/CollectionUtil.java b/base/android/java/src/org/chromium/base/CollectionUtil.java index 1ccbd65e..7e4c5b2 100644 --- a/base/android/java/src/org/chromium/base/CollectionUtil.java +++ b/base/android/java/src/org/chromium/base/CollectionUtil.java
@@ -7,9 +7,7 @@ import android.util.Pair; import androidx.annotation.NonNull; -import androidx.annotation.VisibleForTesting; -import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -35,22 +33,6 @@ } @SafeVarargs - public static <E> ArrayList<E> newArrayList(E... elements) { - ArrayList<E> list = new ArrayList<E>(elements.length); - Collections.addAll(list, elements); - return list; - } - - @VisibleForTesting - public static <E> ArrayList<E> newArrayList(Iterable<E> iterable) { - ArrayList<E> list = new ArrayList<E>(); - for (E element : iterable) { - list.add(element); - } - return list; - } - - @SafeVarargs public static <K, V> HashMap<K, V> newHashMap(Pair<? extends K, ? extends V>... entries) { HashMap<K, V> map = new HashMap<>(); for (Pair<? extends K, ? extends V> entry : entries) {
diff --git a/base/task/thread_pool/thread_group_impl_unittest.cc b/base/task/thread_pool/thread_group_impl_unittest.cc index 68d29a4..c3deb3b 100644 --- a/base/task/thread_pool/thread_group_impl_unittest.cc +++ b/base/task/thread_pool/thread_group_impl_unittest.cc
@@ -1770,8 +1770,9 @@ // 4. Task A enters a second WILL_BLOCK ScopedBlockingCall. This should no-op // because there are already enough workers. // 5. Unblock HoldWorkersObserver and wait for all tasks to complete. +// Disabled: https://crbug.com/1140651 TEST_F(ThreadGroupImplImplStartInBodyTest, - RepeatedWillBlockDoesNotCreateTooManyWorkers) { + DISABLED_RepeatedWillBlockDoesNotCreateTooManyWorkers) { constexpr size_t kNumWorkers = 2U; HoldWorkersObserver worker_observer; StartThreadGroup(TimeDelta::Max(), // |suggested_reclaim_time|
diff --git a/build/config/ios/asset_catalog.gni b/build/config/ios/asset_catalog.gni index ed9254c..6013def 100644 --- a/build/config/ios/asset_catalog.gni +++ b/build/config/ios/asset_catalog.gni
@@ -90,8 +90,8 @@ outputs = _outputs + [ _xcassets_dir ] args = [ - rebase_path(get_path_info(_sources[0], "dir"), root_out_dir), - rebase_path(_output_dir, root_out_dir), + rebase_path(get_path_info(_sources[0], "dir"), root_build_dir), + rebase_path(_output_dir, root_build_dir), ] }
diff --git a/build/config/ios/rules.gni b/build/config/ios/rules.gni index 4008e2ba..0991bd1 100644 --- a/build/config/ios/rules.gni +++ b/build/config/ios/rules.gni
@@ -927,8 +927,8 @@ sources = [ "${_default_variant.bundle_gen_dir}/$_bundle_short_name" ] outputs = [ "$root_out_dir/$_bundle_short_name" ] - args = rebase_path(sources, root_out_dir) + - rebase_path(outputs, root_out_dir) + args = rebase_path(sources, root_build_dir) + + rebase_path(outputs, root_build_dir) } } }
diff --git a/build/lacros/PRESUBMIT.py b/build/lacros/PRESUBMIT.py new file mode 100644 index 0000000..1394a42c --- /dev/null +++ b/build/lacros/PRESUBMIT.py
@@ -0,0 +1,18 @@ +# Copyright (c) 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. +"""Presubmit script for changes affecting //build/lacros""" + + +def _CommonChecks(input_api, output_api): + tests = input_api.canned_checks.GetUnitTestsInDirectory( + input_api, output_api, '.', [r'^.+_test\.py$']) + return input_api.RunTests(tests) + + +def CheckChangeOnUpload(input_api, output_api): + return _CommonChecks(input_api, output_api) + + +def CheckChangeOnCommit(input_api, output_api): + return _CommonChecks(input_api, output_api)
diff --git a/chrome/android/chrome_test_java_sources.gni b/chrome/android/chrome_test_java_sources.gni index 3aa7aeaf..ed28326 100644 --- a/chrome/android/chrome_test_java_sources.gni +++ b/chrome/android/chrome_test_java_sources.gni
@@ -583,6 +583,7 @@ "javatests/src/org/chromium/chrome/browser/test/ScreenShooter.java", "javatests/src/org/chromium/chrome/browser/toolbar/HomeButtonTest.java", "javatests/src/org/chromium/chrome/browser/toolbar/LocationBarModelTest.java", + "javatests/src/org/chromium/chrome/browser/toolbar/ToolbarDataProviderTest.java", "javatests/src/org/chromium/chrome/browser/toolbar/ToolbarProgressBarIntegrationTest.java", "javatests/src/org/chromium/chrome/browser/toolbar/ToolbarProgressBarTest.java", "javatests/src/org/chromium/chrome/browser/toolbar/ToolbarSecurityIconTest.java",
diff --git a/chrome/android/expectations/monochrome_public_bundle.arm64.libs_and_assets.expected b/chrome/android/expectations/monochrome_public_bundle.arm64.libs_and_assets.expected index 771e205..28ace4d 100644 --- a/chrome/android/expectations/monochrome_public_bundle.arm64.libs_and_assets.expected +++ b/chrome/android/expectations/monochrome_public_bundle.arm64.libs_and_assets.expected
@@ -3,13 +3,8 @@ apk_path=lib/armeabi-v7a/libarcore_sdk_c.so, compress=False, alignment=4096 apk_path=lib/armeabi-v7a/libcrashpad_handler_trampoline.so, compress=False, alignment=4096 apk_path=lib/armeabi-v7a/libmonochrome.so, compress=False, alignment=4096 -apk_path=lib/armeabi-v7a/libmonochrome_cablev2_authenticator_partition.so, compress=False, alignment=4096 -apk_path=lib/armeabi-v7a/libmonochrome_stack_unwinder_partition.so, compress=False, alignment=4096 -apk_path=lib/armeabi-v7a/libmonochrome_test_dummy_partition.so, compress=False, alignment=4096 -apk_path=lib/armeabi-v7a/libmonochrome_vr_partition.so, compress=False, alignment=4096 apk_path=assets/chrome_100_percent.pak, compress=False, alignment=4 apk_path=assets/icudtl.dat, compress=False, alignment=4 -apk_path=assets/icudtl_extra.dat, compress=False, alignment=4 apk_path=assets/locales/af.pak, compress=False, alignment=4 apk_path=assets/locales/am.pak, compress=False, alignment=4 apk_path=assets/locales/ar.pak, compress=False, alignment=4
diff --git a/chrome/android/expectations/trichrome_chrome_bundle.arm64.libs_and_assets.expected b/chrome/android/expectations/trichrome_chrome_bundle.arm64.libs_and_assets.expected index 1f7aec2b..e9c8441 100644 --- a/chrome/android/expectations/trichrome_chrome_bundle.arm64.libs_and_assets.expected +++ b/chrome/android/expectations/trichrome_chrome_bundle.arm64.libs_and_assets.expected
@@ -1,11 +1,6 @@ apk_path=lib/armeabi-v7a/libarcore_sdk_c.so, compress=False, alignment=4096 apk_path=lib/armeabi-v7a/libchromium_android_linker.so, compress=False, alignment=4096 -apk_path=lib/armeabi-v7a/libmonochrome_cablev2_authenticator_partition.so, compress=False, alignment=4096 -apk_path=lib/armeabi-v7a/libmonochrome_stack_unwinder_partition.so, compress=False, alignment=4096 -apk_path=lib/armeabi-v7a/libmonochrome_test_dummy_partition.so, compress=False, alignment=4096 -apk_path=lib/armeabi-v7a/libmonochrome_vr_partition.so, compress=False, alignment=4096 apk_path=assets/chrome_100_percent.pak, compress=False, alignment=4 -apk_path=assets/icudtl_extra.dat, compress=False, alignment=4 apk_path=assets/locales/af.pak, compress=False, alignment=4 apk_path=assets/locales/am.pak, compress=False, alignment=4 apk_path=assets/locales/ar.pak, compress=False, alignment=4
diff --git a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantOverlayIntegrationTest.java b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantOverlayIntegrationTest.java index 96c8519a..49c3efa 100644 --- a/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantOverlayIntegrationTest.java +++ b/chrome/android/features/autofill_assistant/javatests/src/org/chromium/chrome/browser/autofill_assistant/AutofillAssistantOverlayIntegrationTest.java
@@ -34,6 +34,7 @@ import org.junit.runner.RunWith; import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.DisableIf; import org.chromium.chrome.autofill_assistant.R; import org.chromium.chrome.browser.autofill_assistant.proto.ActionProto; import org.chromium.chrome.browser.autofill_assistant.proto.BitmapDrawableProto; @@ -57,6 +58,7 @@ import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.test.ChromeJUnit4ClassRunner; import org.chromium.content_public.browser.WebContents; +import org.chromium.ui.test.util.UiDisableIf; import java.util.ArrayList; import java.util.Collections; @@ -203,6 +205,7 @@ */ @Test @MediumTest + @DisableIf.Device(type = {UiDisableIf.TABLET}) // https://crbug.com/1140957 public void testShowCastOnDocumentElementInScrolledBrowserWindow() throws Exception { SelectorProto element = (SelectorProto) SelectorProto.newBuilder()
diff --git a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernViewTest.java b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernViewTest.java index 61b926f..2aa29a70 100644 --- a/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernViewTest.java +++ b/chrome/android/features/keyboard_accessory/javatests/src/org/chromium/chrome/browser/keyboard_accessory/bar_component/KeyboardAccessoryModernViewTest.java
@@ -158,11 +158,6 @@ public void addOnInitializedCallback(Callback<Boolean> callback) { assert false : "Implement addOnInitializedCallback if you need it."; } - - @Override - public void injectTracker(Tracker tracker) { - assert false : "This should only be called on a production tracker"; - } } @Before
diff --git a/chrome/android/features/vr/java/strings/translations/android_chrome_vr_strings_iw.xtb b/chrome/android/features/vr/java/strings/translations/android_chrome_vr_strings_iw.xtb index fab52633..7a3f91ea 100644 --- a/chrome/android/features/vr/java/strings/translations/android_chrome_vr_strings_iw.xtb +++ b/chrome/android/features/vr/java/strings/translations/android_chrome_vr_strings_iw.xtb
@@ -4,7 +4,7 @@ <translation id="1729516292547892356">עליך לעדכן את Google VR Services כדי שתוכל להציג תוכן של מציאות מדומה</translation> <translation id="1938981467853765413"> שליחת משוב</translation> <translation id="360207483134687714">רוצה לעזור לשפר את חוויית VR ב-Chrome?</translation> -<translation id="3789841737615482174">התקן</translation> +<translation id="3789841737615482174">התקנה</translation> <translation id="473775607612524610">עדכון</translation> <translation id="9071742570345586758">עליך להתקין את Google VR Services כדי שתוכל להציג תוכן של מציאות מדומה</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadInfoBarController.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadInfoBarController.java index 0e46ef9..273696d 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadInfoBarController.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadInfoBarController.java
@@ -374,7 +374,7 @@ // OfflineContentProvider.Observer implementation. @Override - public void onItemsAdded(ArrayList<OfflineItem> items) { + public void onItemsAdded(List<OfflineItem> items) { for (OfflineItem item : items) { if (!isVisibleToUser(item)) continue; computeNextStepForUpdate(item);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java index 9f7ffc3..380ead4 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/DownloadManagerService.java
@@ -966,6 +966,10 @@ } incrementDownloadRetryCount(item.getId(), false); } + + // Downloads started from incognito mode should not be resumed in reduced mode. + if (!ProfileManager.isInitialized() && item.getDownloadInfo().isOffTheRecord()) return; + DownloadManagerServiceJni.get().resumeDownload(getNativeDownloadManagerService(), DownloadManagerService.this, item.getId(), getProfileKey(item.getDownloadInfo().isOffTheRecord()), hasUserGesture);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/OfflineContentAvailabilityStatusProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/download/OfflineContentAvailabilityStatusProvider.java index 1c1a46f..d63a0c1 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/OfflineContentAvailabilityStatusProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/OfflineContentAvailabilityStatusProvider.java
@@ -14,8 +14,8 @@ import org.chromium.components.offline_items_collection.OfflineItem; import org.chromium.components.offline_items_collection.UpdateDelta; -import java.util.ArrayList; import java.util.HashSet; +import java.util.List; import java.util.Set; /** @@ -69,7 +69,7 @@ // OfflineContentProvider.Observer overrides @Override - public void onItemsAdded(ArrayList<OfflineItem> items) { + public void onItemsAdded(List<OfflineItem> items) { if (items.isEmpty()) return; for (OfflineItem item : items) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/FileDeletionQueue.java b/chrome/android/java/src/org/chromium/chrome/browser/download/home/FileDeletionQueue.java index abfc896..7b60163 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/FileDeletionQueue.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/home/FileDeletionQueue.java
@@ -7,10 +7,10 @@ import androidx.annotation.VisibleForTesting; import org.chromium.base.Callback; -import org.chromium.base.CollectionUtil; import org.chromium.base.FileUtils; import org.chromium.base.task.AsyncTask; +import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Queue; @@ -93,6 +93,6 @@ private static class LazyHolder { private static final FileDeletionQueue INSTANCE = new FileDeletionQueue(fileName -> FileUtils.batchDeleteFiles( - CollectionUtil.newArrayList(fileName), FileUtils.DELETE_ALL)); + Collections.singletonList(fileName), FileUtils.DELETE_ALL)); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/LegacyDownloadProviderImpl.java b/chrome/android/java/src/org/chromium/chrome/browser/download/home/LegacyDownloadProviderImpl.java index ec088ed..fcb8073 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/LegacyDownloadProviderImpl.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/home/LegacyDownloadProviderImpl.java
@@ -7,7 +7,6 @@ import android.text.TextUtils; import org.chromium.base.Callback; -import org.chromium.base.CollectionUtil; import org.chromium.base.ObserverList; import org.chromium.base.task.PostTask; import org.chromium.chrome.browser.download.DownloadInfo; @@ -29,6 +28,7 @@ import org.chromium.content_public.browser.UiThreadTaskTraits; import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -55,8 +55,7 @@ public void onDownloadItemCreated(DownloadItem item) { if (!canShowDownloadItem(item)) return; for (OfflineContentProvider.Observer observer : mObservers) { - observer.onItemsAdded( - CollectionUtil.newArrayList(DownloadItem.createOfflineItem(item))); + observer.onItemsAdded(Collections.singletonList(DownloadItem.createOfflineItem(item))); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/OfflineItemSource.java b/chrome/android/java/src/org/chromium/chrome/browser/download/home/OfflineItemSource.java index 5294a581..4a43ca9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/OfflineItemSource.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/home/OfflineItemSource.java
@@ -14,10 +14,11 @@ import org.chromium.components.offline_items_collection.OfflineItem; import org.chromium.components.offline_items_collection.UpdateDelta; -import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.List; import java.util.Map; import java.util.Set; @@ -94,7 +95,7 @@ // OfflineContentProvider.Observer implementation. @Override - public void onItemsAdded(ArrayList<OfflineItem> items) { + public void onItemsAdded(List<OfflineItem> items) { Set<OfflineItem> addedItems = new HashSet<OfflineItem>(); for (OfflineItem item : items) { if (mItems.containsKey(item.id)) { @@ -123,7 +124,7 @@ public void onItemUpdated(OfflineItem item, UpdateDelta updateDelta) { OfflineItem oldItem = mItems.get(item.id); if (oldItem == null) { - onItemsAdded(CollectionUtil.newArrayList(item)); + onItemsAdded(Collections.singletonList(item)); } else { mItems.put(item.id, item); for (OfflineItemFilterObserver observer : mObservers) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/glue/OfflineContentProviderGlue.java b/chrome/android/java/src/org/chromium/chrome/browser/download/home/glue/OfflineContentProviderGlue.java index 12b6ea6..06b8bb5e 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/glue/OfflineContentProviderGlue.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/home/glue/OfflineContentProviderGlue.java
@@ -189,7 +189,7 @@ // OfflineContentProvider.Observer implementation. @Override - public void onItemsAdded(ArrayList<OfflineItem> items) { + public void onItemsAdded(List<OfflineItem> items) { for (OfflineContentProvider.Observer observer : mObservers) observer.onItemsAdded(items); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/DateOrderedListMediator.java b/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/DateOrderedListMediator.java index a3fde14..ad3911a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/DateOrderedListMediator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/DateOrderedListMediator.java
@@ -53,6 +53,7 @@ import java.io.Closeable; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; /** @@ -333,7 +334,7 @@ private void onDeleteItem(OfflineItem item) { UmaUtils.recordItemAction(ViewAction.MENU_DELETE); - deleteItemsInternal(CollectionUtil.newArrayList(item)); + deleteItemsInternal(Collections.singletonList(item)); } private void onShareItem(OfflineItem item) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/mutator/DateOrderedListMutator.java b/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/mutator/DateOrderedListMutator.java index 5d7277d..774294f 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/mutator/DateOrderedListMutator.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/home/list/mutator/DateOrderedListMutator.java
@@ -4,7 +4,6 @@ package org.chromium.chrome.browser.download.home.list.mutator; -import org.chromium.base.CollectionUtil; import org.chromium.chrome.browser.download.home.JustNowProvider; import org.chromium.chrome.browser.download.home.filter.OfflineItemFilterObserver; import org.chromium.chrome.browser.download.home.filter.OfflineItemFilterSource; @@ -15,6 +14,7 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; /** * A class responsible for turning a {@link Collection} of {@link OfflineItem}s into a list meant @@ -108,8 +108,8 @@ || mJustNowProvider.isJustNowItem(oldItem) != mJustNowProvider.isJustNowItem((item)) || offlineItemScheduleDiffer(item, oldItem)) { // TODO(shaktisahu): Collect UMA when this happens. - onItemsRemoved(CollectionUtil.newArrayList(oldItem)); - onItemsAdded(CollectionUtil.newArrayList(item)); + onItemsRemoved(Collections.singletonList(oldItem)); + onItemsAdded(Collections.singletonList(item)); } else { for (int i = 0; i < mSortedItems.size(); i++) { if (item.id.equals(((OfflineItemListItem) mSortedItems.get(i)).item.id)) {
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/items/DownloadBlockedOfflineContentProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/download/items/DownloadBlockedOfflineContentProvider.java index 179a494..0c20d52 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/items/DownloadBlockedOfflineContentProvider.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/items/DownloadBlockedOfflineContentProvider.java
@@ -17,6 +17,7 @@ import org.chromium.components.offline_items_collection.VisualsCallback; import java.util.ArrayList; +import java.util.List; /** * Filters out download offline items till downloads backend fully supports offline content @@ -109,7 +110,7 @@ } @Override - public void onItemsAdded(ArrayList<OfflineItem> items) { + public void onItemsAdded(List<OfflineItem> items) { ArrayList<OfflineItem> filteredList = getFilteredList(items); for (Observer observer : mObservers) { observer.onItemsAdded(filteredList); @@ -132,7 +133,7 @@ } } - private ArrayList<OfflineItem> getFilteredList(ArrayList<OfflineItem> items) { + private ArrayList<OfflineItem> getFilteredList(List<OfflineItem> items) { ArrayList<OfflineItem> filteredList = new ArrayList<>(); for (OfflineItem item : items) { if (LegacyHelpers.isLegacyDownload(item.id)) continue;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorNotificationBridgeUi.java b/chrome/android/java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorNotificationBridgeUi.java index 1740e18..4b1bb453 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorNotificationBridgeUi.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorNotificationBridgeUi.java
@@ -18,8 +18,8 @@ import org.chromium.components.offline_items_collection.UpdateDelta; import org.chromium.components.offline_items_collection.VisualsCallback; -import java.util.ArrayList; import java.util.HashMap; +import java.util.List; /** * A glue class that bridges the Profile-attached OfflineContentProvider with the @@ -73,7 +73,7 @@ // OfflineContentProvider.Observer implementation. @Override - public void onItemsAdded(ArrayList<OfflineItem> items) { + public void onItemsAdded(List<OfflineItem> items) { for (int i = 0; i < items.size(); ++i) getVisualsAndUpdateItem(items.get(i), null); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/feature_engagement/TrackerFactory.java b/chrome/android/java/src/org/chromium/chrome/browser/feature_engagement/TrackerFactory.java index 4f6aaf1..b1178ae0 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/feature_engagement/TrackerFactory.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/feature_engagement/TrackerFactory.java
@@ -34,6 +34,16 @@ } /** + * Sets up a testing factory in C++ and pass it a Tracker object for wrapping and proxying of + * calls back up to Java. + * @param The {@link profile} the current profile object. + * @param The {@link Tracker} the test tracker for C++ to wrap. + */ + public static void setTestingFactory(Profile profile, Tracker testTracker) { + TrackerFactoryJni.get().setTestingFactory(profile, testTracker); + } + + /** * Set a {@Tracker} to use for testing. All calls to {@link #getTrackerForProfile(Profile)} * will return the test tracker rather than the real tracker. * @@ -48,5 +58,6 @@ @NativeMethods interface Natives { Tracker getTrackerForProfile(Profile profile); + void setTestingFactory(Profile profile, Tracker testTracker); } }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoUtils.java index 405743ed..749bb3c 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/incognito/IncognitoUtils.java
@@ -19,6 +19,7 @@ import org.chromium.base.ContextUtils; import org.chromium.base.IntentUtils; import org.chromium.base.annotations.NativeMethods; +import org.chromium.base.metrics.RecordHistogram; import org.chromium.chrome.browser.ChromeTabbedActivity; import org.chromium.chrome.browser.IntentHandler; import org.chromium.chrome.browser.customtabs.CustomTabIncognitoManager; @@ -51,6 +52,16 @@ @SuppressLint("NewApi") public static boolean shouldDestroyIncognitoProfileOnStartup( boolean selectedTabModelIsIncognito) { + boolean result = + shouldDestroyIncognitoProfileOnStartupInternal(selectedTabModelIsIncognito); + RecordHistogram.recordBooleanHistogram( + "Android.ShouldDestroyIncognitoProfileOnStartup", result); + return result; + } + + @SuppressLint("NewApi") + public static boolean shouldDestroyIncognitoProfileOnStartupInternal( + boolean selectedTabModelIsIncognito) { if (!Profile.getLastUsedRegularProfile().hasOffTheRecordProfile()) { return false; }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java index 0995fd2..00e5755 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/share/LensUtils.java
@@ -331,7 +331,9 @@ && !(isIncognito && ChromeFeatureList.getFieldTrialParamByFeatureAsBoolean( ChromeFeatureList.CONTEXT_MENU_SHOP_WITH_GOOGLE_LENS, - DISABLE_ON_INCOGNITO_PARAM_NAME, true)); + DISABLE_ON_INCOGNITO_PARAM_NAME, true)) + // Dont enable both the chip and the shopping menu item. + && !ChromeFeatureList.isEnabled(ChromeFeatureList.CONTEXT_MENU_GOOGLE_LENS_CHIP); } /**
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java index 13c0576..82fa406 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/top/ToolbarPhone.java
@@ -520,9 +520,7 @@ if (isNativeLibraryReady() && PartnerBrowserCustomizations.getInstance() .isHomepageProviderAvailableAndEnabled()) { - Profile profile = isIncognito() - ? Profile.getLastUsedRegularProfile().getOffTheRecordProfile() - : Profile.getLastUsedRegularProfile(); + Profile profile = getToolbarDataProvider().getProfile(); TrackerFactory.getTrackerForProfile(profile).notifyEvent( EventConstants.PARTNER_HOME_PAGE_BUTTON_PRESSED); }
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/usage_stats/NotificationSuspender.java b/chrome/android/java/src/org/chromium/chrome/browser/usage_stats/NotificationSuspender.java index 0538e5ac..e202572 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/usage_stats/NotificationSuspender.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/usage_stats/NotificationSuspender.java
@@ -17,7 +17,6 @@ import android.text.TextUtils; import android.webkit.URLUtil; -import org.chromium.base.CollectionUtil; import org.chromium.base.ContextUtils; import org.chromium.base.Promise; import org.chromium.base.annotations.JNINamespace; @@ -32,6 +31,7 @@ import org.chromium.content_public.browser.BrowserStartupController.StartupCallback; import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -63,7 +63,7 @@ if (!fqdns.contains(getValidFqdnOrEmptyString(notification))) return false; UsageStatsService.getInstance() .getNotificationSuspender() - .storeNotificationResources(CollectionUtil.newArrayList(notification)); + .storeNotificationResources(Collections.singletonList(notification)); return true; }); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/IntentHandlerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/IntentHandlerTest.java index d80dc45..ecfb28ca 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/IntentHandlerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/IntentHandlerTest.java
@@ -29,7 +29,6 @@ import org.junit.rules.RuleChain; import org.junit.runner.RunWith; -import org.chromium.base.CollectionUtil; import org.chromium.base.test.BaseJUnit4ClassRunner; import org.chromium.base.test.UiThreadTest; import org.chromium.base.test.util.Feature; @@ -46,6 +45,7 @@ import org.chromium.content_public.browser.test.util.TestThreadUtils; import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -248,9 +248,9 @@ public void testGetQueryFromVoiceSearchResultIntent_validVoiceQuery() { Intent intent = new Intent(RecognizerResultsIntent.ACTION_VOICE_SEARCH_RESULTS); intent.putStringArrayListExtra(RecognizerResultsIntent.EXTRA_VOICE_SEARCH_RESULT_STRINGS, - CollectionUtil.newArrayList(VOICE_SEARCH_QUERY)); + new ArrayList<>(Collections.singletonList(VOICE_SEARCH_QUERY))); intent.putStringArrayListExtra(RecognizerResultsIntent.EXTRA_VOICE_SEARCH_RESULT_URLS, - CollectionUtil.newArrayList(VOICE_SEARCH_QUERY_URL)); + new ArrayList<>(Collections.singletonList(VOICE_SEARCH_QUERY_URL))); String query = IntentHandler.getUrlFromVoiceSearchResult(intent); Assert.assertEquals(VOICE_SEARCH_QUERY_URL, query); } @@ -262,9 +262,9 @@ public void testGetQueryFromVoiceSearchResultIntent_validUrlQuery() { Intent intent = new Intent(RecognizerResultsIntent.ACTION_VOICE_SEARCH_RESULTS); intent.putStringArrayListExtra(RecognizerResultsIntent.EXTRA_VOICE_SEARCH_RESULT_STRINGS, - CollectionUtil.newArrayList(VOICE_URL_QUERY)); + new ArrayList<>(Collections.singletonList(VOICE_URL_QUERY))); intent.putStringArrayListExtra(RecognizerResultsIntent.EXTRA_VOICE_SEARCH_RESULT_URLS, - CollectionUtil.newArrayList(VOICE_URL_QUERY_URL)); + new ArrayList<>(Collections.singletonList(VOICE_URL_QUERY_URL))); String query = IntentHandler.getUrlFromVoiceSearchResult(intent); Assert.assertTrue(String.format("Expected qualified URL: %s, to start " + "with http://www.google.com",
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/banners/AppBannerManagerTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/banners/AppBannerManagerTest.java index c53d58a1..fc1ebaeb 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/banners/AppBannerManagerTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/banners/AppBannerManagerTest.java
@@ -66,6 +66,9 @@ import org.chromium.chrome.browser.flags.ChromeSwitches; import org.chromium.chrome.browser.infobar.InfoBarContainer; import org.chromium.chrome.browser.infobar.InstallableAmbientBadgeInfoBar; +import org.chromium.chrome.browser.init.BrowserParts; +import org.chromium.chrome.browser.init.ChromeBrowserInitializer; +import org.chromium.chrome.browser.init.EmptyBrowserParts; import org.chromium.chrome.browser.profiles.Profile; import org.chromium.chrome.browser.tab.Tab; import org.chromium.chrome.browser.tab.TabUtils; @@ -98,12 +101,13 @@ import java.util.ArrayList; import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; /** * Tests the app banners. */ @RunWith(ChromeJUnit4ClassRunner.class) -@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE, "use-java-proxy-tracker"}) +@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) public class AppBannerManagerTest { @Rule public ChromeTabbedActivityTestRule mTabbedActivityTestRule = @@ -223,9 +227,6 @@ } }); - mTabbedActivityTestRule.startMainActivityOnBlankPage(); - // Must be set after native has loaded. - mDetailsDelegate = new MockAppDetailsDelegate(); mTracker = new CppWrappedTestTracker(FeatureConstants.PWA_INSTALL_AVAILABLE_FEATURE) { @Override public void notifyEvent(String event) { @@ -234,13 +235,20 @@ } }; - ThreadUtils.runOnUiThreadBlocking(() -> { - AppBannerManager.setAppDetailsDelegate(mDetailsDelegate); + loadNative(); + ThreadUtils.runOnUiThreadBlocking(() -> { Profile profile = Profile.getLastUsedRegularProfile(); - TrackerFactory.getTrackerForProfile(profile).injectTracker(mTracker); + TrackerFactory.setTestingFactory(profile, mTracker); }); + mTabbedActivityTestRule.startMainActivityOnBlankPage(); + // Must be set after native has loaded. + mDetailsDelegate = new MockAppDetailsDelegate(); + + ThreadUtils.runOnUiThreadBlocking( + () -> { AppBannerManager.setAppDetailsDelegate(mDetailsDelegate); }); + AppBannerManager.ignoreChromeChannelForTesting(); AppBannerManager.setTotalEngagementForTesting(10); mTestServer = EmbeddedTestServer.createAndStartServer(InstrumentationRegistry.getContext()); @@ -254,6 +262,22 @@ } } + private void loadNative() { + final AtomicBoolean mNativeLoaded = new AtomicBoolean(); + final BrowserParts parts = new EmptyBrowserParts() { + @Override + public void finishNativeInitialization() { + mNativeLoaded.set(true); + } + }; + PostTask.postTask(UiThreadTaskTraits.DEFAULT, () -> { + ChromeBrowserInitializer.getInstance().handlePreNativeStartup(parts); + ChromeBrowserInitializer.getInstance().handlePostNativeStartup(true, parts); + }); + CriteriaHelper.pollUiThread( + () -> mNativeLoaded.get(), "Failed while waiting for starting native."); + } + private void resetEngagementForUrl(final String url, final double engagement) { ThreadUtils.runOnUiThreadBlocking(() -> { // TODO (https://crbug.com/1063807): Add incognito mode tests.
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchInternalStateControllerWrapper.java b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchInternalStateControllerWrapper.java index d9ecb7ea..d35b377a 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchInternalStateControllerWrapper.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchInternalStateControllerWrapper.java
@@ -4,9 +4,8 @@ package org.chromium.chrome.browser.contextualsearch; -import org.chromium.base.CollectionUtil; - import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** @@ -16,14 +15,14 @@ class ContextualSearchInternalStateControllerWrapper extends ContextualSearchInternalStateController { static final List<Integer> EXPECTED_TAP_RESOLVE_SEQUENCE = - CollectionUtil.newArrayList(InternalState.TAP_RECOGNIZED, - InternalState.TAP_GESTURE_COMMIT, InternalState.GATHERING_SURROUNDINGS, - InternalState.DECIDING_SUPPRESSION, InternalState.START_SHOWING_TAP_UI, - InternalState.SHOW_RESOLVING_UI, InternalState.RESOLVING); + Arrays.asList(InternalState.TAP_RECOGNIZED, InternalState.TAP_GESTURE_COMMIT, + InternalState.GATHERING_SURROUNDINGS, InternalState.DECIDING_SUPPRESSION, + InternalState.START_SHOWING_TAP_UI, InternalState.SHOW_RESOLVING_UI, + InternalState.RESOLVING); static final List<Integer> EXPECTED_LONGPRESS_SEQUENCE = - CollectionUtil.newArrayList(InternalState.LONG_PRESS_RECOGNIZED, - InternalState.GATHERING_SURROUNDINGS, InternalState.SHOWING_LONGPRESS_SEARCH); - static final List<Integer> EXPECTED_LONGPRESS_RESOLVE_SEQUENCE = CollectionUtil.newArrayList( + Arrays.asList(InternalState.LONG_PRESS_RECOGNIZED, InternalState.GATHERING_SURROUNDINGS, + InternalState.SHOWING_LONGPRESS_SEARCH); + static final List<Integer> EXPECTED_LONGPRESS_RESOLVE_SEQUENCE = Arrays.asList( InternalState.RESOLVING_LONG_PRESS_RECOGNIZED, InternalState.GATHERING_SURROUNDINGS, InternalState.SHOW_RESOLVING_UI, InternalState.RESOLVING);
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadTestRule.java b/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadTestRule.java index 19dff4e..d7061015a 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadTestRule.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/download/DownloadTestRule.java
@@ -30,7 +30,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; -import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -222,7 +221,7 @@ private class TestDownloadBackendObserver implements OfflineContentProvider.Observer { @Override - public void onItemsAdded(ArrayList<OfflineItem> items) {} + public void onItemsAdded(List<OfflineItem> items) {} @Override public void onItemRemoved(ContentId id) {}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/download/ServicificationDownloadTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/download/ServicificationDownloadTest.java index 99308134..d61b1f5 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/download/ServicificationDownloadTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/download/ServicificationDownloadTest.java
@@ -31,7 +31,7 @@ import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.net.test.EmbeddedTestServerRule; -import java.util.ArrayList; +import java.util.List; /** * Tests interrupted download can be resumed with Service Manager only mode. @@ -70,7 +70,7 @@ private boolean mDownloadCompleted; @Override - public void onItemsAdded(ArrayList<OfflineItem> items) {} + public void onItemsAdded(List<OfflineItem> items) {} @Override public void onItemRemoved(ContentId id) {}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoDownloadLeakageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoDownloadLeakageTest.java index ba82b9d..c6b3a9b 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoDownloadLeakageTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/incognito/IncognitoDownloadLeakageTest.java
@@ -111,7 +111,7 @@ private OfflineContentProvider.Observer mTestDownloadBackendObserver = new OfflineContentProvider.Observer() { @Override - public void onItemsAdded(ArrayList<OfflineItem> items) {} + public void onItemsAdded(List<OfflineItem> items) {} @Override public void onItemRemoved(ContentId id) {}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/media/MediaLauncherActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/media/MediaLauncherActivityTest.java index 9eaf6998..b2129f7f 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/media/MediaLauncherActivityTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/media/MediaLauncherActivityTest.java
@@ -21,7 +21,6 @@ import org.junit.Test; import org.junit.runner.RunWith; -import org.chromium.base.CollectionUtil; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.UrlUtils; import org.chromium.chrome.browser.customtabs.CustomTabActivity; @@ -34,6 +33,7 @@ import org.chromium.content_public.browser.test.util.Criteria; import org.chromium.content_public.browser.test.util.CriteriaHelper; +import java.util.Arrays; import java.util.List; import java.util.concurrent.Callable; @@ -90,7 +90,7 @@ @Test @SmallTest public void testFilterURI() { - List<Pair<String, String>> testCases = CollectionUtil.newArrayList( + List<Pair<String, String>> testCases = Arrays.asList( new Pair<>("file:///test.jpg", "file:///test.jpg"), new Pair<>("file:///test.jp!g", "file:///test.jp!g"), new Pair<>("file:///test!$'.jpg", "file:///test.jpg"),
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/MHTMLPageTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/MHTMLPageTest.java index f6fac3f..247ba22 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/MHTMLPageTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/offlinepages/MHTMLPageTest.java
@@ -35,7 +35,7 @@ import org.chromium.net.test.EmbeddedTestServer; import org.chromium.ui.base.PageTransition; -import java.util.ArrayList; +import java.util.List; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; @@ -87,7 +87,7 @@ } @Override - public void onItemsAdded(ArrayList<OfflineItem> items) {} + public void onItemsAdded(List<OfflineItem> items) {} @Override public void onItemRemoved(ContentId id) {}
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/share/LensUtilsTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/share/LensUtilsTest.java index d62d2c5..f8e6c97 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/share/LensUtilsTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/share/LensUtilsTest.java
@@ -193,6 +193,23 @@ } /** + * Test {@link LensUtils#isGoogleLensFeatureEnabled()} method when shopping chip is enabled. + */ + @CommandLineFlags.Add({"enable-features=" + ChromeFeatureList.CONTEXT_MENU_SHOP_WITH_GOOGLE_LENS + + "<FakeStudyName," + ChromeFeatureList.CONTEXT_MENU_GOOGLE_LENS_CHIP + + "<FakeStudyName", + "force-fieldtrials=FakeStudyName/Enabled", + "force-fieldtrial-params=FakeStudyName.Enabled:disableOnIncognito/true/" + + "lensShopVariation/ShopSimilarProducts"}) + @Test + @SmallTest + public void + isGoogleLensShoppingFeatureEnabled_shoppingChipEnabled() { + Assert.assertFalse("Feature incorrectly enabled when shopping chip was enabled", + isGoogleLensShoppingFeatureEnabledOnUiThread(false)); + } + + /** * Test {@link LensUtils#enableImageChip()} method when disable incognito param is * unset and user is incognito. */
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetRenderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetRenderTest.java index c1b5152..bef08c2 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetRenderTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetRenderTest.java
@@ -352,7 +352,7 @@ mIncognitoInterstitialDelegateMock); }); CriteriaHelper.pollUiThread(mCoordinator.getBottomSheetViewForTesting().findViewById( - R.id.account_picker_continue_as_button)::isShown); + R.id.account_picker_selected_account)::isShown); } private BottomSheetController getBottomSheetController() {
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetTest.java index e59151a..c267f85 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/signin/AccountPickerBottomSheetTest.java
@@ -29,8 +29,10 @@ import android.support.test.InstrumentationRegistry; import android.view.View; +import androidx.test.espresso.ViewInteraction; import androidx.test.filters.MediumTest; +import org.hamcrest.Matcher; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -155,12 +157,8 @@ @MediumTest public void testExpandedSheet() { buildAndShowExpandedBottomSheet(); - // Since PROFILE_DATA1 exists also in the hidden view of the selected account, - // withEffectiveVisibility(VISIBLE) is needed here - onView(allOf(withText(PROFILE_DATA1.getAccountName()), withEffectiveVisibility(VISIBLE))) - .check(matches(isDisplayed())); - onView(allOf(withText(PROFILE_DATA1.getFullName()), withEffectiveVisibility(VISIBLE))) - .check(matches(isDisplayed())); + onVisibleView(withText(PROFILE_DATA1.getAccountName())).check(matches(isDisplayed())); + onVisibleView(withText(PROFILE_DATA1.getFullName())).check(matches(isDisplayed())); onView(withText(PROFILE_DATA2.getAccountName())).check(matches(isDisplayed())); onView(withText(R.string.signin_add_account_to_device)).check(matches(isDisplayed())); onView(withText(R.string.signin_incognito_button)).check(matches(isDisplayed())); @@ -175,12 +173,8 @@ public void testExpandedSheetWithIncognitoModeDisabled() { IncognitoUtils.setEnabledForTesting(false); buildAndShowExpandedBottomSheet(); - // Since PROFILE_DATA1 exists also in the hidden view of the selected account, - // withEffectiveVisibility(VISIBLE) is needed here - onView(allOf(withText(PROFILE_DATA1.getAccountName()), withEffectiveVisibility(VISIBLE))) - .check(matches(isDisplayed())); - onView(allOf(withText(PROFILE_DATA1.getFullName()), withEffectiveVisibility(VISIBLE))) - .check(matches(isDisplayed())); + onVisibleView(withText(PROFILE_DATA1.getAccountName())).check(matches(isDisplayed())); + onVisibleView(withText(PROFILE_DATA1.getFullName())).check(matches(isDisplayed())); onView(withText(PROFILE_DATA2.getAccountName())).check(matches(isDisplayed())); onView(withText(R.string.signin_add_account_to_device)).check(matches(isDisplayed())); @@ -198,7 +192,11 @@ // torn down in the end of the test in AccountManagerTestRule. AccountManagerFacadeProvider.setInstanceForTests( new FakeAccountManagerFacade(mFakeProfileDataSource)); - buildAndShowCollapsedBottomSheet(); + TestThreadUtils.runOnUiThreadBlocking(() -> { + mCoordinator = new AccountPickerBottomSheetCoordinator(sActivityTestRule.getActivity(), + getBottomSheetController(), mAccountPickerDelegateMock, + mIncognitoInterstitialDelegateMock); + }); checkZeroAccountBottomSheet(); } @@ -257,10 +255,8 @@ onView(withText(R.string.signin_account_picker_bottom_sheet_subtitle)) .check(matches(isDisplayed())); onView(withId(R.id.account_picker_horizontal_divider)).check(matches(isDisplayed())); - onView(allOf(withText(PROFILE_DATA1.getAccountName()), withEffectiveVisibility(VISIBLE))) - .check(matches(isDisplayed())); - onView(allOf(withText(PROFILE_DATA1.getFullName()), withEffectiveVisibility(VISIBLE))) - .check(matches(isDisplayed())); + onVisibleView(withText(PROFILE_DATA1.getAccountName())).check(matches(isDisplayed())); + onVisibleView(withText(PROFILE_DATA1.getFullName())).check(matches(isDisplayed())); onView(withText(PROFILE_DATA2.getAccountName())).check(matches(isDisplayed())); onView(withText(R.string.signin_add_account_to_device)).check(matches(isDisplayed())); @@ -293,7 +289,11 @@ public void testAccountReappearedOnCollapsedSheet() { mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA1.getAccountName()); mAccountManagerTestRule.removeAccountAndWaitForSeeding(PROFILE_DATA2.getAccountName()); - buildAndShowCollapsedBottomSheet(); + TestThreadUtils.runOnUiThreadBlocking(() -> { + mCoordinator = new AccountPickerBottomSheetCoordinator(sActivityTestRule.getActivity(), + getBottomSheetController(), mAccountPickerDelegateMock, + mIncognitoInterstitialDelegateMock); + }); checkZeroAccountBottomSheet(); mAccountManagerTestRule.addAccount(PROFILE_DATA1.getAccountName()); @@ -328,8 +328,8 @@ new ProfileDataSource.ProfileData( PROFILE_DATA1.getAccountName(), null, newFullName, newGivenName)); }); - onView(allOf(withText(newFullName), withEffectiveVisibility(VISIBLE))) - .check(matches(isDisplayed())); + onVisibleView(withText(PROFILE_DATA1.getAccountName())).check(matches(isDisplayed())); + onVisibleView(withText(newFullName)).check(matches(isDisplayed())); // Check that profile data update when the bottom sheet is expanded won't // toggle out any hidden part. onView(withId(R.id.account_picker_selected_account)).check(matches(not(isDisplayed()))); @@ -531,8 +531,7 @@ @MediumTest public void testSelectTheSameAccountOnExpandedSheet() { buildAndShowExpandedBottomSheet(); - onView(allOf(withText(PROFILE_DATA1.getAccountName()), withEffectiveVisibility(VISIBLE))) - .perform(click()); + onVisibleView(withText(PROFILE_DATA1.getAccountName())).perform(click()); checkCollapsedAccountList(PROFILE_DATA1); } @@ -624,15 +623,11 @@ } private void checkZeroAccountBottomSheet() { - onView(allOf(withText(PROFILE_DATA1.getAccountName()), withEffectiveVisibility(VISIBLE))) - .check(doesNotExist()); - onView(allOf(withText(PROFILE_DATA2.getAccountName()), withEffectiveVisibility(VISIBLE))) - .check(doesNotExist()); + onVisibleView(withText(PROFILE_DATA1.getAccountName())).check(doesNotExist()); + onVisibleView(withText(PROFILE_DATA2.getAccountName())).check(doesNotExist()); onView(withId(R.id.account_picker_account_list)).check(matches(not(isDisplayed()))); onView(withId(R.id.account_picker_selected_account)).check(matches(not(isDisplayed()))); - onView(allOf(withText(R.string.signin_add_account_to_device), - withEffectiveVisibility(VISIBLE))) - .perform(click()); + onVisibleView(withText(R.string.signin_add_account_to_device)).perform(click()); verify(mAccountPickerDelegateMock).addAccount(notNull()); } @@ -643,14 +638,11 @@ onView(withText(R.string.signin_account_picker_bottom_sheet_subtitle)) .check(matches(isDisplayed())); onView(withId(R.id.account_picker_horizontal_divider)).check(matches(isDisplayed())); - onView(allOf(withText(profileData.getAccountName()), withEffectiveVisibility(VISIBLE))) - .check(matches(isDisplayed())); + onVisibleView(withText(profileData.getAccountName())).check(matches(isDisplayed())); if (profileData.getFullName() != null) { - onView(allOf(withText(profileData.getFullName()), withEffectiveVisibility(VISIBLE))) - .check(matches(isDisplayed())); + onVisibleView(withText(profileData.getFullName())).check(matches(isDisplayed())); } - onView(allOf(withId(R.id.account_selection_mark), withEffectiveVisibility(VISIBLE))) - .check(matches(isDisplayed())); + onVisibleView(withId(R.id.account_selection_mark)).check(matches(isDisplayed())); String continueAsText = sActivityTestRule.getActivity().getString(R.string.signin_promo_continue_as, profileData.getGivenName() != null ? profileData.getGivenName() @@ -667,7 +659,7 @@ mIncognitoInterstitialDelegateMock); }); CriteriaHelper.pollUiThread(mCoordinator.getBottomSheetViewForTesting().findViewById( - R.id.account_picker_continue_as_button)::isShown); + R.id.account_picker_selected_account)::isShown); } private void buildAndShowExpandedBottomSheet() { @@ -680,4 +672,11 @@ .getRootUiCoordinatorForTesting() .getBottomSheetController(); } + + private static ViewInteraction onVisibleView(Matcher<View> matcher) { + // Some view elements like PROFILE_DATA1 exist in both visible view and hidden view, + // withEffectiveVisibility(VISIBLE) is needed here to get only the visible view of the + // matcher. + return onView(allOf(matcher, withEffectiveVisibility(VISIBLE))); + } }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarDataProviderTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarDataProviderTest.java new file mode 100644 index 0000000..8969e62 --- /dev/null +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/toolbar/ToolbarDataProviderTest.java
@@ -0,0 +1,116 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +package org.chromium.chrome.browser.toolbar; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import static org.chromium.base.test.util.Batch.PER_CLASS; + +import android.content.Intent; +import android.support.test.InstrumentationRegistry; + +import androidx.test.filters.MediumTest; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TestRule; +import org.junit.runner.RunWith; + +import org.chromium.base.test.util.Batch; +import org.chromium.base.test.util.CommandLineFlags; +import org.chromium.base.test.util.Restriction; +import org.chromium.chrome.R; +import org.chromium.chrome.browser.customtabs.CustomTabActivityTestRule; +import org.chromium.chrome.browser.customtabs.CustomTabsTestUtils; +import org.chromium.chrome.browser.customtabs.features.toolbar.CustomTabToolbar; +import org.chromium.chrome.browser.flags.ChromeFeatureList; +import org.chromium.chrome.browser.flags.ChromeSwitches; +import org.chromium.chrome.browser.incognito.IncognitoDataTestUtils; +import org.chromium.chrome.browser.profiles.Profile; +import org.chromium.chrome.browser.toolbar.top.ToolbarPhone; +import org.chromium.chrome.test.ChromeJUnit4ClassRunner; +import org.chromium.chrome.test.ChromeTabbedActivityTestRule; +import org.chromium.chrome.test.batch.BlankCTATabInitialStateRule; +import org.chromium.chrome.test.util.browser.Features; +import org.chromium.content_public.browser.test.util.TestThreadUtils; +import org.chromium.ui.test.util.UiRestriction; + +import java.util.concurrent.TimeoutException; + +/** + * Instrumentation tests for {@link ToolbarDataProvider}. + */ +@RunWith(ChromeJUnit4ClassRunner.class) +@CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) +@Restriction(UiRestriction.RESTRICTION_TYPE_PHONE) +@Features.EnableFeatures({ChromeFeatureList.CCT_INCOGNITO}) +@Batch(PER_CLASS) +public class ToolbarDataProviderTest { + @Rule + public TestRule mProcessor = new Features.InstrumentationProcessor(); + + @Rule + public ChromeTabbedActivityTestRule mActivityTestRule = new ChromeTabbedActivityTestRule(); + + @Rule + public CustomTabActivityTestRule mCustomTabActivityTestRule = new CustomTabActivityTestRule(); + + @Rule + public BlankCTATabInitialStateRule mBlankCTATabInitialStateRule = + new BlankCTATabInitialStateRule(mActivityTestRule, false); + + @Test + @MediumTest + public void testPrimaryOTRProfileUsedForIncognitoTabbedActivity() { + mActivityTestRule.loadUrlInNewTab("about:blank", /*incognito=*/true); + ToolbarPhone toolbar = mActivityTestRule.getActivity().findViewById(R.id.toolbar); + TestThreadUtils.runOnUiThreadBlocking(() -> { + Profile profile = toolbar.getToolbarDataProvider().getProfile(); + assertTrue(profile.isPrimaryOTRProfile()); + }); + } + + @Test + @MediumTest + public void testRegularProfileUsedForRegularTabbedActivity() { + mActivityTestRule.loadUrlInNewTab("about:blank", /*incognito=*/false); + ToolbarPhone toolbar = mActivityTestRule.getActivity().findViewById(R.id.toolbar); + TestThreadUtils.runOnUiThreadBlocking(() -> { + Profile profile = toolbar.getToolbarDataProvider().getProfile(); + assertFalse(profile.isOffTheRecord()); + }); + } + + @Test + @MediumTest + public void testNonPrimaryOTRProfileUsedForIncognitoCCT() throws TimeoutException { + Intent intent = CustomTabsTestUtils.createMinimalIncognitoCustomTabIntent( + InstrumentationRegistry.getContext(), "about:blank"); + IncognitoDataTestUtils.fireAndWaitForCctWarmup(); + mCustomTabActivityTestRule.startCustomTabActivityWithIntent(intent); + CustomTabToolbar customTabToolbar = + mCustomTabActivityTestRule.getActivity().findViewById(R.id.toolbar); + TestThreadUtils.runOnUiThreadBlocking(() -> { + Profile profile = customTabToolbar.getToolbarDataProvider().getProfile(); + assertTrue(profile.isOffTheRecord()); + assertFalse(profile.isPrimaryOTRProfile()); + }); + } + + @Test + @MediumTest + public void testRegularProfileUsedForRegularCCT() { + Intent intent = CustomTabsTestUtils.createMinimalCustomTabIntent( + InstrumentationRegistry.getContext(), "about:blank"); + mCustomTabActivityTestRule.startCustomTabActivityWithIntent(intent); + CustomTabToolbar customTabToolbar = + mCustomTabActivityTestRule.getActivity().findViewById(R.id.toolbar); + TestThreadUtils.runOnUiThreadBlocking(() -> { + Profile profile = customTabToolbar.getToolbarDataProvider().getProfile(); + assertFalse(profile.isOffTheRecord()); + }); + } +}
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/download/home/FileDeletionQueueTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/download/home/FileDeletionQueueTest.java index 675752e..d7ab79f4 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/download/home/FileDeletionQueueTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/download/home/FileDeletionQueueTest.java
@@ -21,10 +21,10 @@ import org.robolectric.shadows.ShadowLooper; import org.chromium.base.Callback; -import org.chromium.base.CollectionUtil; import org.chromium.base.ThreadUtils; import org.chromium.base.test.BaseRobolectricTestRunner; +import java.util.Arrays; import java.util.concurrent.Semaphore; /** Unit tests for the FileDeletionQueue class. */ @@ -74,7 +74,7 @@ @Test public void testMultipleDeletionsAPI() { FileDeletionQueue queue = new FileDeletionQueue(mWrappedDeleter); - queue.delete(CollectionUtil.newArrayList("test1", "test2", "test3")); + queue.delete(Arrays.asList("test1", "test2", "test3")); mWrappedDeleter.waitFor(3); verify(mDeleter, times(1)).onResult("test1"); @@ -85,7 +85,7 @@ @Test public void testOneDeletionHappensAtATime() { FileDeletionQueue queue = new FileDeletionQueue(mWrappedDeleter); - queue.delete(CollectionUtil.newArrayList("test1", "test2", "test3")); + queue.delete(Arrays.asList("test1", "test2", "test3")); mWrappedDeleter.waitFor(1); verify(mDeleter, times(1)).onResult("test1");
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/download/home/list/DateOrderedListMutatorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/download/home/list/DateOrderedListMutatorTest.java index b4965d0..4a0fc68 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/download/home/list/DateOrderedListMutatorTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/download/home/list/DateOrderedListMutatorTest.java
@@ -21,7 +21,6 @@ import org.mockito.junit.MockitoRule; import org.robolectric.annotation.Config; -import org.chromium.base.CollectionUtil; import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.util.JniMocker; import org.chromium.chrome.browser.download.home.DownloadManagerUiConfig; @@ -46,6 +45,7 @@ import org.chromium.components.url_formatter.UrlFormatterJni; import org.chromium.ui.modelutil.ListObservable.ListObserver; +import java.util.Arrays; import java.util.Calendar; import java.util.Collections; import java.util.Date; @@ -106,7 +106,7 @@ @Test public void testSingleItem() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 1, 1), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1)); + when(mSource.getItems()).thenReturn(Collections.singletonList(item1)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); Assert.assertEquals(2, mModel.size()); @@ -125,7 +125,7 @@ public void testTwoItemsSameDay() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 1, 2), OfflineItemFilter.VIDEO); OfflineItem item2 = buildItem("2", buildCalendar(2018, 1, 1, 1), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); Assert.assertEquals(3, mModel.size()); @@ -144,7 +144,7 @@ public void testTwoItemsSameDayDifferentSection() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 1, 2), OfflineItemFilter.VIDEO); OfflineItem item2 = buildItem("2", buildCalendar(2018, 1, 1, 1), OfflineItemFilter.AUDIO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); Assert.assertEquals(3, mModel.size()); @@ -163,7 +163,7 @@ public void testSingleItemInJustNowSection() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 1, 1), OfflineItemFilter.VIDEO); item1.state = OfflineItemState.IN_PROGRESS; - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1)); + when(mSource.getItems()).thenReturn(Collections.singletonList(item1)); DateOrderedListMutator list = createMutatorWithJustNowProvider(); Assert.assertEquals(2, mModel.size()); @@ -187,7 +187,7 @@ item1.state = OfflineItemState.IN_PROGRESS; item2.state = OfflineItemState.COMPLETE; item2.completionTimeMs = item2.creationTimeMs; - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2)); DateOrderedListMutator list = createMutatorWithJustNowProvider(buildJustNowProvider(calendar.getTime())); @@ -218,7 +218,7 @@ OfflineItem item3 = buildItem("3", buildCalendar(2018, 1, 1, 10), OfflineItemFilter.AUDIO); item1.completionTimeMs = item1.creationTimeMs; item2.completionTimeMs = item2.creationTimeMs; - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2, item3)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2, item3)); Calendar now = CalendarFactory.get(); now.set(2018, 1, 2, 0, 15); @@ -250,7 +250,7 @@ public void testItemDoesNotMoveOutOfJustNowSection() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 1, 1), OfflineItemFilter.VIDEO); item1.state = OfflineItemState.PAUSED; - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1)); + when(mSource.getItems()).thenReturn(Collections.singletonList(item1)); DateOrderedListMutator list = createMutatorWithJustNowProvider(); mModel.addObserver(mObserver); @@ -261,7 +261,7 @@ // Resume the download. OfflineItem update1 = buildItem("1", buildCalendar(2018, 1, 1, 1), OfflineItemFilter.VIDEO); update1.state = OfflineItemState.IN_PROGRESS; - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(update1)); + when(mSource.getItems()).thenReturn(Collections.singletonList(update1)); list.onItemUpdated(item1, update1); Assert.assertEquals(2, mModel.size()); @@ -272,7 +272,7 @@ OfflineItem update2 = buildItem("1", buildCalendar(2018, 1, 1, 1), OfflineItemFilter.VIDEO); update2.state = OfflineItemState.COMPLETE; update2.completionTimeMs = new Date().getTime(); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(update2)); + when(mSource.getItems()).thenReturn(Collections.singletonList(update2)); list.onItemUpdated(update1, update2); Assert.assertEquals(2, mModel.size()); @@ -283,7 +283,7 @@ OfflineItem update3 = buildItem("1", buildCalendar(2018, 1, 1, 1), OfflineItemFilter.VIDEO); update3.state = OfflineItemState.COMPLETE; update3.completionTimeMs = buildCalendar(2017, 1, 1, 1).getTimeInMillis(); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(update3)); + when(mSource.getItems()).thenReturn(Collections.singletonList(update3)); list.onItemUpdated(update2, update3); Assert.assertEquals(2, mModel.size()); @@ -304,7 +304,7 @@ OfflineItem item1 = buildItem("1", buildCalendar(2018, 2, 1, 1), OfflineItemFilter.VIDEO); OfflineItem item2 = buildItem("2", buildCalendar(2018, 1, 1, 1), OfflineItemFilter.AUDIO); item1.state = OfflineItemState.IN_PROGRESS; - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2)); DateOrderedListMutator list = createMutatorWithJustNowProvider(); Assert.assertEquals(4, mModel.size()); @@ -331,7 +331,7 @@ OfflineItem item2 = buildItem("1", buildCalendar(2018, 2, 1, 1), OfflineItemFilter.VIDEO); OfflineItem item3 = buildItem("2", buildCalendar(2018, 1, 1, 1), OfflineItemFilter.AUDIO); item2.state = OfflineItemState.IN_PROGRESS; - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2, item3)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2, item3)); DateOrderedListMutator list = createMutatorWithJustNowProvider(); Assert.assertEquals(6, mModel.size()); @@ -356,7 +356,7 @@ public void testTwoItemsDifferentDayMatchHeader() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 2, 0), OfflineItemFilter.VIDEO); OfflineItem item2 = buildItem("2", buildCalendar(2018, 1, 1, 0), OfflineItemFilter.AUDIO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); Assert.assertEquals(4, mModel.size()); @@ -377,7 +377,7 @@ public void testTwoItemsSameDayOutOfOrder() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 1, 4), OfflineItemFilter.VIDEO); OfflineItem item2 = buildItem("2", buildCalendar(2018, 1, 1, 5), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); Assert.assertEquals(3, mModel.size()); @@ -398,7 +398,7 @@ public void testTwoItemsDifferentDaySameSection() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 2, 4), OfflineItemFilter.VIDEO); OfflineItem item2 = buildItem("2", buildCalendar(2018, 1, 1, 5), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); Assert.assertEquals(4, mModel.size()); @@ -420,7 +420,7 @@ public void testTwoItemsDifferentDayDifferentSection() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 2, 4), OfflineItemFilter.VIDEO); OfflineItem item2 = buildItem("2", buildCalendar(2018, 1, 1, 5), OfflineItemFilter.PAGE); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); Assert.assertEquals(4, mModel.size()); @@ -442,7 +442,7 @@ public void testTwoItemsDifferentDayOutOfOrder() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 1, 4), OfflineItemFilter.VIDEO); OfflineItem item2 = buildItem("2", buildCalendar(2018, 1, 2, 3), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); Assert.assertEquals(4, mModel.size()); @@ -466,8 +466,8 @@ mModel.addObserver(mObserver); OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 1, 4), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1)); - list.onItemsAdded(CollectionUtil.newArrayList(item1)); + when(mSource.getItems()).thenReturn(Collections.singletonList(item1)); + list.onItemsAdded(Collections.singletonList(item1)); Assert.assertEquals(2, mModel.size()); assertOfflineItem(mModel.get(1), buildCalendar(2018, 1, 1, 4), item1); @@ -489,14 +489,14 @@ @Test public void testAddFirstItemToList() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 2, 1), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1)); + when(mSource.getItems()).thenReturn(Collections.singletonList(item1)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); mModel.addObserver(mObserver); // Add an item on the same day that will be placed first. OfflineItem item2 = buildItem("2", buildCalendar(2018, 1, 2, 2), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2)); - list.onItemsAdded(CollectionUtil.newArrayList(item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2)); + list.onItemsAdded(Collections.singletonList(item2)); Assert.assertEquals(3, mModel.size()); assertOfflineItem(mModel.get(1), buildCalendar(2018, 1, 2, 2), item2); @@ -504,8 +504,8 @@ // Add an item on an earlier day that will be placed first. OfflineItem item3 = buildItem("3", buildCalendar(2018, 1, 3, 2), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2, item3)); - list.onItemsAdded(CollectionUtil.newArrayList(item3)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2, item3)); + list.onItemsAdded(Collections.singletonList(item3)); Assert.assertEquals(5, mModel.size()); assertOfflineItem(mModel.get(1), buildCalendar(2018, 1, 3, 2), item3); @@ -531,14 +531,14 @@ @Test public void testAddLastItemToList() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 2, 4), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1)); + when(mSource.getItems()).thenReturn(Collections.singletonList(item1)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); mModel.addObserver(mObserver); // Add an item on the same day that will be placed last. OfflineItem item2 = buildItem("2", buildCalendar(2018, 1, 2, 3), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2)); - list.onItemsAdded(CollectionUtil.newArrayList(item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2)); + list.onItemsAdded(Collections.singletonList(item2)); Assert.assertEquals(3, mModel.size()); assertOfflineItem(mModel.get(1), buildCalendar(2018, 1, 2, 4), item1); @@ -546,8 +546,8 @@ // Add an item on a later day that will be placed last. OfflineItem item3 = buildItem("3", buildCalendar(2018, 1, 1, 4), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2, item3)); - list.onItemsAdded(CollectionUtil.newArrayList(item3)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2, item3)); + list.onItemsAdded(Collections.singletonList(item3)); Assert.assertEquals(5, mModel.size()); assertOfflineItem(mModel.get(1), buildCalendar(2018, 1, 2, 4), item1); @@ -566,12 +566,12 @@ @Test public void testRemoveOnlyItemInList() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 2, 2), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1)); + when(mSource.getItems()).thenReturn(Collections.singletonList(item1)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); mModel.addObserver(mObserver); when(mSource.getItems()).thenReturn(Collections.emptySet()); - list.onItemsRemoved(CollectionUtil.newArrayList(item1)); + list.onItemsRemoved(Collections.singletonList(item1)); Assert.assertEquals(0, mModel.size()); } @@ -590,12 +590,12 @@ public void testRemoveFirstItemInListSameDay() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 2, 3), OfflineItemFilter.VIDEO); OfflineItem item2 = buildItem("2", buildCalendar(2018, 1, 2, 2), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); mModel.addObserver(mObserver); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item2)); - list.onItemsRemoved(CollectionUtil.newArrayList(item1)); + when(mSource.getItems()).thenReturn(Collections.singletonList(item2)); + list.onItemsRemoved(Collections.singletonList(item1)); Assert.assertEquals(2, mModel.size()); assertSectionHeader(mModel.get(0), buildCalendar(2018, 1, 2, 0), false); @@ -616,12 +616,12 @@ public void testRemoveLastItemInListSameDay() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 2, 3), OfflineItemFilter.VIDEO); OfflineItem item2 = buildItem("2", buildCalendar(2018, 1, 2, 2), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); mModel.addObserver(mObserver); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1)); - list.onItemsRemoved(CollectionUtil.newArrayList(item2)); + when(mSource.getItems()).thenReturn(Collections.singletonList(item1)); + list.onItemsRemoved(Collections.singletonList(item2)); Assert.assertEquals(2, mModel.size()); assertSectionHeader(mModel.get(0), buildCalendar(2018, 1, 2, 0), false); @@ -643,12 +643,12 @@ public void testRemoveLastItemInListWithMultipleDays() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 3, 3), OfflineItemFilter.VIDEO); OfflineItem item2 = buildItem("2", buildCalendar(2018, 1, 2, 2), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); mModel.addObserver(mObserver); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1)); - list.onItemsRemoved(CollectionUtil.newArrayList(item2)); + when(mSource.getItems()).thenReturn(Collections.singletonList(item1)); + list.onItemsRemoved(Collections.singletonList(item2)); Assert.assertEquals(2, mModel.size()); assertSectionHeader(mModel.get(0), buildCalendar(2018, 1, 3, 0), false); @@ -679,9 +679,8 @@ OfflineItem item3 = buildItem("3", buildCalendar(2018, 1, 2, 10), OfflineItemFilter.VIDEO); OfflineItem item4 = buildItem("4", buildCalendar(2018, 1, 2, 12), OfflineItemFilter.VIDEO); - when(mSource.getItems()) - .thenReturn(CollectionUtil.newArrayList(item1, item2, item3, item4)); - list.onItemsAdded(CollectionUtil.newArrayList(item1, item2, item3, item4)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2, item3, item4)); + list.onItemsAdded(Arrays.asList(item1, item2, item3, item4)); Assert.assertEquals(6, mModel.size()); assertSectionHeader(mModel.get(0), buildCalendar(2018, 1, 2, 0), false); @@ -715,23 +714,23 @@ mModel.addObserver(mObserver); OfflineItem item3 = buildItem("3", buildCalendar(2018, 1, 1, 4), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item3)); - list.onItemsAdded(CollectionUtil.newArrayList(item3)); + when(mSource.getItems()).thenReturn(Collections.singletonList(item3)); + list.onItemsAdded(Collections.singletonList(item3)); Assert.assertEquals(2, mModel.size()); assertOfflineItem(mModel.get(1), buildCalendar(2018, 1, 1, 4), item3); OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 1, 4), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item3, item1)); - list.onItemsAdded(CollectionUtil.newArrayList(item1)); + when(mSource.getItems()).thenReturn(Arrays.asList(item3, item1)); + list.onItemsAdded(Collections.singletonList(item1)); Assert.assertEquals(3, mModel.size()); assertOfflineItem(mModel.get(1), buildCalendar(2018, 1, 1, 4), item1); assertOfflineItem(mModel.get(2), buildCalendar(2018, 1, 1, 4), item3); OfflineItem item2 = buildItem("2", buildCalendar(2018, 1, 1, 4), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item3, item1, item2)); - list.onItemsAdded(CollectionUtil.newArrayList(item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item3, item1, item2)); + list.onItemsAdded(Collections.singletonList(item2)); Assert.assertEquals(4, mModel.size()); assertOfflineItem(mModel.get(1), buildCalendar(2018, 1, 1, 4), item1); @@ -760,8 +759,8 @@ OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 1, 6), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1)); - list.onItemsAdded(CollectionUtil.newArrayList(item1)); + when(mSource.getItems()).thenReturn(Collections.singletonList(item1)); + list.onItemsAdded(Collections.singletonList(item1)); Assert.assertEquals(2, mModel.size()); assertSectionHeader(mModel.get(0), buildCalendar(2018, 1, 1, 0), false); @@ -770,12 +769,12 @@ // Complete the download. OfflineItem update1 = buildItem("1", buildCalendar(2018, 1, 1, 6), OfflineItemFilter.VIDEO); update1.state = OfflineItemState.COMPLETE; - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(update1)); + when(mSource.getItems()).thenReturn(Collections.singletonList(update1)); list.onItemUpdated(item1, update1); // Add a new download. OfflineItem item2 = buildItem("2", buildCalendar(2018, 1, 1, 4), OfflineItemFilter.VIDEO); - list.onItemsAdded(CollectionUtil.newArrayList(item2)); + list.onItemsAdded(Collections.singletonList(item2)); Assert.assertEquals(3, mModel.size()); assertSectionHeader(mModel.get(0), buildCalendar(2018, 1, 1, 0), false); @@ -805,13 +804,12 @@ OfflineItem item3 = buildItem("3", buildCalendar(2018, 1, 2, 10), OfflineItemFilter.VIDEO); OfflineItem item4 = buildItem("4", buildCalendar(2018, 1, 2, 12), OfflineItemFilter.VIDEO); - when(mSource.getItems()) - .thenReturn(CollectionUtil.newArrayList(item1, item2, item3, item4)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2, item3, item4)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); mModel.addObserver(mObserver); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1)); - list.onItemsRemoved(CollectionUtil.newArrayList(item2, item3, item4)); + when(mSource.getItems()).thenReturn(Collections.singletonList(item1)); + list.onItemsRemoved(Arrays.asList(item2, item3, item4)); Assert.assertEquals(2, mModel.size()); assertSectionHeader(mModel.get(0), buildCalendar(2018, 1, 1, 0), false); @@ -833,14 +831,14 @@ public void testItemUpdatedSameTimestamp() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 1, 4), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1)); + when(mSource.getItems()).thenReturn(Collections.singletonList(item1)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); mModel.addObserver(mObserver); // Update an item with the same timestamp. OfflineItem newItem1 = buildItem("1", buildCalendar(2018, 1, 1, 4), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(newItem1)); + when(mSource.getItems()).thenReturn(Collections.singletonList(newItem1)); list.onItemUpdated(item1, newItem1); Assert.assertEquals(2, mModel.size()); @@ -865,14 +863,14 @@ OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 1, 5), OfflineItemFilter.VIDEO); OfflineItem item2 = buildItem("2", buildCalendar(2018, 1, 1, 4), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); mModel.addObserver(mObserver); // Update an item with the same timestamp. OfflineItem newItem1 = buildItem("1", buildCalendar(2018, 1, 1, 3), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(newItem1, item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(newItem1, item2)); list.onItemUpdated(item1, newItem1); Assert.assertEquals(3, mModel.size()); @@ -898,14 +896,14 @@ OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 1, 5), OfflineItemFilter.VIDEO); OfflineItem item2 = buildItem("2", buildCalendar(2018, 1, 1, 4), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); mModel.addObserver(mObserver); // Update an item with the same timestamp. OfflineItem newItem1 = buildItem("1", buildCalendar(2018, 1, 1, 3), OfflineItemFilter.IMAGE); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(newItem1, item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(newItem1, item2)); list.onItemUpdated(item1, newItem1); Assert.assertEquals(3, mModel.size()); @@ -927,14 +925,14 @@ public void testItemUpdatedDifferentDay() { OfflineItem item1 = buildItem("1", buildCalendar(2018, 1, 1, 4), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1)); + when(mSource.getItems()).thenReturn(Collections.singletonList(item1)); DateOrderedListMutator list = createMutatorWithoutJustNowProvider(); mModel.addObserver(mObserver); // Update an item with the same timestamp. OfflineItem newItem1 = buildItem("1", buildCalendar(2018, 1, 2, 6), OfflineItemFilter.VIDEO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(newItem1)); + when(mSource.getItems()).thenReturn(Collections.singletonList(newItem1)); list.onItemUpdated(item1, newItem1); Assert.assertEquals(2, mModel.size()); @@ -964,8 +962,7 @@ OfflineItem item3 = buildItem("3", buildCalendar(2018, 1, 2, 4), OfflineItemFilter.IMAGE); OfflineItem item4 = buildItem("4", buildCalendar(2018, 1, 2, 4), OfflineItemFilter.IMAGE); OfflineItem item5 = buildItem("5", buildCalendar(2018, 1, 2, 4), OfflineItemFilter.IMAGE); - when(mSource.getItems()) - .thenReturn(CollectionUtil.newArrayList(item1, item2, item3, item4, item5)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2, item3, item4, item5)); TypeOfflineItemFilter typeOfflineItemFilter = new TypeOfflineItemFilter(mSource); DateOrderedListMutator mutator = createMutatorWithSource(typeOfflineItemFilter); Assert.assertEquals(6, mModel.size()); @@ -994,7 +991,7 @@ public void testPrefetchTabBasic() { OfflineItem item1 = buildPrefetchItem("1", buildCalendar(2018, 1, 2, 4)); OfflineItem item2 = buildPrefetchItem("2", buildCalendar(2018, 1, 1, 5)); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2)); DateOrderedListMutator mutator = createMutatorWithoutJustNowProvider(); mMutationController.onFilterTypeSelected(Filters.FilterType.PREFETCHED); mutator.reload(); @@ -1013,7 +1010,7 @@ public void testContentIndexingStandaloneCards() { OfflineItem item1 = buildContentIndexedItem("1", buildCalendar(2018, 1, 1, 5), OfflineItemFilter.PAGE); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1)); + when(mSource.getItems()).thenReturn(Collections.singletonList(item1)); DateOrderedListMutator mutator = createMutatorWithoutJustNowProvider(); mMutationController.onFilterTypeSelected(Filters.FilterType.PREFETCHED); mutator.reload(); @@ -1039,7 +1036,7 @@ buildContentIndexedItem("2", buildCalendar(2018, 1, 3, 4), OfflineItemFilter.AUDIO); OfflineItem item3 = buildContentIndexedItem("3", buildCalendar(2018, 1, 3, 5), OfflineItemFilter.AUDIO); - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item1, item2, item3)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2, item3)); DateOrderedListMutator mutator = createMutatorWithoutJustNowProvider(); mMutationController.onFilterTypeSelected(Filters.FilterType.PREFETCHED); mutator.reload(); @@ -1077,8 +1074,7 @@ buildContentIndexedItem("3", buildCalendar(2018, 1, 4, 3), OfflineItemFilter.VIDEO); OfflineItem item4 = buildContentIndexedItem("4", buildCalendar(2018, 1, 4, 4), OfflineItemFilter.VIDEO); - when(mSource.getItems()) - .thenReturn(CollectionUtil.newArrayList(item1, item2, item3, item4)); + when(mSource.getItems()).thenReturn(Arrays.asList(item1, item2, item3, item4)); DateOrderedListMutator mutator = createMutatorWithoutJustNowProvider(); mMutationController.onFilterTypeSelected(Filters.FilterType.PREFETCHED); mutator.reload(); @@ -1097,8 +1093,8 @@ // Remove one item. Now there should be only 3 items. The footer should be gone and get // replaced by bottom curve. - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item2, item3, item4)); - mutator.onItemsRemoved(CollectionUtil.newArrayList(item1)); + when(mSource.getItems()).thenReturn(Arrays.asList(item2, item3, item4)); + mutator.onItemsRemoved(Collections.singletonList(item1)); Assert.assertEquals(8, mModel.size()); assertOfflineItem(mModel.get(6), buildCalendar(2018, 1, 4, 2), item2); @@ -1106,8 +1102,8 @@ // Remove one more item. Now there should be only 2 items. Now they shouldn't be grouped at // all. - when(mSource.getItems()).thenReturn(CollectionUtil.newArrayList(item3, item4)); - mutator.onItemsRemoved(CollectionUtil.newArrayList(item2)); + when(mSource.getItems()).thenReturn(Arrays.asList(item3, item4)); + mutator.onItemsRemoved(Collections.singletonList(item2)); Assert.assertEquals(2, mModel.size()); }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/download/home/list/ShareUtilsTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/download/home/list/ShareUtilsTest.java index 47ddca85..55299f4b 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/download/home/list/ShareUtilsTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/download/home/list/ShareUtilsTest.java
@@ -14,151 +14,153 @@ import org.junit.runner.RunWith; import org.robolectric.annotation.Config; -import org.chromium.base.CollectionUtil; import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.components.offline_items_collection.OfflineItem; import org.chromium.components.offline_items_collection.OfflineItemShareInfo; +import java.util.Arrays; +import java.util.Collections; + /** Unit tests for the ShareUtils class. */ @RunWith(BaseRobolectricTestRunner.class) @Config(manifest = Config.NONE) public class ShareUtilsTest { @Test public void testNoContent() { - Assert.assertNull(ShareUtils.createIntent(CollectionUtil.newArrayList())); - Assert.assertNull(ShareUtils.createIntent(CollectionUtil.newArrayList( + Assert.assertNull(ShareUtils.createIntent(Collections.emptyList())); + Assert.assertNull(ShareUtils.createIntent(Arrays.asList( createItem(null, "text/plain", "", null), createItem("", "text/plain", "", "")))); } @Test public void testAction() { - Intent intent = ShareUtils.createIntent(CollectionUtil.newArrayList( + Intent intent = ShareUtils.createIntent(Collections.singletonList( createItem("http://www.google.com", "text/plain", "", null))); Assert.assertEquals(Intent.ACTION_SEND, intent.getAction()); - intent = ShareUtils.createIntent(CollectionUtil.newArrayList( - createItem("http://www.google.com", "text/plain", "", null), - createItem("http://www.chrome.com", "text/plain", "", null))); + intent = ShareUtils.createIntent( + Arrays.asList(createItem("http://www.google.com", "text/plain", "", null), + createItem("http://www.chrome.com", "text/plain", "", null))); Assert.assertEquals(Intent.ACTION_SEND, intent.getAction()); - intent = ShareUtils.createIntent(CollectionUtil.newArrayList( - createItem("http://www.google.com", "text/plain", "", null), - createItem("", "text/plain", "", "http://www.chrome.com"))); + intent = ShareUtils.createIntent( + Arrays.asList(createItem("http://www.google.com", "text/plain", "", null), + createItem("", "text/plain", "", "http://www.chrome.com"))); Assert.assertEquals(Intent.ACTION_SEND_MULTIPLE, intent.getAction()); - intent = ShareUtils.createIntent(CollectionUtil.newArrayList( - createItem("", "text/plain", "", "http://www.google.com"), - createItem("", "text/plain", "", "http://www.chrome.com"))); + intent = ShareUtils.createIntent( + Arrays.asList(createItem("", "text/plain", "", "http://www.google.com"), + createItem("", "text/plain", "", "http://www.chrome.com"))); Assert.assertEquals(Intent.ACTION_SEND_MULTIPLE, intent.getAction()); } @Test public void testFlags() { - Intent intent = ShareUtils.createIntent(CollectionUtil.newArrayList( + Intent intent = ShareUtils.createIntent(Collections.singletonList( createItem("http://www.google.com", "text/plain", "", null))); Assert.assertNotEquals(0, intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK); } @Test public void testExtraText() { - Intent intent = ShareUtils.createIntent(CollectionUtil.newArrayList( + Intent intent = ShareUtils.createIntent(Collections.singletonList( createItem("http://www.google.com", "text/plain", "", null))); Assert.assertEquals("http://www.google.com", intent.getStringExtra(Intent.EXTRA_TEXT)); - intent = ShareUtils.createIntent(CollectionUtil.newArrayList( + intent = ShareUtils.createIntent(Arrays.asList( createItem("http://www.google.com", "text/plain", "", null), createItem("http://www.chrome.com", "text/plain", "", "http://www.chrome.com"))); Assert.assertEquals("http://www.google.com", intent.getStringExtra(Intent.EXTRA_TEXT)); - intent = ShareUtils.createIntent(CollectionUtil.newArrayList( - createItem("http://www.google.com", "text/plain", "", null), - createItem("http://www.chrome.com", "text/plain", "", null))); + intent = ShareUtils.createIntent( + Arrays.asList(createItem("http://www.google.com", "text/plain", "", null), + createItem("http://www.chrome.com", "text/plain", "", null))); Assert.assertEquals("http://www.google.com\nhttp://www.chrome.com", intent.getStringExtra(Intent.EXTRA_TEXT)); - intent = ShareUtils.createIntent(CollectionUtil.newArrayList( + intent = ShareUtils.createIntent(Collections.singletonList( createItem("", "text/plain", "", "http://www.google.com"))); Assert.assertFalse(intent.hasExtra(Intent.EXTRA_TEXT)); } @Test public void testExtraSubject() { - Intent intent = ShareUtils.createIntent(CollectionUtil.newArrayList( + Intent intent = ShareUtils.createIntent(Collections.singletonList( createItem("http://www.google.com", "text/plain", "title", null))); Assert.assertEquals("title", intent.getStringExtra(Intent.EXTRA_SUBJECT)); - intent = ShareUtils.createIntent(CollectionUtil.newArrayList( - createItem("http://www.google.com", "text/plain", "title1", null), - createItem( - "http://www.chrome.com", "text/plain", "title2", "http://www.chrome.com"))); + intent = ShareUtils.createIntent( + Arrays.asList(createItem("http://www.google.com", "text/plain", "title1", null), + createItem("http://www.chrome.com", "text/plain", "title2", + "http://www.chrome.com"))); Assert.assertFalse(intent.hasExtra(Intent.EXTRA_SUBJECT)); } @Test public void testExtraStream() { - Intent intent = ShareUtils.createIntent(CollectionUtil.newArrayList( + Intent intent = ShareUtils.createIntent(Collections.singletonList( createItem("http://www.google.com", "text/plain", "", null))); Assert.assertFalse(intent.hasExtra(Intent.EXTRA_STREAM)); Assert.assertNull(intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM)); - intent = ShareUtils.createIntent(CollectionUtil.newArrayList( + intent = ShareUtils.createIntent(Collections.singletonList( createItem("", "text/plain", "", "http://www.google.com"))); Assert.assertEquals( Uri.parse("http://www.google.com"), intent.getParcelableExtra(Intent.EXTRA_STREAM)); - intent = ShareUtils.createIntent(CollectionUtil.newArrayList( + intent = ShareUtils.createIntent(Collections.singletonList( createItem("http://www.google.com", "text/plain", "", "http://www.google.com"))); Assert.assertEquals( Uri.parse("http://www.google.com"), intent.getParcelableExtra(Intent.EXTRA_STREAM)); - intent = ShareUtils.createIntent(CollectionUtil.newArrayList( - createItem("", "text/plain", "", "http://www.google.com"), - createItem("http://www.chrome.com", "text/plain", "", ""))); + intent = ShareUtils.createIntent( + Arrays.asList(createItem("", "text/plain", "", "http://www.google.com"), + createItem("http://www.chrome.com", "text/plain", "", ""))); Assert.assertEquals( Uri.parse("http://www.google.com"), intent.getParcelableExtra(Intent.EXTRA_STREAM)); - intent = ShareUtils.createIntent(CollectionUtil.newArrayList( + intent = ShareUtils.createIntent(Arrays.asList( createItem("", "text/plain", "", "http://www.google.com"), createItem("http://www.chrome.com", "text/plain", "", "http://www.chrome.com"))); - Assert.assertEquals(CollectionUtil.newArrayList(Uri.parse("http://www.google.com"), + Assert.assertEquals(Arrays.asList(Uri.parse("http://www.google.com"), Uri.parse("http://www.chrome.com")), intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM)); - intent = ShareUtils.createIntent(CollectionUtil.newArrayList( - createItem("", "text/plain", "", "http://www.google.com"), - createItem("", "text/plain", "", "http://www.chrome.com"))); - Assert.assertEquals(CollectionUtil.newArrayList(Uri.parse("http://www.google.com"), + intent = ShareUtils.createIntent( + Arrays.asList(createItem("", "text/plain", "", "http://www.google.com"), + createItem("", "text/plain", "", "http://www.chrome.com"))); + Assert.assertEquals(Arrays.asList(Uri.parse("http://www.google.com"), Uri.parse("http://www.chrome.com")), intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM)); - intent = ShareUtils.createIntent(CollectionUtil.newArrayList( + intent = ShareUtils.createIntent(Collections.singletonList( createItem("http://www.google.com", "text/plain", "", null))); Assert.assertFalse(intent.hasExtra(Intent.EXTRA_STREAM)); Assert.assertNull(intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM)); - intent = ShareUtils.createIntent(CollectionUtil.newArrayList( - createItem("http://www.google.com", "text/plain", "", null), - createItem("http://www.chrome.com", "text/plain", "", null))); + intent = ShareUtils.createIntent( + Arrays.asList(createItem("http://www.google.com", "text/plain", "", null), + createItem("http://www.chrome.com", "text/plain", "", null))); Assert.assertFalse(intent.hasExtra(Intent.EXTRA_STREAM)); Assert.assertNull(intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM)); } @Test public void testType() { - Intent intent = ShareUtils.createIntent(CollectionUtil.newArrayList( + Intent intent = ShareUtils.createIntent(Collections.singletonList( createItem("http://www.google.com", "text/plain", "", null))); Assert.assertEquals(Intent.normalizeMimeType("text/plain"), intent.getType()); - intent = ShareUtils.createIntent(CollectionUtil.newArrayList( - createItem("http://www.google.com", "text/plain", "", null), - createItem("http://www.google.com", "text/plain", "", null), - createItem("http://www.google.com", "text/html", "", null), - createItem("http://www.google.com", "text/html", "", null))); + intent = ShareUtils.createIntent( + Arrays.asList(createItem("http://www.google.com", "text/plain", "", null), + createItem("http://www.google.com", "text/plain", "", null), + createItem("http://www.google.com", "text/html", "", null), + createItem("http://www.google.com", "text/html", "", null))); Assert.assertEquals(Intent.normalizeMimeType("text/*"), intent.getType()); - intent = ShareUtils.createIntent(CollectionUtil.newArrayList( - createItem("http://www.google.com", "text/plain", "", null), - createItem("http://www.google.com", "application/octet-stream", "", null))); + intent = ShareUtils.createIntent( + Arrays.asList(createItem("http://www.google.com", "text/plain", "", null), + createItem("http://www.google.com", "application/octet-stream", "", null))); Assert.assertEquals(Intent.normalizeMimeType("*/*"), intent.getType()); } @@ -174,4 +176,4 @@ return Pair.create(item, info); } -} \ No newline at end of file +}
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorTest.java index 0101ed3..e5de827 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/feedback/ChromeFeedbackCollectorTest.java
@@ -44,6 +44,7 @@ import org.chromium.chrome.browser.profiles.Profile; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -94,7 +95,7 @@ Pair<String, String> logs1 = Pair.create(KEY_4, VALUE_4); Pair<String, String> logs2 = Pair.create(KEY_5, VALUE_5); - return CollectionUtil.newArrayList(new MockFeedbackSource(map1, null), + return Arrays.asList(new MockFeedbackSource(map1, null), new MockFeedbackSource(map2, logs1), new MockFeedbackSource(null, logs2), new MockFeedbackSource(null, null)); } @@ -121,7 +122,7 @@ Pair<String, String> logs1 = Pair.create(KEY_9, VALUE_9); Pair<String, String> logs2 = Pair.create(KEY_10, VALUE_10); - return CollectionUtil.newArrayList(new MockAsyncFeedbackSource(map1, null), + return Arrays.asList(new MockAsyncFeedbackSource(map1, null), new MockAsyncFeedbackSource(map2, logs1), new MockAsyncFeedbackSource(null, logs2), new MockAsyncFeedbackSource(null, null)); } @@ -340,8 +341,8 @@ @Override protected List<FeedbackSource> buildSynchronousFeedbackSources( ChromeFeedbackCollector.InitParams initParams) { - List<FeedbackSource> list = - ChromeFeedbackCollectorTest.buildSynchronousFeedbackSources(); + ArrayList<FeedbackSource> list = new ArrayList<>( + ChromeFeedbackCollectorTest.buildSynchronousFeedbackSources()); list.add(new FeedbackContextFeedbackSource(FEEDBACK_CONTEXT)); return list; }
diff --git a/chrome/android/junit/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapterTest.java b/chrome/android/junit/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapterTest.java index c7b7f9f..3d447c3e7 100644 --- a/chrome/android/junit/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapterTest.java +++ b/chrome/android/junit/src/org/chromium/chrome/browser/search_engines/settings/SearchEngineAdapterTest.java
@@ -13,11 +13,11 @@ import org.junit.runner.RunWith; import org.robolectric.annotation.Config; -import org.chromium.base.CollectionUtil; import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.components.search_engines.TemplateUrl; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; /** Unit tests for {@link SearchEngineAdapter}. */ @@ -47,8 +47,8 @@ MockTemplateUrl custom4 = new MockTemplateUrl(104, "custom_keyword4", currentTime - 3); MockTemplateUrl custom5 = new MockTemplateUrl(105, "custom_keyword5", currentTime - 4); - List<TemplateUrl> templateUrls = CollectionUtil.newArrayList( - dse, prepopulated1, prepopulated2, prepopulated3, custom1, custom2, custom3); + ArrayList<TemplateUrl> templateUrls = new ArrayList<>(Arrays.asList( + dse, prepopulated1, prepopulated2, prepopulated3, custom1, custom2, custom3)); List<TemplateUrl> output = new ArrayList<>(templateUrls); SearchEngineAdapter.sortAndFilterUnnecessaryTemplateUrl(output, dse); @@ -81,8 +81,8 @@ // Specify an older custom search engine as default, and ensure it is included as well as // the 3 most recent custom search engines. - output = CollectionUtil.newArrayList( - prepopulated1, prepopulated2, custom1, custom2, custom3, custom4, custom5); + output = new ArrayList<>(Arrays.asList( + prepopulated1, prepopulated2, custom1, custom2, custom3, custom4, custom5)); SearchEngineAdapter.sortAndFilterUnnecessaryTemplateUrl(output, custom2); assertThat( output, contains(prepopulated1, prepopulated2, custom2, custom3, custom4, custom5)); @@ -103,8 +103,7 @@ prepopulated3.isPrepopulated = true; prepopulated3.prepopulatedId = 4; - List<TemplateUrl> templateUrls = - CollectionUtil.newArrayList(prepopulated1, prepopulated2, prepopulated3); + List<TemplateUrl> templateUrls = Arrays.asList(prepopulated1, prepopulated2, prepopulated3); List<TemplateUrl> output = new ArrayList<>(templateUrls); SearchEngineAdapter.sortAndFilterUnnecessaryTemplateUrl(output, prepopulated1);
diff --git a/chrome/android/modules/buildflags.gni b/chrome/android/modules/buildflags.gni index 94c6293..c60310e 100644 --- a/chrome/android/modules/buildflags.gni +++ b/chrome/android/modules/buildflags.gni
@@ -2,7 +2,6 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//build/config/android/channel.gni") import("//build/config/android/config.gni") import("//build/config/compiler/compiler.gni") import("//device/vr/buildflags/buildflags.gni") @@ -11,10 +10,7 @@ # Whether //chrome code and resources are in a DFM for Monochrome and # Trichrome bundles. This module will also include code and resources from all # other DFMs. - # TODO(crbug.com/1126301): The binary size tools need to be updated to include - # DFM code before this can be enabled on stable. - enable_chrome_module = - android_channel == "default" || android_channel == "canary" + enable_chrome_module = false } # If true, lld is used to partition feature code into separate libraries, which
diff --git a/chrome/app/chromeos_strings.grdp b/chrome/app/chromeos_strings.grdp index 6696b14..52de284c 100644 --- a/chrome/app/chromeos_strings.grdp +++ b/chrome/app/chromeos_strings.grdp
@@ -954,17 +954,6 @@ Please retry. If you see this error again please contact your support representative. </message> - <!-- Strings for parental handoff login screen --> - <message name="IDS_LOGIN_PARENTAL_HANDOFF_SCREEN_TITLE" desc="Title of screen which tells user that the parent can handoff the device to supervised user."> - Now it's <ph name="SUPERVISED_USER_NAME">$1<ex>Child 1</ex></ph>'s turn - </message> - <message name="IDS_LOGIN_PARENTAL_HANDOFF_SCREEN_SUBTITLE" desc="Subtitle of screen which tells user that the parent can handoff the device to supervised user."> - You can hand this Chromebook to <ph name="SUPERVISED_USER_NAME">$1<ex>Child 1</ex></ph>. Setup is almost done, then it's time to explore. - </message> - <message name="IDS_LOGIN_PARENTAL_HANDOFF_SCREEN_NEXT_BUTTON" desc="Next button of parental handoff screen"> - Next - </message> - <!-- Strings for family link notice screen --> <message name="IDS_LOGIN_FAMILY_LINK_NOTICE_SCREEN_TITLE" desc="Title of the screen which tells user they can add parental control later."> Add parental controls after setup
diff --git a/chrome/app/chromeos_strings_grdp/IDS_LOGIN_PARENTAL_HANDOFF_SCREEN_NEXT_BUTTON.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_LOGIN_PARENTAL_HANDOFF_SCREEN_NEXT_BUTTON.png.sha1 deleted file mode 100644 index 0425e08..0000000 --- a/chrome/app/chromeos_strings_grdp/IDS_LOGIN_PARENTAL_HANDOFF_SCREEN_NEXT_BUTTON.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -5110db314fcfbbc1194cd27d5336c88de1790aa2 \ No newline at end of file
diff --git a/chrome/app/chromeos_strings_grdp/IDS_LOGIN_PARENTAL_HANDOFF_SCREEN_SUBTITLE.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_LOGIN_PARENTAL_HANDOFF_SCREEN_SUBTITLE.png.sha1 deleted file mode 100644 index 79b9304b..0000000 --- a/chrome/app/chromeos_strings_grdp/IDS_LOGIN_PARENTAL_HANDOFF_SCREEN_SUBTITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -72c5848be1b964cd6e77471c295e4ad19888692e \ No newline at end of file
diff --git a/chrome/app/chromeos_strings_grdp/IDS_LOGIN_PARENTAL_HANDOFF_SCREEN_TITLE.png.sha1 b/chrome/app/chromeos_strings_grdp/IDS_LOGIN_PARENTAL_HANDOFF_SCREEN_TITLE.png.sha1 deleted file mode 100644 index f1578c3d..0000000 --- a/chrome/app/chromeos_strings_grdp/IDS_LOGIN_PARENTAL_HANDOFF_SCREEN_TITLE.png.sha1 +++ /dev/null
@@ -1 +0,0 @@ -f7c276d755adae2584036084356c2521de1602d9 \ 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 6225639..8281eb7f 100644 --- a/chrome/app/resources/chromium_strings_af.xtb +++ b/chrome/app/resources/chromium_strings_af.xtb
@@ -11,6 +11,7 @@ <translation id="1131805035311359397"><ph name="BEGIN_LINK" />Meld by Chromium aan<ph name="END_LINK" /> om te kyk of jou wagwoorde teen dataskendings en ander sekuriteitkwessies beveilig word.</translation> <translation id="1185134272377778587">Meer oor Chromium</translation> <translation id="1315551408014407711">Stel jou nuwe Chromium-profiel op</translation> +<translation id="1357932062193643861">Vra wanneer Chromium oopmaak</translation> <translation id="1396446129537741364">Chromium probeer tans om wagwoorde te wys.</translation> <translation id="1414495520565016063">Jy is by Chromium aangemeld!</translation> <translation id="151962892725702025">Chromium-bedryfstelsel kon nie jou data sinkroniseer nie, omdat Sinkronisering nie vir jou domein beskikbaar is nie.</translation>
diff --git a/chrome/app/resources/chromium_strings_ar.xtb b/chrome/app/resources/chromium_strings_ar.xtb index b161925..94cfabb 100644 --- a/chrome/app/resources/chromium_strings_ar.xtb +++ b/chrome/app/resources/chromium_strings_ar.xtb
@@ -9,6 +9,7 @@ <translation id="1131805035311359397">للتحقُّق مما إذا كانت كلمات المرور آمنة من عمليات اختراق البيانات ومشاكل الأمان الأخرى، يُرجى <ph name="BEGIN_LINK" />تسجيل الدخول إلى Chromium<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">لمحة عن Chromium</translation> <translation id="1315551408014407711">إعداد ملفك الشخصي الجديد على Chromium</translation> +<translation id="1357932062193643861">السؤال عند فتح متصفِّح Chromium</translation> <translation id="1396446129537741364">يحاول Chromium إظهار كلمات المرور.</translation> <translation id="1414495520565016063">تم تسجيل دخولك إلى Chromium!</translation> <translation id="151962892725702025">تعذر على نظام التشغيل Chromium مزامنة البيانات نظرًا لأن المزامنة غير متاحة في نطاقك.</translation>
diff --git a/chrome/app/resources/chromium_strings_as.xtb b/chrome/app/resources/chromium_strings_as.xtb index 0c7aa17..e235a3f6 100644 --- a/chrome/app/resources/chromium_strings_as.xtb +++ b/chrome/app/resources/chromium_strings_as.xtb
@@ -185,6 +185,7 @@ <translation id="6863361426438995919">Google Pay (Chromiumলৈ প্ৰতিলিপি কৰা হ’ল)</translation> <translation id="6893813176749746474">Chromium আপডে’ট কৰা হৈছে, কিন্তু আপুনি সেইটো যোৱা ৩০ দিন ধৰি ব্যৱহাৰ কৰা নাই।</translation> <translation id="6964305034639999644">Chromium ইন&ক’গনিট’ ৱিণ্ড’ত লিংকটো খোলক</translation> +<translation id="6978145336957848883">দুৰ্বল পাছৱৰ্ডসমূহ অনুমান কৰিবলৈ সহজ। Chromiumক <ph name="BEGIN_LINK" />আপোনাৰ বাবে শক্তিশালী পাছৱৰ্ড সৃষ্টি কৰিবলৈ আৰু মনত ৰাখিবলৈ দিয়ক<ph name="END_LINK" />।</translation> <translation id="6990124437352146030">এই ছাইটটোৰ বাবে মাইক্ৰ'ফ'ন এক্সেছ কৰিবলৈ Chromiumক অনুমতিৰ আৱশ্যক</translation> <translation id="701244094609242530">Chromiumএ আপোনাৰ এক্সটেনশ্বনসমূহ পৰীক্ষা কৰিব নোৱাৰে। পাছত আকৌ চেষ্টা কৰক।</translation> <translation id="7028347026395185822">{NUM_HOURS,plural, =1{Chromiumএ আপোনাৰ কম্পিউটাৰত কোনো জ্ঞাত ক্ষতিকাৰক ছফ্টৱেৰ বিচাৰি নাপালে। অন্তিম পৰীক্ষা কৰা হৈছিল: ১ ঘণ্টাৰ আগত।}one{Chromiumএ আপোনাৰ কম্পিউটাৰত কোনো জ্ঞাত ক্ষতিকাৰক ছফ্টৱেৰ বিচাৰি নাপালে। অন্তিমবাৰ পৰীক্ষা কৰা হৈছিল: {NUM_HOURS} ঘণ্টাৰ আগত।}other{Chromiumএ আপোনাৰ কম্পিউটাৰত কোনো জ্ঞাত ক্ষতিকাৰক ছফ্টৱেৰ বিচাৰি নাপালে। অন্তিমবাৰ পৰীক্ষা কৰা হৈছিল: {NUM_HOURS} ঘণ্টাৰ আগত।}}</translation>
diff --git a/chrome/app/resources/chromium_strings_be.xtb b/chrome/app/resources/chromium_strings_be.xtb index 50c4c460..22815d5 100644 --- a/chrome/app/resources/chromium_strings_be.xtb +++ b/chrome/app/resources/chromium_strings_be.xtb
@@ -11,6 +11,7 @@ <translation id="1131805035311359397">Каб праверыць, ці не пагражае вашым паролям раскрыццё ў выніку ўцечкі даных або іншых праблем з бяспекай, <ph name="BEGIN_LINK" />увайдзіце ў Chromium<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">Пра Chromium</translation> <translation id="1315551408014407711">Наладзьце свой профіль Chromium</translation> +<translation id="1357932062193643861">Пытацца пры адкрыцці Chromium</translation> <translation id="1396446129537741364">Chromium спрабуе паказаць паролі.</translation> <translation id="1414495520565016063">Вы ўвайшлі ў Chromium!</translation> <translation id="151962892725702025">Сістэме Chromium OS не ўдалося сінхранізаваць вашы даныя: для вашага дамена сінхранізацыя недаступная.</translation>
diff --git a/chrome/app/resources/chromium_strings_bg.xtb b/chrome/app/resources/chromium_strings_bg.xtb index a42d4fc..854b8fdf 100644 --- a/chrome/app/resources/chromium_strings_bg.xtb +++ b/chrome/app/resources/chromium_strings_bg.xtb
@@ -9,6 +9,7 @@ <translation id="1131805035311359397">За да проверите дали паролите ви не са компрометирани при нарушения на сигурността на данните и други проблеми със сигурността, <ph name="BEGIN_LINK" />влезте в Chromium<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">Всичко за Chromium</translation> <translation id="1315551408014407711">Настройване на новия ви потребителски профил в Chromium</translation> +<translation id="1357932062193643861">Запитване, когато Chromium се отвори</translation> <translation id="1396446129537741364">Chromium опитва да покаже паролите.</translation> <translation id="1414495520565016063">Влязохте в Chromium!</translation> <translation id="151962892725702025">Chromium OS не можа да синхронизира данните ви, защото тази функция не е налице за домейна ви.</translation>
diff --git a/chrome/app/resources/chromium_strings_de.xtb b/chrome/app/resources/chromium_strings_de.xtb index 0ced235..113d604 100644 --- a/chrome/app/resources/chromium_strings_de.xtb +++ b/chrome/app/resources/chromium_strings_de.xtb
@@ -51,7 +51,7 @@ <translation id="2910007522516064972">Über &Chromium</translation> <translation id="2977470724722393594">Chromium ist auf dem neuesten Stand</translation> <translation id="2983934633046890458">Chromium versucht, Passwörter zu bearbeiten.</translation> -<translation id="3031887101543416445">{NUM_DAYS,plural, =1{Chrome hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: vor 1 Tag.}other{Chrome hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: vor {NUM_DAYS} Tagen.}}</translation> +<translation id="3031887101543416445">{NUM_DAYS,plural, =1{Chromium hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: vor 1 Tag.}other{Chromium hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: vor {NUM_DAYS} Tagen.}}</translation> <translation id="3032706164202344641">Chromium kann Ihre Passwörter nicht prüfen. Versuchen Sie es später noch einmal.</translation> <translation id="3032787606318309379">Wird zu Chromium hinzugefügt...</translation> <translation id="3068515742935458733">Absturzberichte und <ph name="UMA_LINK" /> zur Verbesserung von Chromium an Google senden</translation> @@ -94,14 +94,14 @@ <translation id="4230135487732243613">Ihre Chromium-Daten mit diesem Konto verknüpfen?</translation> <translation id="4271805377592243930">Hilfe für Chromium aufrufen</translation> <translation id="4285930937574705105">Die Installation konnte aufgrund eines undefinierten Fehlers nicht abgeschlossen werden. Falls Chromium derzeit ausgeführt wird, schließen Sie es bitte und versuchen Sie es erneut.</translation> -<translation id="4352041330999353637">Chrome hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: gestern.</translation> +<translation id="4352041330999353637">Chromium hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: gestern.</translation> <translation id="4407044323746248786">Chromium trotzdem beenden?</translation> <translation id="4415566066719264597">Chromium im Hintergrund ausführen</translation> <translation id="4423735387467980091">Chromium anpassen und einstellen</translation> <translation id="4544142686420020088">Chrome wurde aufgrund eines Fehlers nicht aktualisiert. Wie Sie Updateprobleme und Fehler bei der Aktualisierung von Chromium beheben, <ph name="BEGIN_LINK" />erfahren Sie hier<ph name="END_LINK" />.</translation> <translation id="4567424176335768812">Sie sind als <ph name="USER_EMAIL_ADDRESS" /> angemeldet. Auf allen Geräten, auf denen Sie angemeldet sind, sind nun Ihre Lesezeichen, Ihr Verlauf und andere Einstellungen verfügbar.</translation> <translation id="459535195905078186">Chromium-Apps</translation> -<translation id="4595492485953540730">{NUM_MINS,plural, =1{Chrome hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: vor 1 Minute.}other{Chrome hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: vor {NUM_MINS} Minuten.}}</translation> +<translation id="4595492485953540730">{NUM_MINS,plural, =1{Chromium hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: vor 1 Minute.}other{Chromium hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: vor {NUM_MINS} Minuten.}}</translation> <translation id="4677944499843243528">Das Profil wird offenbar gerade von einem Chromium-Prozess (<ph name="PROCESS_ID" />) auf einem anderen Computer (<ph name="HOST_NAME" />) verwendet. Das Profil wurde von Chromium gesperrt, damit es nicht beschädigt wird. Wenn Sie sicher sind, dass das Profil nicht von anderen Prozessen verwendet wird, können Sie das Profil entsperren und Chromium neu starten.</translation> <translation id="469338717132742108">Hilfe für Chromium OS aufrufen</translation> <translation id="4708774505295300557">Auf diesem Computer war zuvor ein Nutzer mit dem Konto <ph name="ACCOUNT_EMAIL_LAST" /> in Chromium angemeldet. Erstellen Sie einen neuen Chromium-Nutzer, um Ihre Daten getrennt zu verwenden.</translation> @@ -175,7 +175,7 @@ Einige Funktionen stehen möglicherweise nicht zur Verfügung. Geben Sie bitte ein anderes Profilverzeichnis an oder verwenden Sie eine neuere Version von Chromium.</translation> <translation id="6734080038664603509">&Chromium aktualisieren</translation> <translation id="6734291798041940871">Chromium ist bereits für alle Nutzer auf Ihrem Computer installiert.</translation> -<translation id="6737557815519435616">Chrome hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: vor Kurzem.</translation> +<translation id="6737557815519435616">Chromium hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: gerade eben.</translation> <translation id="6762551859069255163">Sie können in Chromium unterschiedliche Profile verwenden, um berufliche und private Browsingaktivitäten getrennt zu halten, oder wenn dieses Gerät von mehreren Personen genutzt wird</translation> <translation id="6774082503108938489">Dein Elternteil hat "Berechtigungen für Websites, Apps und Erweiterungen" für Chromium deaktiviert. Das Aktivieren dieser <ph name="EXTENSION_TYPE_PARAMETER" /> ist nicht zulässig.</translation> <translation id="6847869444787758381">Chromium wird Sie informieren, sollten Ihre Passwörter nicht mehr sicher sein</translation> @@ -185,7 +185,7 @@ <translation id="6964305034639999644">Link in Chromium-Inkognitofenster öffnen</translation> <translation id="6990124437352146030">Chromium benötigt für diese Website die Berechtigung, auf Ihr Mikrofon zuzugreifen</translation> <translation id="701244094609242530">Chromium kann Ihre Erweiterungen nicht prüfen. Versuchen Sie es später noch einmal.</translation> -<translation id="7028347026395185822">{NUM_HOURS,plural, =1{Chrome hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: vor 1 Stunde.}other{Chrome hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: vor {NUM_HOURS} Stunden.}}</translation> +<translation id="7028347026395185822">{NUM_HOURS,plural, =1{Chromium hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: vor 1 Stunde.}other{Chromium hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: vor {NUM_HOURS} Stunden.}}</translation> <translation id="705851970750939768">Chromium aktualisieren</translation> <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>
diff --git a/chrome/app/resources/chromium_strings_es-419.xtb b/chrome/app/resources/chromium_strings_es-419.xtb index 24a64ae..3a052fa 100644 --- a/chrome/app/resources/chromium_strings_es-419.xtb +++ b/chrome/app/resources/chromium_strings_es-419.xtb
@@ -9,6 +9,7 @@ <translation id="1131805035311359397">Para comprobar si tus contraseñas están a salvo de violaciones de la seguridad de los datos y otros problemas de seguridad, <ph name="BEGIN_LINK" />accede a Chromium<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">Acerca de Chromium</translation> <translation id="1315551408014407711">Configura tu nuevo perfil de Chromium</translation> +<translation id="1357932062193643861">Preguntar al abrir Chromium</translation> <translation id="1396446129537741364">Chromium está intentando mostrar contraseñas.</translation> <translation id="1414495520565016063">Accediste a Chromium.</translation> <translation id="151962892725702025">El Sistema operativo Chromium no pudo sincronizar los datos porque la sincronización no está disponible para el dominio.</translation> @@ -179,6 +180,7 @@ <translation id="6863361426438995919">Google Pay (copiada en Chromium)</translation> <translation id="6893813176749746474">Chromium fue actualizado, pero no lo has utilizado en los últimos 30 días.</translation> <translation id="6964305034639999644">Abrir vínculo en una ventana de navegación de incó&gnito de Chromium</translation> +<translation id="6978145336957848883">Las contraseñas poco seguras son fáciles de adivinar. Permite que Chromium <ph name="BEGIN_LINK" />cree y recuerde contraseñas seguras para ti<ph name="END_LINK" />.</translation> <translation id="6990124437352146030">Chromium necesita permiso para acceder a tu micrófono para este sitio</translation> <translation id="701244094609242530">Chromium no puede revisar las extensiones. Vuelve a intentarlo más tarde.</translation> <translation id="7028347026395185822">{NUM_HOURS,plural, =1{Chromium no encontró software dañino conocido en la computadora. Última verificación: hace 1 hora.}other{Chromium no encontró software dañino conocido en la computadora. Última verificación: hace {NUM_HOURS} horas.}}</translation> @@ -240,7 +242,7 @@ <translation id="8621669128220841554">La instalación falló debido a un error no especificado. Descarga Chromium otra vez.</translation> <translation id="8697124171261953979">También controla qué página se muestra al iniciar Chromium o al realizar búsquedas desde el cuadro multifunción.</translation> <translation id="8704119203788522458">Este es tu Chromium</translation> -<translation id="8733034664173984083">Se produjo un error cuando Chromium comprobaba que la computadora no tuviera software dañino</translation> +<translation id="8733034664173984083">Se produjo un error cuando Chromium buscaba software dañino en la computadora</translation> <translation id="8796602469536043152">Chromium necesita permiso para acceder a tu cámara y micrófono para este sitio</translation> <translation id="8803635938069941624">Condiciones del Sistema operativo Chromium</translation> <translation id="8821041990367117597">Chromium no pudo sincronizar los datos porque los datos de acceso de la cuenta están obsoletos.</translation>
diff --git a/chrome/app/resources/chromium_strings_eu.xtb b/chrome/app/resources/chromium_strings_eu.xtb index e847df9a..3cf754c 100644 --- a/chrome/app/resources/chromium_strings_eu.xtb +++ b/chrome/app/resources/chromium_strings_eu.xtb
@@ -11,6 +11,7 @@ <translation id="1131805035311359397">Pasahitzak datuen isilpekotasunaren urratzeen eta beste segurtasun-arazoen aurka babestuta dauden egiaztatzeko, <ph name="BEGIN_LINK" />hasi saioa Chromium-en<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">Chromium arakatzaileari buruz</translation> <translation id="1315551408014407711">Konfiguratu Chromium-eko profil berria</translation> +<translation id="1357932062193643861">Galdetu Chromium irekitzean</translation> <translation id="1396446129537741364">Chromium pasahitzak erakusten saiatzen ari da.</translation> <translation id="1414495520565016063">Chromium-en saioa hasi duzu.</translation> <translation id="151962892725702025">Chromium OS sistema eragileak ezin izan ditu sinkronizatu zure datuak sinkronizazioa ez dagoelako erabilgarri zure domeinuan.</translation> @@ -73,7 +74,7 @@ <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="3527440529060401414">Ordenagailuan software kaltegarria bila dezake Chromium-ek</translation> +<translation id="3527440529060401414">Software kaltegarria bila dezake Chromium-ek ordenagailuan</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> <translation id="3639635944603682591">Pertsona honen arakatze-datuak gailutik ezabatuko dira. Datuak berreskuratzeko, hasi saioa Chromium-en <ph name="USER_EMAIL" /> gisa.</translation> <translation id="364817392622123556">{COUNT,plural, =0{Chromium-en eguneratze bat erabilgarri dago eta sistema eragilea berrabiarazten duzunean aplikatuko da.}=1{Chromium-en eguneratze bat erabilgarri dago eta sistema eragilea berrabiarazten duzunean aplikatuko da. Ezkutuko moduko leihoa ez da berriro irekiko.}other{Chromium-en eguneratze bat erabilgarri dago eta sistema eragilea berrabiarazten duzunean aplikatuko da. Ezkutuko moduko # leihoak ez dira berriro irekiko.}}</translation> @@ -89,7 +90,7 @@ <translation id="3945058413678539331">Pasahitzak kopiatzen saiatzen ari da Chromium. Hori baimentzeko, idatzi Windows-eko pasahitza.</translation> <translation id="4036079820698952681">Lagundu Chromium hobetzen <ph name="BEGIN_LINK" />uneko ezarpenen<ph name="END_LINK" /> berri emanda</translation> <translation id="4050175100176540509">Segurtasun-hobekuntza garrantzitsuak eta eginbide berriak dituzu erabilgarri azken bertsioan.</translation> -<translation id="4136604564421273381">Ordenagailutik software kaltegarria kentzen ari da Chromium...</translation> +<translation id="4136604564421273381">Ordenagailutik software kaltegarria kentzen ari da Chromium…</translation> <translation id="419998258129752635"><ph name="PAGE_TITLE" /> - Hasi saioa sarean - Chromium</translation> <translation id="421369550622382712">Ezagutu Chromium-erako aplikazio, joko, luzapen eta gai bikainak.</translation> <translation id="4216212958613226427">Hizkuntza honetan dago Chromium-en erabiltzaile-interfazea</translation>
diff --git a/chrome/app/resources/chromium_strings_fa.xtb b/chrome/app/resources/chromium_strings_fa.xtb index dd7dd29..7d60537 100644 --- a/chrome/app/resources/chromium_strings_fa.xtb +++ b/chrome/app/resources/chromium_strings_fa.xtb
@@ -9,6 +9,7 @@ <translation id="1131805035311359397">برای بررسی اینکه از گذرواژههایتان دربرابر نقض داده یا دیگر مشکلات امنیتی محافظت میشود، <ph name="BEGIN_LINK" />به سیستم Chromium وارد شوید<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">درباره Chromium</translation> <translation id="1315551408014407711">راهاندازی نمایه Chromium جدید</translation> +<translation id="1357932062193643861">وقتی Chromium را باز میکنم سؤال شود</translation> <translation id="1396446129537741364">Chromium میخواهد گذرواژهها را نشان دهد.</translation> <translation id="1414495520565016063">شما وارد سیستم Chromium شدید!</translation> <translation id="151962892725702025">سیستمعامل Chromium قادر به همگامسازی دادههای شما نبود زیرا همگامسازی برای دامنه شما قابل دسترسی نیست.</translation>
diff --git a/chrome/app/resources/chromium_strings_fi.xtb b/chrome/app/resources/chromium_strings_fi.xtb index 9bd51f08..e6d24aa 100644 --- a/chrome/app/resources/chromium_strings_fi.xtb +++ b/chrome/app/resources/chromium_strings_fi.xtb
@@ -9,6 +9,7 @@ <translation id="1131805035311359397">Jos haluat tarkistaa, ovatko salasanasi turvassa tietosuojaloukkauksilta ja muilta tietoturvaongelmilta, <ph name="BEGIN_LINK" />kirjaudu Chromiumiin<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">Tietoja Chromiumista</translation> <translation id="1315551408014407711">Luo uusi Chromium-profiili</translation> +<translation id="1357932062193643861">Kysy, kun Chromium avataan</translation> <translation id="1396446129537741364">Chromium yrittää näyttää salasanat.</translation> <translation id="1414495520565016063">Olet kirjautunut Chromiumiin!</translation> <translation id="151962892725702025">Chromium-käyttöjärjestelmä ei voi synkronoida tietoja, koska synkronointi ei ole käytettävissä verkkotunnuksessasi.</translation>
diff --git a/chrome/app/resources/chromium_strings_fr-CA.xtb b/chrome/app/resources/chromium_strings_fr-CA.xtb index 874a8b58..3911f6c3 100644 --- a/chrome/app/resources/chromium_strings_fr-CA.xtb +++ b/chrome/app/resources/chromium_strings_fr-CA.xtb
@@ -11,6 +11,7 @@ <translation id="1131805035311359397">Pour vérifier si vos mots de passe sont en sécurité contre les violations de données et d'autres risques de sécurité, <ph name="BEGIN_LINK" />connectez-vous à Chromium<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">À propos de Chromium</translation> <translation id="1315551408014407711">Configurer votre nouveau profil Chromium</translation> +<translation id="1357932062193643861">Demander quand Chromium s'ouvre</translation> <translation id="1396446129537741364">Chromium essaie d'afficher les mots de passe.</translation> <translation id="1414495520565016063">Vous êtes connecté à Chromium!</translation> <translation id="151962892725702025">Chromium OS n'a pas pu synchroniser vos données, car la synchronisation n'est pas offerte pour votre nom de domaine.</translation>
diff --git a/chrome/app/resources/chromium_strings_fr.xtb b/chrome/app/resources/chromium_strings_fr.xtb index 5e4443b..8bb0c2ac 100644 --- a/chrome/app/resources/chromium_strings_fr.xtb +++ b/chrome/app/resources/chromium_strings_fr.xtb
@@ -72,7 +72,7 @@ <translation id="347328004046849135">Chromium vous avertira si vous vous connectez avec un mot de passe compromis</translation> <translation id="3474745554856756813">Cette action aura pour effet de supprimer <ph name="ITEMS_COUNT" /> éléments de cet appareil. Pour récupérer vos données ultérieurement, connectez-vous à Chromium en tant que <ph name="USER_EMAIL" />.</translation> <translation id="3509308970982693815">Veuillez fermer toutes les fenêtres de Chromium, puis réessayer.</translation> -<translation id="3527440529060401414">Chromium peut rechercher des logiciels malveillants sur votre ordinateur</translation> +<translation id="3527440529060401414">Chromium peut vérifier la présence de logiciels malveillants sur votre ordinateur</translation> <translation id="3575459661164320785">Un logiciel malveillant a été détecté sur votre ordinateur. Chromium peut le supprimer, restaurer vos paramètres et désactiver les extensions pour que votre navigateur fonctionne de nouveau normalement.</translation> <translation id="3639635944603682591">Les données de navigation de cet utilisateur vont être supprimées de cet appareil. Pour les récupérer, connectez-vous à Chromium en tant que <ph name="USER_EMAIL" />.</translation> <translation id="364817392622123556">{COUNT,plural, =0{Une nouvelle mise à jour de Chromium est disponible. Elle sera installée dès que vous relancerez le navigateur.}=1{Une nouvelle mise à jour de Chromium est disponible. Elle sera installée dès que vous relancerez le navigateur. Sachez que la fenêtre de navigation privée ne sera pas rouverte.}one{Une nouvelle mise à jour de Chromium est disponible. Elle sera installée dès que vous relancerez le navigateur. Sachez que la fenêtre de navigation privée (#) ne sera pas rouverte.}other{Une nouvelle mise à jour de Chromium est disponible. Elle sera installée dès que vous relancerez le navigateur. Sachez que les # fenêtres de navigation privée ne seront pas rouvertes.}}</translation> @@ -111,7 +111,7 @@ <translation id="4750035648288509542">Presque à jour ! Relancez Chromium pour terminer la mise à jour. Sachez que les fenêtres de navigation privée ne seront pas rouvertes.</translation> <translation id="4788777615168560705">Chromium ne parvient pas à vérifier vos mots de passe. Réessayez dans 24 heures ou <ph name="BEGIN_LINK" />vérifiez les mots de passe enregistrés dans votre compte Google<ph name="END_LINK" />.</translation> <translation id="479167709087336770">Le correcteur orthographique utilisé est le même que celui employé dans la recherche Google. Le texte que vous saisissez dans le navigateur est envoyé à Google. Vous pouvez toujours modifier ce comportement dans les paramètres.</translation> -<translation id="487524289568229802">Chromium recherche des logiciels malveillants sur votre ordinateur…</translation> +<translation id="487524289568229802">Chromium est en train de vérifier la présence de logiciels malveillants sur votre ordinateur…</translation> <translation id="4888717733111232871">Règle de trafic entrant pour Chromium autorisant le trafic mDNS</translation> <translation id="4893632094755846570">Cette action aura pour effet de supprimer définitivement vos données de navigation de cet appareil. Pour les récupérer, connectez-vous à Chromium en tant que</translation> <translation id="4943838377383847465">Chromium est exécuté en mode arrière-plan</translation> @@ -187,7 +187,7 @@ <translation id="6978145336957848883">Les mots de passe peu sécurisés sont faciles à deviner. Laissez Chromium <ph name="BEGIN_LINK" />créer et mémoriser des mots de passe sécurisés à votre place<ph name="END_LINK" />.</translation> <translation id="6990124437352146030">Chromium a besoin de votre autorisation pour accéder à votre micro pour ce site</translation> <translation id="701244094609242530">Chromium ne parvient pas à vérifier vos extensions. Réessayez plus tard.</translation> -<translation id="7028347026395185822">{NUM_HOURS,plural, =1{Chromium n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a une heure.}one{Chromium n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_HOURS} heure.}other{Chromium n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_HOURS} heures.}}</translation> +<translation id="7028347026395185822">{NUM_HOURS,plural, =1{Chromium n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a 1 heure.}one{Chromium n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_HOURS} heure.}other{Chromium n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_HOURS} heures.}}</translation> <translation id="705851970750939768">Mettre à jour Chromium</translation> <translation id="7066436765290594559">Impossible de synchroniser vos données dans Chromium OS. Veuillez mettre à jour votre phrase secrète de synchronisation.</translation> <translation id="7067091210845072982">Si une image n'est pas accompagnée d'une description utile, Chromium essaiera de vous en proposer une. Pour nous permettre de créer des descriptions, les images sont envoyées à Google.</translation> @@ -247,7 +247,7 @@ <translation id="8621669128220841554">Échec de l'installation en raison d'une erreur non spécifiée. Veuillez télécharger Chromium à nouveau.</translation> <translation id="8697124171261953979">Elle contrôle également la page qui s'affiche au démarrage de Chromium ou lorsque vous effectuez une recherche dans l'omnibox.</translation> <translation id="8704119203788522458">Voici votre Chromium</translation> -<translation id="8733034664173984083">Une erreur s'est produite alors que Chromium était en train de rechercher des logiciels malveillants sur votre ordinateur</translation> +<translation id="8733034664173984083">Une erreur s'est produite alors que Chromium vérifiait la présence de logiciels malveillants sur votre ordinateur</translation> <translation id="8796602469536043152">Chromium a besoin de votre autorisation pour accéder à votre appareil photo et à votre micro pour ce site</translation> <translation id="8803635938069941624">Conditions d'utilisation de Chromium OS</translation> <translation id="8821041990367117597">Impossible de synchroniser vos données dans Chromium, car les informations de connexion de votre compte ne sont plus à jour.</translation>
diff --git a/chrome/app/resources/chromium_strings_hu.xtb b/chrome/app/resources/chromium_strings_hu.xtb index 029d269..7664cfb 100644 --- a/chrome/app/resources/chromium_strings_hu.xtb +++ b/chrome/app/resources/chromium_strings_hu.xtb
@@ -9,6 +9,7 @@ <translation id="1131805035311359397">Ha ellenőrizni szeretné, hogy jelszavai biztonságban vannak-e az adatvédelmi incidensektől és más biztonsági problémáktól, <ph name="BEGIN_LINK" />jelentkezzen be a Chromiumba<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">A Chromium névjegye</translation> <translation id="1315551408014407711">Új Chromium-profil beállítása</translation> +<translation id="1357932062193643861">Kérdezzen rá a Chromium megnyitásakor</translation> <translation id="1396446129537741364">A Chromium megpróbálja megjeleníteni a jelszavakat.</translation> <translation id="1414495520565016063">Bejelentkezett a Chromiumba.</translation> <translation id="151962892725702025">A Chromium OS nem tudta szinkronizálni az adatait, mert a szinkronizálás nem érhető el az Ön domainjénél.</translation>
diff --git a/chrome/app/resources/chromium_strings_hy.xtb b/chrome/app/resources/chromium_strings_hy.xtb index 6c7d0e3..a65ea0c8 100644 --- a/chrome/app/resources/chromium_strings_hy.xtb +++ b/chrome/app/resources/chromium_strings_hy.xtb
@@ -11,6 +11,7 @@ <translation id="1131805035311359397">Որպեսզի պաշտպանեք ձեր գաղտնաբառերը տվյալների արտահոսքից և խուսափեք անվտանգության հետ կապված այլ խնդիրներից, <ph name="BEGIN_LINK" />մտեք հաշիվ Chromium դիտարկիչում<ph name="END_LINK" />։</translation> <translation id="1185134272377778587">Chromium-ի մասին</translation> <translation id="1315551408014407711">Կարգավորեք Chromium-ի ձեր նոր պրոֆիլը</translation> +<translation id="1357932062193643861">Հարցնել, երբ գործարկվում է Chromium-ը</translation> <translation id="1396446129537741364">Chromium-ը փորձում է ցուցադրել գաղտնաբառերը:</translation> <translation id="1414495520565016063">Դուք մուտք եք գործել Chromium:</translation> <translation id="151962892725702025">Chromium OS-ը չկարողացավ համաժամացնել ձեր տվյալները, քանի որ Sync-ը մատչելի չէ ձեր տիրույթի համար:</translation>
diff --git a/chrome/app/resources/chromium_strings_iw.xtb b/chrome/app/resources/chromium_strings_iw.xtb index c4748c4..31f9526 100644 --- a/chrome/app/resources/chromium_strings_iw.xtb +++ b/chrome/app/resources/chromium_strings_iw.xtb
@@ -9,6 +9,7 @@ <translation id="1131805035311359397">כדי לבדוק אם שאר הסיסמאות מוגנות מפני פרצות באבטחת מידע ובעיות אבטחה אחרות, <ph name="BEGIN_LINK" />יש להיכנס ל-Chromium<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">על Chromium</translation> <translation id="1315551408014407711">הגדרת הפרופיל החדש שלך ב-Chromium</translation> +<translation id="1357932062193643861">הצגת שאלה בפתיחה של Chromium</translation> <translation id="1396446129537741364">Chromium מנסה להציג סיסמאות.</translation> <translation id="1414495520565016063">נכנסת ל-Chromium!</translation> <translation id="151962892725702025">מערכת ההפעלה של Chromium לא הצליחה לסנכרן את הנתונים שלך מפני שסנכרון אינו זמין עבור הדומיין שלך.</translation> @@ -51,7 +52,7 @@ <translation id="2910007522516064972">מידע על &Chromium</translation> <translation id="2977470724722393594">Chromium מעודכן</translation> <translation id="2983934633046890458">Chromium מנסה לערוך את הסיסמאות.</translation> -<translation id="3031887101543416445">{NUM_DAYS,plural, =1{Chromium לא גילה תוכנות מזיקות ידועות במחשב שלך. בדיקה אחרונה: לפני יום אחד.}two{Chromium לא גילה תוכנות מזיקות ידועות במחשב שלך. בדיקה אחרונה: לפני יומיים ({NUM_DAYS}).}many{Chromium לא גילה תוכנות מזיקות ידועות במחשב שלך. בדיקה אחרונה: לפני {NUM_DAYS} ימים.}other{Chromium לא גילה תוכנות מזיקות ידועות במחשב שלך. בדיקה אחרונה: לפני {NUM_DAYS} ימים.}}</translation> +<translation id="3031887101543416445">{NUM_DAYS,plural, =1{Chromium לא גילה תוכנות מזיקות ידועות במחשב שלך. בדיקה אחרונה: לפני יום אחד.}two{Chromium לא גילה תוכנות מזיקות ידועות במחשב שלך. בדיקה אחרונה: לפני ({NUM_DAYS}) ימים.}many{Chromium לא גילה תוכנות מזיקות ידועות במחשב שלך. בדיקה אחרונה: לפני {NUM_DAYS} ימים.}other{Chromium לא גילה תוכנות מזיקות ידועות במחשב שלך. בדיקה אחרונה: לפני {NUM_DAYS} ימים.}}</translation> <translation id="3032706164202344641">Chromium לא יכול לבדוק את הסיסמאות שלך. כדאי לנסות שוב מאוחר יותר.</translation> <translation id="3032787606318309379">הוספה ל-Chromium</translation> <translation id="3068515742935458733">עזור לשפר את Chromium על ידי שליחת דוחות קריסה ו-<ph name="UMA_LINK" /> אל Google</translation> @@ -85,7 +86,7 @@ <translation id="3945058413678539331">Chromium מנסה להעתיק את הסיסמאות. כדי לאפשר למערכת לעשות זאת, יש להזין את הסיסמה שלך ל-Windows.</translation> <translation id="4036079820698952681">דיווח על <ph name="BEGIN_LINK" />ההגדרות הנוכחיות<ph name="END_LINK" /> יעזור לשפר את Chromium</translation> <translation id="4050175100176540509">הגרסה החדשה כוללת שיפורי בטיחות חשובים ותכונות חדשות.</translation> -<translation id="4136604564421273381">Chromium מסיר תוכנה מזיקה מהמחשב שלך…</translation> +<translation id="4136604564421273381">Chromium מסיר כעת תוכנה מזיקה מהמחשב שלך…</translation> <translation id="419998258129752635"><ph name="PAGE_TITLE" /> – כניסה לרשת – Chromium</translation> <translation id="421369550622382712">אפליקציות, משחקים, תוספים ועיצובים מעולים בשביל Chromium.</translation> <translation id="4216212958613226427">זו השפה שבה מוצג ממשק המשתמש של Chromium</translation> @@ -130,7 +131,7 @@ <translation id="5496810170689441661">Chromium מנסה לערוך את הסיסמאות. כדי לאפשר זאת, יש להזין את הסיסמה שלך ל-Windows.</translation> <translation id="5623402015214259806">{0,plural, =0{יש עדכון ל-Chromium}=1{יש עדכון ל-Chromium}two{עדכון של Chromium זמין כבר # ימים}many{עדכון של Chromium זמין כבר # ימים}other{עדכון של Chromium זמין כבר # ימים}}</translation> <translation id="5631814766731275228">שם ותמונה ב-Chromium</translation> -<translation id="5634636535844844681">כדי להשתמש ב-Chromium יש צורך ב-Windows מגירסה 7 ואילך.</translation> +<translation id="5634636535844844681">כדי להשתמש ב-Chromium יש צורך ב-Windows מגרסה 7 ואילך.</translation> <translation id="5653831366781983928">יש להפעיל מחדש את Chromium</translation> <translation id="5698481217667032250">הצג את Chromium בשפה זו</translation> <translation id="5820394555380036790">מערכת ההפעלה של Chromium</translation> @@ -170,7 +171,7 @@ <translation id="6676384891291319759">גישה אל האינטרנט</translation> <translation id="6717134281241384636">לא ניתן להשתמש בפרופיל שלך משום שהוא מגיע מגרסה חדשה יותר של Chromium. -ייתכן שחלק מהתכונות לא יהיו זמינות. ציין ספריית פרופיל אחרת או השתמש בגרסה חדשה יותר של Chromium.</translation> +ייתכן שחלק מהתכונות לא יהיו זמינות. יש לציין ספריית פרופיל אחרת או להשתמש בגרסה חדשה יותר של Chromium.</translation> <translation id="6734080038664603509">עדכן &את Chromium</translation> <translation id="6734291798041940871">Chromium כבר מותקן במחשב ונגיש לכל המשתמשים.</translation> <translation id="6737557815519435616">Chromium לא גילה תוכנות מזיקות ידועות במחשב שלך. בדיקה אחרונה: לפני כמה רגעים.</translation>
diff --git a/chrome/app/resources/chromium_strings_ja.xtb b/chrome/app/resources/chromium_strings_ja.xtb index 1cd141f..4700bd9 100644 --- a/chrome/app/resources/chromium_strings_ja.xtb +++ b/chrome/app/resources/chromium_strings_ja.xtb
@@ -9,6 +9,7 @@ <translation id="1131805035311359397">パスワードにデータ侵害などセキュリティに関する問題がないかどうかを確認するには、<ph name="BEGIN_LINK" />Chromium にログイン<ph name="END_LINK" />してください。</translation> <translation id="1185134272377778587">Chromium について</translation> <translation id="1315551408014407711">新しい Chromium プロファイルの設定</translation> +<translation id="1357932062193643861">Chromium を開くときに確認する</translation> <translation id="1396446129537741364">Chromium はパスワードを表示しようとしています。</translation> <translation id="1414495520565016063">Chromium にログインしました</translation> <translation id="151962892725702025">お使いのドメインでは同期を利用できないため、Chromium OS はデータを同期できませんでした。</translation>
diff --git a/chrome/app/resources/chromium_strings_ml.xtb b/chrome/app/resources/chromium_strings_ml.xtb index d4026760..c1d1d3d 100644 --- a/chrome/app/resources/chromium_strings_ml.xtb +++ b/chrome/app/resources/chromium_strings_ml.xtb
@@ -11,6 +11,7 @@ <translation id="1131805035311359397">ഡാറ്റാ ലംഘനങ്ങളിൽ നിന്നും മറ്റ് സുരക്ഷാ പ്രശ്നങ്ങളിൽ നിന്നും നിങ്ങളുടെ പാസ്വേഡുകൾ സുരക്ഷിതമാണോ എന്ന് പരിശോധിക്കാൻ, <ph name="BEGIN_LINK" />Chromium-ൽ സൈൻ ഇൻ ചെയ്യുക<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">Chromium-ത്തിനെക്കുറിച്ച്</translation> <translation id="1315551408014407711">നിങ്ങളുടെ പുതിയ Chromium പ്രൊഫൈൽ സജ്ജീകരിക്കുക</translation> +<translation id="1357932062193643861">Chromium തുറക്കുമ്പോൾ ചോദിക്കുക</translation> <translation id="1396446129537741364">Chromium പാസ്വേഡുകൾ ദൃശ്യമാക്കാൻ ശ്രമിക്കുന്നു.</translation> <translation id="1414495520565016063">നിങ്ങൾ Chromium-ൽ സൈൻ ഇൻ ചെയ്തു!</translation> <translation id="151962892725702025">നിങ്ങളുടെ ഡൊമെയ്നിന് സമന്വയം ലഭ്യമല്ലാത്തതിനാൽ Chromium OS-ന് നിങ്ങളുടെ ഡാറ്റ സമന്വയിപ്പിക്കാനായില്ല.</translation>
diff --git a/chrome/app/resources/chromium_strings_mr.xtb b/chrome/app/resources/chromium_strings_mr.xtb index 5e6c522..d5e8372 100644 --- a/chrome/app/resources/chromium_strings_mr.xtb +++ b/chrome/app/resources/chromium_strings_mr.xtb
@@ -12,7 +12,7 @@ <translation id="1315551408014407711">तुमची नवीन Chromium प्रोफाइल सेट करा</translation> <translation id="1396446129537741364">Chromium पासवर्ड दर्शविण्याचा प्रयत्न करत आहे.</translation> <translation id="1414495520565016063">तुम्ही Chromium मध्ये साइन इन केले आहे!</translation> -<translation id="151962892725702025">आपल्या डोमेनसाठी संकालन उपलब्ध नसल्यामुळे Chromium OS तुमचा डेटा संकालित करू शकले नाही.</translation> +<translation id="151962892725702025">आपल्या डोमेनसाठी सिंक उपलब्ध नसल्यामुळे Chromium OS तुमचा डेटा संकालित करू शकले नाही.</translation> <translation id="1524282610922162960">Chromium टॅब शेअर करा</translation> <translation id="1553461853655228091">तुमच्या आसपासचा 3D नकाशा तयार करण्यासाठी Chromium ला तुमचा कॅमेरा अॅक्सेस करण्याची परवानगी हवी आहे</translation> <translation id="1607715478322902680">{COUNT,plural, =0{अपडेट लागू करता यावे यासाठी तुम्ही Chromium पुन्हा लाँच करण्याची तुमच्या ॲडमिनिस्ट्रेटरला गरज आहे}=1{अपडेट लागू करता यावे यासाठी तुम्ही Chromium पुन्हा लाँच करण्याची तुमच्या ॲडमिनिस्ट्रेटरला गरज आहे. तुमची गुप्त विंडो पुन्हा उघडणार नाही.}other{अपडेट लागू करता यावे यासाठी तुम्ही Chromium पुन्हा लाँच करण्याची तुमच्या ॲडमिनिस्ट्रेटरला गरज आहे. तुमच्या # गुप्त विंडो पुन्हा उघडणार नाहीत.}}</translation> @@ -201,7 +201,7 @@ Chromium तुमची सेटिंग्ज रिकव्हर करू शकत नाही.</translation> <translation id="7337881442233988129">Chromium</translation> <translation id="7339898014177206373">नवीन विंडो</translation> -<translation id="734373864078049451">तुमचे वेब, बुकमार्क आणि अन्य Chromium सामग्री येथे थेट आहे.</translation> +<translation id="734373864078049451">तुमचे वेब, बुकमार्क आणि अन्य Chromium आशय येथे थेट आहे.</translation> <translation id="7349591376906416160">तुमच्या सिस्टम अॅडमिनिस्ट्रेटरने <ph name="TARGET_URL_HOSTNAME" /> अॅक्सेस करण्यासाठी <ph name="ALTERNATIVE_BROWSER_NAME" /> उघडण्याकरिता Chromium कॉंफिगर केले आहे.</translation> <translation id="7448255348454382571">Chromium OS रीस्टार्ट करा</translation> <translation id="7449453770951226939"><ph name="PAGE_TITLE" /> - Chromium डेव्हलपर</translation> @@ -217,7 +217,7 @@ <translation id="7628001322379820951">Chromium ला तुमच्या कॉंप्युटरवर हानिकारक सॉफ्टवेअर आढळले आहे</translation> <translation id="7686590090926151193">Chromium तुमचा डीफॉल्ट ब्राउझर नाही</translation> <translation id="7689606757190482937">तुमच्या डिव्हाइसवर Chromium सिंक आणि पर्सनलाइझ करा</translation> -<translation id="7729447699958282447">आपल्या डोमेनसाठी संकालन उपलब्ध नसल्यामुळे Chromium तुमचा डेटा संकालित करू शकले नाही.</translation> +<translation id="7729447699958282447">आपल्या डोमेनसाठी सिंक उपलब्ध नसल्यामुळे Chromium तुमचा डेटा संकालित करू शकले नाही.</translation> <translation id="7745317241717453663">हे या डिव्हाइस मधून तुमचा ब्राउझिंग डेटा हटवेल. नंतर तुमचा डेटा पुनर्प्राप्त करण्यासाठी, Chromium मध्ये <ph name="USER_EMAIL" /> म्हणून साइन इन करा.</translation> <translation id="7747138024166251722">इन्स्टॉलर तात्पुरती डिरेक्टरी तयार करू शकत नाही. कृपया सॉफ्टवेअर इंस्टॉल करण्यासाठी रिक्त डिस्क स्थान आणि परवानगी पहा.</translation> <translation id="7773960292263897147">चेतावणी: Chromium हे एक्स्टेंशनना तुमचा ब्राउझिंग इतिहास रेकॉर्ड करून ठेवण्यापासून रोखू शकत नाही. हे एक्स्टेंशन बंद करण्यासाठी गुप्त मोडमधील या पर्यायाची निवड रद्द करा.</translation>
diff --git a/chrome/app/resources/chromium_strings_or.xtb b/chrome/app/resources/chromium_strings_or.xtb index 72c51d4..a242bd0 100644 --- a/chrome/app/resources/chromium_strings_or.xtb +++ b/chrome/app/resources/chromium_strings_or.xtb
@@ -185,6 +185,7 @@ <translation id="6863361426438995919">Google ପେ (Chromiumକୁ କପି କରାଯାଇଛି)</translation> <translation id="6893813176749746474">Chromium ଅପ୍ଡେଟ୍ କରାଯାଇଛି, କିନ୍ତୁ ଆପଣ ଏହାକୁ ଅତିକମ୍ରେ 30 ଦିନ ହେଲା ବ୍ୟବହାର କରିନାହାନ୍ତି।</translation> <translation id="6964305034639999644">Chromium ଇନ୍କ&ଗ୍ନିଟୋ ୱିଣ୍ଡୋରେ ଲିଙ୍କ୍ ଖୋଲନ୍ତୁ</translation> +<translation id="6978145336957848883">ଦୁର୍ବଳ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଅନୁମାନ କରିବା ସହଜ ଅଟେ। Chromiumକୁ <ph name="BEGIN_LINK" />ଆପଣଙ୍କ ପାଇଁ ଜଟିଳ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ତିଆରି କରି ମନେ ରଖିବାକୁ ଦିଅନ୍ତୁ<ph name="END_LINK" />।</translation> <translation id="6990124437352146030">ଏହି ସାଇଟ୍ ପାଇଁ ଆପଣଙ୍କର ମାଇକ୍ରୋଫୋନ୍କୁ ଆକ୍ସେସ୍ କରିବାକୁ Chromium ଅନୁମତି ଆବଶ୍ୟକ କରୁଛି</translation> <translation id="701244094609242530">Chromium ଆପଣଙ୍କ ଏକ୍ସଟେନସନଗୁଡ଼ିକୁ ଯାଞ୍ଚ କରିପାରିବ ନାହିଁ। ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> <translation id="7028347026395185822">{NUM_HOURS,plural, =1{Chromium ଆପଣଙ୍କ କମ୍ପ୍ୟୁଟରରେ ଜଣାଥିବା କ୍ଷତିକାରକ ସଫ୍ଟୱେରକୁ ଖୋଜି ପାଇଲା ନାହିଁ। ଗତ ଥର ଯାଞ୍ଚ କରାଯାଇଛି: 1 ଘଣ୍ଟା ପୂର୍ବେ।}other{Chromium ଆପଣଙ୍କ କମ୍ପ୍ୟୁଟରରେ ଜଣାଥିବା କ୍ଷତିକାରକ ସଫ୍ଟୱେରକୁ ଖୋଜି ପାଇଲା ନାହିଁ। ଗତ ଥର ଯାଞ୍ଚ କରାଯାଇଛି: {NUM_HOURS} ଘଣ୍ଟା ପୂର୍ବେ।}}</translation>
diff --git a/chrome/app/resources/chromium_strings_ru.xtb b/chrome/app/resources/chromium_strings_ru.xtb index d33bcc7..3c6bc1d 100644 --- a/chrome/app/resources/chromium_strings_ru.xtb +++ b/chrome/app/resources/chromium_strings_ru.xtb
@@ -9,6 +9,7 @@ <translation id="1131805035311359397">Чтобы проверить, защищены ли ваши пароли от утечки данных и прочих проблем с безопасностью, <ph name="BEGIN_LINK" />войдите в Chromium<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">О Chromium</translation> <translation id="1315551408014407711">Создайте профиль Chromium</translation> +<translation id="1357932062193643861">Спрашивать во время запуска Chromium</translation> <translation id="1396446129537741364">Вводимые пароли будут отображаться в Chromium.</translation> <translation id="1414495520565016063">Добро пожаловать в Chromium!</translation> <translation id="151962892725702025">Не удалось синхронизировать данные, поскольку сервис Sync недоступен в вашем домене.</translation>
diff --git a/chrome/app/resources/chromium_strings_si.xtb b/chrome/app/resources/chromium_strings_si.xtb index 3fe8afb7..4d0eab5 100644 --- a/chrome/app/resources/chromium_strings_si.xtb +++ b/chrome/app/resources/chromium_strings_si.xtb
@@ -11,6 +11,7 @@ <translation id="1131805035311359397">ඔබගේ මුරපද දත්ත කඩ කිරීම්වලින් සහ අනෙකුත් ආරක්ෂක ගැටලුවලින් සුරක්ෂිතද යන්න පරීක්ෂා කිරීමට, <ph name="BEGIN_LINK" />Chromium වෙත පුරන්න<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">Chromium පිළිබඳ</translation> <translation id="1315551408014407711">ඔබගේ නව Chromium පැතිකඩ පිහිටුවන්න</translation> +<translation id="1357932062193643861">Chromium විවෘත වන විට අසන්න</translation> <translation id="1396446129537741364">Chromium මුරපද පෙන්වීමට උත්සාහ කරමින් සිටී.</translation> <translation id="1414495520565016063">ඔබ Chromium වෙත ප්රවිෂ්ට වී ඇත!</translation> <translation id="151962892725702025">ඔබේ වසම සඳහා සම්මුහුර්ත ලද නොහැකි නිසා Chromium OS හට ඔබේ දත්ත සම්මුහුර්ත කළ නොහැකි විය.</translation>
diff --git a/chrome/app/resources/chromium_strings_sk.xtb b/chrome/app/resources/chromium_strings_sk.xtb index 860b2d8..3f0938b 100644 --- a/chrome/app/resources/chromium_strings_sk.xtb +++ b/chrome/app/resources/chromium_strings_sk.xtb
@@ -11,6 +11,7 @@ <translation id="1131805035311359397">Ak chcete skontrolovať, či sú vaše heslá chránené pred porušením ochrany údajov a inými bezpečnostnými hrozbami, <ph name="BEGIN_LINK" />prihláste sa do prehliadača Chromium<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">Informácie o prehliadači Chromium</translation> <translation id="1315551408014407711">Nastavte si nový profil prehliadača Chromium</translation> +<translation id="1357932062193643861">Opýtať sa pri otvorení prehliadača Chromium</translation> <translation id="1396446129537741364">Prehliadač Chromium sa snaží zobraziť heslá.</translation> <translation id="1414495520565016063">Ste prihlásený/-á do prehliadača Chromium.</translation> <translation id="151962892725702025">Systému OS Chromium sa nepodarilo synchronizovať vaše údaje, pretože možnosť synchronizácie nie je pre vašu doménu k dispozícii.</translation>
diff --git a/chrome/app/resources/chromium_strings_sl.xtb b/chrome/app/resources/chromium_strings_sl.xtb index 972f6c99..0a5a45c0 100644 --- a/chrome/app/resources/chromium_strings_sl.xtb +++ b/chrome/app/resources/chromium_strings_sl.xtb
@@ -11,6 +11,7 @@ <translation id="1131805035311359397">Če želite preveriti, ali so gesla varna pred podatkovnimi kršitvami in drugimi varnostnimi težavami, <ph name="BEGIN_LINK" />se prijavite v Chromium<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">O Chromiumu</translation> <translation id="1315551408014407711">Nastavitev novega profila v Chromiumu</translation> +<translation id="1357932062193643861">Vprašaj, ko se Chromium odpre</translation> <translation id="1396446129537741364">Chromium poskuša prikazati gesla.</translation> <translation id="1414495520565016063">Prijavljeni ste v Chromium.</translation> <translation id="151962892725702025">Chromium OS ni mogel sinhronizirati podatkov, ker sinhronizacija ni na voljo za vašo domeno.</translation>
diff --git a/chrome/app/resources/chromium_strings_sw.xtb b/chrome/app/resources/chromium_strings_sw.xtb index 5fa50ea1b..63c21b8b 100644 --- a/chrome/app/resources/chromium_strings_sw.xtb +++ b/chrome/app/resources/chromium_strings_sw.xtb
@@ -11,6 +11,7 @@ <translation id="1131805035311359397">Ili uangalie kama manenosiri yako ni salama dhidi ya ufichuzi haramu wa data na matatizo mengine ya usalama, <ph name="BEGIN_LINK" />ingia katika akaunti kwenye Chromium<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">Kuhusu Chromium</translation> <translation id="1315551408014407711">Weka mipangilio ya wasifu wako mpya wa Chromium</translation> +<translation id="1357932062193643861">Uliza Chromium inapofunguka</translation> <translation id="1396446129537741364">Chromium inajaribu kuonyesha manenosiri.</translation> <translation id="1414495520565016063">Umeingia kwenye Chromium!</translation> <translation id="151962892725702025">Mfumo wa Uendeshaji wa Chromium haukuweza kusawazisha data yako kwa sababu Usawazishaji haupatikani kwa kikoa chako.</translation>
diff --git a/chrome/app/resources/chromium_strings_ta.xtb b/chrome/app/resources/chromium_strings_ta.xtb index ea3eb29..b32a1b0 100644 --- a/chrome/app/resources/chromium_strings_ta.xtb +++ b/chrome/app/resources/chromium_strings_ta.xtb
@@ -9,6 +9,7 @@ <translation id="1131805035311359397">தரவு மீறல்கள் மற்றும் பிற பாதுகாப்புச் சிக்கல்களிலிருந்து உங்கள் கடவுச்சொற்கள் பாதுகாப்பாக இருக்கின்றனவா என்பதைச் சரிபார்க்க <ph name="BEGIN_LINK" />Chromiumமில் உள்நுழையுங்கள்<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">Chromium அறிமுகம்</translation> <translation id="1315551408014407711">உங்கள் புதிய Chromium சுயவிவரத்தை அமைத்திடுங்கள்</translation> +<translation id="1357932062193643861">Chromiumமைத் திறக்கும்போது கேள்</translation> <translation id="1396446129537741364">Chromium ஆனது கடவுச்சொற்களைக் காட்ட முயற்சிக்கிறது.</translation> <translation id="1414495520565016063">Chromium இல் உள்நுழைந்துள்ளீர்கள்!</translation> <translation id="151962892725702025">உங்கள் களத்திற்கு ஒத்திசைவு கிடைக்கவில்லை என்பதால், Chromium OS ஆல் உங்கள் தரவை ஒத்திசைக்க முடியவில்லை.</translation> @@ -183,6 +184,7 @@ <translation id="6863361426438995919">Google Pay (Chromiumக்கு நகலெடுக்கப்பட்டது)</translation> <translation id="6893813176749746474">Chromium புதுப்பிக்கப்பட்டது. ஆனால், அதை நீங்கள் 30 நாட்களாக பயன்படுத்தவில்லை.</translation> <translation id="6964305034639999644">Chromium மறை&நிலை சாளரத்தில் இணைப்பைத் திற</translation> +<translation id="6978145336957848883">வலுவற்ற கடவுச்சொற்களை யூகிப்பது எளிது என்பதால் <ph name="BEGIN_LINK" />வலிமையான கடவுச்சொற்களை உருவாக்கவும் நினைவில்கொள்ளவும்<ph name="END_LINK" /> Chromiumமை அனுமதியுங்கள்.</translation> <translation id="6990124437352146030">இந்தத் தளத்திற்காக மைக்ரோஃபோனை அணுக Chromiumமுக்கு அனுமதி தேவை</translation> <translation id="701244094609242530">Chromiumமால் உங்கள் நீட்டிப்புகளைச் சரிபார்க்க முடியவில்லை. பிறகு முயலவும்.</translation> <translation id="7028347026395185822">{NUM_HOURS,plural, =1{தெரிந்த தீங்கிழைக்கும் மென்பொருளை உங்கள் கம்ப்யூட்டரில் Chromium கண்டறியவில்லை. கடைசியாகச் சரிபார்த்தது: 1 மணிநேரத்திற்கு முன்பு.}other{தெரிந்த தீங்கிழைக்கும் மென்பொருளை உங்கள் கம்ப்யூட்டரில் Chromium கண்டறியவில்லை. கடைசியாகச் சரிபார்த்தது: {NUM_HOURS} மணிநேரத்திற்கு முன்பு.}}</translation>
diff --git a/chrome/app/resources/chromium_strings_tr.xtb b/chrome/app/resources/chromium_strings_tr.xtb index 9d9566ce..7de46730 100644 --- a/chrome/app/resources/chromium_strings_tr.xtb +++ b/chrome/app/resources/chromium_strings_tr.xtb
@@ -9,6 +9,7 @@ <translation id="1131805035311359397">Şifrelerinizin veri ihlali ve diğer güvenlik sorunlarına karşı güvende olup olmadığını kontrol etmek için <ph name="BEGIN_LINK" />Chromium'da oturum açın<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">Chromium hakkında</translation> <translation id="1315551408014407711">Yeni Chromium profilinizi oluşturun</translation> +<translation id="1357932062193643861">Chromium açıldığında sor</translation> <translation id="1396446129537741364">Chromium, şifreleri göstermeye çalışıyor.</translation> <translation id="1414495520565016063">Chromium'da oturum açtınız!</translation> <translation id="151962892725702025">Senkronizasyon alan adınızda kullanılamadığından Chromium OS, verilerinizi senkronize edemedi.</translation>
diff --git a/chrome/app/resources/chromium_strings_ur.xtb b/chrome/app/resources/chromium_strings_ur.xtb index d28d286..cb19f8a 100644 --- a/chrome/app/resources/chromium_strings_ur.xtb +++ b/chrome/app/resources/chromium_strings_ur.xtb
@@ -185,6 +185,7 @@ <translation id="6863361426438995919">Google Pay (Chromium میں کاپی کر دیا گیا)</translation> <translation id="6893813176749746474">Chromium کو اپ ڈیٹ کر دیا گیا ہے لیکن آپ نے کم از کم 30 دن سے اسے استعمال نہیں کیا ہے۔</translation> <translation id="6964305034639999644">لنک کو Chromium &پوشیدگی ونڈو میں کھولیں</translation> +<translation id="6978145336957848883">کمزور پاس ورڈز کا اندازہ لگانا آسان ہوتا ہے۔ Chromium کو <ph name="BEGIN_LINK" />آپ کے لیے مضبوط پاس ورڈز تخلیق کرنے اور یاد رکھنے دیں<ph name="END_LINK" />۔</translation> <translation id="6990124437352146030">Chromium کو اس سائٹ کیلئے آپ کے مائیکروفون تک رسائی کی اجازت درکار ہے</translation> <translation id="701244094609242530">Chromium آپ کی ایکسٹینشنز چیک نہیں کر سکتا ہے۔ بعد میں دوبارہ کوشش کریں۔</translation> <translation id="7028347026395185822">{NUM_HOURS,plural, =1{Chromium کو آپ کے کمپیوٹر میں معلوم نقصان دہ سافٹ ویئر نہیں ملا۔ آخری بار چیک کیا گیا: 1 گھنٹہ پہلے۔}other{Chromium کو آپ کے کمپیوٹر میں معلوم نقصان دہ سافٹ ویئر نہیں ملا۔ آخری بار چیک کیا گیا: {NUM_HOURS} گھنٹے پہلے۔}}</translation>
diff --git a/chrome/app/resources/chromium_strings_uz.xtb b/chrome/app/resources/chromium_strings_uz.xtb index ee443e6..b56b58e 100644 --- a/chrome/app/resources/chromium_strings_uz.xtb +++ b/chrome/app/resources/chromium_strings_uz.xtb
@@ -174,7 +174,7 @@ Ba’zi imkoniyatlar ishlamasligi mumkin. Profilni saqlash uchun boshqa jild tayinlang yoki yangiroq Chromium versiyasidan foydalaning.</translation> <translation id="6734080038664603509">&Chromium‘ni yangilash</translation> <translation id="6734291798041940871">Chromium allaqachon kompyuterdagi barcha foydalanuvchilar uchun o‘rnatilgan.</translation> -<translation id="6737557815519435616">Chromium kompyuteringizda zararli dasturlarni topa olmadi. Oxirgi marta: hozirgina tekshirilgan.</translation> +<translation id="6737557815519435616">Chromium kompyuteringizda zararli dasturlarni topa olmadi. Oxirgi marta: hozirgina tekshirildi.</translation> <translation id="6762551859069255163">Internetni ish va shaxsiy maqsadlarda yoki bu qurilmadagi boshqa foydalanuvchilar kezishini ajratish uchun Chromiumda turli profillardan foydalaning</translation> <translation id="6774082503108938489">Chromiumdagi “Sayt, ilova va kengaytmalarga ruxsat” ota-onangiz tomonidan faolsizlantirilgan. Bu <ph name="EXTENSION_TYPE_PARAMETER" /> yoqilishi taqiqlangan.</translation> <translation id="6847869444787758381">Parollaringiz oshkor etilsa, Chromium bu haqida xabar qiladi</translation>
diff --git a/chrome/app/resources/chromium_strings_vi.xtb b/chrome/app/resources/chromium_strings_vi.xtb index acd0260..d32751bf 100644 --- a/chrome/app/resources/chromium_strings_vi.xtb +++ b/chrome/app/resources/chromium_strings_vi.xtb
@@ -9,6 +9,7 @@ <translation id="1131805035311359397">Để kiểm tra xem mật khẩu của bạn có bị ảnh hưởng bởi các vụ rò rỉ dữ liệu và sự cố bảo mật khác hay không, hãy <ph name="BEGIN_LINK" />đăng nhập vào Chromium<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">Giới thiệu về Chromium</translation> <translation id="1315551408014407711">Thiết lập hồ sơ Chromium mới</translation> +<translation id="1357932062193643861">Hỏi khi Chromium mở</translation> <translation id="1396446129537741364">Chromium đang cố gắng hiển thị mật khẩu.</translation> <translation id="1414495520565016063">Bạn đã đăng nhập vào Chromium!</translation> <translation id="151962892725702025">Chromium OS không thể đồng bộ hóa dữ liệu của bạn vì Đồng bộ hóa không khả dụng với miền của bạn.</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-CN.xtb b/chrome/app/resources/chromium_strings_zh-CN.xtb index 86ddda4..4b50e59 100644 --- a/chrome/app/resources/chromium_strings_zh-CN.xtb +++ b/chrome/app/resources/chromium_strings_zh-CN.xtb
@@ -9,6 +9,7 @@ <translation id="1131805035311359397">若要检查您的密码是否未曾遭遇数据泄露和其他安全问题,请<ph name="BEGIN_LINK" />登录 Chromium<ph name="END_LINK" />。</translation> <translation id="1185134272377778587">关于 Chromium</translation> <translation id="1315551408014407711">设置您的新 Chromium 个人资料</translation> +<translation id="1357932062193643861">在 Chromium 打开时询问</translation> <translation id="1396446129537741364">Chromium 正尝试显示密码。</translation> <translation id="1414495520565016063">您已登录 Chromium!</translation> <translation id="151962892725702025">由于您的网域停用了同步功能,Chromium操作系统无法同步您的数据。</translation>
diff --git a/chrome/app/resources/chromium_strings_zh-TW.xtb b/chrome/app/resources/chromium_strings_zh-TW.xtb index 138f3dd6..a92125a6 100644 --- a/chrome/app/resources/chromium_strings_zh-TW.xtb +++ b/chrome/app/resources/chromium_strings_zh-TW.xtb
@@ -9,6 +9,7 @@ <translation id="1131805035311359397">如要檢查你的密碼是否因資料侵害事件而遭到外洩,或是否有其他安全性問題,<ph name="BEGIN_LINK" />請登入 Chromium<ph name="END_LINK" />。</translation> <translation id="1185134272377778587">關於 Chromium</translation> <translation id="1315551408014407711">設定新的 Chromium 設定檔</translation> +<translation id="1357932062193643861">在 Chromium 開啟時詢問</translation> <translation id="1396446129537741364">Chromium 即將顯示密碼。</translation> <translation id="1414495520565016063">你已登入 Chromium!</translation> <translation id="151962892725702025">你的網域無法使用「同步功能」,因此 Chromium 作業系統無法同步處理你的資料。</translation>
diff --git a/chrome/app/resources/chromium_strings_zu.xtb b/chrome/app/resources/chromium_strings_zu.xtb index edf9b757..aaa3c27 100644 --- a/chrome/app/resources/chromium_strings_zu.xtb +++ b/chrome/app/resources/chromium_strings_zu.xtb
@@ -11,6 +11,7 @@ <translation id="1131805035311359397">Ukuze uhlole uma ngabe amaphasiwedi akho aphephile yini kusukela ekuphulweni kwedatha nakwezinye izinkinga zokuvikela, <ph name="BEGIN_LINK" />ngena ngemvume ku-Chromium<ph name="END_LINK" />.</translation> <translation id="1185134272377778587">Mayelana ne-Chromium</translation> <translation id="1315551408014407711">Setha iphrofayela yakho entsha ye-Chromium</translation> +<translation id="1357932062193643861">Buza uma i-Chromium ivuleka</translation> <translation id="1396446129537741364">I-Chromium izama ukubonisa amaphasiwedi.</translation> <translation id="1414495520565016063">Ungene ngemvume ku-Chromium!</translation> <translation id="151962892725702025">I-Chromium OS ayikwazanga ukuvumelanisa idatha yakho ngoba Ukuvumelanisa akutholakali kusizinda sakho.</translation>
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb index 5070fbe..0c3f3118 100644 --- a/chrome/app/resources/generated_resources_af.xtb +++ b/chrome/app/resources/generated_resources_af.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">Jou Dokumente-, Blaaie-, Skyfies- en Sketse-lêers word tans gesinkroniseer. Maak die Google Drive-program oop om hulle aanlyn of vanlyn te gebruik.</translation> <translation id="1012876632442809908">USB C-toestel (poort aan voorkant)</translation> <translation id="1013707859758800957">'n Inprop wat nie gesandput is nie, is toegelaat om op hierdie bladsy te werk.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">Wysig vouernaam</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{Laaste dag om <ph name="DEVICE_TYPE" /> op te dateer}other{Dateer <ph name="DEVICE_TYPE" /> binne {NUM_DAYS} dae op}}</translation> <translation id="1016566241875885511">Bykomende inligting (opsioneel)</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index 36449c8..1397c77 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">تجري مزامنة المستندات وجداول البيانات والعروض التقديمية والرسومات. افتح تطبيق Google Drive للدخول إليها على الإنترنت أو بلا إنترنت.</translation> <translation id="1012876632442809908">جهاز USB-C (المنفذ الأمامي)</translation> <translation id="1013707859758800957">تم السماح بتشغيل مكون إضافي غير محمي على هذه الصفحة.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">تعديل اسم المجلد</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{آخر يوم لتحديث جهاز <ph name="DEVICE_TYPE" />}zero{يجب تحديث جهاز <ph name="DEVICE_TYPE" /> خلال {NUM_DAYS} يوم}two{يجب تحديث جهاز <ph name="DEVICE_TYPE" /> خلال يومَين ({NUM_DAYS})}few{يجب تحديث جهاز <ph name="DEVICE_TYPE" /> خلال {NUM_DAYS} أيام}many{يجب تحديث جهاز <ph name="DEVICE_TYPE" /> خلال {NUM_DAYS} يومًا}other{يجب تحديث جهاز <ph name="DEVICE_TYPE" /> خلال {NUM_DAYS} يوم}}</translation> <translation id="1016566241875885511">معلومات إضافية (اختياري)</translation> @@ -1432,7 +1433,7 @@ <translation id="2638662041295312666">صورة الملف الشخصي</translation> <translation id="2640549051766135490">تمّ اختيار ألبوم <ph name="TITLE" /> <ph name="DESC" /></translation> <translation id="264083724974021997">الاتصال بهاتفك - مربع حوار</translation> -<translation id="2641065435954454414">جارٍ التحضير للتنزيل</translation> +<translation id="2641065435954454414">جارٍ التحضير لعملية التنزيل</translation> <translation id="2642111877055905627">كرة القدم</translation> <translation id="2643698698624765890">يمكنك إدارة الإضافات من خلال النقر على "الإضافات" في القائمة "نافذة".</translation> <translation id="264810637653812429">لم يتم العثور على أي أجهزة متوافقة.</translation> @@ -7086,6 +7087,6 @@ <translation id="994289308992179865">ت&كرار</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">إنشاء اتصال آمن...</translation> -<translation id="99731366405731005">يُرجي تفعيل <ph name="LINK1_BEGIN" />مزامنة Chrome<ph name="LINK1_END" /> لاستخدام ميزة "مزامنة الواي فاي". <ph name="LINK2_BEGIN" />مزيد من المعلومات<ph name="LINK2_END" /></translation> +<translation id="99731366405731005">يُرجى تفعيل <ph name="LINK1_BEGIN" />مزامنة Chrome<ph name="LINK1_END" /> لاستخدام ميزة "مزامنة الواي فاي". <ph name="LINK2_BEGIN" />مزيد من المعلومات<ph name="LINK2_END" /></translation> <translation id="998747458861718449">ف&حص</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb index 3f7f6c3f78..a2ba815 100644 --- a/chrome/app/resources/generated_resources_as.xtb +++ b/chrome/app/resources/generated_resources_as.xtb
@@ -925,6 +925,7 @@ <translation id="204914487372604757">শ্বৰ্টকাট সৃষ্টি কৰক</translation> <translation id="2050339315714019657">প’ৰ্ট্ৰেইট</translation> <translation id="2053312383184521053">নিষ্ক্ৰিয় স্থিতিৰ ডেটা</translation> +<translation id="2054665754582400095">আপোনাৰ উপস্থিতি</translation> <translation id="2055585478631012616">খোলা থকা টেবসমূহকে ধৰি আপুনি এই ছাইটসমূহৰ পৰা ছাইন আউট হৈ যাব</translation> <translation id="205560151218727633">Google সহায়কৰ ল’গ’</translation> <translation id="2058456167109518507">ডিভাইচ চিনাক্ত কৰা হৈছে</translation> @@ -1211,6 +1212,7 @@ <translation id="2387052489799050037">গৃহপৃষ্ঠালৈ যাওক</translation> <translation id="2387458720915042159">প্ৰক্সি সংযোগৰ প্ৰকাৰ</translation> <translation id="2390347491606624519">প্ৰক্সিৰ সৈতে সংযোগ কৰিব নোৱাৰি, অনুগ্ৰহ কৰি পুনৰ ছাইন ইন কৰক</translation> +<translation id="2390782873446084770">ৱাই-ফাই ছিংক</translation> <translation id="2391082728065870591">মতামত বিষয়ক ৰিপ’ৰ্টটো পঠিয়াওক</translation> <translation id="2391419135980381625">মান্য ফণ্ট</translation> <translation id="2392163307141705938">আপোনাৰ অভিভাৱকে <ph name="IDS_SHORT_PRODUCT_NAME" />ৰ বাবে ছেট কৰা সময়সীমাত আপুনি উপনীত হৈছে।</translation> @@ -1867,6 +1869,7 @@ <translation id="3157931365184549694">পুনঃস্থাপন কৰক</translation> <translation id="3158033540161634471">আপোনাৰ ফিংগাৰপ্ৰিণ্ট ছেট আপ কৰক</translation> <translation id="3159493096109238499">মুগা-চানেকীয়া</translation> +<translation id="3159978855457658359">ডিভাইচৰ নাম সম্পাদনা কৰক</translation> <translation id="3160842278951476457"><ph name="ISSUED_BY" /> [<ph name="ISSUED_TO" />] (হাৰ্ডৱেৰ-সমৰ্থিত)</translation> <translation id="3161522574479303604">সকলো ভাষা</translation> <translation id="3162853326462195145">বিদ্যালয় একাউণ্ট</translation> @@ -3223,6 +3226,7 @@ <translation id="4761104368405085019">আপোনাৰ মাইক্ৰ’ফ’ন ব্যৱহাৰ কৰক</translation> <translation id="4762718786438001384">ডিভাইচৰ ডিস্কত ঠাই একেবাৰে কম আছে</translation> <translation id="4763408175235639573">আপুনি এই পৃষ্ঠাটো চাওঁতে তলৰ কুকিসমূহ ছেট কৰা হৈছিল</translation> +<translation id="4764368918650455114">দুয়োটা ডিভাইচ আনলক কৰাটো, এটা আনটোৰ ওচৰত থকাটো আৰু ব্লুটুথ অন হৈ থকাটো নিশ্চিত কৰক। আপুনি যদি কোনো Chromebookৰ সৈতে শ্বেয়াৰ কৰি আছে, নিশ্চিত কৰি লওক যে সেইটোৰ নিকটৱৰ্তী শ্বেয়াৰিঙৰ সুবিধাটো অন কৰা থাকে (সময়টো বাছনি কৰি বিভিন্ন স্থিতি দেখুওৱা ঠাইখিনি খোলক, তাৰ পাছত নিকটৱৰ্তী শ্বেয়াৰ কৰাৰ সুবিধাটো বাছনি কৰক)। <ph name="LINK_BEGIN" />অধিক জানক<ph name="LINK_END" /></translation> <translation id="4765582662863429759">আপোনাৰ ফনৰ পৰা Chromebookলৈ পাঠ ৰিলে’ কৰিবলৈ Android Messagesক অনুমতি দিয়ে</translation> <translation id="476598255842811483">আপোনাৰ ডিভাইচত আপুনি নিকটৱৰ্তী শ্বেয়াৰ কৰাৰ সুবিধাটো নোখোলা পৰ্যন্ত কোনেও নোৱাৰে</translation> <translation id="4768332406694066911">আপোনাক চিনি পোৱা এই প্ৰতিষ্ঠানবোৰে প্ৰদান কৰা প্ৰমাণপত্ৰ আছে</translation> @@ -3385,6 +3389,7 @@ <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation> <translation id="496185450405387901">এই এপ্টো আপোনাৰ প্ৰশাসকে ইনষ্টল কৰিছে।</translation> <translation id="4964455510556214366">সজ্জা</translation> +<translation id="496446150016900060">আপোনাৰ ফ’নৰ সৈতে ৱাই-ফাই নেটৱৰ্ক ছিংক কৰক</translation> <translation id="4965808351167763748">আপুনি এই ডিভাইচটোত Hangouts Meet চলাবলৈ ছেট আপ কৰিব বিচৰাটো নিশ্চিতনে?</translation> <translation id="496888482094675990">Files এপে আপুনি Google Drive, বাহ্যিক ষ্ট'ৰেজ বা আপোনাৰ Chrome OS ডিভাইচত ছেভ কৰি থোৱা ফাইলত দ্ৰুত এক্সেছ প্রদান কৰে।</translation> <translation id="4971412780836297815">ডাউনল’ড সম্পূর্ণ হ’লে খোলক</translation> @@ -3691,6 +3696,7 @@ <translation id="5341980496415249280">পেক হৈ আছে, অপেক্ষা কৰক...</translation> <translation id="5342091991439452114">পিনটোত অতি কমেও <ph name="MINIMUM" />টা অংক থাকিব লাগিব</translation> <translation id="5344036115151554031">Linux পুনঃস্থাপন কৰি থকা হৈছে</translation> +<translation id="5345916423802287046">আপুনি ছাইন ইন কৰিলে এপ্টো আৰম্ভ কৰক</translation> <translation id="5350293332385664455">Google Assistant বন্ধ কৰক</translation> <translation id="535123479159372765">অন্য ডিভাইচৰ পৰা প্ৰতিলিপি কৰা পাঠ</translation> <translation id="5352033265844765294">সময়ৰ মোহৰ লগোৱা কাৰ্য</translation> @@ -3999,6 +4005,7 @@ <translation id="5704875434923668958">ইয়ালৈ ছিংক কৰি থকা হৈছে</translation> <translation id="5705005699929844214">সাধ্য সুবিধাৰ বিকল্পসমূহ সদায় দেখুৱাওক</translation> <translation id="5705882733397021510">উভতি যাওক</translation> +<translation id="5707117624115653804">এই ছেটিংটো সমৰ্থন কৰা এপ্ আৰু ছাইটসমূহৰ বাবে কেপশ্বনৰ আকাৰ আৰু শৈলী কাষ্টমাইজ কৰক</translation> <translation id="5707185214361380026">এইটোৰ পৰা এক্সটেনশ্বন ল’ড কৰিব পৰা নগ’ল:</translation> <translation id="5708171344853220004">Microsoft Principal Name</translation> <translation id="5709557627224531708">Chromeক আপোনাৰ ডিফ'ল্ট ব্ৰাউজাৰ হিচাপে ছেট কৰক</translation> @@ -4162,6 +4169,7 @@ <translation id="5904614460720589786">কনফিগাৰেশ্বন সম্পৰ্কীয় এটা সমস্যাৰ বাবে <ph name="APP_NAME" /> ছেট আপ কৰিব পৰা নগ’ল। অনুগ্ৰহ কৰি আপোনাৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক। আসোঁৱাহ ক’ড: <ph name="ERROR_CODE" />।</translation> <translation id="5906655207909574370">প্ৰায় আপ টু ডে’ট! আপডে’ট কৰা সম্পূৰ্ণ কৰিবলৈ আপোনাৰ ডিভাইচটো ৰিষ্টার্ট কৰক।</translation> <translation id="5906732635754427568">এই এপ্টোৰ সৈতে জড়িত ডেটা এই ডিভাইচটোৰ পৰা আঁতৰোৱা হ’ব।</translation> +<translation id="5908474332780919512">আপুনি ছাইন ইন কৰিলে এপ্টো আৰম্ভ কৰক</translation> <translation id="5908695239556627796">মাউছ স্ক্ৰ’লৰ গতিবেগ</translation> <translation id="5908769186679515905">ছাইটসমূহে Flash চলোৱা কার্য অৱৰোধ কৰক</translation> <translation id="5910363049092958439">এইবুলি প্ৰতিচ্ছবি ছে&ভ কৰক...</translation> @@ -4699,6 +4707,7 @@ <translation id="6532527800157340614">আপোনাৰ এক্সেছ ট’কেনটো পুনৰুদ্ধাৰ কৰিব নোৱৰাৰ বাবে ছাইন ইন বিফল হৈছে। অনুগ্ৰহ কৰি আপোনাৰ নেটৱৰ্ক সংযোগ পৰীক্ষা কৰক আৰু পুনৰ চেষ্টা কৰক।</translation> <translation id="6532663472409656417">এণ্টাৰপ্ৰাইজৰ পঞ্জীয়ন কৰা হৈছে</translation> <translation id="6535331821390304775"><ph name="ORIGIN" />ক সহযোগী এপ্টোত এই ধৰণৰ লিংকসমূহ সদায় খুলিবলৈ অনুমতি দিয়ক</translation> +<translation id="6537613839935722475">নামত আখৰ, সংখ্যা আৰু হাইফেন (-) থাকিব পাৰে</translation> <translation id="6538635548667167211">বৰ্তমানৰ ডেটাৰ ব্যৱহাৰৰ ছেটিংটো হৈছে ডেটা</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />টোকা:<ph name="END_BOLD" /> আপুনি কৰি থকা কার্যৰ বিষয়ে জানিলেহে বা আপোনাক এয়া সক্ষম কৰিবলৈ ক’লেহে সক্ষম কৰক, কাৰণ ডেটা সংগ্ৰহে কার্যদক্ষতা হ্ৰাস কৰিব পাৰে।</translation> <translation id="6541638731489116978">ছাইটসমূহে আপোনাৰ ম'শ্বন ছেন্সৰসমূহ এক্সেছ কৰাত অৱৰোধ কৰা হৈছে।</translation> @@ -4786,6 +4795,7 @@ <translation id="6650234781371031356">আপোনাৰ <ph name="WEBSITE" />ৰ পাছৱৰ্ডটো এই ডিভাইচটোত আৰু আপোনাৰ Google একাউণ্টত ষ্ট’ৰ কৰা আছে। আপুনি কোনটো মচিব বিচাৰে?</translation> <translation id="665061930738760572">&নতুন ৱিণ্ড’ত খোলক</translation> <translation id="6651237644330755633">ৱেবছাইটসমূহক চিনাক্ত কৰিবলৈ এই প্ৰমাণপত্ৰখনক বিশ্বাস কৰক</translation> +<translation id="6651495917527016072">আপোনাৰ ফ’নৰ সৈতে ৱাই-ফাই নেটৱৰ্ক ছিংক কৰক। <ph name="LINK_BEGIN" />অধিক জানক<ph name="LINK_END" /></translation> <translation id="665355505818177700">Chrome <ph name="MS_AD_NAME" />ৰ ইণ্টিগ্ৰে’শ্বন কেৱল x86_64 প্লেটফৰ্মতহে সমৰ্থিত। ARM বা x86 প্লেটফৰ্মৰ ওপৰত নিৰ্মিত Chromebooksএ এই কাৰ্যক্ষমতাটো সমৰ্থন নকৰে।</translation> <translation id="6654509035557065241">নেটৱৰ্কক অগ্ৰাধিকাৰ দিয়ক</translation> <translation id="6655190889273724601">বিকাশকর্তাৰ ম’ড</translation> @@ -5387,6 +5397,7 @@ <translation id="7375235221357833624">{0,plural, =1{এঘণ্টাৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}one{# ঘণ্টাৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}other{# ঘণ্টাৰ ভিতৰত ডিভাইচটো আপডে’ট কৰক}}</translation> <translation id="7376553024552204454">গতি কৰিলে মাউছৰ কাৰ্ছৰ হাইলাইট কৰক</translation> <translation id="7377451353532943397">ছেন্সৰৰ এক্সেছ অৱৰোধ কৰাটো অব্যাহত ৰাখক</translation> +<translation id="7378611153938412599">দুৰ্বল পাছৱৰ্ডসমূহ অনুমান কৰিবলৈ সহজ। আপুনি শক্তিশালী পাছৱৰ্ড সৃষ্টি কৰি আছে বুলি নিশ্চিত হৈ লওক। <ph name="BEGIN_LINK" />সুৰক্ষা সম্পৰ্কীয় অধিক কিটিপ চাওক।<ph name="END_LINK" /></translation> <translation id="73786666777299047">Chrome Web Store খোলক</translation> <translation id="7378812711085314936">ডেটা সংযোগ লওক</translation> <translation id="7380622428988553498">ডিভাইচৰ নামত অমান্য বৰ্ণ আছে</translation> @@ -5909,6 +5920,7 @@ <translation id="7959074893852789871">ফাইলটোত একাধিক প্ৰমাণপত্ৰ আছে আৰু তাৰে কেইখনমান আমদানি কৰা হোৱা নাই:</translation> <translation id="7961015016161918242">কেতিয়াও নহয়</translation> <translation id="7963001036288347286">টাচ্পেডৰ এক্সিলাৰেশ্বন</translation> +<translation id="7963608432878156675">ব্লুটুথ আৰু নেটৱৰ্ক সংযোগৰ বাবে এই নামটো অন্য ডিভাইচসমূহে দেখা পায়</translation> <translation id="7963826112438303517">আপোনাৰ Assistantএ এই ৰেকর্ডিংসমূহ আৰু আপোনাৰ কথিত অনুৰোধসমূহ আপোনাৰ কণ্ঠধ্বনিৰ ম’ডেল সৃষ্টি কৰিবলৈ ব্যৱহাৰ কৰে, যিটো কেৱল আপোনাৰ কণ্ঠধ্বনি মিলোৱা সুবিধাটো অন কৰি ৰখা ডিভাইচসমূহত ষ্ট’ৰ কৰা হয়। Assistantৰ ছেটিংসমূহ-ত কণ্ঠধ্বনি চাওক বা পুনৰাই প্ৰশিক্ষণ দিয়ক।</translation> <translation id="7966241909927244760">প্ৰতিচ্ছবিৰ ঠিকনা প্ৰ&তিলিপি কৰক</translation> <translation id="7966571622054096916">{COUNT,plural, =1{বুকমাৰ্কৰ তালিকাত ১ টা বস্তু আছে}one{বুকমাৰ্কৰ তালিকাত {COUNT} টা বস্তু আছে}other{বুকমাৰ্কৰ তালিকাত {COUNT} টা বস্তু আছে}}</translation> @@ -6371,6 +6383,7 @@ <translation id="850875081535031620">কোনো ক্ষতিকাৰক ছফ্টৱেৰ পোৱা নগ'ল</translation> <translation id="8509177919508253835">সুৰক্ষা চাবিসমূহ ৰিছেট কৰি পিন সৃষ্টি কৰক</translation> <translation id="8509646642152301857">বানান পৰীক্ষা কৰা অভিধান ডাউনল’ড কৰিব পৰা নগ’ল।</translation> +<translation id="8512396579636492893">{COUNT,plural, =0{কোনো দুৰ্বল পাছৱৰ্ড বিচাৰি পোৱা নগ’ল}=1{{COUNT} টা দুৰ্বল পাছৱৰ্ড বিচাৰি পোৱা গৈছে}one{{COUNT} টা দুৰ্বল পাছৱৰ্ড বিচাৰি পোৱা গৈছে}other{{COUNT} টা দুৰ্বল পাছৱৰ্ড বিচাৰি পোৱা গৈছে}}</translation> <translation id="8512476990829870887">প্ৰক্ৰিয়া সমাপ্ত কৰক</translation> <translation id="851263357009351303"><ph name="HOST" />ক সদায়েই প্ৰতিচ্ছবি দেখুৱাবলৈ অনুমতি দিয়ক</translation> <translation id="8513108775083588393">স্বয়ং-ঘূৰ্ণন</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb index 91317f1cb..1c99016 100644 --- a/chrome/app/resources/generated_resources_be.xtb +++ b/chrome/app/resources/generated_resources_be.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">Файлы ў Дакументах, Табліцах, Прэзентацыях і Рысунках сінхранізуюцца. Адкрыць іх праз інтэрнэт або па-за сеткай можна ў праграме "Google Дыск".</translation> <translation id="1012876632442809908">Прылада USB-C (пярэдні порт)</translation> <translation id="1013707859758800957">На гэтай старонцы дазволена не змешчаная ў пясочніку ўбудова.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">Змяніць назву папкі</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{Апошні дзень для абнаўлення прылады "<ph name="DEVICE_TYPE" />"}one{Абнавіце прыладу "<ph name="DEVICE_TYPE" />" на працягу {NUM_DAYS} дня}few{Абнавіце прыладу "<ph name="DEVICE_TYPE" />" на працягу {NUM_DAYS} дзён}many{Абнавіце прыладу "<ph name="DEVICE_TYPE" />" на працягу {NUM_DAYS} дзён}other{Абнавіце прыладу "<ph name="DEVICE_TYPE" />" на працягу {NUM_DAYS} дня}}</translation> <translation id="1016566241875885511">Дадатковыя звесткі (неабавязкова)</translation> @@ -957,7 +958,7 @@ <translation id="2090165459409185032">Каб аднавіць даныя ўліковага запісу, перайдзіце па спасылцы: google.com/accounts/recovery</translation> <translation id="2090876986345970080">Налада бяспекі сістэмы</translation> <translation id="2091887806945687916">Гук</translation> -<translation id="209539936453343974">Для наладжвання бацькоўскага кантролю ў дзіцяці павінен быць Уліковы запіс Google, якім будзе кіраваць нехта з бацькоў. Выкарыстоўваючы прылады <ph name="DEVICE_TYPE_PLURAL" /> разам з праграмай Family Link бацькі змогуць задаваць абмежаванні часу карыстання прыладамі, даваць дазвол на наведванне вэб-сайтаў або блакіраваць іх і не толькі. Калі дзіцяці трэба выконваць школьныя заданні на такіх сайтах, як Google Клас, навучальны ўліковы запіс можна дадаць пазней.</translation> +<translation id="209539936453343974">Для наладжвання бацькоўскага кантролю ў дзіцяці павінен быць Уліковы запіс Google, якім будзе кіраваць нехта з бацькоў. Выкарыстоўваючы прылады <ph name="DEVICE_TYPE_PLURAL" /> разам з праграмай Family Link, бацькі змогуць задаваць абмежаванні часу карыстання прыладамі, даваць дазвол на наведванне вэб-сайтаў або блакіраваць іх і не толькі. Калі дзіцяці трэба выконваць школьныя заданні на такіх сайтах, як Google Клас, навучальны ўліковы запіс можна дадаць пазней.</translation> <translation id="2096715839409389970">Выдаліць староннія файлы cookie</translation> <translation id="2097372108957554726">Каб рэгістраваць новыя прылады, трэба ўвайсці ў Chrome</translation> <translation id="2098805196501063469">Праверыць астатнія паролі</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index ad96d4b..7e6412e8 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">Файловете ви в Документи, Таблици, Презентации и Чертежи се синхронизират. Отворете приложението Google Диск, за да осъществите достъп до тях онлайн или офлайн.</translation> <translation id="1012876632442809908">USB-C устройство (предният порт)</translation> <translation id="1013707859758800957">На тази страница бе разрешено изпълняването на приставка извън тестова среда.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">Редактиране на името на папката</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{Последен ден за актуализиране на <ph name="DEVICE_TYPE" />}other{Актуализирайте <ph name="DEVICE_TYPE" /> в рамките на {NUM_DAYS} дни}}</translation> <translation id="1016566241875885511">Допълнителна информация (незадължително)</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index eb397e6..1931011 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -870,6 +870,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> ADB ডিবাগিং বন্ধ করে দিয়েছে। এতে ২৪ ঘণ্টায় আপনার <ph name="DEVICE_TYPE" /> রিসেট হয়ে যাবে। কোনও ফাইল রাখতে চাইলে, সেটির ব্যাক-আপ নিন।</translation> <translation id="1977965994116744507">আপনার <ph name="DEVICE_TYPE" /> আনলক করতে আপনার ফোন কাছাকাছি আনুন।</translation> <translation id="1978006917103730774">ভবিষ্যতে সফ্টওয়্যার এবং সুরক্ষা সংক্রান্ত আপডেট অটোমেটিক ইনস্টল হয়ে যাবে।</translation> +<translation id="1978057560491495741">ঠিকানা সরিয়ে দিন</translation> <translation id="1979095679518582070">এই ফিচারটি বন্ধ করে দিলেও এই ডিভাইসটি সিস্টেম আপডেট এবং নিরাপত্তার জন্য প্রয়োজনীয় পরিষেবা সম্পর্কিত তথ্য পাঠাতে পারে।</translation> <translation id="1979280758666859181"><ph name="PRODUCT_NAME" />-এর পুরনো ভার্সন দিয়ে একটি চ্যানেলে পরিবর্তন করছেন৷ যখন আপনার ডিভাইসে বর্তমানে ইনস্টল করা ভার্সনের সঙ্গে চ্যানেলের ভার্সনটি মিলে যাবে তখনই চ্যানেল পরিবর্তন প্রযুক্ত হবে৷</translation> <translation id="197989455406964291">উল্লিখিত এনক্রিপশনের ধরন KDC-তে কাজ করে না</translation> @@ -1071,6 +1072,7 @@ <translation id="2224444042887712269">এই সেটিংটি <ph name="OWNER_EMAIL" /> এর৷</translation> <translation id="2224551243087462610">ফোল্ডার নাম সম্পাদনা করুন</translation> <translation id="2225864335125757863">আপনার অ্যাকাউন্ট নিরাপদে রাখতে এই পাসওয়ার্ডগুলি পরিবর্তন করুন:</translation> +<translation id="2226204716217107988">অন্য প্রোফাইলে পরিবর্তন করবেন?</translation> <translation id="2226449515541314767">MIDI ডিভাইসগুলির সম্পূর্ণ নিয়ন্ত্রণ থেকে এই সাইটিকে অবরুদ্ধ করা হয়েছে৷</translation> <translation id="2226907662744526012">পিন লেখা হলে অটোমেটিক আনলক করার সুবিধা চালু করুন</translation> <translation id="222704500187107962">আপনি ছদ্মবেশী সেশন ছেড়ে গেলেই অটোমেটিক ভাবে এই এক্সেপশন সরিয়ে দেওয়া হবে</translation> @@ -1140,6 +1142,7 @@ <translation id="2307462900900812319">নেটওয়ার্ক কনফিগার করুন</translation> <translation id="230927227160767054">এই পৃষ্ঠাটি একটি পরিষেবা নিয়ন্ত্রক ইনস্টল করতে চায়৷</translation> <translation id="2309620859903500144">এই সাইটটি আপনার মোশন এবং লাইট সেন্সর অ্যাক্সেস করতে পারবে না।</translation> +<translation id="2312219318583366810">পৃষ্ঠার ইউআরএল</translation> <translation id="2314165183524574721">বর্তমানে 'ডিভাইসের দৃশ্যমানতা' সেটিং লুকানো রয়েছে</translation> <translation id="2314774579020744484">পৃষ্ঠা অনুবাদ করার সময় ব্যবহার করা ভাষা</translation> <translation id="2315414688463285945">Linux ফাইল কনফিগার করতে সমস্যা হচ্ছে। আবার চেষ্টা করুন।</translation> @@ -2342,6 +2345,7 @@ <translation id="3713047097299026954">এই নিরাপত্তা কীয়ে কোনও সাইন-ইন ডেটা নেই</translation> <translation id="3714195043138862580">এই ডেমো ডিভাইসটির অধিকার বাতিল করা হয়েছে।</translation> <translation id="3714633008798122362">ওয়েব ক্যালেন্ডার</translation> +<translation id="3715954932774762075">যেসব অ্যাপ ও ওয়েবসাইট একাধিক ভাষায় উপলভ্য রয়েছে সেগুলি এই তালিকা থেকে উপযুক্ত প্রথম ভাষাটি ব্যবহার করবে। আপনার ব্রাউজার সেটিংসের সাথে এই পছন্দগুলি সিঙ্ক করা আছে। <ph name="BEGIN_LINK_LEARN_MORE" />আরও জানুন<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">হোমপেজ</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">আপনি এবং Google</translation> @@ -2502,6 +2506,7 @@ <translation id="3882165008614329320">ক্যামেরা বা ফাইলে আগে থেকে থাকা ভিডিও</translation> <translation id="3886446263141354045">এই সাইটটি অ্যাক্সেস করার জন্য আপনার অনুরোধ <ph name="NAME" />কে পাঠানো হয়েছে</translation> <translation id="3888550877729210209"><ph name="LOCK_SCREEN_APP_NAME" /> ব্যবহার করে নোট নেওয়া হচ্ছে</translation> +<translation id="3890064827463908288">ওয়াই-ফাই সিঙ্ক ব্যবহার করতে Chrome সিঙ্ক চালু করুন</translation> <translation id="3892414795099177503">OpenVPN / L2TP যোগ করুন...</translation> <translation id="3893536212201235195">আপনার অ্যাক্সেসিবিলিটি সেটিংস পড়ুন ও পরিবর্তন করুন</translation> <translation id="3893630138897523026">ChromeVox (কথ্য প্রতিবার্তা)</translation> @@ -3772,6 +3777,7 @@ <translation id="5449588825071916739">সবকটি ট্যাব বুকমার্ক করুন...</translation> <translation id="5449716055534515760">Close Win&dow</translation> <translation id="5452974209916053028">বর্তমান ছদ্মবেশী সেশন: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">ক্যাপশন বাবল বাঁদিক থেকে ডানদিকে <ph name="POSITION_ON_SCREEN_FROM_LEFT" />%, উপর থেকে নিচে <ph name="POSITION_ON_SCREEN_FROM_TOP" />% সরানো হয়েছে</translation> <translation id="5454166040603940656"><ph name="PROVIDER" /> সহ</translation> <translation id="5457113250005438886">ভুল</translation> <translation id="5457459357461771897">আপনার কম্পিউটার থেকে ফটো, সঙ্গীত ও অন্যান্য মিডিয়া পড়ুন এবং মুছুন</translation> @@ -3915,6 +3921,7 @@ <translation id="5602765853043467355">এই ডিভাইসের বুকমার্ক, ইতিহাস, পাসওয়ার্ড এবং আরও অনেক কিছু খালি করুন</translation> <translation id="5605623530403479164">অন্যান্য সার্চ ইঞ্জিন</translation> <translation id="5605758115928394442">এটি যে আপনি তা কনফার্ম করতে আপনার ফোনে একটি বিজ্ঞপ্তি পাঠানো হয়েছে।</translation> +<translation id="560834977503641186">Wi-Fi সিঙ্ক, আরও জানুন</translation> <translation id="5608580678041221894">কাটছাঁট করার এলাকা সমন্বয় করতে বা সরাতে নীচের কী’গুলি আলতো চাপুন</translation> <translation id="5609231933459083978">অ্যাপটি ভুল বলে মনে হচ্ছে৷</translation> <translation id="5610038042047936818">ক্যামেরা মোডে যান</translation> @@ -4106,6 +4113,7 @@ <translation id="5841270259333717135">ইথারনেট কনফিগার করুন</translation> <translation id="5842497610951477805">ব্লুটুথ সক্ষম</translation> <translation id="5843706793424741864">ফারেনহাইট</translation> +<translation id="584451707753263735">লাইভ ক্যাপশন দেখা যাচ্ছে, ফোকাস অন্য কোনও ডায়ালগে সরাতে F6 প্রেস করুন</translation> <translation id="5844574845205796324">নতুন কন্টেন্ট চেক করে দেখতে সাজেস্ট করুন</translation> <translation id="5846200638699387931">রিলেশন সিন্ট্যাক্সে সমস্যা হয়েছে: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">আপডেট এবং অ্যাপ ইনস্টল করুন। চালিয়ে যাওয়ার অর্থ, আপনি সম্মতি দিচ্ছেন যে, এই ডিভাইসটি অটোমেটিক Google, আপনার পরিষেবা প্রদানকারী এবং আপনার ডিভাইসের প্রস্তুতকারকের থেকে হয়ত মোবাইল ডেটা ব্যবহার করে অ্যাপ এবং আপডেট ডাউনলোড করে ইনস্টল করতে পারে। এই অ্যাপগুলির মধ্যে কয়েকটিতে অ্যাপ-মধ্যস্থ কেনাকাটার সুবিধা থাকতে পারে।</translation> @@ -5360,6 +5368,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> এখন পূর্ণ পর্দায় রয়েছে৷</translation> <translation id="7340650977506865820">সাইটটি আপনার স্ক্রিন শেয়ার করছে</translation> <translation id="7341834142292923918">এই সাইটে অ্যাক্সেস চায়</translation> +<translation id="7343372807593926528">মতামত পাঠানোর আগে সমস্যাটি বর্ণনা করুন।</translation> <translation id="7345706641791090287">আপনার পাসওয়ার্ড নিশ্চিত করুন</translation> <translation id="7346909386216857016">ঠিক আছে, বুঝেছি</translation> <translation id="7347452120014970266">এর ফলে <ph name="ORIGIN_NAME" /> ও এর ইনস্টল করা অ্যাপগুলির স্টোর করা সমস্ত ডেটা ও কুকি মুছে যাবে</translation> @@ -5775,6 +5784,7 @@ <translation id="7819857487979277519">PSK (WPA বা RSN)</translation> <translation id="7819992334107904369">Chrome সিঙ্ক</translation> <translation id="782057141565633384">ভি&ডিও ঠিকানা কপি করুন</translation> +<translation id="7822187537422052256">আপনি কি এই ঠিকানা সরানোর ব্যাপারে নিশ্চিত?</translation> <translation id="7824864914877854148">কোনও সমস্যার জন্য সম্পূর্ণ ব্যাক-আপ নেওয়া যায়নি</translation> <translation id="7825666486843191125">আপনার স্ক্রিন আনলক করা থাকলে আশেপাশের সমস্ত পরিচিতি আপনার ডিভাইস দেখতে পাবে</translation> <translation id="782590969421016895">বর্তমান পৃষ্ঠাগুলি ব্যবহার করুন</translation> @@ -6300,6 +6310,7 @@ <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />' এর সার্চ ফলাফল</translation> <translation id="8419368276599091549">আপনার <ph name="DEVICE_TYPE" /> এ স্বাগতম!</translation> <translation id="8420308167132684745">অভিধানের এন্ট্রিগুলি এডিট করুন</translation> +<translation id="8421361468937925547">লাইভ ক্যাপশন (শুধু ইংরেজি)</translation> <translation id="8422787418163030046">ট্রে লাগানো নেই</translation> <translation id="8425213833346101688">পরিবর্তন</translation> <translation id="8425492902634685834">টাস্কবারে পিন করুন</translation> @@ -6328,6 +6339,7 @@ <translation id="8449036207308062757">স্টোরেজ পরিচালনা করুন</translation> <translation id="8452135315243592079">সিম কার্ড পাওয়া যাচ্ছে না</translation> <translation id="8455026683977728932">ADB ইলাস্ট্রেশন চালু করা যায়নি</translation> +<translation id="8456398879271637452">লাইভ ক্যাপশন দেখা যাচ্ছে, ফোকাস অন্য ডায়ালগে সরাতে Ctrl + Back বা Ctrl + Forward প্রেস করুন</translation> <translation id="845702320058262034">কানেক্ট করা যাচ্ছে না। আপনার ফোনের ব্লুটুথ চালানো আছে কিনা দেখুন।</translation> <translation id="8457451314607652708">বুকমার্কগুলি ইমপোর্ট করুন</translation> <translation id="8458627787104127436">সবগুলি (<ph name="URL_COUNT" />টি) নতুন উইন্ডোতে খুলুন</translation> @@ -6838,6 +6850,7 @@ <translation id="9027459031423301635">নতুন ট্যাবে লিঙ্ক খুলুন</translation> <translation id="9030515284705930323">আপনার প্রতিষ্ঠান আপনার অ্যাকাউন্টের জন্য Google Play স্টোর চালু করেনি। আরও তথ্যের জন্য আপনার অ্যাডমিনিস্ট্রেটরের সাথে যোগাযোগ করুন।</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269"><ph name="PLUGIN_NAME" /> আর কাজ করে না</translation> <translation id="9031549947500880805">Google Drive-এ ব্যাক-আপ নিন। যেকোনও সময় সহজেই ডেটা রিস্টোর করুন অথবা অন্য ডিভাইস ব্যবহার করুন। আপনার ব্যাক-আপে অ্যাপ ডেটা থাকে।</translation> <translation id="9033765790910064284">যাই হোক, চালিয়ে যান</translation> <translation id="9033857511263905942">&প্রতিলেপন</translation> @@ -6846,6 +6859,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{আপনি আর মাত্র একবার চেষ্টা করতে পারবেন।}one{আপনি আর মাত্র # বার চেষ্টা করতে পারবেন।}other{আপনি আর # বার চেষ্টা করতে পারবেন।}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571"><ph name="ORIGIN" />-এর জন্য পাসওয়ার্ড আপডেট করবেন?</translation> +<translation id="9041049756004505730">লাইভ ক্যাপশন দেখা যাচ্ছে, ফোকাস অন্য ডায়ালগে সরাতে ⌘ + Option + ঊর্ধ্বমুখী বা নিম্নমুখী তীরচিহ্নটি প্রেস করুন</translation> <translation id="9041692268811217999">আপনার মেশিনে স্থানীয় ফাইলগুলিতে অ্যাক্সেস আপনার অ্যাডমিনিস্ট্রেটর বন্ধ করেছেন</translation> <translation id="904224458472510106">এই কাজটি আর আগের অবস্থায় ফেরানো যাবে না</translation> <translation id="9042893549633094279">গোপনীয়তা এবং নিরাপত্তা</translation> @@ -6884,6 +6898,7 @@ <translation id="9088446193279799727">Linux কনফিগার করা যায়নি। ইন্টারনেটে কানেক্ট করে আবার চেষ্টা করুন।</translation> <translation id="9088917181875854783">দয়া করে "<ph name="DEVICE_NAME" />"-এ দেখানো এই পাসকীটি নিশ্চিত করুন:</translation> <translation id="9089416786594320554">ইনপুট পদ্ধতিগুলি</translation> +<translation id="909108997331068008"><ph name="EXISTING_USER" /> আগে থেকেই <ph name="NEW_USER" />-এর প্রোফাইলে সাইন-ইন করেছেন</translation> <translation id="9093429538970210897">কখনও এমনও হতে পারে যে আপগ্রেড করার প্রক্রিয়া সম্পূর্ণ হল না, তাই আপনাকে আগে থেকে ফাইলের ব্যাকআপ নিয়ে রাখতে বলা হচ্ছে। আপগ্রেড করার প্রক্রিয়া শুরু করলেই, Linux (বিটা ভার্সন) বন্ধ হয়ে যাবে। কাজে অগ্রসর হওয়ার আগে, তাই আগে থেকে খুলে রাখা ফাইলগুলিকে সেভ করে নিন।</translation> <translation id="9094033019050270033">পাসওয়ার্ড আপডেট করুন</translation> <translation id="9094038138851891550">ভুল ইউজারনেম</translation> @@ -7057,5 +7072,6 @@ <translation id="994289308992179865">&লুপ</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">নিরাপদ সংযোগ স্থাপন করা হচ্ছে...</translation> +<translation id="99731366405731005">ওয়াই-ফাই সিঙ্ক ব্যবহার করতে <ph name="LINK1_BEGIN" />Chrome সিঙ্ক<ph name="LINK1_END" /> চালু করুন। <ph name="LINK2_BEGIN" />আরও জানুন<ph name="LINK2_END" /></translation> <translation id="998747458861718449">স&তর্কভাবে পরীক্ষা করুন</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index d8c352d..92e739c 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -5411,7 +5411,7 @@ <translation id="7375235221357833624">{0,plural, =1{Actualitza el dispositiu en 1 hora}other{Actualitza el dispositiu en # hores}}</translation> <translation id="7376553024552204454">Destaca el cursor del ratolí quan es mogui</translation> <translation id="7377451353532943397">Continua bloquejant l'accés als sensors</translation> -<translation id="7378611153938412599">Les contrasenyes poc segures són fàcils d'endevinar. Assegura't de crear-ne de segures. <ph name="BEGIN_LINK" />Consulta més consells de seguretat<ph name="END_LINK" />.</translation> +<translation id="7378611153938412599">Les contrasenyes poc segures són fàcils d'endevinar. Assegura't de crear contrasenyes segures. <ph name="BEGIN_LINK" />Consulta més consells de seguretat<ph name="END_LINK" />.</translation> <translation id="73786666777299047">Obre Chrome Web Store</translation> <translation id="7378812711085314936">Obtén la connexió de dades</translation> <translation id="7380622428988553498">El nom del dispositiu conté caràcters que no són vàlids</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index cff1cead..5efd3a9 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -838,7 +838,7 @@ <translation id="1931152874660185993">Nebyly nainstalovány žádné komponenty.</translation> <translation id="1932098463447129402">Nikoli před</translation> <translation id="1933809209549026293">Připojte prosím myš nebo klávesnici. Pokud používáte zařízení Bluetooth, zkontrolujte, zda je připraveno ke spárování.</translation> -<translation id="1935303383381416800">Povolen přístup k vaší poloze</translation> +<translation id="1935303383381416800">Povolení k přístupu k vaší poloze</translation> <translation id="1936931585862840749">Počet kopií, které chcete vytisknout, je třeba zadat jako číslo (od 1 do <ph name="MAX_COPIES" />).</translation> <translation id="1937774647013465102">Typ architektury kontejneru <ph name="ARCHITECTURE_CONTAINER" /> do tohoto zařízení s architekturou <ph name="ARCHITECTURE_DEVICE" /> nelze importovat. Můžete tento kontejner zkusit obnovit do jiného zařízení nebo soubory v obrazu kontejneru otevřít v aplikaci Soubory.</translation> <translation id="1938351510777341717">Externí příkaz</translation> @@ -5488,7 +5488,7 @@ <translation id="7465635034594602553">Došlo k chybě. Několik minut počkejte a spusťte aplikaci <ph name="APP_NAME" /> znovu.</translation> <translation id="7465778193084373987">Adresa URL pro odvolání certifikátu Netscape</translation> <translation id="7469894403370665791">Automaticky připojit k této síti</translation> -<translation id="7470424110735398630">Povolen přístup ke schránce</translation> +<translation id="7470424110735398630">Povolení přístupu ke schránce</translation> <translation id="747114903913869239">Chyba: Nelze dekódovat rozšíření</translation> <translation id="7473891865547856676">Ne, děkuji</translation> <translation id="747459581954555080">Obnovit vše</translation> @@ -6248,7 +6248,7 @@ <translation id="8322814362483282060">Přístup této stránky k vašemu mikrofonu je zablokován.</translation> <translation id="8323167517179506834">Zadejte adresu URL.</translation> <translation id="8324784016256120271">Weby mohou pomocí souborů cookie sledovat vaši aktivitu prohlížení na různých webech, například k personalizaci reklam</translation> -<translation id="8325413836429495820">Zakázán přístup ke schránce</translation> +<translation id="8325413836429495820">Zákaz přístupu ke schránce</translation> <translation id="8326478304147373412">PKCS #7, řetězec certifikátu</translation> <translation id="8327039559959785305">Při připojování souborů systému Linux došlo k chybě. Zkuste to znovu.</translation> <translation id="8327676037044516220">Oprávnění a nastavení obsahu</translation> @@ -6298,7 +6298,7 @@ <translation id="8382913212082956454">Kopírovat &e-mailovou adresu</translation> <translation id="8386091599636877289">Zásady nebyly nalezeny.</translation> <translation id="8386903983509584791">Vyhledávání je dokončeno</translation> -<translation id="8387361103813440603">Zakázán přístup k vaší poloze</translation> +<translation id="8387361103813440603">Zákaz přístupu k vaší poloze</translation> <translation id="8389416080014625855">Vytvořit QR kód pro tuto stránku</translation> <translation id="8389492867173948260">Povolit tomuto rozšíření číst a měnit všechna vaše data na navštívených webech:</translation> <translation id="8390449457866780408">Server není dostupný.</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index 1ded5bd..856bbd9d 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -555,7 +555,7 @@ <translation id="1627408615528139100">Bereits heruntergeladen</translation> <translation id="1628948239858170093">Datei vor dem Öffnen scannen?</translation> <translation id="1629314197035607094">Passwort abgelaufen</translation> -<translation id="163072119192489970">Dürfen den Datenversand und -empfang abschließen</translation> +<translation id="163072119192489970">Dürfen den Datenversand und ‑empfang abschließen</translation> <translation id="1630768113285622200">Neu starten und fortfahren</translation> <translation id="1632082166874334883">In Ihrem Google-Konto gespeichertes Passwort</translation> <translation id="1632803087685957583">Ermöglicht die Anpassung der Tastatur-Wiederholungsrate, Wortvervollständigung und mehr</translation> @@ -953,7 +953,7 @@ <translation id="2090165459409185032">Besuchen Sie die folgende Seite, um Ihre Kontoinformationen wiederzuherstellen: google.com/accounts/recovery</translation> <translation id="2090876986345970080">Sicherheitseinstellung des Systems</translation> <translation id="2091887806945687916">Ton</translation> -<translation id="209539936453343974">Damit Jugendschutzeinstellungen eingerichtet werden können, muss das Kind ein Google-Konto haben, das von einem Elternteil verwaltet wird. Auf <ph name="DEVICE_TYPE_PLURAL" /> können Eltern mit der Family App beispielsweise die Gerätenutzungsdauer beschränken oder Websites genehmigen oder blockieren. Wenn ein Kind Hausaufgaben auf Websites wie Google Classroom machen muss, kann später ein Schulkonto hinzugefügt werden.</translation> +<translation id="209539936453343974">Damit Jugendschutzeinstellungen eingerichtet werden können, muss das Kind ein Google-Konto haben, das von einem Elternteil verwaltet wird. Mit der Family Link App können Eltern für <ph name="DEVICE_TYPE_PLURAL" /> beispielsweise die Gerätenutzungsdauer beschränken oder Websites genehmigen oder blockieren. Wenn das Kind Hausaufgaben auf Websites wie Google Classroom zu erledigen hat, kann später ein Konto einer Bildungseinrichtung hinzugefügt werden.</translation> <translation id="2096715839409389970">Cookies von Drittanbietern löschen</translation> <translation id="2097372108957554726">Melden Sie sich in Chrome an, um neue Geräte zu registrieren.</translation> <translation id="2098805196501063469">Restliche Passwörter prüfen</translation> @@ -1069,7 +1069,7 @@ <translation id="2224444042887712269">Inhaber dieser Einstellung ist <ph name="OWNER_EMAIL" />.</translation> <translation id="2224551243087462610">Ordnername bearbeiten</translation> <translation id="2225864335125757863">Bitte ändern Sie umgehend die folgenden Passwörter, um Ihr Konto zu schützen:</translation> -<translation id="2226204716217107988">Möchten Sie zu einem anderen Profil wechseln?</translation> +<translation id="2226204716217107988">Zu einem anderen Profil wechseln?</translation> <translation id="2226449515541314767">Dieser Website wurde keine vollständige Kontrolle über MIDI-Geräte gewährt.</translation> <translation id="2226907662744526012">Automatisch entsperren, wenn die PIN eingegeben wurde</translation> <translation id="222704500187107962">Wenn Sie die aktuelle Inkognitositzung beenden, wird diese Ausnahme automatisch entfernt</translation> @@ -1683,7 +1683,7 @@ <translation id="2932883381142163287">Missbrauch melden</translation> <translation id="2933632078076743449">Letzte Aktualisierung</translation> <translation id="2934999512438267372">Vollständige Kontrolle über MIDI-Geräte erlaubt</translation> -<translation id="2935654492420446828">Schulkonto später hinzufügen</translation> +<translation id="2935654492420446828">Konto einer Bildungseinrichtung später hinzufügen</translation> <translation id="2936851848721175671">Sicherung & Wiederherstellung</translation> <translation id="2938225289965773019"><ph name="PROTOCOL" />-Links öffnen</translation> <translation id="2938845886082362843">Auf Ihrem Sicherheitsschlüssel gespeicherte Anmeldedaten abrufen und löschen</translation> @@ -2051,7 +2051,7 @@ <translation id="3404249063913988450">Bildschirmschoner aktivieren</translation> <translation id="3405664148539009465">Schriftart anpassen</translation> <translation id="3405763860805964263">...</translation> -<translation id="3406290648907941085">Dürfen Virtual-Reality-Geräte und -Daten verwenden</translation> +<translation id="3406290648907941085">Dürfen Virtual-Reality-Geräte und ‑Daten verwenden</translation> <translation id="3406396172897554194">Anhand einer Sprache oder Eingabemethode suchen</translation> <translation id="3406605057700382950">&Lesezeichenleiste anzeigen</translation> <translation id="340671561090997290">{NUM_EXTENSIONS,plural, =1{Diese Erweiterung könnte schädlich sein}other{Diese Erweiterungen könnten schädlich sein}}</translation> @@ -2660,7 +2660,7 @@ <translation id="4058793769387728514">Dokument jetzt prüfen</translation> <translation id="406070391919917862">Apps im Hintergrund</translation> <translation id="4061374428807229313">Wenn Sie einen Ordner freigeben möchten, rechtsklicken Sie in der App "Dateien" darauf und wählen Sie dann "Teilen mit Parallels Desktop" aus.</translation> -<translation id="406213378265872299">Personalisiertes Verhalten</translation> +<translation id="406213378265872299">Benutzerdefinierte Einstellungen</translation> <translation id="4065876735068446555">Eventuell müssen Sie die Anmeldeseite des verwendeten Netzwerks (<ph name="NETWORK_ID" />) aufrufen.</translation> <translation id="4066207411788646768">Stellen Sie eine Internetverbindung her, damit Sie verfügbare Drucker im Netzwerk sehen können</translation> <translation id="4068776064906523561">Gespeicherte Fingerabdrücke</translation> @@ -3775,7 +3775,7 @@ <translation id="5449588825071916739">Alle Tabs als Lesezeichen speichern</translation> <translation id="5449716055534515760">Fen&ster schließen</translation> <translation id="5452974209916053028">Aktuelle Inkognitositzung: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> -<translation id="5454005855577728171">Untertitelfeld wurde auf <ph name="POSITION_ON_SCREEN_FROM_LEFT" /> % waagerecht, <ph name="POSITION_ON_SCREEN_FROM_TOP" /> % senkrecht verschoben</translation> +<translation id="5454005855577728171">Untertitelfeld wurde <ph name="POSITION_ON_SCREEN_FROM_LEFT" /> % nach rechts, <ph name="POSITION_ON_SCREEN_FROM_TOP" /> % nach unten verschoben</translation> <translation id="5454166040603940656">mit <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Ungültig</translation> <translation id="5457459357461771897">Fotos, Musik und andere Medien auf Ihrem Computer lesen und löschen</translation> @@ -4110,7 +4110,7 @@ <translation id="5841270259333717135">Ethernet konfigurieren</translation> <translation id="5842497610951477805">Bluetooth aktivieren</translation> <translation id="5843706793424741864">Fahrenheit</translation> -<translation id="584451707753263735">Automatische Untertitel sind sichtbar. Drücken Sie F6, um den Fokus zu wechseln.</translation> +<translation id="584451707753263735">Automatische Untertitel sind sichtbar. Drücke F6, um den Fokus zu wechseln.</translation> <translation id="5844574845205796324">Inhaltsvorschläge erhalten</translation> <translation id="5846200638699387931">Bezugs-Syntaxfehler: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">Updates und Apps installieren. Wenn Sie fortfahren, stimmen Sie zu, dass dieses Gerät automatisch Updates und Apps von Google, Ihrem Mobilfunkanbieter und dem Hersteller Ihres Geräts herunterladen und installieren darf, möglicherweise über eine mobile Datenverbindung. Einige dieser Apps bieten eventuell In-App-Käufe an.</translation> @@ -4505,7 +4505,7 @@ <translation id="6295158916970320988">Alle Websites</translation> <translation id="6295855836753816081">Wird gespeichert...</translation> <translation id="6298962879096096191">Google Play verwenden, um Android-Apps zu installieren</translation> -<translation id="6300177430812514606">Dürfen den Datenversand und -empfang nicht abschließen</translation> +<translation id="6300177430812514606">Dürfen den Datenversand und ‑empfang nicht abschließen</translation> <translation id="630065524203833229">&Beenden</translation> <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> konnte nicht automatisch konfiguriert werden. Bitte legen Sie erweiterte Einstellungen für den Drucker fest. <ph name="LINK_BEGIN" />Weitere Informationen<ph name="LINK_END" /></translation> <translation id="6301076166764763868">Wenn Sie Ihre privaten und die Browsingaktivitäten für <ph name="EXISTING_USER" />getrennt halten möchten, erstellen Sie ein neues Profil für <ph name="NEW_USER" /></translation> @@ -5020,7 +5020,7 @@ <translation id="6922745772873733498">Geben Sie zum Ausdrucken eine PIN ein</translation> <translation id="6923132443355966645">Scrollen/Klicken</translation> <translation id="6923633482430812883">Fehler beim Bereitstellen der Freigabe. Der Dateiserver, zu dem Sie eine Verbindung herstellen, muss SMBv2 oder höher unterstützen.</translation> -<translation id="6929126689972602640">Jugendschutzeinstellungen werden für Schulkonten nicht unterstützt. Wenn Sie ein Schulkonto für den Zugriff auf Google Classroom oder auf andere Websites für Schulaufgaben hinzufügen möchten, melden Sie sich zuerst im privaten Konto des Kindes an. Sie können das Schulkonto später in den Einstellungen hinzufügen.</translation> +<translation id="6929126689972602640">Jugendschutzeinstellungen werden für Konten einer Bildungseinrichtung nicht unterstützt. Wenn du ein Konto einer Bildungseinrichtung für den Zugriff auf Google Classroom oder auf andere Websites für Schulaufgaben hinzufügen möchtest, melde dich zuerst im privaten Konto des Kindes an. Du kannst das Konto einer Bildungseinrichtung später in den Einstellungen hinzufügen.</translation> <translation id="6929760895658557216">Ok Google</translation> <translation id="6930036377490597025">Externer Sicherheitsschlüssel oder integrierter Sensor</translation> <translation id="6930161297841867798">{NUM_EXTENSIONS,plural, =1{Eine Erweiterung wurde abgelehnt}other{# Erweiterungen wurden abgelehnt}}</translation> @@ -5584,7 +5584,7 @@ <translation id="7607002721634913082">Angehalten</translation> <translation id="7608810328871051088">Android-Einstellungen</translation> <translation id="7609148976235050828">Stellen Sie eine Internetverbindung her und versuchen Sie es dann noch einmal.</translation> -<translation id="7612655942094160088">Funktionen des verbundenen Smartphones aktivieren.</translation> +<translation id="7612655942094160088">Funktionen für verbundenes Smartphone aktivieren.</translation> <translation id="7614260613810441905">Nachfragen, wenn eine Website Dateien oder Ordner auf meinem Gerät bearbeiten möchte (empfohlen)</translation> <translation id="761530003705945209">In Google Drive sichern. Sie können Ihre Daten jederzeit wiederherstellen – auch auf einem anderen Gerät. In Ihrer Sicherung sind auch App-Daten enthalten. Ihre Sicherungen werden an Google gesendet und mit dem Passwort Ihres Google-Kontos verschlüsselt.</translation> <translation id="7615365294369022248">Fehler beim Hinzufügen eines Kontos</translation> @@ -5781,7 +5781,7 @@ <translation id="7819857487979277519">PSK (WPA oder RSN)</translation> <translation id="7819992334107904369">Chrome-Synchronisierung</translation> <translation id="782057141565633384">Videoadresse k&opieren</translation> -<translation id="7822187537422052256">Möchten Sie diese Adresse wirklich entfernen?</translation> +<translation id="7822187537422052256">Adresse wirklich entfernen?</translation> <translation id="7824864914877854148">Sicherung konnte aufgrund eines Fehlers nicht abgeschlossen werden</translation> <translation id="7825666486843191125">Alle Kontakte in meiner Nähe, wenn das Display entsperrt ist</translation> <translation id="782590969421016895">Aktuelle Seiten verwenden</translation> @@ -6194,7 +6194,7 @@ <translation id="826905130698769948">Ungültiges Clientzertifikat</translation> <translation id="8270242299912238708">PDF-Dokumente</translation> <translation id="827097179112817503">Schaltfläche "Startseite" anzeigen</translation> -<translation id="8271379370373330993">Liebe Eltern, die nächsten Schritte müssen Sie ausführen. Sie können <ph name="DEVICE_TYPE" /> nach der Kontoeinrichtung wieder Ihrem Kind geben.</translation> +<translation id="8271379370373330993">Liebe Eltern, die nächsten Schritte müsst ihr ausführen. Du kannst das Gerät (<ph name="DEVICE_TYPE" />) nach der Kontoeinrichtung wieder deinem Kind geben.</translation> <translation id="8272443605911821513">Zum Verwalten Ihrer Erweiterungen klicken Sie im Menü "Mehr Tools" auf "Erweiterungen".</translation> <translation id="8274332263553132018">Datei streamen</translation> <translation id="8274924778568117936">Schalten Sie Ihr <ph name="DEVICE_TYPE" /> nicht aus bzw. schließen Sie es nicht, bis das Update abgeschlossen ist. Nach Abschluss der Installation wird Ihr <ph name="DEVICE_TYPE" /> neu gestartet.</translation> @@ -6219,7 +6219,7 @@ <translation id="8300011035382349091">Lesezeichen für diesen Tab bearbeiten</translation> <translation id="8300374739238450534">Mitternachtsblau</translation> <translation id="8300849813060516376">OTASP fehlgeschlagen</translation> -<translation id="8304383784961451596">Sie sind nicht zur Verwendung dieses Geräts berechtigt. Bitten Sie den Administrator um eine Anmeldeberechtigung oder melden Sie sich mit einem Google-Konto an, das über Family Link beaufsichtigt wird.</translation> +<translation id="8304383784961451596">Du bist nicht zur Verwendung dieses Geräts berechtigt. Bitte den Administrator um eine Anmeldeberechtigung oder melde dich mit einem Google-Konto an, das über Family Link beaufsichtigt wird.</translation> <translation id="8308179586020895837">Nachfragen, wenn <ph name="HOST" /> auf Ihre Kamera zugreifen möchte</translation> <translation id="830868413617744215">Beta</translation> <translation id="8309458809024885768">Das Zertifikat ist bereits vorhanden</translation> @@ -6336,7 +6336,7 @@ <translation id="8449036207308062757">Speicherplatz verwalten</translation> <translation id="8452135315243592079">Keine SIM-Karte vorhanden</translation> <translation id="8455026683977728932">Fehler bei der Aktivierung der ADB-Illustration</translation> -<translation id="8456398879271637452">Automatische Untertitel sind sichtbar. Drücken Sie Strg + Zurück oder Strg + Vor, um den Fokus zu wechseln.</translation> +<translation id="8456398879271637452">Automatische Untertitel sind sichtbar. Drücke „Strg + Zurück“ oder „Strg + Weiter“, um den Fokus zu wechseln.</translation> <translation id="845702320058262034">Verbindung nicht möglich. Kontrollieren Sie, ob Bluetooth auf Ihrem Smartphone aktiviert ist.</translation> <translation id="8457451314607652708">Lesezeichen importieren</translation> <translation id="8458627787104127436">Alle (<ph name="URL_COUNT" />) in neuem Fenster öffnen</translation> @@ -6551,7 +6551,7 @@ <translation id="8714838604780058252">Hintergrundgrafiken</translation> <translation id="8715480913140015283">Ein Tab im Hintergrund verwendet Ihre Kamera</translation> <translation id="8716931980467311658">Alle Linux-Anwendungen und Daten im Ordner "Linux-Dateien" von diesem <ph name="DEVICE_TYPE" /> löschen?</translation> -<translation id="8717145295869185525">Dürfen keine Virtual-Reality-Geräte und -Daten verwenden</translation> +<translation id="8717145295869185525">Dürfen keine Virtual-Reality-Geräte und ‑Daten verwenden</translation> <translation id="8717864919010420084">Link kopieren</translation> <translation id="8719472795285728850">Auf Erweiterungsaktivitäten wird gewartet…</translation> <translation id="8719653885894320876">Fehler beim Download von <ph name="PLUGIN_NAME" /></translation> @@ -6856,7 +6856,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Sie haben noch einen Eingabeversuch.}other{Sie haben noch # Eingabeversuche.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Passwort für <ph name="ORIGIN" /> aktualisieren?</translation> -<translation id="9041049756004505730">Automatische Untertitel sind sichtbar. Drücken Sie ⌘ + Option + Aufwärtspfeil oder Abwärtspfeil, um den Fokus zu wechseln.</translation> +<translation id="9041049756004505730">Automatische Untertitel sind sichtbar. Drücke ⌘ + Option + Aufwärtspfeil oder Abwärtspfeil, um den Fokus zu wechseln.</translation> <translation id="9041692268811217999">Der Zugriff auf lokale Dateien auf Ihrem Gerät wurde von Ihrem Administrator deaktiviert</translation> <translation id="904224458472510106">Dieser Vorgang kann nicht rückgängig gemacht werden</translation> <translation id="9042893549633094279">Datenschutz und Sicherheit</translation> @@ -6895,7 +6895,7 @@ <translation id="9088446193279799727">Linux konnte nicht konfiguriert werden. Stellen Sie eine Verbindung zum Internet her und versuchen Sie es noch einmal.</translation> <translation id="9088917181875854783">Bitte bestätigen Sie, dass dieser Zugangscode auf "<ph name="DEVICE_NAME" />" angezeigt wird:</translation> <translation id="9089416786594320554">Eingabemethoden</translation> -<translation id="909108997331068008"><ph name="NEW_USER" /> ist bereits mit dem Profil von <ph name="EXISTING_USER" /> angemeldet</translation> +<translation id="909108997331068008">Das Profil von <ph name="EXISTING_USER" /> ist bereits in <ph name="NEW_USER" /> angemeldet</translation> <translation id="9093429538970210897">Wir empfehlen, vor diesem Update Dateien zu sichern, für den Fall, dass es nicht abgeschlossen werden kann. Beim Start des Upgrades wird Linux (Beta) heruntergefahren. Speichern Sie bitte die geöffneten Dateien, bevor Sie fortfahren.</translation> <translation id="9094033019050270033">Passwort aktualisieren</translation> <translation id="9094038138851891550">Nutzername ungültig</translation> @@ -7069,6 +7069,6 @@ <translation id="994289308992179865">Sch&leife</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Sichere Verbindung wird hergestellt...</translation> -<translation id="99731366405731005">Aktivieren Sie die <ph name="LINK1_BEGIN" />Chrome-Synchronisierung<ph name="LINK1_END" />, um die WLAN-Synchronisation zu verwenden. <ph name="LINK2_BEGIN" />Weitere Informationen<ph name="LINK2_END" /></translation> +<translation id="99731366405731005"><ph name="LINK1_BEGIN" />Chrome-Synchronisierung<ph name="LINK1_END" /> aktivieren, um die WLAN-Synchronisation zu verwenden. <ph name="LINK2_BEGIN" />Weitere Informationen<ph name="LINK2_END" /></translation> <translation id="998747458861718449">Untersuchen</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index 2f5b908..515deca 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">Se están sincronizando tus archivos de Documentos de Google, Google Spreadsheets, Diapositivas de Google y Dibujos de Google. Abre la aplicación de Google Drive para acceder a ellos en línea o sin conexión.</translation> <translation id="1012876632442809908">Dispositivo USB-C (puerto delantero)</translation> <translation id="1013707859758800957">Se permitió que un complemento no incluido en la zona de pruebas se ejecutara en la página.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">Editar nombre de carpeta</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{Último día para actualizar el dispositivo <ph name="DEVICE_TYPE" />}other{Actualiza el dispositivo <ph name="DEVICE_TYPE" /> en el transcurso de {NUM_DAYS} días}}</translation> <translation id="1016566241875885511">Información adicional (opcional)</translation> @@ -867,7 +868,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> inhabilitó la depuración ADB. Este proceso restablecerá la <ph name="DEVICE_TYPE" /> dentro de 24 horas. Crea una copia de seguridad de los archivos que deseas conservar.</translation> <translation id="1977965994116744507">Acerca el teléfono para desbloquear tu <ph name="DEVICE_TYPE" />.</translation> <translation id="1978006917103730774">Se instalarán automáticamente las futuras versiones del software y las actualizaciones de seguridad.</translation> -<translation id="1978057560491495741">Quita la dirección</translation> +<translation id="1978057560491495741">Quitar dirección</translation> <translation id="1979095679518582070">Aunque esta función esté desactivada, este dispositivo podrá enviar la información necesaria para los servicios esenciales, como seguridad y actualizaciones del sistema.</translation> <translation id="1979280758666859181">Estás por cambiar a un canal que tiene una versión anterior de <ph name="PRODUCT_NAME" />. El cambio de canal se aplicará cuando la versión del canal coincida con la versión que esté instalada en ese momento en tu dispositivo.</translation> <translation id="197989455406964291">KDC no es compatible con el tipo de encriptación</translation> @@ -925,6 +926,7 @@ <translation id="204914487372604757">Crear accesos directos</translation> <translation id="2050339315714019657">Vertical</translation> <translation id="2053312383184521053">Datos de estado de inactividad</translation> +<translation id="2054665754582400095">Tu presencia</translation> <translation id="2055585478631012616">Saldrás de estos sitios, incluidas las pestañas abiertas</translation> <translation id="205560151218727633">Logotipo del Asistente de Google</translation> <translation id="2058456167109518507">Se detectó un dispositivo</translation> @@ -1211,6 +1213,7 @@ <translation id="2387052489799050037">Ve a la página principal</translation> <translation id="2387458720915042159">Tipo de conexión proxy</translation> <translation id="2390347491606624519">No se puede establecer conexión con el proxy; vuelve a intentarlo</translation> +<translation id="2390782873446084770">Sincronización Wi-Fi</translation> <translation id="2391082728065870591">Enviar informe de comentarios</translation> <translation id="2391419135980381625">Fuente estándar</translation> <translation id="2392163307141705938">Alcanzaste el límite de tiempo que tu padre o madre estableció para <ph name="IDS_SHORT_PRODUCT_NAME" />.</translation> @@ -1867,6 +1870,7 @@ <translation id="3157931365184549694">Restaurar</translation> <translation id="3158033540161634471">Configura tu huella</translation> <translation id="3159493096109238499">Beige</translation> +<translation id="3159978855457658359">Edita el nombre del dispositivo</translation> <translation id="3160842278951476457"><ph name="ISSUED_BY" /> [<ph name="ISSUED_TO" />] (copia de seguridad en hardware)</translation> <translation id="3161522574479303604">Todos los idiomas</translation> <translation id="3162853326462195145">Cuenta de una institución educativa</translation> @@ -3227,6 +3231,7 @@ <translation id="4761104368405085019">Usar tu micrófono</translation> <translation id="4762718786438001384">Hay muy poco espacio en el disco del dispositivo</translation> <translation id="4763408175235639573">Se configuraron las siguientes cookies cuando visitaste esta página</translation> +<translation id="4764368918650455114">Asegúrate de que ambos dispositivos estén cerca el uno del otro, desbloqueados y con el Bluetooth activado. Si quieres compartir archivos con una Chromebook, asegúrate de tener activado Compartir con Nearby (selecciona la hora para abrir el área de estado y, luego, selecciona Compartir con Nearby). <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation> <translation id="4765582662863429759">Permite que Mensajes Android transfiera mensajes de texto del teléfono a tu Chromebook</translation> <translation id="476598255842811483">Nadie, a menos que abras Compartir con Nearby en tu dispositivo</translation> <translation id="4768332406694066911">Tienes certificados de esas organizaciones que te identifican</translation> @@ -3389,6 +3394,7 @@ <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation> <translation id="496185450405387901">Tu administrador instaló esta app.</translation> <translation id="4964455510556214366">Disposición</translation> +<translation id="496446150016900060">Sincronizar las redes Wi-Fi con tu teléfono</translation> <translation id="4965808351167763748">¿Seguro que deseas configurar este dispositivo para ejecutar Meet de Hangouts?</translation> <translation id="496888482094675990">La aplicación Archivos brinda acceso rápido a los archivos que hayas guardado en Google Drive, el almacenamiento externo o el dispositivo del Sistema operativo Chrome.</translation> <translation id="4971412780836297815">Abrir al finalizar</translation> @@ -3695,6 +3701,7 @@ <translation id="5341980496415249280">Realizando el empaquetamiento…</translation> <translation id="5342091991439452114">El PIN debe tener al menos <ph name="MINIMUM" /> dígitos</translation> <translation id="5344036115151554031">Restaurando Linux</translation> +<translation id="5345916423802287046">Iniciar la app al acceder</translation> <translation id="5350293332385664455">Desactivar el Asistente de Google</translation> <translation id="535123479159372765">Texto copiado de otro dispositivo</translation> <translation id="5352033265844765294">Impresión de fecha</translation> @@ -3776,7 +3783,7 @@ <translation id="5449588825071916739">Agregar a favoritos todas las pestañas</translation> <translation id="5449716055534515760">Cerrar ven&tana</translation> <translation id="5452974209916053028">Sesión actual en modo Incógnito: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> -<translation id="5454005855577728171">Se movió el cuadro de subtítulos <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% horizontalmente y <ph name="POSITION_ON_SCREEN_FROM_TOP" />% verticalmente</translation> +<translation id="5454005855577728171">Se movió el cuadro de subtítulos <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% hacia la derecha y <ph name="POSITION_ON_SCREEN_FROM_TOP" />% hacia abajo</translation> <translation id="5454166040603940656">con <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Sin validez</translation> <translation id="5457459357461771897">Leer y eliminar fotos, música y otro contenido multimedia desde tu computadora</translation> @@ -4004,6 +4011,7 @@ <translation id="5704875434923668958">Sincronizando con</translation> <translation id="5705005699929844214">Mostrar siempre las opciones de accesibilidad</translation> <translation id="5705882733397021510">Volver</translation> +<translation id="5707117624115653804">Personaliza el tamaño y el estilo de los subtítulos para las apps y los sitios compatibles con esta configuración.</translation> <translation id="5707185214361380026">Error al cargar la extensión desde:</translation> <translation id="5708171344853220004">Nombre principal de Microsoft</translation> <translation id="5709557627224531708">Establecer Chrome como tu navegador predeterminado</translation> @@ -4167,6 +4175,7 @@ <translation id="5904614460720589786">No se pudo instalar <ph name="APP_NAME" /> debido a un problema de configuración. Comunícate con el administrador. Código de error: <ph name="ERROR_CODE" />.</translation> <translation id="5906655207909574370">El dispositivo está casi actualizado. Reinícialo para completar la actualización.</translation> <translation id="5906732635754427568">Los datos asociados a esta app se quitarán de este dispositivo.</translation> +<translation id="5908474332780919512">Iniciar la app al acceder</translation> <translation id="5908695239556627796">Velocidad de desplazamiento del mouse</translation> <translation id="5908769186679515905">Bloquear la ejecución de Flash en los sitios</translation> <translation id="5910363049092958439">Gu&ardar imagen como...</translation> @@ -4706,6 +4715,7 @@ <translation id="6532527800157340614">No es posible completar el acceso porque no se pudo recuperar tu token de acceso. Comprueba la conexión de red y vuelve a intentarlo.</translation> <translation id="6532663472409656417">Inscripto en una empresa</translation> <translation id="6535331821390304775">Siempre permitir que <ph name="ORIGIN" /> abra este tipo de vínculos en la app asociada</translation> +<translation id="6537613839935722475">El nombre puede incluir letras, números y guiones (-).</translation> <translation id="6538635548667167211">La configuración de uso de datos actual es Datos</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />Nota:<ph name="END_BOLD" /> Solo debes habilitar esta opción si sabes lo que estás haciendo o si alguien te lo solicitó, ya que la recopilación de datos puede reducir el rendimiento.</translation> <translation id="6541638731489116978">Este sitio no tiene permiso para acceder a tus sensores de movimiento.</translation> @@ -4794,6 +4804,7 @@ <translation id="6650234781371031356">La contraseña para <ph name="WEBSITE" /> está guardada en este dispositivo y en tu Cuenta de Google. ¿Cuál quieres borrar?</translation> <translation id="665061930738760572">Abrir en una &nueva ventana</translation> <translation id="6651237644330755633">Confía en este certificado para identificar sitios web</translation> +<translation id="6651495917527016072">Sincroniza las redes Wi-Fi con tu teléfono. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation> <translation id="665355505818177700">La integración de <ph name="MS_AD_NAME" /> en Chrome solo es compatible en plataformas x86_64. Las Chromebooks creadas a partir de una plataforma ARM o x86 no son compatibles con esta funcionalidad.</translation> <translation id="6654509035557065241">Configurar una red preferida</translation> <translation id="6655190889273724601">Modo de desarrollador</translation> @@ -5021,7 +5032,7 @@ <translation id="6922745772873733498">Ingresa un PIN para imprimir</translation> <translation id="6923132443355966645">Desplazar/Hacer clic</translation> <translation id="6923633482430812883">Se produjo un error al activar el uso compartido. Asegúrate de que el servidor de archivos al que te estás conectando sea compatible con SMBv2 o versiones posteriores.</translation> -<translation id="6929126689972602640">Los controles parentales no son compatibles con las cuentas de instituciones educativas. Si quieres agregar una cuenta de institución educativa para acceder a Google Classroom y otros sitios web a fin de hacer tarea en el hogar, primero accede con la cuenta personal del niño. Puedes agregar la cuenta de institución educativa más tarde en la configuración.</translation> +<translation id="6929126689972602640">Las cuentas de instituciones educativas no admiten la función de controles parentales. Si quieres agregar una cuenta de institución educativa para acceder a Google Classroom y otros sitios web a fin de hacer tarea en el hogar, primero accede con la cuenta personal del niño. Puedes agregar la cuenta de institución educativa más tarde en la configuración.</translation> <translation id="6929760895658557216">Ok Google</translation> <translation id="6930036377490597025">Llave de seguridad externa o sensor integrado</translation> <translation id="6930161297841867798">{NUM_EXTENSIONS,plural, =1{Se rechazó una extensión}other{Se rechazaron # extensiones}}</translation> @@ -5349,7 +5360,7 @@ <translation id="7324297612904500502">Foro de la versión Beta</translation> <translation id="7325209047678309347">El papel está atorado</translation> <translation id="7325437708553334317">Extensión de alto contraste</translation> -<translation id="7326004502692201767">Configura <ph name="DEVICE_TYPE" /> para un niño</translation> +<translation id="7326004502692201767">Configura este dispositivo <ph name="DEVICE_TYPE" /> para un niño</translation> <translation id="7328699668338161242">El Asistente ya puede reconocer tu voz</translation> <translation id="7328867076235380839">La combinación no es válida</translation> <translation id="7329154610228416156">Se produjo un error de acceso porque está configurado para usar una URL no segura (<ph name="BLOCKED_URL" />). Comunícate con el administrador.</translation> @@ -5397,6 +5408,7 @@ <translation id="7375235221357833624">{0,plural, =1{Actualiza el dispositivo en el transcurso de una hora}other{Actualiza el dispositivo en el transcurso de # horas}}</translation> <translation id="7376553024552204454">Resaltar el cursor del mouse cuando se mueve</translation> <translation id="7377451353532943397">Seguir bloqueando el acceso a los sensores</translation> +<translation id="7378611153938412599">Las contraseñas poco seguras son fáciles de adivinar. Asegúrate de crear contraseñas seguras. <ph name="BEGIN_LINK" />Obtén más sugerencias de seguridad.<ph name="END_LINK" /></translation> <translation id="73786666777299047">Abrir Chrome Web Store</translation> <translation id="7378812711085314936">Obtener conexión de datos</translation> <translation id="7380622428988553498">El nombre del dispositivo incluye caracteres no válidos</translation> @@ -5921,6 +5933,7 @@ <translation id="7959074893852789871">El archivo contenía múltiples certificados. Algunos fueron importados:</translation> <translation id="7961015016161918242">Nunca</translation> <translation id="7963001036288347286">Aceleración del panel táctil</translation> +<translation id="7963608432878156675">Otros dispositivos pueden ver este nombre para establecer conexiones de red o mediante Bluetooth.</translation> <translation id="7963826112438303517">El Asistente usa estas grabaciones y tus solicitudes de voz para crear y actualizar tu modelo de voz, que solo se almacenará en los dispositivos en los que hayas activado Voice Match. Puedes consultar o volver a entrenar tu actividad de voz en la configuración del Asistente.</translation> <translation id="7966241909927244760">Copiar dirección de la imagen</translation> <translation id="7966571622054096916">{COUNT,plural, =1{1 elemento en la lista de favoritos}other{{COUNT} elementos en la lista de favoritos}}</translation> @@ -6196,7 +6209,7 @@ <translation id="826905130698769948">El Certificado de cliente no es válido</translation> <translation id="8270242299912238708">Documentos PDF</translation> <translation id="827097179112817503">Mostrar el botón de la Página principal</translation> -<translation id="8271379370373330993">Padre o madre, los siguientes pasos son para ti. Después de configurar la cuenta, puedes devolverle el dispositivo <ph name="DEVICE_TYPE" /> tu hijo.</translation> +<translation id="8271379370373330993">Los siguientes pasos son para los padres. Después de configurar la cuenta, puedes devolverle el dispositivo <ph name="DEVICE_TYPE" /> a tu hijo.</translation> <translation id="8272443605911821513">Para administrar tus extensiones, haz clic en Extensiones en el menú "Más herramientas".</translation> <translation id="8274332263553132018">Transmitir archivo</translation> <translation id="8274924778568117936">No apagues ni cierres el dispositivo <ph name="DEVICE_TYPE" /> hasta que finalice la actualización. Cuando el proceso termine, el dispositivo <ph name="DEVICE_TYPE" /> se reiniciará.</translation> @@ -6385,6 +6398,7 @@ <translation id="850875081535031620">No se encontró software dañino</translation> <translation id="8509177919508253835">Restablece las llaves de seguridad y crea PIN</translation> <translation id="8509646642152301857">Ocurrió un error en la descarga del diccionario del corrector ortográfico.</translation> +<translation id="8512396579636492893">{COUNT,plural, =0{No se encontraron contraseñas poco seguras.}=1{Se encontró {COUNT} contraseña poco segura.}other{Se encontraron {COUNT} contraseñas poco seguras.}}</translation> <translation id="8512476990829870887">Finalizar proceso</translation> <translation id="851263357009351303">Siempre permitir que <ph name="HOST" /> muestre imágenes</translation> <translation id="8513108775083588393">Giro autom.</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index 744f1a0..d8c52a5 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -1690,7 +1690,7 @@ <translation id="2932883381142163287">Notificar uso inadecuado</translation> <translation id="2933632078076743449">Última actualización</translation> <translation id="2934999512438267372">Control total de los dispositivos MIDI permitido</translation> -<translation id="2935654492420446828">Añadir una cuenta de centro educativo más tarde</translation> +<translation id="2935654492420446828">Añade una cuenta de centro educativo más tarde</translation> <translation id="2936851848721175671">Copia de seguridad y restauración</translation> <translation id="2938225289965773019">Abrir enlaces de <ph name="PROTOCOL" /></translation> <translation id="2938845886082362843">Consulta y elimina los datos de inicio de sesión almacenados en la llave de seguridad</translation> @@ -3108,7 +3108,7 @@ <translation id="4608500690299898628">&Buscar...</translation> <translation id="4608520674724523647">Ilustración de registro completado</translation> <translation id="4608703838363792434"><ph name="FILE_NAME" /> incluye contenido sensible</translation> -<translation id="4609987916561367134">Puede usar JavaScript</translation> +<translation id="4609987916561367134">Pueden usar JavaScript</translation> <translation id="4610162781778310380"><ph name="PLUGIN_NAME" /> ha detectado un error</translation> <translation id="4610637590575890427">¿Tal vez quieres ir a <ph name="SITE" />?</translation> <translation id="4611114513649582138">Conexión de datos disponible</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb index 08c7bc3..2051b661 100644 --- a/chrome/app/resources/generated_resources_eu.xtb +++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">Google dokumentuak, kalkulu-orriak, diapositibak eta marrazkiak sinkronizatzen ari zara. Elementuok konexioarekin edo konexiorik gabe atzitzeko, ireki Google Drive aplikazioa.</translation> <translation id="1012876632442809908">USB-C gailua (aurrealdeko ataka)</translation> <translation id="1013707859758800957">Proben eremuan sartu gabeko plugin bat orri honetan abiaraztea baimendu da.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">Editatu karpetaren izena</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{<ph name="DEVICE_TYPE" /> gailua eguneratzeko azken eguna}other{Eguneratu <ph name="DEVICE_TYPE" /> gailua {NUM_DAYS} eguneko epean}}</translation> <translation id="1016566241875885511">Informazio gehigarria (aukerakoa)</translation> @@ -277,7 +278,7 @@ <translation id="1313705515580255288">Laster-markak, historia eta bestelako ezarpenak Google-ko kontuarekin sinkronizatuko dira.</translation> <translation id="1314565355471455267">Android VPN sarea</translation> <translation id="131461803491198646">Tokiko sarea, ez ibiltaritza</translation> -<translation id="1315056510003830387">Ezin du erabili Flash</translation> +<translation id="1315056510003830387">Ezin dute erabili Flash</translation> <translation id="1316136264406804862">Bilatzen…</translation> <translation id="1316495628809031177">Sinkronizazioa pausatuta dago</translation> <translation id="1317637799698924700">C motako USB egokigailuekiko (USB Type-C) bateragarritasun moduan funtzionatuko du oinarriak.</translation> @@ -336,7 +337,7 @@ <translation id="1386791642444521222">Aktibatu SIM txartel fisikoa</translation> <translation id="1387519831959169718">Arakatze-datuak bereizita izateko, profil bat sor dezakezu <ph name="NEW_USER" /> erabiltzailearentzat</translation> <translation id="138784436342154190">Abioko orri lehenetsia leheneratu nahi duzu?</translation> -<translation id="1388253969141979417">Mikrofonoa erabil dezake</translation> +<translation id="1388253969141979417">Mikrofonoa erabil dezakete</translation> <translation id="1388728792929436380">Eguneratzen bukatzean, <ph name="DEVICE_TYPE" /> gailua berrabiarazi egingo da.</translation> <translation id="1389342855416376185">Blokeatu eduki babestua</translation> <translation id="1390548061267426325">Ireki fitxa arrunt gisa</translation> @@ -387,7 +388,7 @@ <translation id="1433811987160647649">Galdetu atzitu aurretik</translation> <translation id="1434696352799406980">Abioko orria, Fitxa berria orria, bilatzailea eta ainguratutako fitxak berrezarriko dira. Gainera, luzapen guztiak desgaituko dira eta aldi baterako datuak (adibidez, cookieak) garbituko dira. Laster-markak, historia eta gordetako pasahitzak ez dira garbituko.</translation> <translation id="1434886155212424586">Hasierako orria Fitxa berria orria da</translation> -<translation id="1435515966666225466">Pluginak erabil ditzake ordenagailua atzitzeko</translation> +<translation id="1435515966666225466">Pluginak erabil ditzakete ordenagailua atzitzeko</translation> <translation id="1436390408194692385">Balio-aldia: <ph name="TICKET_TIME_LEFT" /></translation> <translation id="1436671784520050284">Jarraitu konfiguratzen</translation> <translation id="1436784010935106834">Kendu egin da</translation> @@ -558,7 +559,7 @@ <translation id="1627408615528139100">Deskargatu da jada</translation> <translation id="1628948239858170093">Ireki aurretik aztertu egin nahi al duzu fitxategia?</translation> <translation id="1629314197035607094">Pasahitza iraungi egin da</translation> -<translation id="163072119192489970">Datuak bidaltzen eta jasotzen amai dezake</translation> +<translation id="163072119192489970">Datuak bidaltzen eta jasotzen amai dezakete</translation> <translation id="1630768113285622200">Berrabiarazi eta egin aurrera</translation> <translation id="1632082166874334883">Google-ko kontuan gordetako pasahitza</translation> <translation id="1632803087685957583">Teklak sakatuta edukitzean, idatzitakoa zenbat aldiz errepikatuko den, hitzen iragarpena erabiliko den eta beste zenbait gauza doitzeko aukera ematen dizu</translation> @@ -756,7 +757,7 @@ <translation id="1841705068325380214"><ph name="EXTENSION_NAME" /> desgaitu da</translation> <translation id="184273675144259287">Ordeztu Linux aplikazioak eta fitxategiak aurreko babeskopiekin</translation> <translation id="1842766183094193446">Ziur demo modua gaitu nahi duzula?</translation> -<translation id="1845727111305721124">Soinua erreproduzi dezake</translation> +<translation id="1845727111305721124">Soinua erreproduzi dezakete</translation> <translation id="1846308012215045257"><ph name="PLUGIN_NAME" /> exekutatzeko, egin iezaiozu klik Kontrol tekla sakatuta daukazula</translation> <translation id="1849186935225320012">Orriak MIDI gailuen kontrol osoa du.</translation> <translation id="1850508293116537636">Biratu e&rlojuaren orratzen norabidean</translation> @@ -781,7 +782,7 @@ <translation id="187145082678092583">Aplikazio gutxiago</translation> <translation id="1871534214638631766">Erakutsi erlazionatutako informazioa edukia eskuineko botoiarekin edo luze sakatzean</translation> <translation id="1871615898038944731">Eguneratuta dago <ph name="DEVICE_TYPE" /> gailua</translation> -<translation id="1874248162548993294">Edozein iragarki erakuts dezake</translation> +<translation id="1874248162548993294">Edozein iragarki erakuts dezakete</translation> <translation id="1874972853365565008">{NUM_TABS,plural, =1{Eraman fitxa beste leiho batera}other{Eraman fitxak beste leiho batera}}</translation> <translation id="1875386316419689002">Fitxa hau HID gailu batekin konektatuta dago.</translation> <translation id="1875387611427697908"><ph name="CHROME_WEB_STORE" /> dendatik soilik gehi daiteke</translation> @@ -837,7 +838,7 @@ <translation id="1931152874660185993">Ez da osagairik instalatu</translation> <translation id="1932098463447129402">Data hau ondoren</translation> <translation id="1933809209549026293">Konektatu sagua edo teklatua. Bluetooth bidezko gailu bat erabiltzen ari bazara, ziurtatu parekatzeko prest dagoela.</translation> -<translation id="1935303383381416800">Zure kokapena ikus dezake</translation> +<translation id="1935303383381416800">Zure kokapena ikus dezakete</translation> <translation id="1936931585862840749">Zehaztu kopia kopurua (1-<ph name="MAX_COPIES" />).</translation> <translation id="1937774647013465102">Gailu honekin (<ph name="ARCHITECTURE_DEVICE" />) ezin da inportatu edukiontziaren <ph name="ARCHITECTURE_CONTAINER" /> arkitektura mota. Saiatu edukiontzia beste gailu batean leheneratzen edo erabili Fitxategiak aplikazioa edukiontzi-irudi honen barnean dauden fitxategiak atzitzeko.</translation> <translation id="1938351510777341717">Kanpoko Komandoa tekla</translation> @@ -957,7 +958,7 @@ <translation id="2090165459409185032">Kontuko informazioa berreskuratzeko, joan hona: google.com/accounts/recovery</translation> <translation id="2090876986345970080">Sistemaren segurtasun-ezarpena</translation> <translation id="2091887806945687916">Soinua</translation> -<translation id="209539936453343974">Gurasoen murriztapenak konfiguratzeko, guraso batek kudeatutako Google-ko kontu bat eduki behar du haurrak. <ph name="DEVICE_TYPE_PLURAL" /> gailuek gurasoei baimena ematen diete Family Link aplikazioaren bidez pantaila-erabileraren mugak konfiguratzeko, webguneak onartzeko edo blokeatzeko, eta gauza gehiago egiteko. Haurrak Google Classroom-en edo haren antzeko webguneetan etxerako lanak egin beharko balitu, ikastetxeko kontu bat gehi liteke geroago.</translation> +<translation id="209539936453343974">Gurasoen murriztapenak konfiguratzeko, guraso batek kudeatutako Google-ko kontu bat eduki behar du haurrak. Family Link aplikazioaren bidez, pantaila-erabileraren mugak konfiguratzeko, webguneak onartu edo blokeatzeko, eta beste egiteko aukera ematen diete <ph name="DEVICE_TYPE_PLURAL" /> gailuek gurasoei. Haurrak Google Classroom-en edo haren antzeko webguneetan etxerako lanak egin beharko balitu, ikastetxeko kontu bat gehi liteke geroago.</translation> <translation id="2096715839409389970">Garbitu hirugarrenen cookieak</translation> <translation id="2097372108957554726">Gailu gehiago erregistratzeko, saioa hasi behar duzu Chrome-n</translation> <translation id="2098805196501063469">Egiaztatu gelditzen diren pasahitzak</translation> @@ -1108,7 +1109,7 @@ <translation id="2261323523305321874">Administratzaileak sistema osoari eragiten dion aldaketa bat egin du; ondorioz, profil zahar batzuk desgaitu dira.</translation> <translation id="2262332168014443534">Oinarrizko modua eginbideari esker, bizkorrago araka ditzakezu orri guztiak, baita HTTPS webguneetakoak ere.</translation> <translation id="2262477216570151239">Errepikatu aurreko tartea</translation> -<translation id="2262888617381992508">Ezin du erreproduzitu eduki babestua</translation> +<translation id="2262888617381992508">Ezin dute erreproduzitu eduki babestua</translation> <translation id="2263189956353037928">Amaitu saioa eta hasi berriro</translation> <translation id="2263371730707937087">Pantailaren freskatze-abiadura</translation> <translation id="22665427234727190">Eskatu nire baimena webguneren batek Bluetooth bidezko gailuak atzitu nahi dituenean (gomendatua)</translation> @@ -1379,7 +1380,7 @@ <translation id="2571655996835834626">Aldatu webguneek darabiltzaten eginbideen baimenak kontrolatzen dituzten ezarpenak; besteak beste, cookieak, JavaScript, pluginak, geokokapena, mikrofonoa eta kamera.</translation> <translation id="2572032849266859634"><ph name="VOLUME_NAME" /> bolumenean irakurtzeko sarbidea bakarrik eman da.</translation> <translation id="2575247648642144396">Ikono hau ikusgai egongo da luzapena orri honetan ekintzak egin ditzakeenean. Luzapena erabiltzeko, sakatu ikonoa edo <ph name="EXTENSION_SHORTCUT" />.</translation> -<translation id="2575441894380764255">Ezin ditu erakutsi iragarki oztopatzaileak edo iruzurrezkoak</translation> +<translation id="2575441894380764255">Ezin dituzte erakutsi iragarki oztopatzaileak edo iruzurrezkoak</translation> <translation id="257779572837908839">Konfiguratu bileretarako Chromebox gisa</translation> <translation id="2579232805407578790">Ezin izan da konektatu zerbitzarira. Egiaztatu sarera konektatuta zaudela eta saiatu berriro. Arazoak badirau, berrabiarazi Chromebook-a. Errore-kodea: <ph name="ERROR_CODE" />.</translation> <translation id="2580889980133367162">Eman beti hainbat fitxategi deskargatzeko baimena <ph name="HOST" /> ostalariari</translation> @@ -1646,7 +1647,7 @@ <translation id="2880660355386638022">Leihoaren kokalekua</translation> <translation id="2881076733170862447">Luzapena sakatzen duzunean</translation> <translation id="2882943222317434580"><ph name="IDS_SHORT_PRODUCT_NAME" /> berrabiarazi eta berrezarri egingo da</translation> -<translation id="288387288628762616">Flash erabil dezake</translation> +<translation id="288387288628762616">Flash erabil dezakete</translation> <translation id="2885378588091291677">Zereginen kudeatzailea</translation> <translation id="2885729872133513017">Arazo bat izan da zerbitzariaren erantzuna deskodetzean.</translation> <translation id="2886771036282400576">• <ph name="PERMISSION" /></translation> @@ -1681,7 +1682,7 @@ <translation id="2923234477033317484">Kendu kontua</translation> <translation id="2926085873880284723">Leheneratu lasterbide lehenetsiak</translation> <translation id="2927017729816812676">Cache-memoria</translation> -<translation id="2928795416630981206">Kameraren posizioaren jarraipena egin dezake</translation> +<translation id="2928795416630981206">Kameraren posizioaren jarraipena egin dezakete</translation> <translation id="2931157624143513983">Egokitu inprima daitekeen eremura</translation> <translation id="2932085390869194046">Iradoki pasahitza…</translation> <translation id="2932330436172705843"><ph name="PROFILE_DISPLAY_NAME" /> (haurrentzako kontua)</translation> @@ -1793,7 +1794,7 @@ <translation id="3060379269883947824">Gaitu "Hautatu ozen irakurtzeko" eginbidea</translation> <translation id="3060952009917586498">Aldatu gailuaren hizkuntza. Uneko hizkuntza <ph name="LANGUAGE" /> da.</translation> <translation id="3065041951436100775">Itxiarazi diren fitxei buruzko iritzia.</translation> -<translation id="306535478112428611">Ezin ditu editatu gailuko fitxategiak eta karpetak</translation> +<translation id="306535478112428611">Ezin dituzte editatu gailuko fitxategiak eta karpetak</translation> <translation id="3065522099314259755">Teklatuaren errepikapen-maiztasuna</translation> <translation id="3067198179881736288">Aplikazioa instalatu nahi al duzu?</translation> <translation id="3067198360141518313">Abiarazi plugin hau</translation> @@ -2223,7 +2224,7 @@ <translation id="3586806079541226322">Ezin da ireki fitxategia</translation> <translation id="3586931643579894722">Ezkutatu xehetasunak</translation> <translation id="3587482841069643663">Guztiak</translation> -<translation id="3588790464166520201">Ordainketa-kudeatzaileak instala ditzake</translation> +<translation id="3588790464166520201">Ordainketa-kudeatzaileak instala ditzakete</translation> <translation id="3589766037099229847">Segurua ez den edukia blokeatuta dago</translation> <translation id="3590194807845837023">Desblokeatu profila eta abiarazi berriro</translation> <translation id="3590295622232282437">Saio kudeatuan sartzen.</translation> @@ -2450,7 +2451,7 @@ <translation id="3822559385185038546">Administratzaileak ezartzen du proxya</translation> <translation id="3823310065043511710">Linux instalatzeko, gutxienez <ph name="INSTALL_SIZE" /> eduki behar dira libre.</translation> <translation id="3824621460022590830">Gailuaren erregistro-tokenak ez du balio. Jarri harremanetan gailuaren jabearekin edo administratzailearekin. Errore-kodea: <ph name="ERROR_CODE" />.</translation> -<translation id="3826071569074535339">Mugimendu-sentsoreak erabil daitezke</translation> +<translation id="3826071569074535339">Mugimendu-sentsoreak erabil ditzakete</translation> <translation id="3826440694796503677">Administratzaileak desgaitu egin du Google-ko kontuak gehitzeko aukera</translation> <translation id="3827306204503227641">Jarraitu baimentzen proben eremuan sartu gabeko pluginak</translation> <translation id="3827774300009121996">&Pantaila osoa</translation> @@ -2504,7 +2505,7 @@ <translation id="3873915545594852654">Arazo bat izan da ARC++ eginbidearekin.</translation> <translation id="3874164307099183178">Aktibatu Google-ren Laguntzailea</translation> <translation id="3877075909000773256">Nearby Share-ren ezarpenak <ph name="USER_NAME" /> erabiltzailearen gailurako; <ph name="USER_EMAIL" /> kontuaren bidez partekatzen dira.</translation> -<translation id="387771067039689031">Ezin du erabili pluginik ordenagailua atzitzeko</translation> +<translation id="387771067039689031">Ezin dute erabili pluginik ordenagailua atzitzeko</translation> <translation id="3879748587602334249">Deskargen kudeatzailea</translation> <translation id="3881478300875776315">Erakutsi lerro gutxiago</translation> <translation id="3882165008614329320">Kamerako bideo bat edo bideo-fitxategi bat (lehendik duzuna)</translation> @@ -2542,7 +2543,7 @@ <translation id="3919145445993746351">Luzapenak ordenagailu guztietan izateko, aktibatu sinkronizazioa</translation> <translation id="3920504717067627103">Ziurtagiri-gidalerroak</translation> <translation id="392089482157167418">Gaitu ChromeVox (ahozko argibideak)</translation> -<translation id="3920909973552939961">Ezin ditu instalatu ordainketa-kudeatzaileak</translation> +<translation id="3920909973552939961">Ezin dituzte instalatu ordainketa-kudeatzaileak</translation> <translation id="3923184630988645767">Datuen erabilera</translation> <translation id="3923676227229836009">Orri honek fitxategiak ikusteko baimena du</translation> <translation id="3924145049010392604">Meta</translation> @@ -2966,7 +2967,7 @@ <translation id="4450974146388585462">Diagnostikatu</translation> <translation id="4451479197788154834">Pasahitza gailu honetan eta Google-ko kontuan gorde da</translation> <translation id="4451757071857432900">Iragarkiak blokeatuta daude iragarki oztopatzaileak edo iruzurrezkoak erakusten dituzten webguneetan (gomendatua)</translation> -<translation id="4453205916657964690">Azpisarearen maskara</translation> +<translation id="4453205916657964690">Azpisare-maskara</translation> <translation id="4453946976636652378">Bilatu <ph name="SEARCH_ENGINE_NAME" /> erabilita edo idatzi URL bat</translation> <translation id="4459169140545916303">Aktibo duela <ph name="DEVICE_LAST_ACTIVATED_TIME" /> egun</translation> <translation id="4460014764210899310">Desegin taldea</translation> @@ -2994,7 +2995,7 @@ <translation id="4481530544597605423">Desparekatutako gailuak</translation> <translation id="4483049906298469269">Ezin izan da egin ping lehenetsia ez den sarerako atebidean</translation> <translation id="4487489714832036847">Chromebook-ek aplikazioak erabiltzen dituzte ohiko softwarearen ordez. Lortu aplikazioak produktibitatea areagotzeko, aisialdirako eta gehiagorako.</translation> -<translation id="4488257340342212116">Kamera erabil dezake</translation> +<translation id="4488257340342212116">Kamera erabil dezakete</translation> <translation id="4488502501195719518">Datu guztiak garbitu nahi dituzu?</translation> <translation id="449232563137139956">Webguneek irudiak erabili ohi dituzte zerbait ilustratzeko, hala nola sareko dendetarako argazkiak edo albiste-artikuluak</translation> <translation id="4493468155686877504">Gomendatua (<ph name="INSTALL_SIZE" />)</translation> @@ -3220,7 +3221,7 @@ <translation id="473775607612524610">Eguneratu</translation> <translation id="473936925429402449">Hautatuta, <ph name="CURRENT_ELEMENT" /> elementu gehigarritatik <ph name="TOTAL_ELEMENTS" />garrenera</translation> <translation id="4739639199548674512">Zerbitzu-eskaerak</translation> -<translation id="4742334355511750246">Ezin ditzake erakutsi irudiak</translation> +<translation id="4742334355511750246">Ezin ditzakete erakutsi irudiak</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />Lortu aplikazioak eguneratzeari buruzko informazioa<ph name="END_LINK" /></translation> <translation id="4744981231093950366">{NUM_TABS,plural, =1{Aktibatu webguneko audioa}other{Aktibatu webguneetako audioa}}</translation> <translation id="4746351372139058112">Mezuak</translation> @@ -3357,7 +3358,7 @@ <translation id="4908811072292128752">Bi webgune aldi berean arakatzeko, ireki beste fitxa bat</translation> <translation id="4909038193460299775">Kontu hau <ph name="DOMAIN" /> domeinuak kudeatzen duenez, kendu egingo dira gailutik laster-markak, historia, pasahitzak eta bestelako ezarpenak. Hala ere, Google-ko kontuan jarraituko dute lehendik dituzun datuek, eta <ph name="BEGIN_LINK" />Google Panela<ph name="END_LINK" /> erabil dezakezu haiek kudeatzeko.</translation> <translation id="4912643508233590958">Jarduerarik gabeko egoeratik ateratzea</translation> -<translation id="4915961947098019832">Irudiak erakuts ditzake</translation> +<translation id="4915961947098019832">Irudiak erakuts ditzakete</translation> <translation id="4916542008280060967"><ph name="FILE_NAME" /> editatzeko baimena eman nahi diozu webguneari?</translation> <translation id="491691592645955587">Aldatu arakatzaile seguru batera</translation> <translation id="4917385247580444890">Sendoa</translation> @@ -3446,7 +3447,7 @@ <translation id="5027550639139316293">Posta elektronikoko ziurtagiria</translation> <translation id="5027562294707732951">Gehitu luzapena</translation> <translation id="5029568752722684782">Garbitu kopia</translation> -<translation id="5033137252639132982">Ezin ditu erabili mugimendu-sentsoreak</translation> +<translation id="5033137252639132982">Ezin dituzte erabili mugimendu-sentsoreak</translation> <translation id="5033266061063942743">Forma geometrikoak</translation> <translation id="5036662165765606524">Ez onartu inongo webguneri fitxategi bat baino gehiago automatikoki deskargatzea</translation> <translation id="5037676449506322593">Hautatu guztiak</translation> @@ -3496,7 +3497,7 @@ <translation id="5088172560898466307">Zerbitzariaren ostalari-izena</translation> <translation id="5088534251099454936">PKCS #1 SHA-512 RSA enkriptatzearekin</translation> <translation id="5089810972385038852">Estatua</translation> -<translation id="5090637338841444533">Ezin da egin kameraren posizioaren jarraipena</translation> +<translation id="5090637338841444533">Ezin dute egin kameraren posizioaren jarraipena</translation> <translation id="5094721898978802975">Komunikatu aplikazio lankide natiboekin</translation> <translation id="5097002363526479830">Ezin izan da "<ph name="NAME" />" sarera konektatu: <ph name="DETAILS" /></translation> <translation id="5097649414558628673">Tresna: <ph name="PRINT_NAME" /></translation> @@ -3807,7 +3808,7 @@ <translation id="5471768120198416576">Kaixo! Testua ahots bihurtzeko eginbidearen ahotsa naiz.</translation> <translation id="5472627187093107397">Gorde webgune honetako pasahitzak</translation> <translation id="5473333559083690127">Idatzi berriro PIN kodea</translation> -<translation id="5481273127572794904">Ezin ditu deskargatu automatikoki fitxategi bat baino gehiago</translation> +<translation id="5481273127572794904">Ezin dituzte hainbat fitxategi deskargatu automatikoki</translation> <translation id="5481941284378890518">Gehitu inguruko inprimagailuak</translation> <translation id="5483785310822538350">Baliogabetu fitxategietarako eta gailurako sarbidea</translation> <translation id="5485080380723335835">Segurtasuna bermatzeko, blokeatuta dago <ph name="DEVICE_TYPE" /> gailua. Aurrera egiteko, idatzi pasahitza eskuz.</translation> @@ -3829,7 +3830,7 @@ <translation id="5495466433285976480">Gailuko erabiltzaile, fitxategi, datu, eta bestelako ezarpen guztiak kendu egingo dira gailua berrabiarazten duzun hurrengoan. Erabiltzaile guztiek saioa hasi beharko dute berriro.</translation> <translation id="5495597166260341369">Mantendu pantaila piztuta</translation> <translation id="5496587651328244253">Antolatu</translation> -<translation id="5496730470963166430">Ezin ditu bidali leiho gainerakorrak, ezta birbideratzeak erabili ere</translation> +<translation id="5496730470963166430">Ezin dituzte bidali leiho gainerakorrak, ezta birbideratzeak erabili ere</translation> <translation id="5497251278400702716">Fitxategi hau</translation> <translation id="5498967291577176373">Idatzi bizkorrago izena, helbidea edo telefono-zenbakiaren iradokizunekin</translation> <translation id="5499313591153584299">Fitxategiak ordenagailua kalte dezake.</translation> @@ -4048,7 +4049,7 @@ <translation id="5747552184818312860">Iraungitze-data</translation> <translation id="5747785204778348146">Garatzailea; egoera ezegonkorra</translation> <translation id="5747809636523347288">It&satsi eta joan "<ph name="URL" />" helbidera</translation> -<translation id="5754152670305761216">Eduki babestua erreproduzi dezake</translation> +<translation id="5754152670305761216">Eduki babestua erreproduzi dezakete</translation> <translation id="5756163054456765343">&Laguntza-zentroa</translation> <translation id="5759728514498647443"><ph name="APP_NAME" /> aplikazioaren bidez inprimatzera bidaltzen dituzun dokumentuak <ph name="APP_NAME" /> aplikazioak irakur ditzake.</translation> <translation id="5763751966069581670">Ez da aurkitu USB bidezko gailurik</translation> @@ -4517,7 +4518,7 @@ <translation id="6295158916970320988">Webgune guztiak</translation> <translation id="6295855836753816081">Gordetzen…</translation> <translation id="6298962879096096191">Erabili Google Play Android-erako aplikazioak instalatzeko</translation> -<translation id="6300177430812514606">Ezin du amaitu datuak bidaltzen edo jasotzen</translation> +<translation id="6300177430812514606">Ezin dute amaitu datuak bidaltzen edo jasotzen</translation> <translation id="630065524203833229">Irt&en</translation> <translation id="6300718114348072351"><ph name="PRINTER_NAME" /> ezin izan da konfiguratu automatikoki. Zehaztu inprimagailuaren xehetasun aurreratuak. <ph name="LINK_BEGIN" />Lortu informazio gehiago<ph name="LINK_END" /></translation> <translation id="6301076166764763868">Kontu pertsonaleko eta <ph name="EXISTING_USER" /> kontuko arakatze-datuak bereizteko, sortu beste profil bat <ph name="NEW_USER" /> erabiltzailearentzat</translation> @@ -4594,7 +4595,7 @@ <translation id="6390020764191254941">Eraman fitxa leiho berri batera</translation> <translation id="6390799748543157332">Leiho honetan ikusten dituzun orriak ez dira arakatzailearen historian agertuko eta ez dute ordenagailuan beste inolako aztarnarik utziko (adibidez, cookieak) gonbidatuaren leiho guztiak itxi ondoren. Hala ere, deskargatutako fitxategiak mantendu egingo dira.</translation> <translation id="6393156038355142111">Iradoki pasahitz seguru bat</translation> -<translation id="6393550101331051049">Segurua ez den edukia erakuts dezake</translation> +<translation id="6393550101331051049">Segurua ez den edukia erakuts dezakete</translation> <translation id="6395423953133416962">Bidali <ph name="BEGIN_LINK1" />sistemari buruzko informazioa<ph name="END_LINK1" /> eta <ph name="BEGIN_LINK2" />estatistikak<ph name="END_LINK2" /></translation> <translation id="6396988158856674517">Ez utzi webguneei mugimendu-sentsoreak erabiltzen</translation> <translation id="6398715114293939307">Kendu Google Play Store</translation> @@ -4627,7 +4628,7 @@ <translation id="6425556984042222041">Testua ahots bihurtzeko eginbidearen abiadura</translation> <translation id="6426200009596957090">Ireki ChromeVox-en ezarpenak</translation> <translation id="642654727595919401">Astebeteko epean datuen babeskopia egiteko eta <ph name="DEVICE_TYPE" /> gailua itzultzeko eskatzen du <ph name="DOMAIN" /> domeinuak.<ph name="LINK_BEGIN" />Ikusi xehetasunak<ph name="LINK_END" /></translation> -<translation id="642729974267661262">Ezin du erreproduzitu soinurik</translation> +<translation id="642729974267661262">Ezin dute erreproduzitu soinurik</translation> <translation id="6428982734197629783">Irudia prozesatzen</translation> <translation id="6429384232893414837">Errore bat gertatu da eguneratzean</translation> <translation id="6430814529589430811">Base64 bidez kodetutako ASCII, ziurtagiri bakarra</translation> @@ -4656,7 +4657,7 @@ <translation id="6458701200018867744">Ezin izan da kargatu (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> <translation id="6459488832681039634">Erabili hautespena aurkitzeko</translation> <translation id="6459799433792303855">Beste pantaila batera eraman da leiho aktiboa.</translation> -<translation id="6460566145397380451">MIDI gailuetara konekta daiteke</translation> +<translation id="6460566145397380451">MIDI gailuetara konekta daitezke</translation> <translation id="6460601847208524483">Bilatu hurrengoa</translation> <translation id="6461170143930046705">Sareak bilatzen…</translation> <translation id="6463795194797719782">&Editatu</translation> @@ -4892,7 +4893,7 @@ <translation id="676560328519657314">Google Pay-ko ordainketa-metodoak</translation> <translation id="6767566652486411142">Aukeratu beste hizkuntza bat…</translation> <translation id="6767639283522617719">Ezin izan da sartu domeinuan. Ziurtatu antolamendu-unitatearen ezarpenak zuzenak direla.</translation> -<translation id="6768034047581882264">Ezin du erakutsi segurua ez den edukirik</translation> +<translation id="6768034047581882264">Ezin dute erakutsi segurua ez den edukirik</translation> <translation id="6769557323306147204"><ph name="ORGANIZATION_NAME" /> erakundeak gailu hau eguneratzea gomendatzen du.</translation> <translation id="6769712124046837540">Inprimagailua gehitzen…</translation> <translation id="6770602306803890733">Segurtasuna hobetzen du, bai zuretzat, bai sareko gainontzeko erabiltzaileentzat.</translation> @@ -5075,7 +5076,7 @@ <translation id="6972629891077993081">HID gailuak</translation> <translation id="6972754398087986839">Hasi erabiltzen</translation> <translation id="6972887130317925583">Aldatu da arriskuan zegoen pasahitza. Egiaztatu pasahitzak <ph name="SETTINGS" /> atalean.</translation> -<translation id="697312151395002334">Leiho gainerakorrak bidal ditzake, eta birbideratzeak erabili</translation> +<translation id="697312151395002334">Leiho gainerakorrak bidal ditzakete, eta birbideratzeak erabili</translation> <translation id="6973611239564315524">Debian 10 (Buster) berritzeko bertsio bat dago erabilgarri</translation> <translation id="6974609594866392343">Konexiorik gabeko demo modua</translation> <translation id="6977381486153291903">Firmwarearen berrikuspena</translation> @@ -5207,7 +5208,7 @@ <translation id="7121362699166175603">Helbide-barrako historia eta osatze automatikoak garbitzen ditu. Google-ko kontuko historia arakatzeko beste modu batzuk aurki zenitzake <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> webgunean.</translation> <translation id="7121438501124788993">Garatzaileen modua</translation> <translation id="7121728544325372695">Marra adimendunak</translation> -<translation id="7123030151043029868">Fitxategi bat baino gehiago deskarga ditzake</translation> +<translation id="7123030151043029868">Hainbat fitxategi deskarga ditzakete automatikoki</translation> <translation id="7123360114020465152">Ez da onartzen jada</translation> <translation id="7125148293026877011">Ezabatu Crostini</translation> <translation id="7127980134843952133">Deskargen historia</translation> @@ -5489,7 +5490,7 @@ <translation id="7465635034594602553">Arazoren bat izan da. Itxaron minutu batzuk eta exekutatu <ph name="APP_NAME" /> berriro.</translation> <translation id="7465778193084373987">Netscape ziurtagiria ezeztatzeko URLa</translation> <translation id="7469894403370665791">Konektatu automatikoki sare honetara</translation> -<translation id="7470424110735398630">Zure arbela ikus dezake</translation> +<translation id="7470424110735398630">Zure arbela ikus dezakete</translation> <translation id="747114903913869239">Errorea: ezin izan da deskodetu luzapena</translation> <translation id="7473891865547856676">Ez, eskerrik asko</translation> <translation id="747459581954555080">Leheneratu guztiak</translation> @@ -5718,7 +5719,7 @@ <translation id="7732111077498238432">Gidalerroen bidez dago kontrolatuta sarea</translation> <translation id="7737115349420013392">"<ph name="DEVICE_NAME" />" gailuarekin parekatzen…</translation> <translation id="7737238973539693982">Ezabatu Linux (Beta)</translation> -<translation id="7737948071472253612">Ezin du erabili kamera</translation> +<translation id="7737948071472253612">Ezin dute erabili kamera</translation> <translation id="7740996059027112821">Estandarra</translation> <translation id="7742706086992565332">Webgune jakin batzuetan webgunea zenbat handitzen edo txikitzen duzun ezartzeko aukera duzu</translation> <translation id="774377079771918250">Aukeratu non gorde nahi duzun</translation> @@ -5727,7 +5728,7 @@ <translation id="7750228210027921155">Pantaila txiki gainjarria</translation> <translation id="7751260505918304024">Erakutsi guztiak</translation> <translation id="7753735457098489144">Ezin izan da instalatu ez dagoelako behar adina toki. Tokia egiteko, ezabatu gailuko memorian dauden fitxategiak.</translation> -<translation id="7754347746598978109">Ezin du erabili JavaScript</translation> +<translation id="7754347746598978109">Ezin dute erabili JavaScript</translation> <translation id="7754704193130578113">Galdetu fitxategi bakoitza non gorde behar den deskargatu aurretik</translation> <translation id="7755287808199759310">Gurasoek desblokea diezazukete</translation> <translation id="7757592200364144203">Aldatu gailuaren izena</translation> @@ -6249,7 +6250,7 @@ <translation id="8322814362483282060">Orriari zure kamera atzitzeko aukera blokeatu zaio.</translation> <translation id="8323167517179506834">Idatzi URLa</translation> <translation id="8324784016256120271">Webguneek cookieak erabil ditzakete beste webguneetan egiten dituzun arakatze-jarduerak ikusteko, hala nola iragarkiak pertsonalizatzeko.</translation> -<translation id="8325413836429495820">Ezin du ikusi arbela</translation> +<translation id="8325413836429495820">Ezin dute ikusi arbela</translation> <translation id="8326478304147373412">PKCS #7, ziurtagiri-katea</translation> <translation id="8327039559959785305">Errore bat gertatu da Linux fitxategiak muntatzean. Saiatu berriro.</translation> <translation id="8327676037044516220">Baimenak eta edukiaren ezarpenak</translation> @@ -6299,7 +6300,7 @@ <translation id="8382913212082956454">Kopiatu &helbide elektronikoa</translation> <translation id="8386091599636877289">Ez da aurkitu gidalerroa.</translation> <translation id="8386903983509584791">Amaitu da bilaketa</translation> -<translation id="8387361103813440603">Ezin du ikusi zure kokapena</translation> +<translation id="8387361103813440603">Ezin dute ikusi zure kokapena</translation> <translation id="8389416080014625855">Sortu orriaren QR kodea</translation> <translation id="8389492867173948260">Bisitatzen dituzun webguneetan dituzun datu guztiak irakurri eta aldatzeko, baimendu luzapen hau:</translation> <translation id="8390449457866780408">Zerbitzaria ez dago erabilgarri.</translation> @@ -6487,7 +6488,7 @@ <translation id="8621866727807194849">Software kaltegarria duzu ordenagailuan. Hura kentzen, ezarpenak leheneratzen eta luzapenak desgaitzen ari da Chrome. Horrela, arakatzailea ohiko moduan ibiliko da berriro.</translation> <translation id="8621979332865976405">Partekatu pantaila osoa</translation> <translation id="862542460444371744">&Luzapenak</translation> -<translation id="8625663000550647058">Ezin du erabili mikrofonoa</translation> +<translation id="8625663000550647058">Ezin dute erabili mikrofonoa</translation> <translation id="862727964348362408">Inaktibo</translation> <translation id="862750493060684461">CSS cachea</translation> <translation id="8627706565932943526">Sinkronizazio-errorea</translation> @@ -6568,7 +6569,7 @@ <translation id="8714838604780058252">Atzeko planoko grafikoak</translation> <translation id="8715480913140015283">Atzeko planoko fitxa bat kamera erabiltzen ari da</translation> <translation id="8716931980467311658">Linux aplikazio guztiak eta Linux-eko fitxategien karpetako datu guztiak ezabatu nahi dituzu <ph name="DEVICE_TYPE" /> gailutik?</translation> -<translation id="8717145295869185525">Ezin ditu erabili errealitate birtualeko gailuak eta datuak</translation> +<translation id="8717145295869185525">Ezin dituzte erabili errealitate birtualeko gailuak eta datuak</translation> <translation id="8717864919010420084">Kopiatu esteka</translation> <translation id="8719472795285728850">Luzapenaren jarduerarik dagoen entzuten…</translation> <translation id="8719653885894320876">Ezin izan da deskargatu <ph name="PLUGIN_NAME" /></translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index 788be3f..75d3e64b 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">فایلهای سندنگار، برگهنگار، اسلایدنگار و طرحنگار شما در حال همگامسازی هستند. برنامه Google Drive را باز کنید تا به صورت آنلاین یا آفلاین به آنها دسترسی داشته باشید.</translation> <translation id="1012876632442809908">دستگاه USB-C (درگاه جلو)</translation> <translation id="1013707859758800957">به افزایه آزمایشی نشدهای در این صفحه اجازه اجرا داده شده است.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">ویرایش نام پوشه</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{آخرین فرصت بهروزرسانی <ph name="DEVICE_TYPE" />}one{<ph name="DEVICE_TYPE" /> ظرف {NUM_DAYS} روز آینده بهروزرسانی کنید}other{<ph name="DEVICE_TYPE" /> ظرف {NUM_DAYS} روز آینده بهروزرسانی کنید}}</translation> <translation id="1016566241875885511">اطلاعات تکمیلی (اختیاری)</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index dfe32c78..421210e34 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">Dokumenttien, Taulukoiden, Presentaatioiden ja Piirrosten tiedostoja synkronoidaan. Voit käyttää niitä online- tai offline-tilassa Google Drive -sovelluksessa.</translation> <translation id="1012876632442809908">C-tyypin USB-laite (etuportti)</translation> <translation id="1013707859758800957">Hiekkalaatikossa toimimattoman laajennuksen annettiin käynnistyä tällä sivulla.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">Muokkaa kansion nimeä</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{Päivitä <ph name="DEVICE_TYPE" /> tänään}other{Päivitä <ph name="DEVICE_TYPE" /> {NUM_DAYS} päivän sisällä}}</translation> <translation id="1016566241875885511">Lisätietoja (valinnainen)</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb index 3ef865a..402a6cd 100644 --- a/chrome/app/resources/generated_resources_fr-CA.xtb +++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">Vos fichiers Documents, Feuilles de calcul, Présentations et Dessins sont en cours de synchronisation. Ouvrez l'application Google Disque pour y accéder en ligne ou hors ligne.</translation> <translation id="1012876632442809908">Appareil USB-C (port avant)</translation> <translation id="1013707859758800957">L'exécution hors carré de sable d'un plugiciel a été autorisée sur cette page.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">Modifier le nom du dossier</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{Dernière journée pour mettre à jour l'appareil <ph name="DEVICE_TYPE" />}one{Mettez à jour l'appareil <ph name="DEVICE_TYPE" /> d'ici {NUM_DAYS} jour}other{Mettez à jour l'appareil <ph name="DEVICE_TYPE" /> d'ici {NUM_DAYS} jours}}</translation> <translation id="1016566241875885511">Détails supplémentaires (facultatif)</translation> @@ -5116,7 +5117,7 @@ <translation id="7005848115657603926">Numéros de pages non valides, utilisez le format <ph name="EXAMPLE_PAGE_RANGE" />.</translation> <translation id="7006634003215061422">Marge inférieure</translation> <translation id="7007648447224463482">Tout ouvrir dans une nouvelle fenêtre</translation> -<translation id="7009709314043432820"><ph name="APP_NAME" /> utiliser votre caméra</translation> +<translation id="7009709314043432820"><ph name="APP_NAME" /> utilise votre caméra</translation> <translation id="701080569351381435">Afficher le code source</translation> <translation id="7014174261166285193">Échec de l'installation.</translation> <translation id="7017004637493394352">Dites « Ok Google » encore une fois</translation> @@ -5797,7 +5798,7 @@ <translation id="7819857487979277519">PSK (WPA ou RSN)</translation> <translation id="7819992334107904369">Synchronisation Google Chrome</translation> <translation id="782057141565633384">C&opier l'adresse de la vidéo</translation> -<translation id="7822187537422052256">Voulez-vous vraiment cette adresse?</translation> +<translation id="7822187537422052256">Voulez-vous vraiment retirer cette adresse?</translation> <translation id="7824864914877854148">Une erreur s'est produite et la sauvegarde n'a pas pu être terminée</translation> <translation id="7825666486843191125">Tous les contacts à proximité lorsque votre écran est déverrouillé</translation> <translation id="782590969421016895">Utilisez les pages actuelles</translation> @@ -6874,7 +6875,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{Il vous reste une tentative.}one{Il vous reste # tentative.}other{Il vous reste # tentatives.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Mettre à jour le mot de passe pour <ph name="ORIGIN" />?</translation> -<translation id="9041049756004505730">La transcription instantanée est visible, appuyez sur ⌘+Option+flèche vers le haut ou vers le pour basculer la sélection</translation> +<translation id="9041049756004505730">La transcription instantanée est visible, appuyez sur ⌘+Option+flèche vers le haut ou vers le bas pour basculer la sélection</translation> <translation id="9041692268811217999">Votre administrateur a désactivé l'accès aux fichiers locaux sur votre ordinateur</translation> <translation id="904224458472510106">Cette opération est irréversible</translation> <translation id="9042893549633094279">Sécurité et confidentialité</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index 80adecd5..87759eb1 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -1689,7 +1689,7 @@ <translation id="2932883381142163287">Signaler un abus</translation> <translation id="2933632078076743449">Dernière mise à jour</translation> <translation id="2934999512438267372">Contrôle total des appareils MIDI autorisé</translation> -<translation id="2935654492420446828">Ajoutez un compte scolaire ultérieurement</translation> +<translation id="2935654492420446828">Ajouter un compte scolaire plus tard</translation> <translation id="2936851848721175671">Sauvegarde et restauration</translation> <translation id="2938225289965773019">Ouvrir les liens "<ph name="PROTOCOL" />"</translation> <translation id="2938845886082362843">Afficher et supprimer les données de connexion stockées sur votre clé de sécurité</translation> @@ -2814,7 +2814,7 @@ <translation id="425573743389990240">Taux de décharge de la batterie en watts (une valeur négative signifie que la batterie est en charge)</translation> <translation id="4256316378292851214">En&registrer la vidéo sous...</translation> <translation id="4258348331913189841">Systèmes de fichiers</translation> -<translation id="4259388776256904261">Cette opération peut prendre quelques instants</translation> +<translation id="4259388776256904261">Cette opération peut prendre un certain temps</translation> <translation id="4260182282978351200">Le fichier <ph name="FILE_NAME" /> est peut-être dangereux. Souhaitez-vous l'envoyer au service Protection Avancée de Google pour analyse ? Appuyez sur Maj+F6 pour accéder à la barre de téléchargements.</translation> <translation id="4263223596040212967">Vérifiez la disposition de votre clavier et réessayez.</translation> <translation id="4263757076580287579">L'enregistrement de l'imprimante a été annulé.</translation> @@ -3785,7 +3785,7 @@ <translation id="5449588825071916739">Ajouter tous les onglets aux favoris…</translation> <translation id="5449716055534515760">Fe&rmer la fenêtre</translation> <translation id="5452974209916053028">Session de navigation privée actuelle : <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> -<translation id="5454005855577728171">Bulle de sous-titres décalée de <ph name="POSITION_ON_SCREEN_FROM_LEFT" /> % sur l'axe des abscisses et de <ph name="POSITION_ON_SCREEN_FROM_TOP" /> % sur l'axe des ordonnées</translation> +<translation id="5454005855577728171">Bulle de sous-titres décalée de <ph name="POSITION_ON_SCREEN_FROM_LEFT" /> % sur la droite et de <ph name="POSITION_ON_SCREEN_FROM_TOP" /> % vers le bas</translation> <translation id="5454166040603940656">avec <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Non valide</translation> <translation id="5457459357461771897">Accéder aux photos, à la musique et aux autres fichiers multimédias stockés sur votre ordinateur et les supprimer</translation> @@ -4985,7 +4985,7 @@ <translation id="6865313869410766144">Données de saisie automatique</translation> <translation id="6865598234501509159">La page n'est pas en <ph name="LANGUAGE" /></translation> <translation id="6865708901122695652">Journaux d'événements WebRTC (<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation> -<translation id="686609795364435700">Fort</translation> +<translation id="686609795364435700">Faible</translation> <translation id="686664946474413495">Température des couleurs</translation> <translation id="6868934826811377550">Voir les détails</translation> <translation id="6871644448911473373">Répondeur OCSP : <ph name="LOCATION" /></translation> @@ -6212,7 +6212,7 @@ <translation id="826905130698769948">Certificat client non valide</translation> <translation id="8270242299912238708">Documents PDF</translation> <translation id="827097179112817503">Afficher le bouton Accueil</translation> -<translation id="8271379370373330993">Les étapes suivantes sont réservées aux parents. Vous pourrez rendre le <ph name="DEVICE_TYPE" /> à votre enfant après la configuration du compte.</translation> +<translation id="8271379370373330993">Les étapes suivantes sont réservées aux parents. Vous pourrez redonner l'appareil <ph name="DEVICE_TYPE" /> à votre enfant après la configuration du compte.</translation> <translation id="8272443605911821513">Cliquer sur "Extensions" dans le menu "Autres outils" pour gérer les extensions</translation> <translation id="8274332263553132018">Caster le fichier</translation> <translation id="8274924778568117936">N'éteignez pas et ne fermez pas votre <ph name="DEVICE_TYPE" /> avant la fin de la mise à jour. Votre <ph name="DEVICE_TYPE" /> redémarrera une fois l'installation terminée.</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index fa60781..ba60739 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">A Dokumentumok, Táblázatok, Diák és Rajzok fájljainak szinkronizálása következik. A fájlok online vagy offline eléréséhez nyissa meg a Google Drive alkalmazást.</translation> <translation id="1012876632442809908">C típusú USB-vel kompatibilis eszköz (elülső port)</translation> <translation id="1013707859758800957">A rendszer engedélyezte egy nem sandbox-technológiát alkalmazó beépülő modul futását az oldalon.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">Mappa nevének szerkesztése</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{Az eszköz (<ph name="DEVICE_TYPE" />) frissítésére rendelkezésre álló utolsó nap}other{Az eszköz (<ph name="DEVICE_TYPE" />) frissítésére {NUM_DAYS} nap áll rendelkezésre}}</translation> <translation id="1016566241875885511">További információk (nem kötelező)</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb index 6c9990bc1..80000d7c 100644 --- a/chrome/app/resources/generated_resources_hy.xtb +++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">Ձեր փաստաթղթերը, աղյուսակները, սլայդները և գծագրերը համաժամացվում են: Բացեք Google Drive հավելվածը՝ այդ ֆայլերից առցանց կամ անցանց ռեժիմներում օգտվելու համար:</translation> <translation id="1012876632442809908">USB-C սարք (առջևի միացք)</translation> <translation id="1013707859758800957">Այս էջում թույլատրվել է չպաշտպանված միջավայրից դուրս փլագինի գործարկում:</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">Պանակի անվան փոփոխում</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{Այսօր <ph name="DEVICE_TYPE" /> սարքի թարմացման վերջին օրն է}one{Թարմացրեք <ph name="DEVICE_TYPE" /> սարքը {NUM_DAYS} օրվա ընթացքում}other{Թարմացրեք <ph name="DEVICE_TYPE" /> սարքը {NUM_DAYS} օրվա ընթացքում}}</translation> <translation id="1016566241875885511">Լրացուցիչ տեղեկություններ (պարտադիր չէ)</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index 65b184d..bba5fa1 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -6401,7 +6401,7 @@ <translation id="850875081535031620">Software berbahaya tidak ditemukan</translation> <translation id="8509177919508253835">Reset kunci keamanan dan buat PIN</translation> <translation id="8509646642152301857">Download kamus periksa ejaan gagal.</translation> -<translation id="8512396579636492893">{COUNT,plural, =0{Tidak ditemukan sandi yang lemah}=1{{COUNT} sandi lemah ditemukan}other{{COUNT} sandi lemah ditemukan}}</translation> +<translation id="8512396579636492893">{COUNT,plural, =0{Tidak ditemukan sandi yang lemah}=1{Ditemukan {COUNT} sandi yang lemah}other{Ditemukan {COUNT} sandi yang lemah}}</translation> <translation id="8512476990829870887">Akhiri Proses</translation> <translation id="851263357009351303">Selalu izinkan <ph name="HOST" /> menampilkan gambar</translation> <translation id="8513108775083588393">Putar otomatis</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index c5a9781..cd52688 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -958,7 +958,7 @@ <translation id="2090165459409185032">Visita il sito google.com/accounts/recovery per recuperare i dati del tuo account</translation> <translation id="2090876986345970080">Impostazioni di sicurezza del sistema</translation> <translation id="2091887806945687916">Audio</translation> -<translation id="209539936453343974">Per configurare la funzionalità Controllo genitori, un bambino deve avere un Account Google gestito da un genitore. <ph name="DEVICE_TYPE_PLURAL" /> consentono ai genitori di impostare dei limiti per il tempo di utilizzo, approvare o bloccare siti web e altro ancora tramite l'app Family Link. Se il bambino deve fare i compiti su siti come Google Classroom, è possibile aggiungere un account della scuola in un secondo momento.</translation> +<translation id="209539936453343974">Per configurare la funzionalità Controllo genitori, un bambino deve avere un Account Google gestito da un genitore. I dispositivi <ph name="DEVICE_TYPE_PLURAL" /> consentono ai genitori di impostare dei limiti per il tempo di utilizzo, approvare o bloccare siti web e altro ancora tramite l'app Family Link. Se il bambino deve fare i compiti su siti come Google Classroom, è possibile aggiungere un account della scuola in un secondo momento.</translation> <translation id="2096715839409389970">Cancella cookie di terze parti</translation> <translation id="2097372108957554726">Devi accedere a Chrome per registrare nuovi dispositivi</translation> <translation id="2098805196501063469">Controlla le password rimanenti</translation> @@ -5362,7 +5362,7 @@ <translation id="7324297612904500502">Forum per la versione Beta</translation> <translation id="7325209047678309347">Carta inceppata</translation> <translation id="7325437708553334317">Estensione Contrasto elevato</translation> -<translation id="7326004502692201767">Configura questo <ph name="DEVICE_TYPE" /> per un bambino</translation> +<translation id="7326004502692201767">Configura il dispositivo <ph name="DEVICE_TYPE" /> per un bambino</translation> <translation id="7328699668338161242">L'assistente è già in grado di riconoscere la tua voce</translation> <translation id="7328867076235380839">Combinazione non valida</translation> <translation id="7329154610228416156">Accesso non riuscito perché è stato configurato l'utilizzo di un URL non protetto (<ph name="BLOCKED_URL" />). Contatta l'amministratore.</translation> @@ -6210,7 +6210,7 @@ <translation id="826905130698769948">Certificato client non valido</translation> <translation id="8270242299912238708">Documenti PDF</translation> <translation id="827097179112817503">Mostra pulsante Home</translation> -<translation id="8271379370373330993">I prossimi passaggi devono essere eseguiti dai genitori. Il <ph name="DEVICE_TYPE" /> può essere restituito al bambino dopo la creazione dell'account.</translation> +<translation id="8271379370373330993">I prossimi passaggi devono essere eseguiti dai genitori. Il dispositivo <ph name="DEVICE_TYPE" /> può essere restituito al bambino dopo la creazione dell'account.</translation> <translation id="8272443605911821513">Gestisci le tue estensioni facendo clic su Estensioni nel menu "Altri strumenti".</translation> <translation id="8274332263553132018">Trasmetti file</translation> <translation id="8274924778568117936">Non spegnere o chiudere il tuo dispositivo <ph name="DEVICE_TYPE" /> fino al termine dell'aggiornamento. Il dispositivo <ph name="DEVICE_TYPE" /> si riavvierà al termine dell'installazione.</translation> @@ -6235,7 +6235,7 @@ <translation id="8300011035382349091">Modifica il preferito per questa scheda</translation> <translation id="8300374739238450534">Blu notte</translation> <translation id="8300849813060516376">OTASP non riuscito</translation> -<translation id="8304383784961451596">Non disponi dell'autorizzazione per utilizzare questo dispositivo. Contatta l'amministratore per richiedere l'autorizzazione di accesso o per accedere con un Account Google supervisionato tramite Family Link.</translation> +<translation id="8304383784961451596">Non disponi dell'autorizzazione per utilizzare questo dispositivo. Contatta l'amministratore per richiedere l'autorizzazione di accesso o accedi con un Account Google supervisionato tramite Family Link.</translation> <translation id="8308179586020895837">Chiedi conferma se <ph name="HOST" /> vuole accedere alla webcam</translation> <translation id="830868413617744215">Beta</translation> <translation id="8309458809024885768">Il certificato esiste già</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index 71ef670..491e5f0 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">קובצי המסמכים, הגיליונות, השקפים והשרטוטים מסתנכרנים כעת. פתח את היישום Google Drive כדי לגשת אליהם באופן מקוון או לא מקוון.</translation> <translation id="1012876632442809908">מכשיר עם יציאת USB-C (יציאה קדמית)</translation> <translation id="1013707859758800957">בדף הזה הותרה הפעלה של פלאגין ללא ארגז חול.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">עריכת שם התיקייה</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{היום האחרון לעדכון של <ph name="DEVICE_TYPE" />}two{יש לעדכן את <ph name="DEVICE_TYPE" /> בתוך יומיים ({NUM_DAYS})}many{יש לעדכן את <ph name="DEVICE_TYPE" /> בתוך {NUM_DAYS} ימים}other{יש לעדכן את <ph name="DEVICE_TYPE" /> בתוך {NUM_DAYS} ימים}}</translation> <translation id="1016566241875885511">מידע נוסף (אופציונלי)</translation> @@ -357,7 +358,7 @@ <translation id="1406500794671479665">מאמת...</translation> <translation id="1407135791313364759">פתח הכל</translation> <translation id="140723521119632973">הפעלה סלולרית</translation> -<translation id="1407489512183974736">חתוך במרכז</translation> +<translation id="1407489512183974736">חיתוך במרכז</translation> <translation id="1408504635543854729">ניתן לעיין בתוכן של המכשיר באמצעות האפליקציה 'קבצים'. התוכן מוגבל על-ידי מנהל מערכת, ואי אפשר לשנות אותו.</translation> <translation id="1408980562518920698">ניהול מידע אישי</translation> <translation id="1410197035576869800">סמל האפליקציה</translation> @@ -704,7 +705,7 @@ <translation id="1790976235243700817">הסרת הגישה</translation> <translation id="1792619191750875668">תצוגה מורחבת</translation> <translation id="1794791083288629568">שליחת משוב שיעזור לנו לפתור את הבעיה.</translation> -<translation id="1795214765651529549">השתמש בעיצוב קלאסי</translation> +<translation id="1795214765651529549">שימוש בעיצוב קלאסי</translation> <translation id="1799071797295057738">התוסף "<ph name="EXTENSION_NAME" />" הושבת באופן אוטומטי.</translation> <translation id="1802624026913571222">מעבר למצב שינה כשסוגרים את הכיסוי</translation> <translation id="1802687198411089702">הדף לא מגיב. באפשרות לחכות או לצאת.</translation> @@ -742,7 +743,7 @@ <translation id="1828879788654007962">{COUNT,plural, =0{&פתיחת כול הכתובות}=1{&פתיחת הסימנייה}two{&פתיחת כול הכתובות ({COUNT})}many{&פתיחת כול הכתובות ({COUNT})}other{&פתיחת כול הכתובות ({COUNT})}}</translation> <translation id="1828901632669367785">הדפסה באמצעות תיבת דו-שיח של המערכת...</translation> <translation id="1829129547161959350">פינגווין</translation> -<translation id="1829192082282182671">הת&רחק</translation> +<translation id="1829192082282182671">הת&רחקות</translation> <translation id="1830550083491357902">לא מחובר</translation> <translation id="1832511806131704864">השינוי בטלפון עודכן</translation> <translation id="1834503245783133039">ההורדה נכשלה: <ph name="FILE_NAME" /></translation> @@ -754,7 +755,7 @@ <translation id="184273675144259287">החלפת הקבצים והאפליקציות של Linux בגיבוי קודם</translation> <translation id="1842766183094193446">להפעיל מצב הדגמה?</translation> <translation id="1845727111305721124">מורשים להשמיע צלילים</translation> -<translation id="1846308012215045257">כדי להפעיל את <ph name="PLUGIN_NAME" />, לחץ עליו תוך כדי הקשה על Control</translation> +<translation id="1846308012215045257">כדי להפעיל את <ph name="PLUGIN_NAME" />, יש ללחוץ עליו תוך כדי הקשה על Control</translation> <translation id="1849186935225320012">לדף זה יש שליטה מלאה על מכשירי MIDI.</translation> <translation id="1850508293116537636">סובב &בכיוון השעון</translation> <translation id="1852141627593563189">חיפוש תוכנה מזיקה</translation> @@ -833,7 +834,7 @@ <translation id="1930879306590754738">הסיסמאות נמחקו מהמכשיר הזה ומחשבון Google שלך</translation> <translation id="1931152874660185993">לא מותקנים רכיבים.</translation> <translation id="1932098463447129402">לא לפני</translation> -<translation id="1933809209549026293">חבר עכבר או מקלדת. אם ברצונך להשתמש במכשיר Bluetooth, ודא שהוא מוכן להתאמה.</translation> +<translation id="1933809209549026293">יש לחבר עכבר או מקלדת. אם ברצונך להשתמש במכשיר Bluetooth, עליך לוודא שהוא מוכן להתאמה.</translation> <translation id="1935303383381416800">מורשים לראות את המיקום</translation> <translation id="1936931585862840749">יש להזין מספר שמציין כמה עותקים יש להדפיס (1 עד <ph name="MAX_COPIES" />).</translation> <translation id="1937774647013465102">לא ניתן לייבא ארכיטקטורת מאגר מסוג <ph name="ARCHITECTURE_CONTAINER" /> באמצעות המכשיר הזה, כי הוא מסוג <ph name="ARCHITECTURE_DEVICE" />. אפשר לנסות לשחזר את המאגר במכשיר אחר או לפתוח את האפליקציה 'קבצים' כדי לגשת לקבצים בתוך תמונת המאגר.</translation> @@ -888,7 +889,7 @@ <translation id="2006638907958895361">פתח את הקישור ב-<ph name="APP" /></translation> <translation id="2007404777272201486">דיווח על בעיה...</translation> <translation id="2010501376126504057">מכשירים תואמים</translation> -<translation id="2017334798163366053">השבת איסוף של נתוני ביצועים</translation> +<translation id="2017334798163366053">השבתת האיסוף של נתוני ביצועים</translation> <translation id="2017836877785168846">ניקוי של ההיסטוריה וההשלמות האוטומטיות בשורת כתובת האתר</translation> <translation id="2018352199541442911">מצטערים, מכשיר האחסון החיצוני שלך אינו נתמך בשלב זה.</translation> <translation id="2019718679933488176">&פתח שמע בכרטיסייה חדשה</translation> @@ -954,7 +955,7 @@ <translation id="2090165459409185032">כדי לשחזר את המידע מהחשבון, עבור אל: google.com/accounts/recovery</translation> <translation id="2090876986345970080">הגדרה של אבטחת מערכת</translation> <translation id="2091887806945687916">צליל</translation> -<translation id="209539936453343974">כדי להגדיר בקרת הורים, לילד או לילדה צריך להיות חשבון Google שמנוהל על ידי הורה. בעזרת <ph name="DEVICE_TYPE_PLURAL" />, הורים יכולים להגדיר מגבלות, לאשר או לחסום אתרים ולבצע פעולות נוספות באמצעות אפליקציית Family Link. אם שיעורי הבית של הילד או הילדה נעשים באתרים כמו Google Classroom, ניתן להוסיף חשבון בית ספרי מאוחר יותר.</translation> +<translation id="209539936453343974">כדי להגדיר בקרת הורים, לילד או לילדה צריך להיות חשבון Google שמנוהל על ידי הורה. עם <ph name="DEVICE_TYPE_PLURAL" />, ההורים יכולים להגדיר מגבלות מסך, לאשר או לחסום אתרים ולבצע פעולות נוספות דרך אפליקציית Family Link. אם הילדים צריכים להכין מטלות לימודיות באתרים כמו Google Classroom, ניתן להוסיף חשבון בית ספרי בהמשך.</translation> <translation id="2096715839409389970">ניקוי קובצי cookie של צד שלישי</translation> <translation id="2097372108957554726">עליך להיכנס מחדש ל-Chrome כדי לרשום מכשירים חדשים</translation> <translation id="2098805196501063469">בדיקת הסיסמאות הנותרות</translation> @@ -1603,7 +1604,7 @@ <translation id="2835547721736623118">שירות של זיהוי דיבור</translation> <translation id="2836269494620652131">קריסה</translation> <translation id="2836635946302913370">הכניסה עם שם משתמש זה הושבתה על ידי מנהל המערכת.</translation> -<translation id="283669119850230892">כדי להשתמש ב-<ph name="NETWORK_ID" /> של הרשת, השלם קודם את ההתחברות לאינטרנט, למטה.</translation> +<translation id="283669119850230892">כדי להשתמש ב-<ph name="NETWORK_ID" /> של הרשת, יש להשלים קודם את ההתחברות לאינטרנט, למטה.</translation> <translation id="2838379631617906747">מתקין</translation> <translation id="2838835911926931318">אפשר להיכנס לחשבון כדי לסנכרן את הסימניות, הסיסמאות, ההיסטוריה והגדרות נוספות בכל המכשירים שלך</translation> <translation id="2839032553903800133">ההודעות חסומות</translation> @@ -1715,7 +1716,7 @@ <translation id="2961695502793809356">לחץ כדי לעבור קדימה, לחץ והחזק כדי לראות את ההיסטוריה</translation> <translation id="2962131322798295505">Wallpaper Picker</translation> <translation id="2963151496262057773">הפלאגין הבא אינו מגיב: <ph name="PLUGIN_NAME" /> האם ברצונך לכבות אותו?</translation> -<translation id="2964193600955408481">השבת Wi-Fi</translation> +<translation id="2964193600955408481">השבתת Wi-Fi</translation> <translation id="2966937470348689686">ניהול העדפות ל-Android</translation> <translation id="2972581237482394796">&ביצוע חוזר</translation> <translation id="2973324205039581528">השתקת האתר</translation> @@ -1794,7 +1795,7 @@ <translation id="306535478112428611">לא מורשים לערוך קבצים או תיקיות במכשיר</translation> <translation id="3065522099314259755">קצב חזרה על פעולת מקלדת</translation> <translation id="3067198179881736288">להתקין את האפליקציה?</translation> -<translation id="3067198360141518313">הרץ פלאגין זה</translation> +<translation id="3067198360141518313">הרצת פלאגין זה</translation> <translation id="3071624960923923138">אפשר ללחוץ כאן כדי לפתוח כרטיסייה חדשה</translation> <translation id="3072775339180057696">האם לאפשר לאתר לראות את <ph name="FILE_NAME" />?</translation> <translation id="3075874217500066906">נדרשת הפעלה מחדש על מנת להתחיל את תהליך ה-Powerwash. לאחר ההפעלה מחדש תתבקש לאשר שברצונך להמשיך.</translation> @@ -1984,7 +1985,7 @@ <translation id="3305661444342691068">פתח PDF בתצוגה מקדימה</translation> <translation id="3308116878371095290">לא ניתן להגדיר קובצי Cookie לדף זה.</translation> <translation id="3308134619352333507">לחצן 'הסתר'</translation> -<translation id="3308852433423051161">טוען את Google Assistant...</translation> +<translation id="3308852433423051161">טעינת Google Assistant מתבצעת...</translation> <translation id="3310640316857623290">זמן האחזור של ה-DNS גבוה במידה משמעותית מהסף המותר</translation> <translation id="3311445899360743395">ייתכן שיוסרו מהמכשיר נתונים המשויכים לאפליקציה הזו.</translation> <translation id="3312424061798279731">שפות זמינות</translation> @@ -2313,7 +2314,7 @@ <translation id="3683524264665795342">בקשה לשיתוף מסך של <ph name="APP_NAME" /></translation> <translation id="3685598397738512288">העדפות USB ב-Linux</translation> <translation id="368789413795732264">אירעה שגיאה בעת ניסיון לכתוב את הקובץ: <ph name="ERROR_TEXT" /></translation> -<translation id="3688507211863392146">כתיבה לקבצים ותיקיות שאתה פותח ביישום</translation> +<translation id="3688507211863392146">כתיבה לקבצים ותיקיות שפותחים ביישום</translation> <translation id="3688526734140524629">מעבר לערוץ אחר</translation> <translation id="3688578402379768763">מעודכן</translation> <translation id="3688794912214798596">שינוי שפות...</translation> @@ -2336,7 +2337,7 @@ <translation id="3705722231355495246">-</translation> <translation id="3706463572498736864">דפים בכל גיליון</translation> <translation id="370649949373421643">הפעל Wi-Fi</translation> -<translation id="370665806235115550">טוען...</translation> +<translation id="370665806235115550">בטעינה...</translation> <translation id="3709244229496787112">הדפדפן נסגר לפני שההורדה הושלמה.</translation> <translation id="3711931198657368127">הד&בקה ומעבר אל <ph name="URL" /></translation> <translation id="3711945201266135623">נמצאו <ph name="NUM_PRINTERS" /> מדפסות המשויכות לשרת ההדפסה</translation> @@ -2413,7 +2414,7 @@ <translation id="3785727820640310185">סיסמאות שמורות לאתר הזה</translation> <translation id="3788301286821743879">לא ניתן היה להפעיל את אפליקציית הקיוסק.</translation> <translation id="3788401245189148511">מעוניינים:</translation> -<translation id="3789841737615482174">התקן</translation> +<translation id="3789841737615482174">התקנה</translation> <translation id="379082410132524484">תוקף הכרטיס שלך פג</translation> <translation id="3792890930871100565">נתק מדפסות</translation> <translation id="3793395331556663376">נפתחו יותר מדי מערכות קבצים.</translation> @@ -2483,7 +2484,7 @@ <translation id="3855676282923585394">יבא סימניות והגדרות...</translation> <translation id="3856096718352044181">יש לאמת שהספק הזה חוקי או לנסות שוב מאוחר יותר</translation> <translation id="3856800405688283469">בחירת אזור זמן</translation> -<translation id="3857807444929313943">להרים ולגעת בחיישן שוב</translation> +<translation id="3857807444929313943">יש להרים ולגעת בחיישן שוב</translation> <translation id="3860104611854310167"><ph name="PROFILE_NAME" />: הסנכרון הושהה</translation> <translation id="3861386850461794863">שפות לאפליקציות ולאתרים</translation> <translation id="3861638017150647085">שם המשתמש "<ph name="USERNAME" />" לא זמין</translation> @@ -2566,7 +2567,7 @@ <translation id="3941565636838060942">להסתרת הגישה לתכנית הזו, עליך להסיר אותה באמצעות <ph name="CONTROL_PANEL_APPLET_NAME" /> בלוח הבקרה. -האם תרצה להפעיל את <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> +להפעיל את <ph name="CONTROL_PANEL_APPLET_NAME" />?</translation> <translation id="394183848452296464">לא ניתן ליצור קיצור דרך</translation> <translation id="3943582379552582368">&אחורה</translation> <translation id="3943857333388298514">הדבק</translation> @@ -2764,7 +2765,7 @@ <translation id="4194570336751258953">הפעלת האפשרות 'נגיעה קלה'</translation> <translation id="4195643157523330669">פתיחה בכרטיסייה חדשה</translation> <translation id="4195814663415092787">המשך מהמקום שבו הפסקת</translation> -<translation id="4198146608511578238">כדי לדבר אל Google Assistant, לחץ לחיצה ארוכה על הסמל של מרכז האפליקציות.</translation> +<translation id="4198146608511578238">כדי לדבר אל Google Assistant, יש ללחוץ לחיצה ארוכה על הסמל של מרכז האפליקציות.</translation> <translation id="4200689466366162458">מילים מותאמות אישית</translation> <translation id="4200983522494130825">&כרטיסייה חדשה</translation> <translation id="4201546031411513170">אפשר לבחור מה לסנכרן בכל שלב דרך ההגדרות.</translation> @@ -2795,7 +2796,7 @@ <translation id="4242533952199664413">פתח את 'הגדרות'</translation> <translation id="4242577469625748426">התקנת הגדרות המדיניות במכשיר: <ph name="VALIDATION_ERROR" /> נכשלה.</translation> <translation id="4243504193894350135">המדפסת מושהית</translation> -<translation id="4244238649050961491">חפש עוד אפליקציות לשימוש בסטיילוס</translation> +<translation id="4244238649050961491">חיפוש עוד אפליקציות לשימוש בסטיילוס</translation> <translation id="424726838611654458">פתח תמיד ב-Adobe Reader</translation> <translation id="4247901771970415646">לא ניתן לסנכרן עם <ph name="USERNAME" /></translation> <translation id="4248098802131000011">הגנה על הסיסמאות שלך מפני פרצות באבטחת המידע ובעיות אבטחה אחרות</translation> @@ -2913,7 +2914,7 @@ <translation id="439266289085815679">הגדרת ה-Bluetooth היא בשליטת <ph name="USER_EMAIL" />.</translation> <translation id="4392896746540753732">עריכת קובץ התצורה</translation> <translation id="4393691030048716353">ניפוי באגים באמצעות ADB הושבת על-ידי <ph name="DOMAIN" />. לאחר הפעלה מחדש של <ph name="DEVICE_TYPE" />, לא תהיה יותר אפשרות להתקין אפליקציות ממקור לא ידוע.</translation> -<translation id="4394049700291259645">השבת</translation> +<translation id="4394049700291259645">השבתה</translation> <translation id="4396956294839002702">{COUNT,plural, =0{&פתיחת כול הכתובות}=1{&פתיחת הסימנייה}two{&פתיחת כול הכתובות ({COUNT})}many{&פתיחת כול הכתובות ({COUNT})}other{&פתיחת כול הכתובות ({COUNT})}}</translation> <translation id="439817266247065935">המכשיר שלך לא כובה כהלכה. כדי להשתמש באפליקציות של Linux, יש להפעיל את Linux מחדש.</translation> <translation id="4400367121200150367">כאן יופיעו האתרים שאף פעם אינם שומרים סיסמאות</translation> @@ -3125,7 +3126,7 @@ <translation id="4627442949885028695">המשך במכשיר אחר</translation> <translation id="4628757576491864469">מכשירים</translation> <translation id="4628762811416793313">הגדרת מאגר Linux לא הושלמה. אפשר לנסות שוב.</translation> -<translation id="4633003931260532286">כדי להשתמש בתוסף יש צורך ב-"<ph name="IMPORT_NAME" />" בגירסה "<ph name="IMPORT_VERSION" />" לפחות, אך הגירסה המותקנת היא רק "<ph name="INSTALLED_VERSION" />"</translation> +<translation id="4633003931260532286">כדי להשתמש בתוסף יש צורך ב-"<ph name="IMPORT_NAME" />" בגרסה "<ph name="IMPORT_VERSION" />" לפחות, אך הגרסה המותקנת היא רק "<ph name="INSTALLED_VERSION" />"</translation> <translation id="4633757335284074492">גיבוי ב-Google Drive. אפשר לשחזר נתונים או להחליף מכשיר בכל שלב. הגיבוי הזה כולל נתוני אפליקציות. הגיבויים מועלים ל-Google ומוצפנים באמצעות סיסמת חשבון Google של הילד/ה שלך.</translation> <translation id="4634575639321169635">אפשר להגדיר את המכשיר לעבודה או לשימוש אישי</translation> <translation id="4634771451598206121">כניסה מחדש...</translation> @@ -3282,7 +3283,7 @@ <translation id="4836504898754963407">ניהול של טביעות אצבעות</translation> <translation id="4837128290434901661">לשנות חזרה אל Google Search?</translation> <translation id="4837926214103741331">אין לך אישור להשתמש במכשיר הזה. צור קשר עם בעל המכשיר כדי לקבל הרשאת כניסה.</translation> -<translation id="4837952862063191349">כדי לבטל את הנעילה של הנתונים המקומיים ולשחזר אותם, הזן את הסיסמה הקודמת שלך עבור <ph name="DEVICE_TYPE" />.</translation> +<translation id="4837952862063191349">כדי לבטל את הנעילה של הנתונים המקומיים ולשחזר אותם, יש להזין את הסיסמה הקודמת שלך עבור <ph name="DEVICE_TYPE" />.</translation> <translation id="4838836835474292213">גישת הקריאה אל הלוח מותרת</translation> <translation id="4838907349371614303">הסיסמה עודכנה</translation> <translation id="4839303808932127586">שמ&ור וידאו כ...</translation> @@ -3381,7 +3382,7 @@ <translation id="4940364377601827259">יש <ph name="PRINTER_COUNT" /> מדפסות זמינות לשמירה.</translation> <translation id="4940845626435830013">הקצאת שטח קבוע</translation> <translation id="4941074198479265146">אתרים מתחברים בדרך כלל למכשירי MIDI כדי לתמוך בתכונות ליצירה ולעריכה של מוזיקה</translation> -<translation id="4941246025622441835">השתמש במכשיר זה בעת הרשמת המכשיר לניהול ארגוני:</translation> +<translation id="4941246025622441835">יש להשתמש במכשיר זה בעת הרשמת המכשיר לניהול ארגוני:</translation> <translation id="4941627891654116707">גודל גופן</translation> <translation id="494286511941020793">עזרה של תצורת שרת Proxy</translation> <translation id="4943368462779413526">פוטבול</translation> @@ -3417,7 +3418,7 @@ <translation id="49896407730300355">סובב נ&גד כיוון השעון</translation> <translation id="4989966318180235467">בדיקת דף ה&רקע</translation> <translation id="4991420928586866460">התייחס למקשים בשורה העליונה כאל מקשי פונקציה</translation> -<translation id="499165176004408815">השתמש במצב ניגודיות גבוהה</translation> +<translation id="499165176004408815">שימוש במצב ניגודיות גבוהה</translation> <translation id="4992458225095111526">אשר פעולת Powerwash</translation> <translation id="4992473555164495036">מנהל המערכת הגביל את שיטות הקלט הזמינות.</translation> <translation id="4994474651455208930">אפשר לאתרים לבקש להפוך למטפלי ברירת המחדל עבור פרוטוקולים</translation> @@ -3473,7 +3474,7 @@ <translation id="5067867186035333991">שאל אם <ph name="HOST" /> רוצה לגשת למיקרופון שלך</translation> <translation id="5068918910148307423">אין לאפשר לאתרים שנסגרו לאחרונה לסיים שליחה וקבלה של נתונים</translation> <translation id="5068919226082848014">פיצה</translation> -<translation id="5072052264945641674">התאם את גודל הסמן</translation> +<translation id="5072052264945641674">כוונון גודל הסמן</translation> <translation id="5072836811783999860">הצג סימניות מנוהלות</translation> <translation id="5073956501367595100">{0,plural,offset:2 =1{<ph name="FILE1" />}=2{<ph name="FILE1" />, <ph name="FILE2" />}many{<ph name="FILE1" />, <ph name="FILE2" /> ועוד #}other{<ph name="FILE1" />, <ph name="FILE2" /> ועוד #}}</translation> <translation id="5074318175948309511">ייתכן שיהיה צורך לטעון מחדש דף זה על מנת שההגדרות החדשות ייכנסו לתוקף.</translation> @@ -3771,7 +3772,7 @@ <translation id="5434065355175441495">הצפנת RSA של PKCS #1</translation> <translation id="5435779377906857208">לאשר תמיד ל-<ph name="HOST" /> גישה למיקום</translation> <translation id="5436492226391861498">ממתין ל-Proxy Tunnel...</translation> -<translation id="5436510242972373446">חפש ב-<ph name="SITE_NAME" />:</translation> +<translation id="5436510242972373446">חיפוש ב-<ph name="SITE_NAME" />:</translation> <translation id="543806387003274181">יש לשמור את הקבצים וליצור עכשיו חשבון חדש.</translation> <translation id="544083962418256601">יצירת קיצורי דרך...</translation> <translation id="5442228125690314719">קרתה שגיאה ביצירת תמונת הדיסק. צריך לנסות שוב.</translation> @@ -3875,7 +3876,7 @@ <translation id="554517032089923082">GTC</translation> <translation id="554517701842997186">תהליך עיבוד</translation> <translation id="5545335608717746497">{NUM_TABS,plural, =1{הוספת כרטיסייה לקבוצה}two{הוספת כרטיסיות לקבוצה}many{הוספת כרטיסיות לקבוצה}other{הוספת כרטיסיות לקבוצה}}</translation> -<translation id="5546865291508181392">חפש</translation> +<translation id="5546865291508181392">חיפוש</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" ועוד כרטיסייה אחת}two{"<ph name="TAB_TITLE" />" ועוד # כרטיסיות}many{"<ph name="TAB_TITLE" />" ועוד # כרטיסיות}other{"<ph name="TAB_TITLE" />" ועוד # כרטיסיות}}</translation> <translation id="5548606607480005320">בדיקת אבטחה</translation> <translation id="5551573675707792127">מקלדת וקלט טקסט</translation> @@ -3885,7 +3886,7 @@ <translation id="5554720593229208774">רשות אישורי אימייל</translation> <translation id="5556459405103347317">ניסיון טעינה נוסף</translation> <translation id="5558125320634132440">האתר נחסם מאחר שהוא עשוי להכיל תוכן למבוגרים בלבד</translation> -<translation id="5558129378926964177">הת&קרב</translation> +<translation id="5558129378926964177">הת&קרבות</translation> <translation id="55601339223879446">שנה את גבולות שולחן העבודה שלך בצג</translation> <translation id="5561162485081632007">מזהה אירועים מסוכנים כשהם מתרחשים ומזהיר אותך על כך</translation> <translation id="5562781907504170924">הכרטיסייה הזו מחוברת להתקן Bluetooth.</translation> @@ -4015,7 +4016,7 @@ <translation id="5707185214361380026">כשל בטעינת תוסף מ:</translation> <translation id="5708171344853220004">שם ראשי של Microsoft</translation> <translation id="5709557627224531708">הגדרת Chrome כדפדפן ברירת המחדל</translation> -<translation id="5711983031544731014">לא ניתן לבטל את הנעילה. הזן את הסיסמה שלך.</translation> +<translation id="5711983031544731014">לא ניתן לבטל את הנעילה. יש להזין את הסיסמה שלך.</translation> <translation id="5713723565110096165">קוד האימות שגוי. מספר הניסיונות החוזרים שנותרו: <ph name="RETRIES" />.</translation> <translation id="5715711091495208045">מתווך פלאגין: <ph name="PLUGIN_NAME" /></translation> <translation id="5719603411793408026">מנועי חיפוש המוגדרים כברירת מחדל</translation> @@ -4046,7 +4047,7 @@ <translation id="5747552184818312860">מועד תפוגה</translation> <translation id="5747785204778348146">מפתח - לא יציב</translation> <translation id="5747809636523347288">הד&בקה ומעבר אל <ph name="URL" /></translation> -<translation id="5754152670305761216">מורשים להציג תוכן מוגן</translation> +<translation id="5754152670305761216">מורשים להפעיל תוכן מוגן</translation> <translation id="5756163054456765343">מרכז עזרה</translation> <translation id="5759728514498647443">ניתן להשתמש ב-<ph name="APP_NAME" /> כדי לקרוא מסמכים ששולחים להדפסה באמצעות <ph name="APP_NAME" />.</translation> <translation id="5763751966069581670">לא נמצאו התקני USB</translation> @@ -4062,7 +4063,7 @@ <translation id="5772265531560382923">{NUM_PAGES,plural, =1{אפשר להמתין עד שתתקבל תגובה מהדף, או לצאת ממנו.}two{אפשר להמתין עד שתתקבל תגובה מהדפים, או לצאת מהם.}many{אפשר להמתין עד שתתקבל תגובה מהדפים, או לצאת מהם.}other{אפשר להמתין עד שתתקבל תגובה מהדפים, או לצאת מהם.}}</translation> <translation id="577322787686508614">פעולת קריאה אסורה במכשיר: "<ph name="DEVICE_NAME" />".</translation> <translation id="5774295353725270860">פתח את יישום הקבצים</translation> -<translation id="577624874850706961">חפש קובצי Cookie</translation> +<translation id="577624874850706961">חיפוש קובצי Cookie</translation> <translation id="5777468213129569553">פתח את Chrome</translation> <translation id="5780011244986845107">התיקייה שבחרת מכילה קבצים רגישים. האפליקציה <ph name="APP_NAME" /> תקבל הרשאת קריאה קבועה לתיקייה הזו. להמשיך?</translation> <translation id="5780973441651030252">עדיפות תהליך</translation> @@ -4423,7 +4424,7 @@ <translation id="6191293864534840972">שרתי שמות שגויים</translation> <translation id="6195693561221576702">אי אפשר להגדיר את המכשיר הזה במצב הדגמה אופליין.</translation> <translation id="6196640612572343990">חסום קובצי Cookie של צד שלישי</translation> -<translation id="6196854373336333322">התוסף "<ph name="EXTENSION_NAME" />" השתלט על הגדרות שרת ה-Proxy. פירוש הדבר שהוא יכול לשנות ולקטוע לכל פעולה שתבצע באינטרנט או לצותת לה. אם אינך יודע בוודאות מדוע שינוי זה התרחש, סביר להניח שזהו שינוי לא רצוי.</translation> +<translation id="6196854373336333322">התוסף "<ph name="EXTENSION_NAME" />" השתלט על הגדרות שרת ה-Proxy. פירוש הדבר שהוא יכול לשנות ולקטוע לכל פעולה שביצעת באינטרנט או לצותת לה. אם לא ידוע לך בוודאות מדוע שינוי זה התרחש, סביר להניח שזהו שינוי לא רצוי.</translation> <translation id="6198102561359457428">צא והיכנס שוב...</translation> <translation id="6198252989419008588">שנה PIN</translation> <translation id="6202304368170870640">קוד האימות מאפשר להיכנס למכשיר או לבטל את נעילתו.</translation> @@ -4514,7 +4515,7 @@ <translation id="6291953229176937411">&הצגה ב-Finder</translation> <translation id="6295158916970320988">כל האתרים</translation> <translation id="6295855836753816081">שומר...</translation> -<translation id="6298962879096096191">התקן אפליקציות ל-Android באמצעות Google Play</translation> +<translation id="6298962879096096191">התקנת אפליקציות ל-Android באמצעות Google Play</translation> <translation id="6300177430812514606">לא מורשים לסיים שליחה או קבלה של נתונים</translation> <translation id="630065524203833229">צ&א</translation> <translation id="6300718114348072351">לא ניתן היה להגדיר את <ph name="PRINTER_NAME" /> באופן אוטומטי. יש לקבוע את ההגדרות המתקדמות של המדפסת. <ph name="LINK_BEGIN" />מידע נוסף<ph name="LINK_END" /></translation> @@ -4527,7 +4528,7 @@ <translation id="6308937455967653460">שמור קישור& בשם...</translation> <translation id="6309443618838462258">שיטת הקלט הזו לא מאושרת על ידי מנהל המערכת</translation> <translation id="6309510305002439352">המיקרופון מושבת</translation> -<translation id="6311220991371174222">לא ניתן להפעיל את Chrome מכיוון שמשהו השתבש בפתיחת הפרופיל שלך. נסה להפעיל מחדש את Chrome.</translation> +<translation id="6311220991371174222">לא ניתן להפעיל את Chrome מכיוון שמשהו השתבש בפתיחת הפרופיל שלך. יש לנסות להפעיל מחדש את Chrome.</translation> <translation id="6312403991423642364">שגיאת רשת לא ידועה</translation> <translation id="6312567056350025599">{NUM_DAYS,plural, =1{בדיקת הבטיחות פעלה לפני יום אחד}two{בדיקת הבטיחות פעלה לפני {NUM_DAYS} ימים}many{בדיקת הבטיחות פעלה לפני {NUM_DAYS} ימים}other{בדיקת הבטיחות פעלה לפני {NUM_DAYS} ימים}}</translation> <translation id="6312638141433622592">המערכת מציעה להציג מאמרים במצב קורא, כשיש תמיכה באפשרות הזו</translation> @@ -4652,7 +4653,7 @@ <translation id="6456955391422100996">המודעה הוסרה.</translation> <translation id="645705751491738698">המשך לחסום JavaScript</translation> <translation id="6458701200018867744">ההעלאה נכשלה (<ph name="WEBRTC_LOG_UPLOAD_TIME" />).</translation> -<translation id="6459488832681039634">השתמש בבחירה כדי לחפש</translation> +<translation id="6459488832681039634">שימוש בבחירה לחיפוש</translation> <translation id="6459799433792303855">החלון הפעיל הועבר אל צג אחר.</translation> <translation id="6460566145397380451">מורשים להתחבר אל מכשירי MIDI</translation> <translation id="6460601847208524483">חיפוש של הבא</translation> @@ -4684,10 +4685,10 @@ <translation id="6498249116389603658">&כל השפות שלך</translation> <translation id="6499143127267478107">מברר כתובת של שרת מארח בסקריפט של שרת Proxy...</translation> <translation id="6499681088828539489">ביטול הרשאה של שרתי proxy לרשתות משותפות</translation> -<translation id="650266656685499220">כדי ליצור אלבומים, אפשר לעבור לתמונות Google</translation> +<translation id="650266656685499220">כדי ליצור אלבומים, יש לעבור לתמונות Google</translation> <translation id="6503077044568424649">הכי פופולריים</translation> <translation id="650457560773015827">הלחצן השמאלי</translation> -<translation id="6504611359718185067">התחבר לאינטרנט כדי להוסיף מדפסת</translation> +<translation id="6504611359718185067">התחברות לאינטרנט כדי להוסיף מדפסת</translation> <translation id="6506374932220792071">חתימת X9.62 ECDSA עם SHA-256</translation> <translation id="6508248480704296122">קשור אל <ph name="NAME_PH" /></translation> <translation id="6508261954199872201">יישום: <ph name="APP_NAME" /></translation> @@ -4953,7 +4954,7 @@ <translation id="682971198310367122">מדיניות הפרטיות של Google</translation> <translation id="6831043979455480757">תרגום</translation> <translation id="683373380308365518">החלף לדפדפן חכם ובטוח</translation> -<translation id="6835762382653651563">התחבר לאינטרנט כדי לעדכן את ה-<ph name="DEVICE_TYPE" />.</translation> +<translation id="6835762382653651563">יש להתחבר לאינטרנט כדי לעדכן את ה-<ph name="DEVICE_TYPE" />.</translation> <translation id="6838034009068684089">תוצג שאלה כשאתר ירצה לפתוח ולהציב חלונות במסכים שלך (מומלץ)</translation> <translation id="6839225236531462745">שגיאה של מחיקת אישור</translation> <translation id="6839916869147598086">תהליך הכניסה השתנה</translation> @@ -5032,7 +5033,7 @@ <translation id="6922745772873733498">יש להזין קוד אימות כדי להדפיס</translation> <translation id="6923132443355966645">גלילה / לחיצה</translation> <translation id="6923633482430812883">קרתה שגיאה בטעינת התקן הרשת לשיתוף קבצים. יש לוודא ששרת הקבצים שאליו ניסית להתחבר תומך ב-SMBv2 ואילך.</translation> -<translation id="6929126689972602640">בחשבונות בית ספריים, אין תמיכה באמצעי בקרת הורים. כדי להוסיף חשבון בית ספרי לצורך גישה אל Google Classroom ואתרים אחרים לשיעורי בית, תחילה יש להיכנס באמצעות החשבון האישי של הילד או הילדה. ניתן להוסיף את החשבון הבית ספרי בשלב מאוחר יותר בהגדרה.</translation> +<translation id="6929126689972602640">בחשבונות בית ספריים, אין תמיכה באמצעי בקרת הורים. כדי להוסיף חשבון בית ספרי לצורך גישה אל Google Classroom ואתרים אחרים למטלות לימודיות, תחילה יש להיכנס באמצעות החשבון האישי של הילד או הילדה. ניתן להוסיף את החשבון הבית ספרי בשלב מאוחר יותר בהגדרה.</translation> <translation id="6929760895658557216">Okay Google</translation> <translation id="6930036377490597025">מפתח אבטחה חיצוני או חיישן מובנה</translation> <translation id="6930161297841867798">{NUM_EXTENSIONS,plural, =1{בקשת הארכה נדחתה}two{# בקשות הארכה נדחו}many{# בקשות הארכה נדחו}other{# בקשות הארכה נדחו}}</translation> @@ -5109,7 +5110,7 @@ <translation id="7004402701596653846">האתר יכול להשתמש ב-MIDI</translation> <translation id="7004499039102548441">כרטיסיות אחרונות</translation> <translation id="7005496624875927304">הרשאות נוספות</translation> -<translation id="7005812687360380971">כשלון</translation> +<translation id="7005812687360380971">כישלון</translation> <translation id="7005848115657603926">טווח דפים לא חוקי, השתמש ב-<ph name="EXAMPLE_PAGE_RANGE" /></translation> <translation id="7006634003215061422">שוליים תחתונים</translation> <translation id="7007648447224463482">פתח הכול בחלון חדש</translation> @@ -5246,7 +5247,7 @@ <translation id="7175037578838465313">הגדרה של <ph name="NAME" /></translation> <translation id="7175353351958621980">נטען מתוך:</translation> <translation id="7180611975245234373">רענון</translation> -<translation id="7180865173735832675">התאם אישית</translation> +<translation id="7180865173735832675">התאמה אישית</translation> <translation id="7182791023900310535">העברת הסיסמה שלך</translation> <translation id="7186088072322679094">השאר בסרגל הכלים</translation> <translation id="7187428571767585875">ערכים בקובץ הרישום שיש להסיר או לשנות:</translation> @@ -5288,7 +5289,7 @@ <translation id="7228479291753472782">שינוי הגדרות שמציינות אם אתרים יכולים להשתמש בתכונות כגון מיקום גיאוגרפי, מיקרופון, מצלמה ועוד</translation> <translation id="7228523857728654909">נעילת מסך וכניסה</translation> <translation id="7229570126336867161">יש צורך ב-EVDO</translation> -<translation id="7230787553283372882">התאם אישית את גודל הטקסט</translation> +<translation id="7230787553283372882">התאמה אישית של גודל הטקסט</translation> <translation id="7232750842195536390">המערכת לא הצליחה לשנות את השם</translation> <translation id="7234010996000898150">המערכת מבטלת את שחזור Linux</translation> <translation id="7235716375204803342">מתבצע אחזור פעילויות...</translation> @@ -5588,7 +5589,7 @@ <translation id="7598466960084663009">הפעלת המחשב מחדש</translation> <translation id="7599527631045201165">שם המכשיר ארוך מדי. יש להזין שם קצר יותר כדי לנסות שוב.</translation> <translation id="7600965453749440009">איני רוצה לקבל תרגום מ<ph name="LANGUAGE" /> בכלל</translation> -<translation id="760197030861754408">כדי להתחבר, עבור אל <ph name="LANDING_PAGE" />.</translation> +<translation id="760197030861754408">כדי להתחבר, יש לעבור אל <ph name="LANDING_PAGE" />.</translation> <translation id="7602079150116086782">אין כרטיסיות ממכשירים אחרים</translation> <translation id="7602173054665172958">ניהול הדפסה</translation> <translation id="7604942372593434070">כניסה לפעילות הגלישה שלך</translation> @@ -5597,7 +5598,7 @@ <translation id="7607002721634913082">מושהה</translation> <translation id="7608810328871051088">העדפות Android</translation> <translation id="7609148976235050828">צריך להתחבר לאינטרנט ולנסות שוב.</translation> -<translation id="7612655942094160088">התכונות של הטלפון המקושר פועלות.</translation> +<translation id="7612655942094160088">הפעלת תכונות הטלפון המקושר.</translation> <translation id="7614260613810441905">תוצג שאלה כשאתר ירצה לערוך קבצים או תיקיות במכשיר שלך (מומלץ)</translation> <translation id="761530003705945209">גיבוי ב-Google Drive. ההגדרה הזו מאפשרת לאחזר נתונים בקלות או לעבור למכשיר אחר בכל שלב. הגיבוי כולל נתוני אפליקציות. הגיבויים נשמרים ב-Google ומוצפנים באמצעות הסיסמה של חשבון Google שלך.</translation> <translation id="7615365294369022248">אירעה שגיאה בהוספת חשבון</translation> @@ -5692,7 +5693,7 @@ <translation id="7705276765467986571">לא ניתן להעלות דגם סימניה.</translation> <translation id="7705524343798198388">VPN</translation> <translation id="7707108266051544351">גישת האתר הזה אל חיישני התנועה נחסמה.</translation> -<translation id="7707922173985738739">השתמש בחבילת גלישה</translation> +<translation id="7707922173985738739">שימוש בחבילת הגלישה</translation> <translation id="7709152031285164251">נכשל - <ph name="INTERRUPT_REASON" /></translation> <translation id="7710568461918838723">&העברה...</translation> <translation id="7712836429117959503">תוסף לא מוכר עם המזהה <ph name="EXTENSION_ID" /></translation> @@ -5702,12 +5703,12 @@ <translation id="7716781361494605745">כתובת אתר של מדיניות רשות אישורים של Netscape</translation> <translation id="7717014941119698257">מוריד: <ph name="STATUS" /></translation> <translation id="7717134585801378441">אתרים יכולים לבקש את מיקום המכשיר (מומלץ)</translation> -<translation id="7717845620320228976">חפש עדכונים</translation> +<translation id="7717845620320228976">חיפוש עדכונים</translation> <translation id="7719367874908701697">מרחק מתצוגה בדף</translation> <translation id="7719588063158526969">שם המכשיר ארוך מדי</translation> <translation id="7721179060400456005">חלונות יכולים לסובב את התצוגות</translation> <translation id="7722040605881499779">השטח שנדרש כדי לעדכן: <ph name="NECESSARY_SPACE" /></translation> -<translation id="7724603315864178912">חתוך</translation> +<translation id="7724603315864178912">חיתוך</translation> <translation id="7728465250249629478">שינוי השפה במכשיר</translation> <translation id="7728570244950051353">מסך נעילה ממצב שינה</translation> <translation id="7728668285692163452">שינוי הערוץ ייכנס לתוקף מאוחר יותר</translation> @@ -5839,7 +5840,7 @@ <translation id="7849264908733290972">פתיחת &תמונה בכרטיסייה חדשה</translation> <translation id="784934925303690534">טווח זמן</translation> <translation id="7851457902707056880">הכניסה הוגבלה לחשבון הבעלים בלבד. יש לבצע אתחול מחדש ולהיכנס באמצעות חשבון הבעלים. המערכת תבצע אתחול מחדש באופן אוטומטי בתוך 30 שניות.</translation> -<translation id="7851716364080026749">חסום תמיד גישה למצלמה ולמיקרופון</translation> +<translation id="7851716364080026749">אני רוצה לחסום תמיד גישה למצלמה ולמיקרופון</translation> <translation id="7851720427268294554">מנתח IPP</translation> <translation id="78526636422538552">הוספה של חשבונות Google הושבתה</translation> <translation id="7853747251428735">&כלים נוספים</translation> @@ -5853,7 +5854,7 @@ <translation id="7866352732146932341">מכשירים בקרבתך כאשר התכונה 'שיתוף בקרבת מקום' פועלת במכשיר שלך</translation> <translation id="786957569166715433"><ph name="DEVICE_NAME" /> - מותאם</translation> <translation id="7870730066603611552">בדיקת אפשרויות הסינכרון אחרי ההגדרה</translation> -<translation id="7870790288828963061">לא נמצאו אפליקציות קיוסק בגרסה חדשה יותר. אין צורך בעדכון. הסר את הדיסק און קי.</translation> +<translation id="7870790288828963061">לא נמצאו אפליקציות קיוסק בגרסה חדשה יותר. אין צורך בעדכון. אפשר להוציא את הדיסק און קי.</translation> <translation id="7871109039747854576">מעבר בין העמודים של רשימת התווים האפשריים באמצעות המקש <ph name="COMMA" /> והמקש <ph name="PERIOD" /></translation> <translation id="787268756490971083">כבוי</translation> <translation id="7874257161694977650">רקעים של Chrome</translation> @@ -5910,7 +5911,7 @@ <translation id="7933634003144813719">ניהול תיקיות משותפות</translation> <translation id="793531125873261495">קרתה שגיאה בהורדת המכונה הווירטואלית. צריך לנסות שוב.</translation> <translation id="7936303884198020182">לא נמצאו שרתי שמות</translation> -<translation id="7938594894617528435">לא מקוונת כעת</translation> +<translation id="7938594894617528435">אופליין כעת</translation> <translation id="7939062555109487992">אפשרויות מתקדמות</translation> <translation id="7939412583708276221">שמור בכל מקרה</translation> <translation id="7942349550061667556">אדום</translation> @@ -5971,7 +5972,7 @@ תוסף: <ph name="EXTENSION_FILE" /> קובץ מפתח: <ph name="KEY_FILE" /> -שמור על קובץ המפתח שלך במקום בטוח. תצטרך אותו כדי ליצור גרסאות חדשות של התוסף שלך.</translation> +יש לשמור על קובץ המפתח שלך במקום בטוח. הוא נחוץ אותו כדי ליצור גרסאות חדשות של התוסף שלך.</translation> <translation id="8000066093800657092">אין רשת</translation> <translation id="8002274832045662704">הגדרה מתקדמת של המדפסת</translation> <translation id="8002670234429879764">המדפסת <ph name="PRINTER_NAME" /> לא זמינה יותר</translation> @@ -6143,7 +6144,7 @@ <translation id="8195027750202970175">גודל בדיסק</translation> <translation id="8198323535106903877"><ph name="NUMBER_OF_APPS" /> האפליקציות יותקנו</translation> <translation id="8199300056570174101">מאפייני רשת (שירות) ומכשיר</translation> -<translation id="8200772114523450471">חדש</translation> +<translation id="8200772114523450471">חידוש</translation> <translation id="8201717382574620700">בחר אלבומי <ph name="TOPIC_SOURCE" /></translation> <translation id="8202160505685531999">יש להזין שוב את הסיסמה כדי לעדכן את פרופיל <ph name="DEVICE_TYPE" />.</translation> <translation id="8203732864715032075">המערכת שולחת לך התראות ומגדירה את המחשב הזה כברירת מחדל לשליחת ההודעות. <ph name="LINK_BEGIN" />מידע נוסף<ph name="LINK_END" /></translation> @@ -6387,7 +6388,7 @@ <translation id="8490896350101740396">אפליקצית הקיוסק הבאות "<ph name="UPDATED_APPS" />" עודכנו. יש להפעיל מחדש את המכשיר כדי להשלים את תהליך העדכון.</translation> <translation id="8492822722330266509">אתרים יכולים להציג חלונות קופצים ולהשתמש בהפניות אוטומטיות</translation> <translation id="8493236660459102203">מיקרופון:</translation> -<translation id="8496717697661868878">הרץ פלאגין זה</translation> +<translation id="8496717697661868878">הרצת פלאגין זה</translation> <translation id="8497219075884839166">תוכניות שירות של Windows</translation> <translation id="8498214519255567734">מקל עליך להביט במסך או לקרוא באור מעומעם</translation> <translation id="8498395510292172881">המשך קריאה ב-Chrome</translation> @@ -6429,7 +6430,7 @@ <translation id="8546186510985480118">חסר שטח אחסון במכשיר</translation> <translation id="8546306075665861288">מטמון תמונות</translation> <translation id="854655314928502177">כתובת האתר לגילוי אוטומטי של שרת proxy באינטרנט:</translation> -<translation id="8546930481464505581">התאם אישית את סרגל המגע</translation> +<translation id="8546930481464505581">התאמה אישית של סרגל המגע</translation> <translation id="8547013269961688403">הפעלת מגדיל למסך מלא</translation> <translation id="85486688517848470">יש להחזיק את מקש החיפוש כדי לשנות את ההתנהגות של מקשי השורה העליונה</translation> <translation id="8549316893834449916">הכניסה אל Chromebook תתבצע באמצעות חשבון Google שלך – אותו חשבון שמשמש אותך ב-Gmail, ב-Drive, ב-YouTube ועוד.</translation> @@ -6927,7 +6928,7 @@ <translation id="9108072915170399168">ההגדרה הנוכחית של השימוש בחבילת הגלישה היא 'ללא אינטרנט'</translation> <translation id="9108692355621501797"><ph name="LINK_BEGIN" />הודעת הפרטיות בנושא G Suite for Education<ph name="LINK_END" /> נועדה לעזור למשתמשי G Suite for Education ולהורים שלהם להבין אילו נתונים המוצר הזה אוסף, למה הוא אוסף אותם ואיזה שימוש נעשה בהם.</translation> <translation id="9108808586816295166">ה-DNS המאובטח לא יהיה בהכרח זמין תמיד</translation> -<translation id="9109122242323516435">כדי לפנות שטח, מחק קבצים מאחסון המכשיר.</translation> +<translation id="9109122242323516435">כדי לפנות נפח אחסון, יש למחוק קבצים מאחסון המכשיר.</translation> <translation id="9109283579179481106">חיבור לרשת סלולרית</translation> <translation id="9111102763498581341">בטל נעילה</translation> <translation id="9111395131601239814"><ph name="NETWORKDEVICE" />: <ph name="STATUS" /></translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index 9c311f9..665cc80 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">ドキュメント、スプレッドシート、スライド、図形描画ファイルは同期されています。Google ドライブ アプリを起動すると、これらのファイルにオンラインまたはオフラインでアクセスします。</translation> <translation id="1012876632442809908">USB-C デバイス(前面のポート)</translation> <translation id="1013707859758800957">このページでのサンドボックスの無効化プラグインの実行が許可されました。</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">フォルダ名の編集</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{<ph name="DEVICE_TYPE" />の更新は今日が期限です}other{{NUM_DAYS} 日以内に <ph name="DEVICE_TYPE" />を更新してください}}</translation> <translation id="1016566241875885511">追加情報(省略可)</translation> @@ -870,6 +871,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> により ADB デバッグが無効になりました。<ph name="DEVICE_TYPE" /> は 24 時間以内にリセットされます。必要なファイルがあればバックアップしてください。</translation> <translation id="1977965994116744507"><ph name="DEVICE_TYPE" /> のロックを解除するにはスマートフォンを近づけます。</translation> <translation id="1978006917103730774">今後はソフトウェアとセキュリティに関するアップデートが自動的にインストールされます。</translation> +<translation id="1978057560491495741">住所を削除</translation> <translation id="1979095679518582070">この機能をオフにしても、システム アップデートやセキュリティといった重要なサービスで必要な情報はデバイスから引き続き送信されます。</translation> <translation id="1979280758666859181">古いバージョンの <ph name="PRODUCT_NAME" /> のチャンネルに変更しようとしています。このチャンネル変更は、チャンネルのバージョンとお使いのデバイスにインストールされているバージョンとが一致したときに適用されます。</translation> <translation id="197989455406964291">KDC でサポートされていない暗号化タイプです</translation> @@ -1072,6 +1074,7 @@ <translation id="2224444042887712269">この設定は <ph name="OWNER_EMAIL" /> に帰属します。</translation> <translation id="2224551243087462610">フォルダ名の編集</translation> <translation id="2225864335125757863">アカウントのセキュリティ保護のため、今すぐ次のパスワードを変更してください。</translation> +<translation id="2226204716217107988">別のプロフィールに切り替えますか?</translation> <translation id="2226449515541314767">このサイトには MIDI デバイスのフル コントロールは許可されていません。</translation> <translation id="2226907662744526012">PIN を入力して自動的にロックを解除する</translation> <translation id="222704500187107962">この例外は、現在のシークレット モード セッションを終了した後に自動的に削除されます</translation> @@ -1141,6 +1144,7 @@ <translation id="2307462900900812319">ネットワークを設定</translation> <translation id="230927227160767054">このページはサービス ハンドラのインストールを求めています。</translation> <translation id="2309620859903500144">このサイトではモーション センサーまたは光センサーへのアクセスがブロックされています。</translation> +<translation id="2312219318583366810">ページの URL</translation> <translation id="2314165183524574721">現在の公開設定は非表示です</translation> <translation id="2314774579020744484">この言語を使用してページを翻訳します</translation> <translation id="2315414688463285945">[Linux ファイル] の設定中にエラーが発生しました。もう一度お試しください。</translation> @@ -2346,6 +2350,7 @@ <translation id="3713047097299026954">このセキュリティ キーにはログインデータが保存されていません</translation> <translation id="3714195043138862580">このデモデバイスはプロビジョニングを解除されている状態です。</translation> <translation id="3714633008798122362">ウェブ カレンダー</translation> +<translation id="3715954932774762075">複数の言語に対応しているアプリやウェブサイトでは、次のリストの最初にある対応言語が使用されます。これらの設定はブラウザの設定と同期されています。<ph name="BEGIN_LINK_LEARN_MORE" />詳細<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">トップページ</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">Google の設定</translation> @@ -2506,6 +2511,7 @@ <translation id="3882165008614329320">カメラやファイルに保存されている動画</translation> <translation id="3886446263141354045">このサイトへのアクセス リクエストを <ph name="NAME" /> さんに送信しました</translation> <translation id="3888550877729210209"><ph name="LOCK_SCREEN_APP_NAME" /> でメモをとる</translation> +<translation id="3890064827463908288">Wi-Fi 同期を使用するには Chrome 同期をオンにしてください</translation> <translation id="3892414795099177503">OpenVPN / L2TP を追加...</translation> <translation id="3893536212201235195">ユーザー補助設定の読み取りと変更</translation> <translation id="3893630138897523026">ChromeVox(音声フィードバック)</translation> @@ -3780,6 +3786,7 @@ <translation id="5449588825071916739">すべてのタブをブックマークに追加する</translation> <translation id="5449716055534515760">ウィンドウを閉じる(&D)</translation> <translation id="5452974209916053028">現在のシークレット モード セッション: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />、<ph name="RECENT_PERMISSIONS_CHANGE_1" />、<ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">字幕のふきだしが、左から <ph name="POSITION_ON_SCREEN_FROM_LEFT" />%、上から <ph name="POSITION_ON_SCREEN_FROM_TOP" />% の位置に移動しました</translation> <translation id="5454166040603940656">- <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">無効</translation> <translation id="5457459357461771897">パソコンからの写真、音楽、その他のメディアの読み取りと削除</translation> @@ -3923,6 +3930,7 @@ <translation id="5602765853043467355">ブックマーク、履歴、パスワード、その他の設定情報をこのデバイスから削除する</translation> <translation id="5605623530403479164">その他の検索エンジン</translation> <translation id="5605758115928394442">本人確認の通知をご使用のスマートフォンに送信しました。</translation> +<translation id="560834977503641186">Wi-Fi 同期の詳細</translation> <translation id="5608580678041221894">トリミング範囲を調整または移動するには次のキーをタップします</translation> <translation id="5609231933459083978">アプリケーションが無効になっているようです。</translation> <translation id="5610038042047936818">カメラモードに切り替え</translation> @@ -4114,6 +4122,7 @@ <translation id="5841270259333717135">イーサネットを設定する</translation> <translation id="5842497610951477805">Bluetooth 有効</translation> <translation id="5843706793424741864">華氏</translation> +<translation id="584451707753263735">自動字幕起こしが表示されています。F6 キーを押すと、フォーカスを順番に移動できます</translation> <translation id="5844574845205796324">提案されるコンテンツの範囲を拡大する</translation> <translation id="5846200638699387931">関係を表す構文にエラーがあります: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">アップデートやアプリをインストールします。続行すると、Google、ご利用の携帯通信会社、デバイスの製造元からのアップデートやアプリもデバイスで自動的にダウンロードおよびインストールされる場合があることについて、同意したものと見なされます(ダウンロードの際にはモバイルデータ通信が使用される可能性もあります)。こうしたアプリの一部ではアプリ内購入が提案される場合もあります。</translation> @@ -5370,6 +5379,7 @@ <translation id="7340431621085453413">現在 <ph name="FULLSCREEN_ORIGIN" /> は全画面表示です。</translation> <translation id="7340650977506865820">サイトで画面が共有されています</translation> <translation id="7341834142292923918">このサイトへのアクセス許可が必要です</translation> +<translation id="7343372807593926528">問題の詳細を記入してからフィードバックを送信してください。</translation> <translation id="7345706641791090287">パスワードを再入力</translation> <translation id="7346909386216857016">OK</translation> <translation id="7347452120014970266"><ph name="ORIGIN_NAME" /> により保存されたすべてのデータと Cookie、インストールされたアプリが削除されます</translation> @@ -5787,6 +5797,7 @@ <translation id="7819857487979277519">PSK(WPA または RSN)</translation> <translation id="7819992334107904369">Chrome 同期</translation> <translation id="782057141565633384">動画アドレスをコピー(&C)</translation> +<translation id="7822187537422052256">この住所を削除してもよろしいですか?</translation> <translation id="7824864914877854148">エラーが発生したため、バックアップを完了できませんでした</translation> <translation id="7825666486843191125">画面のロックが解除されているときに近くにいるすべての連絡先</translation> <translation id="782590969421016895">現在のページを使用</translation> @@ -6314,6 +6325,7 @@ <translation id="8419098111404128271">「<ph name="SEARCH_TEXT" />」の検索結果</translation> <translation id="8419368276599091549"><ph name="DEVICE_TYPE" /> へようこそ</translation> <translation id="8420308167132684745">辞書のエントリを編集</translation> +<translation id="8421361468937925547">自動字幕起こし(英語のみ)</translation> <translation id="8422787418163030046">トレイがありません</translation> <translation id="8425213833346101688">変更</translation> <translation id="8425492902634685834">タスクバーに固定</translation> @@ -6342,6 +6354,7 @@ <translation id="8449036207308062757">ストレージを管理</translation> <translation id="8452135315243592079">SIM カードがありません</translation> <translation id="8455026683977728932">ADB のイラストレーションを有効にできませんでした。</translation> +<translation id="8456398879271637452">自動字幕起こしが表示されています。Ctrl+戻る、または Ctrl+次へを押すと、フォーカスを順番に移動できます</translation> <translation id="845702320058262034">接続できません。スマートフォンの Bluetooth がオンになっていることを確認してください。</translation> <translation id="8457451314607652708">ブックマークをインポート</translation> <translation id="8458627787104127436">新しいウィンドウですべて開く(<ph name="URL_COUNT" /> 件の URL)</translation> @@ -6853,6 +6866,7 @@ <translation id="9027459031423301635">新しいタブで開く(&T)</translation> <translation id="9030515284705930323">組織の設定により、アカウントで Google Play ストアをご利用いただくことができません。詳しくは管理者にお尋ねください。</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269">「<ph name="PLUGIN_NAME" />」のサポートは終了しました</translation> <translation id="9031549947500880805">Google ドライブにデータをバックアップします。これにより、いつでも簡単にデータを復元したりデバイスを切り替えたりできます。バックアップ内容にはアプリのデータが含まれます。</translation> <translation id="9033765790910064284">続行</translation> <translation id="9033857511263905942">貼り付け(&P)</translation> @@ -6861,6 +6875,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{あと 1 回試行できます。}other{あと # 回試行できます。}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571"><ph name="ORIGIN" /> のパスワードを更新しますか?</translation> +<translation id="9041049756004505730">自動字幕起こしが表示されています。⌘+option+上矢印または下矢印を押すと、フォーカスを順番に移動できます。</translation> <translation id="9041692268811217999">パソコンのローカル ファイルへのアクセスは管理者によって無効にされています</translation> <translation id="904224458472510106">この操作は元に戻せません</translation> <translation id="9042893549633094279">プライバシーとセキュリティ</translation> @@ -6899,6 +6914,7 @@ <translation id="9088446193279799727">Linux を設定できませんでした。インターネットに接続してから、もう一度お試しください。</translation> <translation id="9088917181875854783">「<ph name="DEVICE_NAME" />」でこのパスキーが表示されていることを確認してください:</translation> <translation id="9089416786594320554">入力方法</translation> +<translation id="909108997331068008"><ph name="EXISTING_USER" /> さんのプロフィールで <ph name="NEW_USER" /> にすでにログインしています</translation> <translation id="9093429538970210897">アップグレードを完了できない場合に備えて、ファイルをバックアップしておくことをおすすめします。アップグレードを開始すると、Linux(ベータ版)はシャットダウンされます。続行する前に、開いているファイルを保存してください。</translation> <translation id="9094033019050270033">パスワードを更新</translation> <translation id="9094038138851891550">無効なユーザー名です</translation> @@ -7072,5 +7088,6 @@ <translation id="994289308992179865">ループ(&L)</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">安全な接続を確立しています...</translation> +<translation id="99731366405731005">Wi-Fi 同期を使用するには <ph name="LINK1_BEGIN" />Chrome 同期<ph name="LINK1_END" />をオンにしてください。<ph name="LINK2_BEGIN" />詳細<ph name="LINK2_END" /></translation> <translation id="998747458861718449">検証(&I)</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index 9b80f15..907385c 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -871,6 +871,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> ADB ಡೀಬಗ್ ಮಾಡುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದೆ. ಇದು ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು 24 ಗಂಟೆಗಳಲ್ಲಿ ಮರುಹೊಂದಿಸುತ್ತದೆ. ನೀವು ಇರಿಸಿಕೊಳ್ಳಲು ಬಯಸುವ ಯಾವುದೇ ಫೈಲ್ಗಳನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಿ.</translation> <translation id="1977965994116744507">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಅನ್ನು ಅನ್ಲಾಕ್ ಮಾಡಲು ಫೋನ್ ಅನ್ನು ಸಮೀಪಕ್ಕೆ ತನ್ನಿ.</translation> <translation id="1978006917103730774">ನಂತರದ ಸಾಫ್ಟವೇರ್ ಮತ್ತು ಭದ್ರತೆ ಅಪ್ಡೇಟ್ಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲಾಗುತ್ತದೆ.</translation> +<translation id="1978057560491495741">ವಿಳಾಸವನ್ನು ತೆಗೆದುಹಾಕಿ</translation> <translation id="1979095679518582070">ಈ ಫೀಚರ್ ಅನ್ನು ಆಫ್ ಮಾಡಿದರೆ, ಸಿಸ್ಟಂ ಅಪ್ಡೇಟ್ಗಳು ಮತ್ತು ಸುರಕ್ಷತೆಯಂತಹ ಅಗತ್ಯ ಸೇವೆಗಳಿಗೆ ಬೇಕಾದ ಮಾಹಿತಿಯನ್ನು ಕಳುಹಿಸುವುದಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಹಾಗೆ, ಈ ಸಾಧನದ ಸಾಮರ್ಥ್ಯದ ಮೇಲೆ ಇದು ಪರಿಣಾಮ ಬೀರುವುದಿಲ್ಲ.</translation> <translation id="1979280758666859181">ನೀವು <ph name="PRODUCT_NAME" /> ದ ಹಳೆಯ ಆವೃತ್ತಿಯೊಂದಿಗೆ ಚಾನಲ್ಗೆ ಬದಲಾಯಿಸುತ್ತಿರುವಿರಿ. ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಪ್ರಸ್ತುತ ಸ್ಥಾಪನೆ ಮಾಡಲಾಗಿರುವ ಆವೃತ್ತಿಗೆ ಹೊಂದಾಣಿಕೆಯಾದಾಗ ಮಾತ್ರ ಚಾನಲ್ ಬದಲಾವಣೆಯನ್ನು ಅನ್ವಯಿಸಲಾಗುತ್ತದೆ.</translation> <translation id="197989455406964291">KDC ಯು ಎನ್ಕ್ರಿಪ್ಶನ್ ಪ್ರಕಾರವನ್ನು ಬೆಂಬಲಿಸುತ್ತಿಲ್ಲ</translation> @@ -1072,6 +1073,7 @@ <translation id="2224444042887712269">ಈ ಸೆಟ್ಟಿಂಗ್ <ph name="OWNER_EMAIL" /> ಗೆ ಸೇರಿರುತ್ತದೆ.</translation> <translation id="2224551243087462610">ಫೋಲ್ಡರ್ ಹೆಸರು ಎಡಿಟ್ ಮಾಡಿ</translation> <translation id="2225864335125757863">ನಿಮ್ಮ ಖಾತೆಯನ್ನು ಸುರಕ್ಷಿತವಾಗಿರಿಸಲು ಈ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ತಕ್ಷಣವೇ ಬದಲಾಯಿಸಿ:</translation> +<translation id="2226204716217107988">ಮತ್ತೊಂದು ಪ್ರೊಫೈಲ್ಗೆ ಬದಲಿಸಬೇಕೆ?</translation> <translation id="2226449515541314767">ಈ ಸೈಟ್ ಅನ್ನು MIDI ಸಾಧನಗಳ ಮೇಲೆ ಪೂರ್ಣ ನಿಯಂತ್ರಣ ಸಾಧಿಸುವುದರಿಂದ ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.</translation> <translation id="2226907662744526012">ಪಿನ್ ನಮೂದಿಸಿದ ನಂತರ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಅನ್ಲಾಕ್ ಮಾಡಿ</translation> <translation id="222704500187107962">ನೀವು ಪ್ರಸ್ತುತ ಅಜ್ಞಾತ ಸೆಶನ್ನಿಂದ ನಿರ್ಗಮಿಸಿದ ನಂತರ, ಈ ವಿನಾಯಿತಿಯನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ತೆಗೆದುಹಾಕಲಾಗುತ್ತದೆ</translation> @@ -1141,6 +1143,7 @@ <translation id="2307462900900812319">ನೆಟ್ವರ್ಕ್ ಕಾನ್ಫಿಗರ್ ಮಾಡು</translation> <translation id="230927227160767054">ಸೇವೆ ಹ್ಯಾಂಡ್ಲರ್ ಅನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲು ಈ ಪುಟವು ಬಯಸುತ್ತದೆ.</translation> <translation id="2309620859903500144">ನಿಮ್ಮ ಚಲನೆಯ ಅಥವಾ ಲೈಟ್ ಸೆನ್ಸರ್ಗಳನ್ನು ಪ್ರವೇಶಿಸದಂತೆ ಈ ಸೈಟ್ ಅನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ.</translation> +<translation id="2312219318583366810">ಪುಟದ URL</translation> <translation id="2314165183524574721">ಪ್ರಸ್ತುತ ಗೋಚರತೆ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಮರೆಮಾಡಲಾಗಿದೆ ಎಂಬುದಕ್ಕೆ ಹೊಂದಿಸಲಾಗಿದೆ</translation> <translation id="2314774579020744484">ಪುಟಗಳನ್ನು ಅನುವಾದಿಸುವಾಗ ಬಳಸುವ ಭಾಷೆ</translation> <translation id="2315414688463285945">Linux ಫೈಲ್ಗಳನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡುವಲ್ಲಿ ದೋಷ ಕಂಡುಬಂದಿದೆ. ಮತ್ತೊಮ್ಮೆ ಪ್ರಯತ್ನಿಸಿ.</translation> @@ -2343,6 +2346,7 @@ <translation id="3713047097299026954">ಈ ಸುರಕ್ಷತಾ ಕೀ, ಯಾವುದೇ ಸೈನ್-ಇನ್ ಡೇಟಾವನ್ನು ಹೊಂದಿಲ್ಲ</translation> <translation id="3714195043138862580">ಈ ಡೆಮೊ ಸಾಧನವನ್ನು ಒದಗಿಸಲಾಗದಿರುವ ಸ್ಥಿತಿಯಲ್ಲಿ ಇರಿಸಲಾಗಿದೆ.</translation> <translation id="3714633008798122362">ವೆಬ್ ಕ್ಯಾಲೆಂಡರ್</translation> +<translation id="3715954932774762075">ಹಲವು ಭಾಷೆಗಳಲ್ಲಿ ಲಭ್ಯವಿರುವ ಆ್ಯಪ್ಗಳು ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳು ಈ ಪಟ್ಟಿಯಿಂದ ಮೊದಲು ಬೆಂಬಲಿಸುವ ಭಾಷೆಯನ್ನು ಬಳಸುತ್ತವೆ. ಈ ಆದ್ಯತೆಗಳನ್ನು ನಿಮ್ಮ ಬ್ರೌಸರ್ ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ಸಿಂಕ್ ಮಾಡಲಾಗುತ್ತದೆ. <ph name="BEGIN_LINK_LEARN_MORE" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">ಮುಖಪುಟ</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">ನೀವು ಮತ್ತು Google</translation> @@ -2503,6 +2507,7 @@ <translation id="3882165008614329320">ಕ್ಯಾಮರಾ ಅಥವಾ ಫೈಲ್ನಲ್ಲಿರುವ ಪ್ರಸ್ತುತ ವೀಡಿಯೊ</translation> <translation id="3886446263141354045">ಈ ಸೈಟ್ಗೆ ಪ್ರವೇಶಿಸುವ ನಿಮ್ಮ ವಿನಂತಿಯನ್ನು <ph name="NAME" /> ಅವರಿಗೆ ಕಳುಹಿಸಲಾಗಿದೆ</translation> <translation id="3888550877729210209"><ph name="LOCK_SCREEN_APP_NAME" /> ಮೂಲಕ ಟಿಪ್ಪಣಿಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಲಾಗುತ್ತಿದೆ</translation> +<translation id="3890064827463908288">Wi-Fi ಸಿಂಕ್ ಅನ್ನು ಬಳಸಲು Chrome ಸಿಂಕ್ ಅನ್ನು ಆನ್ ಮಾಡಿ</translation> <translation id="3892414795099177503">OpenVPN / L2TP ಸೇರಿಸಿ...</translation> <translation id="3893536212201235195">ನಿಮ್ಮ ಪ್ರವೇಶಿಸುವಿಕೆ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಓದಿ ಮತ್ತು ಬದಲಾಯಿಸಿ</translation> <translation id="3893630138897523026">ChromeVox (ಮಾತಿನ ಪ್ರತಿಕ್ರಿಯೆ)</translation> @@ -3775,6 +3780,7 @@ <translation id="5449588825071916739">ಎಲ್ಲಾ ಟ್ಯಾಬ್ಗಳನ್ನು ಬುಕ್ಮಾರ್ಕ್ ಮಾಡಿ</translation> <translation id="5449716055534515760">&ವಿಂಡೋ ಮುಚ್ಚಿರಿ</translation> <translation id="5452974209916053028">ಪ್ರಸ್ತುತ ಅದೃಶ್ಯ ಸೆಶನ್: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">ಶೀರ್ಷಿಕೆ ಬಬಲ್ ಅನ್ನು ಅಡ್ಡಲಾಗಿ <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% ಗೆ ಮತ್ತು <ph name="POSITION_ON_SCREEN_FROM_TOP" />% ಗೆ ಸರಿಸಲಾಗಿದೆ</translation> <translation id="5454166040603940656"><ph name="PROVIDER" /> ಜೊತೆಗೆ</translation> <translation id="5457113250005438886">ಅಮಾನ್ಯ</translation> <translation id="5457459357461771897">ನಿಮ್ಮ ಕಂಪ್ಯೂಟರ್ನಿಂದ ಫೋಟೋಗಳು, ಸಂಗೀತ, ಮತ್ತು ಇತರ ಮಾಧ್ಯಮವನ್ನು ಓದಿರಿ ಮತ್ತು ಅಳಿಸಿ</translation> @@ -3918,6 +3924,7 @@ <translation id="5602765853043467355">ಈ ಸಾಧನದಿಂದ ಬುಕ್ಮಾರ್ಕ್ಗಳು, ಇತಿಹಾಸ, ಪಾಸ್ವರ್ಡ್ಗಳು ಮತ್ತು ಇನ್ನಷ್ಟನ್ನು ತೆರವುಗೊಳಿಸಿ</translation> <translation id="5605623530403479164">ಇತರ ಹುಡುಕಾಟದ ಇಂಜಿನ್ಗಳು</translation> <translation id="5605758115928394442">ಇದು ನೀವೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ನಿಮ್ಮ ಫೋನ್ಗೆ ಒಂದು ಅಧಿಸೂಚನೆಯನ್ನು ಕಳುಹಿಸಲಾಗಿದೆ.</translation> +<translation id="560834977503641186">Wi-Fi ಸಿಂಕ್, ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ</translation> <translation id="5608580678041221894">ಕ್ರಾಪ್ ಮಾಡಿರುವ ಪ್ರದೇಶವನ್ನು ಸರಿಹೊಂದಿಸಲು ಅಥವಾ ಸರಿಸಲು ಈ ಮುಂದಿನ ಕೀಗಳನ್ನು ಟ್ಯಾಪ್ ಮಾಡಿ</translation> <translation id="5609231933459083978">ಅಪ್ಲಿಕೇಶನ್ ಅಮಾನ್ಯವಾಗಿರುವಂತೆ ತೋರುತ್ತಿದೆ.</translation> <translation id="5610038042047936818">ಕ್ಯಾಮರಾ ಮೋಡ್ಗೆ ಬದಲಾಯಿಸಿ</translation> @@ -4109,6 +4116,7 @@ <translation id="5841270259333717135">ಇಥರ್ನೆಟ್ ಕಾನ್ಫಿಗರ್ ಮಾಡಿ</translation> <translation id="5842497610951477805">ಬ್ಲೂಟೂತ್ ಸಕ್ರಿಯಗೊಳಿಸಿ</translation> <translation id="5843706793424741864">ಫ್ಯಾರನ್ಹೀಟ್</translation> +<translation id="584451707753263735">ಲೈವ್ ಕ್ಯಾಪ್ಶನ್ ಗೋಚರಿಸುತ್ತಿದೆ, ಫೋಕಸ್ ಅನ್ನು ಪುನಃ ಸರಿಸಲು F6 ಒತ್ತಿರಿ</translation> <translation id="5844574845205796324">ಎಕ್ಸ್ಪ್ಲೋರ್ ಮಾಡಲು ಹೊಸ ವಿಷಯವನ್ನು ಸೂಚಿಸಿ</translation> <translation id="5846200638699387931">ರಿಲೇಶನ್ ಸಿಂಟ್ಯಾಕ್ಸ್ ದೋಷ: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">ಅಪ್ಡೇಟ್ಗಳು ಮತ್ತು ಆ್ಯಪ್ಗಳನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿ. ಮುಂದುವರಿಯುವ ಮೂಲಕ, ಈ ಸಾಧನವು ಸಂಭಾವ್ಯವಾಗಿ ಸೆಲ್ಯುಲರ್ ಡೇಟಾವನ್ನು ಬಳಸಿಕೊಂಡು Google, ನಿಮ್ಮ ವಾಹಕ ಮತ್ತು ನಿಮ್ಮ ಸಾಧನದ ತಯಾರಕರ ಅಪ್ಡೇಟ್ಗಳು ಮತ್ತು ಆ್ಯಪ್ಗಳನ್ನು ಸಹ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಡೌನ್ಲೋಡ್ ಮಾಡಬಹುದು ಮತ್ತು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಬಹುದು ಎಂಬುದನ್ನು ನೀವು ಒಪ್ಪಿಕೊಳ್ಳುವಿರಿ. ಇವುಗಳಲ್ಲಿ ಕೆಲವೊಂದು ಆ್ಯಪ್ಗಳು, ಆ್ಯಪ್ಗಳಲ್ಲಿ ಖರೀದಿಸುವ ಅವಕಾಶ ಒದಗಿಸಬಹುದು.</translation> @@ -5363,6 +5371,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> ಇದೀಗ ಪೂರ್ಣ ಪರದೆಯಾಗಿದೆ.</translation> <translation id="7340650977506865820">ನಿಮ್ಮ ಪರದೆಯನ್ನು ಸೈಟ್ ಹಂಚಿಕೊಳ್ಳುತ್ತಿದೆ</translation> <translation id="7341834142292923918">ಈ ಸೈಟ್ಗೆ ಪ್ರವೇಶ ಕೋರುತ್ತಿದೆ</translation> +<translation id="7343372807593926528">ಪ್ರತಿಕ್ರಿಯೆ ಕಳುಹಿಸುವ ಮೊದಲು ಸಮಸ್ಯೆಯನ್ನು ವಿವರಿಸಿ.</translation> <translation id="7345706641791090287">ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ಖಚಿತಪಡಿಸಿ</translation> <translation id="7346909386216857016">ಸರಿ, ಅರ್ಥವಾಯಿತು</translation> <translation id="7347452120014970266">ಇದು <ph name="ORIGIN_NAME" /> ಮತ್ತು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಲಾದ ಅದರ ಆ್ಯಪ್ಗಳ ಮೂಲಕ ಸಂಗ್ರಹಿಸಲಾದ ಎಲ್ಲಾ ಡೇಟಾ ಮತ್ತು ಕುಕೀಗಳನ್ನು ತೆರವುಗೊಳಿಸುತ್ತದೆ</translation> @@ -5778,6 +5787,7 @@ <translation id="7819857487979277519">PSK (WPA ಅಥವಾ RSN)</translation> <translation id="7819992334107904369">Chrome ಸಿಂಕ್</translation> <translation id="782057141565633384">ವೀಡಿಯೋ ವಿಳಾಸವನ್ನು ನ&ಕಲಿಸಿ</translation> +<translation id="7822187537422052256">ನೀವು ಖಂಡಿತವಾಗಿಯೂ ಈ ವಿಳಾಸವನ್ನು ತೆಗೆದುಹಾಕಲು ಬಯಸುತ್ತೀರಾ?</translation> <translation id="7824864914877854148">ದೋಷದ ಕಾರಣದಿಂದಾಗಿ ಬ್ಯಾಕಪ್ ಪೂರ್ಣಗೊಳಿಸಲಾಗಲಿಲ್ಲ</translation> <translation id="7825666486843191125">ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಅನ್ಲಾಕ್ ಮಾಡಿದಾಗ ನಿಮ್ಮ ಸಮೀಪದಲ್ಲಿರುವ ಎಲ್ಲಾ ಸಂಪರ್ಕಗಳು</translation> <translation id="782590969421016895">ಪ್ರಸ್ತುತ ಪುಟಗಳನ್ನು ಬಳಸಿ</translation> @@ -6301,6 +6311,7 @@ <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />' ಕುರಿತ ಹುಡುಕಾಟ ಫಲಿತಾಂಶಗಳು</translation> <translation id="8419368276599091549">ನಿಮ್ಮ <ph name="DEVICE_TYPE" /> ಸಾಧನಕ್ಕೆ ಸ್ವಾಗತ!</translation> <translation id="8420308167132684745">ನಿಘಂಟು ನಮೂದುಗಳನ್ನು ಎಡಿಟ್ ಮಾಡಿ</translation> +<translation id="8421361468937925547">ಲೈವ್ ಕ್ಯಾಪ್ಶನ್ (ಇಂಗ್ಲಿಷ್ ಮಾತ್ರ)</translation> <translation id="8422787418163030046">ಟ್ರೇ ಕಾಣೆಯಾಗಿದೆ</translation> <translation id="8425213833346101688">ಬದಲಿಸಿ</translation> <translation id="8425492902634685834">ಕಾರ್ಯಪಟ್ಟಿಗೆ ಪಿನ್ ಮಾಡು</translation> @@ -6329,6 +6340,7 @@ <translation id="8449036207308062757">ಸಂಗ್ರಹಣೆಯನ್ನು ನಿರ್ವಹಿಸಿ</translation> <translation id="8452135315243592079">ಕಾಣೆಯಾಗಿರುವ ಸಿಮ್ ಕಾರ್ಡ್</translation> <translation id="8455026683977728932">ADB ನಿದರ್ಶನ ಸಕ್ರಿಯಗೊಳಿಸಲು ವಿಫಲವಾಗಿದೆ</translation> +<translation id="8456398879271637452">ಲೈವ್ ಕ್ಯಾಪ್ಶನ್ ಗೋಚರಿಸುತ್ತಿದೆ, ಫೋಕಸ್ ಅನ್ನು ಪುನಃ ಸರಿಸಲು Ctrl + ಹಿಂದಕ್ಕೆ ಅಥವಾ Ctrl + ಫಾರ್ವರ್ಡ್ ಒತ್ತಿರಿ</translation> <translation id="845702320058262034">ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ನಿಮ್ಮ ಫೋನ್ನ ಬ್ಲೂಟೂತ್ ಆನ್ ಆಗಿದೆಯೇ ಎಂದು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ.</translation> <translation id="8457451314607652708">ಬುಕ್ಮಾರ್ಕ್ಗಳನ್ನು ಆಮದು ಮಾಡಿ</translation> <translation id="8458627787104127436">ಎಲ್ಲವನ್ನೂ (<ph name="URL_COUNT" />) ಹೊಸ ವಿಂಡೋದಲ್ಲಿ ತೆರೆಯಿರಿ</translation> @@ -6839,6 +6851,7 @@ <translation id="9027459031423301635">ಹೊಸ &ಟ್ಯಾಬ್ನಲ್ಲಿ ಲಿಂಕ್ ತೆರೆಯಿರಿ</translation> <translation id="9030515284705930323">ನಿಮ್ಮ ಸಂಸ್ಥೆ ನಿಮ್ಮ ಖಾತೆಗೆ Google Play ಸ್ಟೋರ್ ಸಕ್ರಿಯಗೊಳಿಸಿಲ್ಲ. ಹೆಚ್ಚಿನ ಮಾಹಿತಿಗಾಗಿ ನಿಮ್ಮ ನಿರ್ವಾಹಕರನ್ನು ಸಂಪರ್ಕಿಸಿ.</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269"><ph name="PLUGIN_NAME" /> ಇನ್ನು ಮುಂದೆ ಬೆಂಬಲಿಸುವುದಿಲ್ಲ</translation> <translation id="9031549947500880805">Google ಡ್ರೈವ್ನಲ್ಲಿ ಬ್ಯಾಕಪ್ ಮಾಡಿ. ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸುಲಭವಾಗಿ ಮರುಸ್ಥಾಪಿಸಿ ಅಥವಾ ಯಾವಾಗ ಬೇಕಾದರೂ ಸಾಧನವನ್ನು ಬದಲಾಯಿಸಿ. ನಿಮ್ಮ ಬ್ಯಾಕಪ್, ಆ್ಯಪ್ ಡೇಟಾವನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ.</translation> <translation id="9033765790910064284">ಹೇಗಾದರೂ ಮುಂದುವರಿಸಿ</translation> <translation id="9033857511263905942">&ಅಂಟಿಸಿ</translation> @@ -6847,6 +6860,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{ನೀವು ಇನ್ನೂ ಒಂದು ಬಾರಿ ಪ್ರಯತ್ನಿಸಬಹುದು.}one{ನೀವು ಇನ್ನೂ # ಬಾರಿ ಪ್ರಯತ್ನಿಸಬಹುದು.}other{ನೀವು ಇನ್ನೂ # ಬಾರಿ ಪ್ರಯತ್ನಿಸಬಹುದು.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571"><ph name="ORIGIN" /> ಗಾಗಿ ಪಾಸ್ವರ್ಡ್ ಅಪ್ಡೇಟ್ ಮಾಡುವುದೇ?</translation> +<translation id="9041049756004505730">ಲೈವ್ ಕ್ಯಾಪ್ಶನ್ ಗೋಚರಿಸುತ್ತಿದೆ, ಫೋಕಸ್ ಅನ್ನು ಪುನಃ ಸರಿಸಲು ⌘ + ಆಯ್ಕೆ + ಮೇಲಿನ ಬಾಣ ಅಥವಾ ಕೆಳಗಿನ ಬಾಣವನ್ನು ಒತ್ತಿರಿ</translation> <translation id="9041692268811217999">ನಿಮ್ಮ ಯಂತ್ರದಲ್ಲಿ ಸ್ಥಳೀಯ ಫೈಲ್ಗಳಿಗೆ ಪ್ರವೇಶಿಸುವುದನ್ನು ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ</translation> <translation id="904224458472510106">ಈ ಕಾರ್ಯಚರಣೆಯನ್ನು ರದ್ದು ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ</translation> <translation id="9042893549633094279">ಗೌಪ್ಯತೆ ಮತ್ತು ಭದ್ರತೆ</translation> @@ -6885,6 +6899,7 @@ <translation id="9088446193279799727">Linux ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ಇಂಟರ್ನೆಟ್ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಿ ಹಾಗೂ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="9088917181875854783">ದಯವಿಟ್ಟು "<ph name="DEVICE_NAME" />" ರಲ್ಲಿ ತೋರಿಸಿರುವಂತೆ ಈ ಪಾಸ್ಕೀಯನ್ನು ಖಚಿತಪಡಿಸಿ:</translation> <translation id="9089416786594320554">ಇನ್ಪುಟ್ ವಿಧಾನಗಳು</translation> +<translation id="909108997331068008"><ph name="EXISTING_USER" /> ಅವರ ಪ್ರೊಫೈಲ್ ಮೂಲಕ ಈಗಾಗಲೇ <ph name="NEW_USER" /> ಗೆ ಸೈನ್ ಇನ್ ಮಾಡಲಾಗಿದೆ</translation> <translation id="9093429538970210897">ಅಪ್ಗ್ರೇಡ್ ಅನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗದಿದ್ದಾಗ ಫೈಲ್ಗಳನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಲು ಶಿಫಾರಸು ಮಾಡಲಾಗುವುದು. ಅಪ್ಗ್ರೇಡ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸುವುದರಿಂದ Linux (ಬೀಟಾ) ಅನ್ನು ಆಫ್ ಆಗುವಂತೆ ಮಾಡುತ್ತದೆ. ಮುಂದುವರಿಸುವ ಮೊದಲು, ತೆರೆದ ಫೈಲ್ಗಳನ್ನು ಉಳಿಸಿ.</translation> <translation id="9094033019050270033">ಪಾಸ್ವರ್ಡ್ ಅಪ್ಡೇಟ್ ಮಾಡು</translation> <translation id="9094038138851891550">ಬಳಕೆದಾರರ ಹೆಸರು ಅಮಾನ್ಯವಾಗಿದೆ</translation> @@ -7059,5 +7074,6 @@ <translation id="994289308992179865">&ಲೂಪ್</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">ಸುರಕ್ಷಿತ ಸಂಪರ್ಕವನ್ನು ಸ್ಥಾಪಿಸಲಾಗುತ್ತಿದೆ...</translation> +<translation id="99731366405731005">Wi-Fi ಸಿಂಕ್ ಅನ್ನು ಬಳಸಲು <ph name="LINK1_BEGIN" />Chrome ಸಿಂಕ್<ph name="LINK1_END" /> ಅನ್ನು ಆನ್ ಮಾಡಿ. <ph name="LINK2_BEGIN" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="LINK2_END" /></translation> <translation id="998747458861718449">ಪ&ರಿಶೀಲಿಸಿ</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index 50623872..159c069 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -3784,7 +3784,7 @@ <translation id="5449588825071916739">모든 탭 북마크</translation> <translation id="5449716055534515760">창 닫기(&D)</translation> <translation id="5452974209916053028">현재 시크릿 세션: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> -<translation id="5454005855577728171">자막 도움말 풍선이 <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% 옆으로, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% 아래로 이동함</translation> +<translation id="5454005855577728171">자막 도움말 풍선이 <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% 오른쪽으로, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% 아래로 이동함</translation> <translation id="5454166040603940656">제공업체: <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">잘못된 데이터</translation> <translation id="5457459357461771897">컴퓨터에서 사진, 음악, 기타 미디어 조회 및 삭제</translation> @@ -6352,7 +6352,7 @@ <translation id="8449036207308062757">저장용량 관리</translation> <translation id="8452135315243592079">SIM 카드 없음</translation> <translation id="8455026683977728932">ADB 사용 설정 실패 삽화</translation> -<translation id="8456398879271637452">실시간 자막 표시, Ctrl과 뒤로 또는 Ctrl과 앞으로를 눌러 포커스 전환</translation> +<translation id="8456398879271637452">실시간 자막 표시, Ctrl 키와 뒤로 또는 Ctrl 키와 앞으로를 눌러 포커스 전환</translation> <translation id="845702320058262034">연결할 수 없습니다. 휴대전화의 블루투스가 켜져 있는지 확인하세요.</translation> <translation id="8457451314607652708">북마크 가져오기</translation> <translation id="8458627787104127436">새 창에서 모두(<ph name="URL_COUNT" />개) 열기</translation> @@ -6873,7 +6873,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{앞으로 1번 더 시도할 수 있습니다.}other{앞으로 #번 더 시도할 수 있습니다.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571"><ph name="ORIGIN" /> 비밀번호를 업데이트하시겠습니까?</translation> -<translation id="9041049756004505730">실시간 자막 표시, ⌘와 Option과 위쪽 또는 아래쪽 화살표를 눌러 포커스 전환</translation> +<translation id="9041049756004505730">실시간 자막 표시, ⌘ 키와 Option 키와 위쪽 또는 아래쪽 화살표를 눌러 포커스 전환</translation> <translation id="9041692268811217999">관리자가 시스템의 로컬 파일 액세스를 차단했습니다</translation> <translation id="904224458472510106">이 작업은 되돌릴 수 없습니다.</translation> <translation id="9042893549633094279">개인정보 및 보안</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb index 8876c89..66002d3 100644 --- a/chrome/app/resources/generated_resources_lo.xtb +++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -1688,7 +1688,7 @@ <translation id="2932883381142163287">ລາຍງານການນຳໃຊ້ຜິດ</translation> <translation id="2933632078076743449">ອັບເດດຫຼ້າສຸດ</translation> <translation id="2934999512438267372">ອະນຸຍາດການຄວບຄຸມອຸປະກອນ MIDI ແບບເຕັມແລ້ວ</translation> -<translation id="2935654492420446828">ເພີ່ມບັນຊີໂຮງຮຽໃນພາຍຫຼັງ</translation> +<translation id="2935654492420446828">ເພີ່ມບັນຊີໂຮງຮຽນໃນພາຍຫຼັງ</translation> <translation id="2936851848721175671">ສຳຮອງ ແລະ ກູ້ຄືນ</translation> <translation id="2938225289965773019">ເປີດລິ້ງ <ph name="PROTOCOL" /></translation> <translation id="2938845886082362843">ເບິ່ງ ແລະ ລຶບຂໍ້ມູນການເຂົ້າສູ່ລະບົບທີ່ເກັບໄວ້ໃນກະແຈຄວາມປອດໄພຂອງທ່ານ</translation> @@ -6208,7 +6208,7 @@ <translation id="826905130698769948">ໃບຮັບຮອງລູກຂ່າຍບໍ່ຖືກຕ້ອງ</translation> <translation id="8270242299912238708">ເອກະສານ PDF</translation> <translation id="827097179112817503">ສະແດງປຸ່ມໜ້າຫຼັກ</translation> -<translation id="8271379370373330993">ຮຽນພໍ່ແມ່, ຂັ້ນຕອນສອງສາມຢ່າງຕໍ່ໄປແມ່ນສຳລັງທ່ານ. ທ່ານສາມາດສົ່ງ <ph name="DEVICE_TYPE" /> ຄືນໃຫ້ເດັກໄດ້ຫຼັງຈາກຕັ້ງຄ່າບັນຊີແລ້ວ.</translation> +<translation id="8271379370373330993">ຮຽນພໍ່ແມ່, ຂັ້ນຕອນສອງສາມຢ່າງຕໍ່ໄປແມ່ນສຳລັບທ່ານ. ທ່ານສາມາດສົ່ງ <ph name="DEVICE_TYPE" /> ຄືນໃຫ້ເດັກໄດ້ຫຼັງຈາກຕັ້ງຄ່າບັນຊີແລ້ວ.</translation> <translation id="8272443605911821513">ຈັດການສ່ວນຂະຫຍາຍຂອງທ່ານໂດຍການຄລິກສ່ວນຂະຫຍາຍຢູ່ໃນເມນູ "ເຄື່ອງມືເພີ່ມເຕີມ".</translation> <translation id="8274332263553132018">ສົ່ງສັນຍານໄຟລ໌</translation> <translation id="8274924778568117936">ຢ່າປິດ <ph name="DEVICE_TYPE" /> ຂອງທ່ານຈົນກວ່າວ່າການອັບເດດຈະສຳເລັດ. <ph name="DEVICE_TYPE" /> ຂອງທ່ານຈະປິດເປີດໃໝ່ຫຼັງຈາກການຕິດຕັ້ງສຳເລັດແລ້ວ.</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index 8759894..c837468 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">നിങ്ങളുടെ ഡോക്സ്, ഷീറ്റുകൾ, സ്ലൈഡുകൾ, ഡ്രോയിംഗ് ഫയലുകൾ എന്നിവ സമന്വയിപ്പിക്കുന്നു. അവ ഓൺലൈനിലോ ഓഫ്ലൈനിലോ ആക്സസ് ചെയ്യുന്നതിന് Google ഡ്രൈവ് ആപ്പ് തുറക്കുക.</translation> <translation id="1012876632442809908">USB-C ഉപകരണം (മുൻവശത്തെ പോർട്ട്)</translation> <translation id="1013707859758800957">ഈ പേജിൽ പ്രവർത്തിക്കാൻ സാൻഡ്ബോക്സ് ചെയ്യാത്ത പ്ലഗിൻ അനുവദിച്ചിരിക്കുന്നു.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">ഫോള്ഡര് പേര് എഡിറ്റ് ചെയ്യുക</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{<ph name="DEVICE_TYPE" /> അപ്ഡേറ്റ് ചെയ്യാനുള്ള അവസാന ദിവസം}other{{NUM_DAYS} ദിവസത്തിനുള്ളിൽ <ph name="DEVICE_TYPE" /> അപ്ഡേറ്റ് ചെയ്യുക}}</translation> <translation id="1016566241875885511">കൂടുതൽ വിവരങ്ങൾ (ഓപ്ഷണൽ)</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index 8a669010..543fa072 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -14,7 +14,7 @@ <translation id="1010498023906173788">हा टॅब सिरीअल पोर्टशी कनेक्ट केलेला आहे.</translation> <translation id="1010833424573920260">{NUM_PAGES,plural, =1{अप्रतिसादात्मक पृष्ठ}other{अप्रतिसादात्मक पृष्ठे}}</translation> <translation id="1011355516189274711">टेक्स्ट टू स्पीच व्हॉल्यूम</translation> -<translation id="1012794136286421601">तुमचे दस्तऐवज, पत्रके, स्लाइड्स आणि रेखाचित्र फाइल सिंक केल्या जात आहेत. त्यावर ऑनलाइन किंवा ऑफलाइन ॲक्सेस करण्यासाठी Google ड्राइव्ह ॲप उघडा.</translation> +<translation id="1012794136286421601">तुमचे दस्तऐवज, पत्रके, स्लाइड्स आणि रेखाचित्र फाइल सिंक केल्या जात आहेत. त्यावर ऑनलाइन किंवा ऑफलाइन ॲक्सेस करण्यासाठी Google ड्राइव्ह अॅप उघडा.</translation> <translation id="1012876632442809908">USB-C डिव्हाइस (पुढील बाजूचे पोर्ट)</translation> <translation id="1013707859758800957">या पेजवर चालण्यासाठी सॅन्डबॉक्स न केलेल्या प्लग-इनला अनुमती देण्यात आली.</translation> <translation id="1015318665228971643">फोल्डर नाव एडिट करा</translation> @@ -76,7 +76,7 @@ <translation id="1076818208934827215">Microsoft Internet Explorer</translation> <translation id="1076882167394279216"><ph name="LANGUAGE" /> साठी स्पेल चेक शब्दकोश डाउनलोड करता आला नाही. पुन्हा प्रयत्न करा.</translation> <translation id="1079766198702302550">कॅमेरा ॲक्सेस नेहमी ब्लॉक करा</translation> -<translation id="1082398631555931481"><ph name="THIRD_PARTY_TOOL_NAME" /> तुमच्या Chrome सेटिंग्ज त्यांच्या मूळ डीफॉल्टवर रिस्टोअर करू इच्छित आहे. हे तुमचे मुख्यपेज, नवीन टॅब पेज आणि शोध इंजिन रीसेट करेल, तुमच्या एक्स्टेंशनांना अक्षम करेल आणि सर्व टॅबना अनपिन करेल. ते कुकीज, सामग्री आणि साइट डेटासारखा इतर तात्पुरता आणि कॅशे केलेला डेटा देखील साफ करेल.</translation> +<translation id="1082398631555931481"><ph name="THIRD_PARTY_TOOL_NAME" /> तुमच्या Chrome सेटिंग्ज त्यांच्या मूळ डीफॉल्टवर रिस्टोअर करू इच्छित आहे. हे तुमचे मुख्यपेज, नवीन टॅब पेज आणि शोध इंजिन रीसेट करेल, तुमच्या एक्स्टेंशनांना अक्षम करेल आणि सर्व टॅबना अनपिन करेल. ते कुकीज, आशय आणि साइट डेटासारखा इतर तात्पुरता आणि कॅशे केलेला डेटा देखील साफ करेल.</translation> <translation id="1084096383128641877">हा पासवर्ड काढल्याने तुमचे <ph name="DOMAIN" /> वरील खाते हटवले जाणार नाही. तुमचे <ph name="DOMAIN_LINK" /> वरील खाते इतरांपासून सुरक्षित ठेवण्यासाठी तुमचा पासवर्ड बदला किंवा तुमचे खाते हटवा.</translation> <translation id="1084824384139382525">लिंक पत्ता कॉपी करा</translation> <translation id="1085697365578766383">व्हर्च्युअल मशीन सुरू करताना एरर आली. कृपया पुन्हा प्रयत्न करा.</translation> @@ -213,7 +213,7 @@ <translation id="1235458158152011030">ज्ञात नेटवर्क</translation> <translation id="123578888592755962">डिस्क भरली</translation> <translation id="1238191093934674082">VPN उघडा</translation> -<translation id="1239594683407221485">Files ॲप मधील डिव्हाइसचा आशय एक्सप्लोर करा.</translation> +<translation id="1239594683407221485">Files अॅप मधील डिव्हाइसचा आशय एक्सप्लोर करा.</translation> <translation id="124116460088058876">आणखी भाषा...</translation> <translation id="1241639418100230264">डेटा शुल्क लागू शकते</translation> <translation id="1241753985463165747">विनंती केल्यावर सध्याच्या वेबसाइटवर असलेला सर्व डेटा वाचू आणि बदलू शकता</translation> @@ -301,7 +301,7 @@ <translation id="1338802252451106843"><ph name="ORIGIN" /> ला हे ॲप्लिकेशन उघडायचे आहे.</translation> <translation id="1338950911836659113">हटवत आहे...</translation> <translation id="13392265090583506">A11y</translation> -<translation id="1340527397989195812">Files ॲप वापरून डिव्हाइसवरील मीडियाचा बॅकअप घ्या.</translation> +<translation id="1340527397989195812">Files अॅप वापरून डिव्हाइसवरील मीडियाचा बॅकअप घ्या.</translation> <translation id="1341988552785875222">वर्तमान वॉलपेपर <ph name="APP_NAME" /> नी सेट केला आहे'. भिन्न वॉलपेपर निवडण्यापूर्वी तुम्हाला <ph name="APP_NAME" /> अनइंस्टॉल करण्याची आवश्यकता असेल.</translation> <translation id="1343865611738742294">USB डिव्हाइस ॲक्सेस करण्यासाठी Linux ला परवानगी द्या. USB डिव्हाइस काढून टाकल्यानंतर Linux ते लक्षात ठेवणार नाही.</translation> <translation id="1346630054604077329">निश्चित करा आणि रीस्टार्ट करा</translation> @@ -344,7 +344,7 @@ <translation id="1395730723686586365">अद्यतनकर्ता प्रारंभ</translation> <translation id="1396139853388185343">प्रिंटर सेट अप करण्यात एरर आली</translation> <translation id="1396259464226642517">हा परिणाम अनपेक्षित होता का? <ph name="BEGIN_LINK" />फीडबॅक पाठवा<ph name="END_LINK" /></translation> -<translation id="1396963298126346194">तुम्ही एंटर केलेले वापरकर्तानाव आणि पासवर्ड जुळत नाही</translation> +<translation id="1396963298126346194">तुम्ही एंटर केलेले वापरकर्ता नाव आणि पासवर्ड जुळत नाही</translation> <translation id="1397500194120344683">कोणतीही पात्र डिव्हाइस नाहीत. <ph name="LINK_BEGIN" />अधिक जाणून घ्या.<ph name="LINK_END" /></translation> <translation id="1397738625398125236">गेटवेला पिंग करता येते</translation> <translation id="1398853756734560583">वाढवा</translation> @@ -617,7 +617,7 @@ <translation id="168991973552362966">एक जवळपासचे प्रिंटर जोडा</translation> <translation id="1689945336726856614">URL कॉपी करा</translation> <translation id="1692115862433274081">दुसरे खाते वापरा</translation> -<translation id="1692118695553449118">संकालन सुरू आहे</translation> +<translation id="1692118695553449118">सिंक सुरू आहे</translation> <translation id="1692210323591458290">गडद जांभळा</translation> <translation id="1697150536837697295">कला</translation> <translation id="1697686431566694143">फाइल संपादित करा</translation> @@ -871,7 +871,7 @@ <translation id="1978006917103730774">भविष्यातील सॉफ्टवेअर आणि सुरक्षितता अपडेट आपोआप इंस्टॉल होतील.</translation> <translation id="1978057560491495741">पत्ता काढून टाका</translation> <translation id="1979095679518582070">हे वैशिष्ट्य बंद केल्यामुळे सिस्टम अपडेट आणि सुरक्षिततेसारख्या अत्यावश्यक सेवांसाठी लागणारी माहिती पाठवण्याच्या या डिव्हाइसच्या क्षमतेवर प्रभाव होत नाही.</translation> -<translation id="1979280758666859181">तुम्ही <ph name="PRODUCT_NAME" /> च्या जुन्या आवृत्तीसह एका चॅनेलमध्ये बदलत आहात. आपल्या डिव्हाइसवर सध्या इंस्टॉल आवृत्तीशी चॅनेलची आवृत्ती जुळते तेव्हा चॅनेल बदल लागू होईल.</translation> +<translation id="1979280758666859181">तुम्ही <ph name="PRODUCT_NAME" /> च्या जुन्या आवृत्तीसह एका चॅनलमध्ये बदलत आहात. आपल्या डिव्हाइसवर सध्या इंस्टॉल आवृत्तीशी चॅनलची आवृत्ती जुळते तेव्हा चॅनल बदल लागू होईल.</translation> <translation id="197989455406964291">KDC एंक्रिप्शन प्रकाराला सपोर्ट करत नाही</translation> <translation id="1984417487208496350">संरक्षण नाही (शिफारस केली जात नाही)</translation> <translation id="1987317783729300807">खाती</translation> @@ -912,7 +912,7 @@ अन्यथा, आता साइन आउट करा जेणेकरून या खात्यामध्ये केलेले बदल या डिव्हाइसवर दिसतील. -तुमच्या डिव्हाइसवर Family Link ॲप इंस्टॉल करून तुम्ही या खात्याची सेटिंग्ज व्यवस्थापित करू शकता. आम्ही तुम्हाला ईमेलवर सूचना पाठवल्या आहेत.</translation> +तुमच्या डिव्हाइसवर Family Link अॅप इंस्टॉल करून तुम्ही या खात्याची सेटिंग्ज व्यवस्थापित करू शकता. आम्ही तुम्हाला ईमेलवर सूचना पाठवल्या आहेत.</translation> <translation id="2040460856718599782">अरेरे! तुम्हाला ऑथेंटिकेट करण्याचा प्रयत्न करताना काहीतरी चूक झाली. कृपया तुमची साइन इन क्रेडेंशियल दोनदा तपासा आणि पुन्हा प्रयत्न करा.</translation> <translation id="2040859730880153754">{COUNT,plural, =1{तुमच्याकडे एक धोक्यात असलेला पासवर्ड आहे}other{तुमच्याकडे # धोक्यात असलेले पासवर्ड आहेत}}</translation> <translation id="2040863272941698761">Linux सेट करा</translation> @@ -1137,7 +1137,7 @@ <translation id="2300383962156589922"><ph name="APP_NAME" /> ला कस्टमाइझ आणि नियंत्रित करा</translation> <translation id="2301382460326681002">एक्स्टेंशन मूळ डिरेक्टरी अवैध आहे.</translation> <translation id="23030561267973084">"<ph name="EXTENSION_NAME" />" नी अतिरिक्त परवानग्यांची विनंती केली आहे.</translation> -<translation id="23055578400314116">एखादे वापरकर्तानाव निवडा</translation> +<translation id="23055578400314116">एखादे वापरकर्ता नाव निवडा</translation> <translation id="2307462900900812319">नेटवर्क कॉंफिगर करा</translation> <translation id="230927227160767054">हे पृष्ठ एक सेवा हँडलर इंस्टॉल करू इच्छिते.</translation> <translation id="2309620859903500144">या साइटला तुमचे गती किंवा प्रकाश सेन्सर ॲक्सेस करण्यापासून ब्लॉक केले गेले आहे.</translation> @@ -1415,7 +1415,7 @@ <translation id="2624142942574147739">हे पृष्ठ आपल्या कॅमेरा आणि मायक्रोफोनवर प्रवेश करत आहे.</translation> <translation id="2626799779920242286">कृपया नंतर पुन्हा प्रयत्न करा.</translation> <translation id="2628770867680720336">ADB डीबगिंग सुरू करण्यासाठी हे Chromebook फॅक्टरी रीसेट करणे आवश्यक आहे. <ph name="BEGIN_LINK_LEARN_MORE" />अधिक जाणून घ्या<ph name="END_LINK_LEARN_MORE" /></translation> -<translation id="2629227353894235473">Android ॲप्स तयार करा</translation> +<translation id="2629227353894235473">Android अॅप्स तयार करा</translation> <translation id="2630681426381349926">सुरुवात करण्यासाठी वाय-फाय वर कनेक्ट करा</translation> <translation id="2631498379019108537">शेल्फ मधील इनपुट पर्याय दर्शवा</translation> <translation id="2633212996805280240">"<ph name="EXTENSION_NAME" />" काढून टाकायचे?</translation> @@ -1477,7 +1477,7 @@ <translation id="2699911226086014512"><ph name="RETRIES" /> कोडसह पिन ऑपरेशन पूर्ण झाले नाही.</translation> <translation id="2701737434167469065"><ph name="EMAIL" /> सह साइन इन करा</translation> <translation id="2702801445560668637">वाचन सूची</translation> -<translation id="270358213449696159">Google Chrome OS अटी सामग्री</translation> +<translation id="270358213449696159">Google Chrome OS अटी आशय</translation> <translation id="270414148003105978">मोबाइल नेटवर्क</translation> <translation id="2704184184447774363">Microsoft Document Signing</translation> <translation id="270516211545221798">टचपॅड गती</translation> @@ -1682,7 +1682,7 @@ <translation id="2931157624143513983">प्रिंट करण्यायोग्य भागात बसवा</translation> <translation id="2932085390869194046">पासवर्ड सुचवा...</translation> <translation id="2932330436172705843"><ph name="PROFILE_DISPLAY_NAME" /> (मुलांसाठी खाते)</translation> -<translation id="2932483646085333864">साइन आउट करा नंतर संकालन सुरू करण्यासाठी पुन्हा साइन इन करा</translation> +<translation id="2932483646085333864">साइन आउट करा नंतर सिंक सुरू करण्यासाठी पुन्हा साइन इन करा</translation> <translation id="2932883381142163287">दुरुपयोगाची तक्रार नोंदवा</translation> <translation id="2933632078076743449">शेवटचे अपडेट</translation> <translation id="2934999512438267372">MIDI डिव्हाइसचे पूर्ण नियंत्रण करण्याची अनुमती आहे</translation> @@ -2142,7 +2142,7 @@ <translation id="3488065109653206955">आंशिक रूपात सक्रिय </translation> <translation id="3491669675709357988">तुमच्या लहान मुलाचे खाते Family Link पालक नियंत्रणांसाठी सेट केलेले नाही. सेटअप पूर्ण केल्यानंतर तुम्ही पालक नियंत्रणे जोडू शकता. तुम्हाला Explore ॲपमध्ये पालक नियंत्रणांविषयी माहिती मिळेल.</translation> <translation id="3491678231052507920">तुम्हाला VR सेशन एंटर करू देण्यासाठी साइट सामान्यपणे तुमची आभासी वास्तविकता डिव्हाइस आणि डेटा वापरतात</translation> -<translation id="3492788708641132712">संकालन कार्य करत नाही. पुन्हा साइन इन करण्याचा प्रयत्न करा.</translation> +<translation id="3492788708641132712">सिंक कार्य करत नाही. पुन्हा साइन इन करण्याचा प्रयत्न करा.</translation> <translation id="3493486281776271508">इंटरनेट कनेक्शन आवश्यक आहे</translation> <translation id="3493881266323043047">वैधता</translation> <translation id="3494769164076977169">प्रथम फाइलनंतर जेव्हा एखादी साइट फाइल आपोआप डाउनलोड करण्याचा प्रयत्न करते तेव्हा विचारा (शिफारस केलेले)</translation> @@ -2174,14 +2174,14 @@ <translation id="3528498924003805721">शॉर्टकट लक्ष्ये</translation> <translation id="3532273508346491126">सिंक व्यवस्थापन</translation> <translation id="3532521178906420528">नेटवर्क कनेक्शन स्थापित करत आहे ...</translation> -<translation id="353316712352074340"><ph name="WINDOW_TITLE" /> - ऑडिओ नि:शब्द केला</translation> +<translation id="353316712352074340"><ph name="WINDOW_TITLE" /> - ऑडिओ म्यूट केला</translation> <translation id="3537881477201137177">हे नंतर सेटिंग्जमध्ये बदलले जाऊ शकते</translation> <translation id="3538066758857505094">Linux अनइंस्टॉल करताना एरर आली. कृपया पुन्हा प्रयत्न करा.</translation> <translation id="354060433403403521">AC अॅडाप्टर</translation> <translation id="354068948465830244">हे साइट डेटा वाचू आणि बदलू शकते</translation> <translation id="3543393733900874979">अपडेट अयशस्वी (एरर: <ph name="ERROR_NUMBER" />)</translation> <translation id="3543597750097719865">SHA-1 सह X9.62 ECDSA स्वाक्षरी</translation> -<translation id="3544879808695557954">वापरकर्तानाव (पर्यायी)</translation> +<translation id="3544879808695557954">वापरकर्ता नाव (पर्यायी)</translation> <translation id="354602065659584722">धोकादायक सॉफ्टवेअर काढले</translation> <translation id="3547954654003013442">प्रॉक्सी सेटिंग्ज</translation> <translation id="3548162552723420559">वातावरणाशी जुळण्यासाठी स्क्रीनचे रंग अॅडजस्ट करते</translation> @@ -2312,7 +2312,7 @@ <translation id="3685598397738512288">Linux ची USB प्राधान्ये</translation> <translation id="368789413795732264">ही फाइल राइट करण्याचा प्रयत्न करताना एरर आली:<ph name="ERROR_TEXT" />.</translation> <translation id="3688507211863392146">तुम्ही ॲप्समध्ये उघडता त्या फायलींमध्ये आणि फोल्डरमध्ये लिहा</translation> -<translation id="3688526734140524629">चॅनेल बदला</translation> +<translation id="3688526734140524629">चॅनल बदला</translation> <translation id="3688578402379768763">अद्ययावत</translation> <translation id="3688794912214798596">भाषा बदला...</translation> <translation id="3690369331356918524">डेटा भंगामध्ये पासवर्ड उघड झाल्यास, तुम्हाला चेतावणी देते</translation> @@ -2369,7 +2369,7 @@ <translation id="3739254215541673094"><ph name="APPLICATION" /> उघडायचा?</translation> <translation id="3742055079367172538">स्क्रीनशॉट घेतला</translation> <translation id="3742666961763734085">त्या नावाचे संस्थात्मक एकक शोधू शकत नाही. कृपया पुन्हा प्रयत्न करा.</translation> -<translation id="3744111561329211289">पार्श्वभूमी संकालन</translation> +<translation id="3744111561329211289">पार्श्वभूमी सिंक</translation> <translation id="3746127522257263495">Android अॅप्समध्ये G Suite for Education खाते जोडण्यास सपोर्ट नाही.</translation> <translation id="3747077776423672805">ॲप्स काढून टाकण्यासाठी, सेटिंग्ज > Google Play स्टोअर > Android प्राधान्ये व्यवस्थापित करा > ॲप्स किंवा अॅप्लिकेशन व्यवस्थापक वर जा. नंतर तुम्हाला अनइंस्टॉल करायच्या असलेल्या ॲपवर टॅप करा (ॲप शोधण्यासाठी तुम्हाला कदाचित उजवीकडे किंवा डावीकडे स्वाइप करावे लागेल). यानंतर अनइंस्टॉल करा किंंवा बंद करा वर टॅप करा.</translation> <translation id="3748026146096797577">कनेक्टेड नाही</translation> @@ -2977,7 +2977,7 @@ <translation id="4474461121892222090">मोबाइल डेटा ॲक्टिव्हेशन पूर्ण होण्यास सुमारे १५ मिनिटे लागू शकतात.</translation> <translation id="4475552974751346499">डाउनलोड शोधा</translation> <translation id="4476590490540813026">व्यायामपटू</translation> -<translation id="4476659815936224889">हा कोड स्कॅन करण्यासाठी, तुम्ही तुमच्या फोनवरील QR स्कॅनर ॲप किंवा काही कॅमेरा अॅप्स वापरू शकता.</translation> +<translation id="4476659815936224889">हा कोड स्कॅन करण्यासाठी, तुम्ही तुमच्या फोनवरील QR स्कॅनर अॅप किंवा काही कॅमेरा अॅप्स वापरू शकता.</translation> <translation id="4477015793815781985">Ctrl, Alt किंवा ⌘ चा समावेश करा</translation> <translation id="4478664379124702289">या फॉरमॅटमध्ये लिंक सेव्ह करा...</translation> <translation id="4479424953165245642">कियोस्क ॲप्लिकेशन व्यवस्थापित करा</translation> @@ -3387,10 +3387,10 @@ <translation id="4955710816792587366">तुमचा पिन निवडा</translation> <translation id="4959262764292427323">तुम्हाला कोणत्याही डिव्हाइसवर वापरता यावे यासाठी तुमच्या Google खात्यामध्ये पासवर्ड सेव्ह केले जातात</translation> <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation> -<translation id="496185450405387901">हे ॲप तुमच्या अॅडमिनिस्ट्रेटरने इंस्टॉल केले आहे.</translation> +<translation id="496185450405387901">हे अॅप तुमच्या अॅडमिनिस्ट्रेटरने इंस्टॉल केले आहे.</translation> <translation id="4964455510556214366">व्यवस्था</translation> <translation id="4965808351167763748">तुम्हाला हे डिव्हाइस Hangouts Meet वापरण्यासाठी खरोखर सेट अप करायचे आहे का?</translation> -<translation id="496888482094675990">फाइल ॲप तुम्ही Google ड्राइव्हवर, बाह्य स्टोरेजवर किंवा तुमच्या Chrome OS डिव्हाइसवर सेव्ह केलेल्या फाइलना जलद ॲक्सेस देतो.</translation> +<translation id="496888482094675990">फाइल अॅप तुम्ही Google ड्राइव्हवर, बाह्य स्टोरेजवर किंवा तुमच्या Chrome OS डिव्हाइसवर सेव्ह केलेल्या फाइलना जलद ॲक्सेस देतो.</translation> <translation id="4971412780836297815">पूर्ण झाल्यानंतर उघडा</translation> <translation id="4971735654804503942">धोकादायक वेबसाइट, डाउनलोड आणि एक्स्टेंशनपासून अधिक जलद, प्रोअॅक्टिव्ह संरक्षण. पासवर्ड भंगांबद्दल तुम्हाला चेतावणी देतो. Google ला पाठवला जाण्यासाठी ब्राउझिंग डेटा आवश्यक आहे.</translation> <translation id="4972129977812092092">प्रिंटर संपादित करा</translation> @@ -3514,7 +3514,7 @@ <translation id="5125751979347152379">चुकीची URL.</translation> <translation id="5126611267288187364">बदल पाहा</translation> <translation id="5127620150973591153">सुरक्षित कनेक्शन आयडी: <ph name="TOKEN" /></translation> -<translation id="5127805178023152808">संकालन बंद आहे</translation> +<translation id="5127805178023152808">सिंक बंद आहे</translation> <translation id="5127881134400491887">नेटवर्क कनेक्शन व्यवस्थापित करा</translation> <translation id="512903556749061217">संलग्न केले</translation> <translation id="5131591206283983824">टचपॅड टॅप ड्रॅगिंग</translation> @@ -3567,7 +3567,7 @@ <translation id="5187826826541650604"><ph name="KEY_NAME" /> (<ph name="DEVICE" />)</translation> <translation id="5190926251776387065">पोर्ट सुरू करा</translation> <translation id="51918995459521422"><ph name="ORIGIN" /> ला एकाहून अधिक फाइल डाउनलोड करायच्या आहेत</translation> -<translation id="5192062846343383368">तुमची पर्यवेक्षण सेटिंग्ज पाहण्यासाठी Family Link ॲप उघडा</translation> +<translation id="5192062846343383368">तुमची पर्यवेक्षण सेटिंग्ज पाहण्यासाठी Family Link अॅप उघडा</translation> <translation id="5193988420012215838">तुमच्या क्लिपबोर्डवर कॉपी केले</translation> <translation id="5197255632782567636">इंटरनेट</translation> <translation id="5198430103906431024">वापर आणि निदान डेटा पाठवा. हे डिव्हाइस सध्या Google ला निदान, डिव्हाइस आणि अॅप वापर डेटा आपोआप पाठवत आहे. हे सिस्टम व अॅप स्थिरता आणि इतर सुधारणांमध्ये मदत करेल. काही एकत्रित केलेला डेटा Google अॅप्स आणि Android डेव्हलपर यांसारख्या भागीदारांनादेखील मदत करेल. तुमचे अतिरिक्त वेब आणि अॅप अॅक्टिव्हिटी सेटिंग सुरू केलेले असल्यास, हा डेटा तुमच्या Google खाते वर सेव्ह केला जाऊ शकतो.</translation> @@ -3590,7 +3590,7 @@ <translation id="5225324770654022472">अॅप्स शॉर्टकट दर्शवा</translation> <translation id="52254442782792731">सध्याचे दृश्यमानता सेटिंग अद्याप सेट केलेले नाही</translation> <translation id="5227679487546032910">डीफॉल्ट हिरवट निळा अवतार</translation> -<translation id="5228579091201413441">संकालन सुरू करा</translation> +<translation id="5228579091201413441">सिंक सुरू करा</translation> <translation id="5229189185761556138">इनपुट पद्धती व्यवस्थापित करा</translation> <translation id="5230516054153933099">विंडो</translation> <translation id="5233019165164992427">NaCl डीबग पोर्ट</translation> @@ -3598,7 +3598,7 @@ <translation id="5233638681132016545">नवीन टॅब</translation> <translation id="5233736638227740678">&पेस्ट करा</translation> <translation id="5234764350956374838">डिसमिस करा</translation> -<translation id="5235050375939235066">ॲप अनइंस्टॉल करायचे?</translation> +<translation id="5235050375939235066">अॅप अनइंस्टॉल करायचे?</translation> <translation id="523505283826916779">ॲक्सेसिबिलिटी सेटिंग्ज</translation> <translation id="5235750401727657667">एखादा नवीन टॅब उघडताना दिसत असलेले पेज बदला</translation> <translation id="5238278114306905396">अॅप "<ph name="EXTENSION_NAME" />" स्वयंचलितपणे काढण्यात आला.</translation> @@ -3897,7 +3897,7 @@ <translation id="5581972110672966454">डिव्हाइसला डोमेनशी जोडता आले नाही. कृपया पुन्हा प्रयत्न करा किंवा तुमच्या डिव्हाइसच्या मालकाशी अथवा अॅडमिनिस्ट्रेटरशी संपर्क साधा. एरर कोड: <ph name="ERROR_CODE" />.</translation> <translation id="5582839680698949063">मुख्य मेनू</translation> <translation id="5583640892426849032">Backspace</translation> -<translation id="5584088138253955452">वापरकर्तानाव सेव्ह करायचे?</translation> +<translation id="5584088138253955452">वापरकर्ता नाव सेव्ह करायचे?</translation> <translation id="5584915726528712820"><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" /> @@ -4027,7 +4027,7 @@ <translation id="5734362860645681824">संप्रेषणे</translation> <translation id="5734697361979786483">फाइल शेअर जोडा</translation> <translation id="5736544606961847675">{COUNT,plural, =1{एक व्हिडिओ}other{# व्हिडिओ}}</translation> -<translation id="5736796278325406685">कृपया एक वैध वापरकर्तानाव एंटर करा</translation> +<translation id="5736796278325406685">कृपया एक वैध वापरकर्ता नाव एंटर करा</translation> <translation id="5739017626473506901"><ph name="USER_NAME" /> यांना शाळेच्या खात्यामध्ये जोडण्यात मदत करण्यासाठी साइन इन करा</translation> <translation id="5739235828260127894">पडताळणीसाठी वाट पाहत आहे. <ph name="LINK_BEGIN" />अधिक जाणून घ्या.<ph name="LINK_END" /></translation> <translation id="5739458112391494395">खूप मोठा</translation> @@ -4150,7 +4150,7 @@ <translation id="5870155679953074650">हार्ड फॉल्ट</translation> <translation id="5876576639916258720">रन होत आहे...</translation> <translation id="5876851302954717356">उजवीकडील नवीन टॅब</translation> -<translation id="5877064549588274448">चॅनेल बदलले. बदल लागू करण्यासाठी तुमचे डिव्हाइस रीस्टार्ट करा.</translation> +<translation id="5877064549588274448">चॅनल बदलले. बदल लागू करण्यासाठी तुमचे डिव्हाइस रीस्टार्ट करा.</translation> <translation id="5877584842898320529">निवडलेले प्रिंटर उपलब्ध नाही किंवा योग्यरीत्या इंस्टॉल केलेले नाही. <ph name="BR" /> तुमचा प्रिंटर तपासा किंवा दुसरा प्रिंटर निवडून पहा.</translation> <translation id="5882919346125742463">ज्ञात नेटवर्क</translation> <translation id="5883464818836130222">३१ डिसेंबरनंतर क्लाउड प्रिंटिंगला सपोर्ट केला जाणार नाही. तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा.</translation> @@ -4424,7 +4424,7 @@ <translation id="6207937957461833379">देश/प्रदेश</translation> <translation id="6208521041562685716">मोबाइल डेटा ॲक्टिव्हेट करत आहे</translation> <translation id="6209838773933913227">घटक अपडेट होत आहे</translation> -<translation id="6209908325007204267">तुमच्या डिव्हाइसमध्ये Chrome एंटरप्राइझ अपग्रेड याचा समावेश आहे पण तुमचे वापरकर्तानाव एंटरप्राइझ खात्याशी संबंधित नाही. कृपया पर्यायी डिव्हाइसवरून g.co/ChromeEnterpriseAccount ला भेट देऊन एक एंटरप्राइझ खाते तयार करा.</translation> +<translation id="6209908325007204267">तुमच्या डिव्हाइसमध्ये Chrome एंटरप्राइझ अपग्रेड याचा समावेश आहे पण तुमचे वापरकर्ता नाव एंटरप्राइझ खात्याशी संबंधित नाही. कृपया पर्यायी डिव्हाइसवरून g.co/ChromeEnterpriseAccount ला भेट देऊन एक एंटरप्राइझ खाते तयार करा.</translation> <translation id="6211495400987308581"><ph name="PROFILE_NAME" />: सिंक काम करत नाही</translation> <translation id="6212039847102026977">प्रगत नेटवर्क वैशिष्ट्ये दर्शवा</translation> <translation id="6212168817037875041">डिस्प्ले बंद करा</translation> @@ -4596,7 +4596,7 @@ <translation id="6406708970972405507">सेटिंग्ज - <ph name="SECTION_TITLE" /></translation> <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="6410328738210026208">चॅनल बदला आणि Powerwash करा</translation> <translation id="6410390304316730527">तुम्हाला फसवून द्वेषयुक्त सॉफ्टवेअर इंस्टॉल करणे किंवा पासवर्ड, फोन नंबर किंवा क्रेडिट कार्डसारखी वैयक्तिक माहिती उघड करणे यांसारखी एखादी धोकादायक गोष्ट करायला लावणार्या हल्लेखोरांपासून सुरक्षित ब्राउझिंग तुमचे संरक्षण करते. तुम्ही ते बंद केल्यास, अनोळखी किंवा अप्रतिष्ठित साइट ब्राउझ करताना सावध रहा.</translation> <translation id="6410668567036790476">शोध इंजिन जोडा</translation> <translation id="641081527798843608">जुळणारा विषय</translation> @@ -4736,7 +4736,7 @@ <translation id="657402800789773160">हे पृष्ठ &रीलोड करा</translation> <translation id="6577284282025554716">डाउनलोड रद्द केले: <ph name="FILE_NAME" /></translation> <translation id="657866106756413002">नेटवर्क हेल्थ स्नॅपशॉट</translation> -<translation id="6578664922716508575">तुमचे Google वापरकर्तानाव आणि पासवर्डसह सिंक केलेले पासवर्ड एंक्रिप्शन करा</translation> +<translation id="6578664922716508575">तुमचे Google वापरकर्ता नाव आणि पासवर्डसह सिंक केलेले पासवर्ड एंक्रिप्शन करा</translation> <translation id="6579705087617859690"><ph name="WINDOW_TITLE" /> - डेस्कटॉप आशय शेअर केला</translation> <translation id="6580203076670148210">स्कॅनिंगची गती</translation> <translation id="6582080224869403177">तुमची सुरक्षितता अपग्रेड करण्यासाठी <ph name="DEVICE_TYPE" /> रीसेट करा.</translation> @@ -4998,7 +4998,7 @@ <translation id="6902336033320348843">विभाग सपोर्ट करत नाही: <ph name="ERROR_LINE" /></translation> <translation id="6902837902700739466">डोमेनशी डिव्हाइस जोडा</translation> <translation id="6903590427234129279">सर्व (<ph name="URL_COUNT" />) उघडा</translation> -<translation id="6903907808598579934">संकालन सुरू करा</translation> +<translation id="6903907808598579934">सिंक सुरू करा</translation> <translation id="6904344821472985372">फाइल ॲक्सेस मागे घ्या</translation> <translation id="6904655473976120856">बाहेर पडण्यासाठी अॅप बटण दाबा</translation> <translation id="6909422577741440844">या डिव्हाइसकडून मिळवायचे आहे का?</translation> @@ -5245,7 +5245,7 @@ <translation id="7189451821249468368">तुमच्याकडे या डिव्हाइसची नोंदणी करण्यासाठी पुरेसे अपग्रेड नाहीत. कृपया आणखी खरेदी करण्यासाठी विक्रीशी विभागाशी संपर्क साधा. हा मेसेज एररमुळे दिसत आहे असे वाटत असल्यास, कृपया सपोर्टशी संपर्क साधा.</translation> <translation id="7189965711416741966">फिंगरप्रिंट जोडले.</translation> <translation id="7191159667348037">अज्ञात मुद्रक (USB)</translation> -<translation id="7193051357671784796">हे ॲप तुमच्या संस्थेमध्ये जोडले गेले आहे. इंस्टॉल करणे पूर्ण करण्यासाठी ॲप रीस्टार्ट करा.</translation> +<translation id="7193051357671784796">हे अॅप तुमच्या संस्थेमध्ये जोडले गेले आहे. इंस्टॉल करणे पूर्ण करण्यासाठी अॅप रीस्टार्ट करा.</translation> <translation id="7193374945610105795"><ph name="ORIGIN" /> चे कोणतेही पासवर्ड सेव्ह केलेले नाहीत</translation> <translation id="7196020411877309443">मी हे का पहात आहे?</translation> <translation id="7196913789568937443">Google ड्राइव्ह मध्ये बॅकअप घ्या. तुमचा डेटा कधीही सहजपणे रिस्टोअर करा किंवा डिव्हाइस बदला. तुमच्या बॅकअपमध्ये ॲप डेटाचा समावेश असतो. तुमचे बॅकअप Google वर अपलोड केले आहेत आणि ते तुमचा Google खाते पासवर्ड वापरून एंक्रिप्ट केले आहेत. <ph name="BEGIN_LINK1" />अधिक जाणून घ्या<ph name="END_LINK1" /></translation> @@ -5304,7 +5304,7 @@ <translation id="7257173066616499747">वाय-फाय नेटवर्क</translation> <translation id="725758059478686223">प्रिंटिंग सेवा</translation> <translation id="7257666756905341374">तुम्ही कॉपी आणि पेस्ट करता तो डेटा वाचा</translation> -<translation id="7258225044283673131">ॲप्लिकेशन प्रतिसाद देत नाही. ॲप बंद करण्यासाठी "सक्तीने बंद करा" निवडा.</translation> +<translation id="7258225044283673131">ॲप्लिकेशन प्रतिसाद देत नाही. अॅप बंद करण्यासाठी "सक्तीने बंद करा" निवडा.</translation> <translation id="7258697411818564379">तुमचा पिन जोडला आहे</translation> <translation id="7262004276116528033">ही साइन-इन सेवा <ph name="SAML_DOMAIN" /> द्वारे होस्ट केली जाते</translation> <translation id="7267044199012331848">व्हर्च्युअल मशीन इंस्टॉल करता आले नाही. कृपया पुन्हा प्रयत्न करा किंवा तुमच्या अॅडमिनिस्ट्रेटरशी संपर्क साधा. एरर कोड: <ph name="ERROR_CODE" />.</translation> @@ -5329,7 +5329,7 @@ <translation id="7295614427631867477">लक्षात ठेवा की, Android, Play आणि सहयोगी ॲप्स त्यांच्या स्वतःच्या डेटा संग्रह आणि वापर धोरणे याद्वारे व्यवस्थापित केले जातात.</translation> <translation id="729583233778673644">AES आणि RC4 एंक्रिप्शनला अनुमती द्या. हा पर्याय वापरल्याने तुमचा धोका वाढतो, कारण RC4 सायफर असुरक्षित आहेत.</translation> <translation id="7296774163727375165"><ph name="DOMAIN" /> अटी</translation> -<translation id="7297443947353982503">वापरकर्तानाव/पासवर्ड चुकीचा किंवा EAP-ऑथेंटिकेशन अयशस्वी</translation> +<translation id="7297443947353982503">वापरकर्ता नाव/पासवर्ड चुकीचा किंवा EAP-ऑथेंटिकेशन अयशस्वी</translation> <translation id="729761647156315797">तुमची भाषा आणि कीबोर्ड निवडा</translation> <translation id="7297726121602187087">गडद हिरवा</translation> <translation id="7299337219131431707">अतिथी ब्राउझिंग सुरू करा</translation> @@ -5530,7 +5530,7 @@ <translation id="7531310913436731628">Mac सिस्टम प्राधान्ये मध्ये स्थान बंद केले आहे</translation> <translation id="7531771599742723865">डिव्हाइस वापरात आहे</translation> <translation id="7531779363494549572">सेटिंग्ज > ॲप्स आणि सूचना > सूचना वर जा.</translation> -<translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> प्रतिसाद देत नाही. ॲप बंद करण्यासाठी "सक्तीने बंद करा" निवडा.</translation> +<translation id="7532009420053991888"><ph name="LINUX_APP_NAME" /> प्रतिसाद देत नाही. अॅप बंद करण्यासाठी "सक्तीने बंद करा" निवडा.</translation> <translation id="7537451260744431038">तुमच्या ब्राउझिंग अनुभवात सुधारणा करण्यासाठी, उदाहरणार्थ, तुम्हाला साइन इन केलेले ठेवण्यासाठी किंवा तुमच्या शॉपिंग कार्टमधील आयटम लक्षात ठेवण्यासाठी साइट कुकी वापरू शकत नाहीत</translation> <translation id="7540972813190816353">अपडेट तपासताना एक एरर आली: <ph name="ERROR" /></translation> <translation id="7541773865713908457"><ph name="APP_NAME" /> ॲपसोबत <ph name="ACTION_NAME" /></translation> @@ -5581,7 +5581,7 @@ <translation id="7602079150116086782">अन्य डिव्हाइसेसवरील कोणतेही टॅब नाहीत</translation> <translation id="7602173054665172958">प्रिंट व्यवस्थापन</translation> <translation id="7604942372593434070">तुमची ब्राउझिंग ॲक्टिव्हिटी ॲक्सेस करा</translation> -<translation id="7605594153474022051">संकालन कार्य करत नाही</translation> +<translation id="7605594153474022051">सिंक कार्य करत नाही</translation> <translation id="7606992457248886637">अधिकारी</translation> <translation id="7607002721634913082">विराम द्या</translation> <translation id="7608810328871051088">Android प्राधान्ये</translation> @@ -5657,7 +5657,7 @@ <translation id="7683593009096723900">{COUNT,plural, =0{Open all in incognito window}=1{गुप्त विंडोमध्ये उघडा}other{सर्व ({COUNT}) गुप्त विंडोमध्ये उघडा}}</translation> <translation id="7684212569183643648">तुमच्या ॲडमिनिस्ट्रेटरद्वारे इंस्टॉल केले</translation> <translation id="7684559058815332124">कॅप्टिव्ह लॉग इन पेजला भेट द्या</translation> -<translation id="7684718995427157417">तुमची ॲप्स तयार करण्यासाठी आणि त्यांची चाचणी करण्यासाठी, Android डीबग ब्रिज (ADB) सुरू करा. लक्षात ठेवा की, ही क्रिया Google ने पडताळणी न केलेली Android ॲप्स इंस्टॉल करण्याची अनुमती देते आणि यासाठी फॅक्टरी रीसेट बंद करण्याची आवश्यकता आहे.</translation> +<translation id="7684718995427157417">तुमची अॅप्स तयार करण्यासाठी आणि त्यांची चाचणी करण्यासाठी, Android डीबग ब्रिज (ADB) सुरू करा. लक्षात ठेवा की, ही क्रिया Google ने पडताळणी न केलेली Android अॅप्स इंस्टॉल करण्याची अनुमती देते आणि यासाठी फॅक्टरी रीसेट बंद करण्याची आवश्यकता आहे.</translation> <translation id="7685049629764448582">JavaScript मेमरी</translation> <translation id="7685087414635069102">पिन आवश्यक</translation> <translation id="768549422429443215">भाषा जोडा किंवा सूचीचा क्रम पुन्हा लावा.</translation> @@ -5699,7 +5699,7 @@ <translation id="7724603315864178912">कट करा</translation> <translation id="7728465250249629478">डिव्हाइसची भाषा बदला</translation> <translation id="7728570244950051353">स्लीप मोडमधून स्क्रीन लॉक करा</translation> -<translation id="7728668285692163452">चॅनेल बदल नंतर लागू होईल</translation> +<translation id="7728668285692163452">चॅनल बदल नंतर लागू होईल</translation> <translation id="7730449930968088409">तुमच्या स्क्रीनचा आशय कॅप्चर करा</translation> <translation id="7730683939467795481">हे पेज "<ph name="EXTENSION_NAME" />" एक्स्टेंशनने बदलले.</translation> <translation id="7732111077498238432">नेटवर्क धोरण-नियंत्रित आहे</translation> @@ -5992,7 +5992,7 @@ <translation id="8042142357103597104">मजकुराची अपारदर्शकता</translation> <translation id="8044262338717486897"><ph name="LINUX_APP_NAME" /> प्रतिसाद देत नाही.</translation> <translation id="8044899503464538266">धीमी</translation> -<translation id="8045253504249021590">Google डॅशबोर्ड द्वारे संकालन थांबविले गेले आहे.</translation> +<translation id="8045253504249021590">Google डॅशबोर्ड द्वारे सिंक थांबविले गेले आहे.</translation> <translation id="8045923671629973368">ॲप्लिकेशन आयडी किंवा वेबस्टोअर URL टाका</translation> <translation id="8047242494569930800">Google खाते वर हलवा</translation> <translation id="804786196054284061">अंतिम वापरकर्ता परवाना करारनामा</translation> @@ -6246,7 +6246,7 @@ <translation id="8337047789441383384">तुम्ही आधीच या सिक्युरिटी कीची नोंदणी केली आहे. तुम्हाला याची पुन्हा नोंदणी करण्याची गरज नाही.</translation> <translation id="8338952601723052325">डेव्हलपर वेबसाइट</translation> <translation id="8339059274628563283"><ph name="SITE" /> स्थानिकरित्या संचयित केलेला डेटा</translation> -<translation id="833986336429795709">ही लिंक उघडण्यासाठी, ॲप निवडा</translation> +<translation id="833986336429795709">ही लिंक उघडण्यासाठी, अॅप निवडा</translation> <translation id="8342861492835240085">संकलन निवडा</translation> <translation id="834290227245955730">चुकीचे पिन. बाकी असलेले प्रयत्न: <ph name="RETRIES" />.</translation> <translation id="8347227221149377169">प्रिंट कार्ये</translation> @@ -6378,7 +6378,7 @@ <translation id="8498395510292172881">Chrome मध्ये वाचन सुरू ठेवा</translation> <translation id="8500234928660943538">चुकीची PUK. बाकी असलेले प्रयत्न: <ph name="RETRIES" />.</translation> <translation id="8502536196501630039">Google Play वरचे ॲप्स वापरण्यासाठी, तुम्ही प्रथम तुमचे ॲप्स रिस्टोअर करणे आवश्यक आहे. काही डेटा गमावला असू शकतो.</translation> -<translation id="8503813439785031346">वापरकर्तानाव</translation> +<translation id="8503813439785031346">वापरकर्ता नाव</translation> <translation id="8504640708321980506">डेटा</translation> <translation id="8507227974644337342">स्क्रीन रिझोल्युशन</translation> <translation id="850875081535031620">कोणतेही हानिकारक सॉफ्टवेअर आढळले नाही</translation> @@ -6474,7 +6474,7 @@ <translation id="8625663000550647058">मायक्रोफोन वापरण्याची अनुमती नाही</translation> <translation id="862727964348362408">निलंबित</translation> <translation id="862750493060684461">CSS कॅशे </translation> -<translation id="8627706565932943526">संकालन एरर</translation> +<translation id="8627706565932943526">सिंक एरर</translation> <translation id="8627795981664801467">केवळ सुरक्षित कनेक्शन</translation> <translation id="8630338733867813168">चार्ज होत असताना स्लीप मोड ऑन करा</translation> <translation id="8630903300770275248">पर्यवेक्षित वापरकर्ता इंपोर्ट करा</translation> @@ -6711,7 +6711,7 @@ <translation id="8871551568777368300">ॲडमिनिस्ट्रेटरने पिन केले</translation> <translation id="8871696467337989339">तुम्ही एक सपोर्ट नसलेले कमांड-लाइन फ्लॅग वापरत आहात: <ph name="BAD_FLAG" />. स्थिरता आणि सुरक्षा प्रभावित होईल.</translation> <translation id="8871974300055371298">आशय सेटिंग्ज</translation> -<translation id="8872155268274985541">अवैध कियोस्क बाह्य अपडेट मॅनिफेस्ट फाइल आढळली. कियोस्क ॲप अपडेट करण्यात अयशस्वी. कृपया USB स्टिक काढून टाका.</translation> +<translation id="8872155268274985541">अवैध कियोस्क बाह्य अपडेट मॅनिफेस्ट फाइल आढळली. कियोस्क अॅप अपडेट करण्यात अयशस्वी. कृपया USB स्टिक काढून टाका.</translation> <translation id="8872777911145321141">साइटला तुमची आभासी वास्तविकता डिव्हाइस आणि डेटा वापरायचा असेल तेव्हा विचारा (शिफारस केलेले)</translation> <translation id="8874184842967597500">कनेक्ट नाही</translation> <translation id="8875520811099717934">Linux अपग्रेड करा</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index 8b16bc6..67e8cd2 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -866,6 +866,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> ले ADB डिबग प्रक्रिया असक्षम पारेको छ। परिणामस्वरूप, अबको २४ घन्टामा तपाईंको <ph name="DEVICE_TYPE" /> रिसेट हुने छ। आफूले सुरक्षित राख्न चाहेका सबै फाइलहरू ब्याकअप गर्नुहोस्।</translation> <translation id="1977965994116744507">आफ्नो <ph name="DEVICE_TYPE" /> अनलक गर्न तपाईं फोनलाई अझ नजिक ल्याउनुहोस्।</translation> <translation id="1978006917103730774">भविष्यमा सफ्टवेयर र सुरक्षासम्बन्धी अद्यावधिकहरू स्वतः स्थापना गरिने छन्।</translation> +<translation id="1978057560491495741">ठेगाना हटाउनुहोस्</translation> <translation id="1979095679518582070">यो सुविधा निष्क्रिय पार्नुले प्रणालीको अद्यावधिक र सुरक्षा जस्ता अत्यावश्यक सेवाहरूलाई आवश्यक पर्ने जानकारी पठाउने यस यन्त्रको क्षमतालाई असर गर्दैन।</translation> <translation id="1979280758666859181">तपाइँले <ph name="PRODUCT_NAME" /> को पुरानो संस्करण भएको च्यानलमा परिवर्नत गर्दै हुनुहुन्छ। तपाइँ यन्त्रमा हालै स्थपित संस्करणसँग च्यानल संस्करण मेल खायो पछि च्यानल परिवर्तन लागू हुनेछ।</translation> <translation id="197989455406964291">KDC ले इन्क्रिप्सनको यो प्रकारलाई समर्थन गर्दैन</translation> @@ -1067,6 +1068,7 @@ <translation id="2224444042887712269">यो सेटिङ <ph name="OWNER_EMAIL" /> को हो</translation> <translation id="2224551243087462610">फोल्डर नाम सम्पादन गर्नुहोस्</translation> <translation id="2225864335125757863">आफ्नो खाता सुरक्षित राख्न यी पासवर्डहरू तुरुन्तै बदल्नुहोस्:</translation> +<translation id="2226204716217107988">अर्को प्रोफाइल प्रयोग गर्न थाल्ने हो?</translation> <translation id="2226449515541314767">MIDI यन्त्रहरूको पूरा नियन्त्रणको लागि यो साइट ब्लक गरिएको छ।</translation> <translation id="2226907662744526012">एक पटक PIN प्रविष्टि गरेपछि स्वतः अनलक हुने सुविधा सक्षम पार्नुहोस्</translation> <translation id="222704500187107962">तपाईं हालको इन्कग्निटो सत्रबाट बाहिरिएपछि यो अपवाद स्वतः हटाइने छ</translation> @@ -1136,6 +1138,7 @@ <translation id="2307462900900812319">नेटवर्क कन्फिगर गर्नुहोस्</translation> <translation id="230927227160767054">यस पृष्ठले एक सेवा सञ्चालनकर्ता स्थापना गर्न चाहन्छ।</translation> <translation id="2309620859903500144">यो साइटलाई तपाईंको चाल वा प्रकाशसम्बन्धी सेन्सरहरूको पहुँच राख्नबाट रोक लागाइएको छ।</translation> +<translation id="2312219318583366810">पेजको URL</translation> <translation id="2314165183524574721">हालको भिजिबिलिटी सेटिङ यस प्रकार छ: लुकाइएको</translation> <translation id="2314774579020744484">पृष्ठहरू अनुवाद गर्दा प्रयोग हुने भाषा</translation> <translation id="2315414688463285945">Linux का फाइलहरू कन्फिगर गर्ने क्रममा त्रुटि भयो। कृपया फेरि प्रयास गर्नुहोस्।</translation> @@ -2340,6 +2343,7 @@ <translation id="3713047097299026954">यो सुरक्षा साँचोमा साइन इन गर्न चाहिने कुनै पनि डेटा छैन</translation> <translation id="3714195043138862580">यो डेमो यन्त्रलाई प्रयोगबाट हटाइएको छ।</translation> <translation id="3714633008798122362">वेब पात्रो</translation> +<translation id="3715954932774762075">एकभन्दा बढी भाषामा उपलब्ध एप र वेबसाइटहरूले यो सूचीको प्रयोग गर्न मिल्ने पहिलो भाषा प्रयोग गर्ने छन्। यी प्राथमिकताहरू तपाईंको ब्राउजरका सेटिङसँग सिंक गरिन्छन्। <ph name="BEGIN_LINK_LEARN_MORE" />थप जान्नुहोस्<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">होमपेज</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">तपाईं र Google</translation> @@ -2500,6 +2504,7 @@ <translation id="3882165008614329320">क्यामेरा वा फाइलको विद्यमान भिडियो</translation> <translation id="3886446263141354045">यो साइटमाथि पहुँच राख्ने तपाईंको अनुरोध <ph name="NAME" /> लाई पठाइएको छ</translation> <translation id="3888550877729210209"><ph name="LOCK_SCREEN_APP_NAME" /> मार्फत टिपोट लिँदै</translation> +<translation id="3890064827463908288">Wi-Fi सिंक प्रयोग गर्न Chrome सिंक अन गर्नुहोस्</translation> <translation id="3892414795099177503">OpenVPN / L2TP थप्नुहोस्...</translation> <translation id="3893536212201235195">तपाईंको पहुँच सेटिङहरू पढेर परिवर्तन गर्नुहोस्</translation> <translation id="3893630138897523026">ChromeVox (बोली पृष्ठपोषण)</translation> @@ -3770,6 +3775,7 @@ <translation id="5449588825071916739">सबै ट्याबहरूलाई बुकमार्क गर्नुहोस्</translation> <translation id="5449716055534515760">सञ्झ्या&ल बन्द गर्नुहोस्</translation> <translation id="5452974209916053028">हालको इन्कोग्निटो सत्र: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">क्याप्सन बबल बायाँदेखि दायाँ <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% र माथिदेखि तल <ph name="POSITION_ON_SCREEN_FROM_TOP" />% सारियो</translation> <translation id="5454166040603940656"><ph name="PROVIDER" /> सँग</translation> <translation id="5457113250005438886">अवैध</translation> <translation id="5457459357461771897">तपाईंको कम्प्युटरबाट तस्बिरहरू, सङ्गीत, र अन्य मिडिया पहुँच गर्नुहोस् र हटाउनुहोस्</translation> @@ -3913,6 +3919,7 @@ <translation id="5602765853043467355">यो यन्त्रबाट पुस्तक चिन्ह, इतिहास, पासवर्ड र थप कुराहरू खाली गर्नुहोस्</translation> <translation id="5605623530403479164">अन्य खोज इन्धनहरू</translation> <translation id="5605758115928394442">यो व्यक्ति तपाईं नै हो भन्ने सुनिश्चित गर्न तपाईंको फोनमा एउटा सूचना पठाइयो।</translation> +<translation id="560834977503641186">Wi-Fi सिंकका बारेमा थप जान्नुहोस्</translation> <translation id="5608580678041221894">क्रप गर्ने क्षेत्रलाई समायोजन गर्न वा सार्न निम्न कुञ्जीहरूमा ट्याप गर्नुहोस्</translation> <translation id="5609231933459083978">एप अवैध जस्तो देखिन्छ।</translation> <translation id="5610038042047936818">क्यामेरा मोड प्रयोग गर्नुहोस्</translation> @@ -4103,6 +4110,7 @@ <translation id="5841270259333717135">इथरनेट कन्फिगर गर्नुहोस्</translation> <translation id="5842497610951477805">ब्लुटुथ सक्षम</translation> <translation id="5843706793424741864">फरेनहाइट</translation> +<translation id="584451707753263735">लाइभ क्याप्सन देखिइरहेको छ, फोकस सारेर अर्को डायलगमा लैजान F6 थिच्नुहोस्</translation> <translation id="5844574845205796324">अन्वेषण गरिनु पर्ने नयाँ सामग्री सिफारिस गरियोस्</translation> <translation id="5846200638699387931">सम्बन्धको विन्याससम्बन्धी त्रुटि: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">एप र तिनका अद्यावधिकहरू स्थापना गर्नुहोस्। जारी राखेर, तपाईं यस यन्त्रले Google, तपाईंका सेवा प्रदायक र तपाईंको यन्त्रका उत्पादकहरूका एप र तिनका अद्यावधिकहरू स्वत: डाउनलोड गरी स्थापना गर्न पनि सक्छ तथा यो काममा सम्भवतः मोबाइल इन्टरनेटको प्रयोग पनि हुन सक्छ भन्ने कुरामा सहमति जनाउनुहुन्छ। यीमध्ये केही एपहरूले एपभित्र किनमेल गर्ने सुविधा प्रदान गर्न सक्छन्।</translation> @@ -5355,6 +5363,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> अब पूर्ण स्क्रीन छ।</translation> <translation id="7340650977506865820">साइटले तपाईंको स्क्रिन आदान प्रदान गर्दै छ</translation> <translation id="7341834142292923918">यो साइटमाथि पहुँच राख्न चाहन्छ</translation> +<translation id="7343372807593926528">कृपया प्रतिक्रिया पठाउनुअघि आफ्नो समस्या वर्णन गर्नुहोस्।</translation> <translation id="7345706641791090287">तपाईँको पासवर्ड पुष्टि गर्नुहोस्</translation> <translation id="7346909386216857016">ठिक छ, बुझेँ</translation> <translation id="7347452120014970266">यस कार्यले <ph name="ORIGIN_NAME" /> र यसमा इन्स्टल गरिएका एपहरूले भण्डारण गरेका सबै डेटा र कुकीहरू हटाउने छ</translation> @@ -5771,6 +5780,7 @@ <translation id="7819857487979277519">PSK (WPA वा RSN)</translation> <translation id="7819992334107904369">Chrome सिंक</translation> <translation id="782057141565633384">भिडियो ठेगानाको प्रतिलिपि बनाउनुहोस्</translation> +<translation id="7822187537422052256">तपाईंले यो ठेगाना हटाउन खोज्नुभएकै हो?</translation> <translation id="7824864914877854148">कुनै त्रुटि भएकाले ब्याकअप पूरा गर्न सकिएन</translation> <translation id="7825666486843191125">तपाईंको स्क्रिन अनलक हुँदा तपाईंको नजिकै रहेका सम्पर्क सूचीमा भएका सबै व्यक्तिहरू</translation> <translation id="782590969421016895">हालका पृष्ठहरू प्रयोग गर्नुहोस्</translation> @@ -6296,6 +6306,7 @@ <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />' सम्बन्धी खोजका परिणामहरू</translation> <translation id="8419368276599091549">तपाईंको <ph name="DEVICE_TYPE" /> मा स्वागत छ!</translation> <translation id="8420308167132684745">शब्दकोशका प्रविष्टिहरू सम्पादन गर्नुहोस्</translation> +<translation id="8421361468937925547">लाइभ क्याप्सन (अङ्ग्रेजी भाषामा मात्र)</translation> <translation id="8422787418163030046">ट्रे छैन</translation> <translation id="8425213833346101688">परिवर्तन गर्नुहोस्</translation> <translation id="8425492902634685834">कार्यपट्टीमा पिन गर्नुहोस्</translation> @@ -6324,6 +6335,7 @@ <translation id="8449036207308062757">भण्डारणको व्यवस्थापन गर्नुहोस्</translation> <translation id="8452135315243592079">SIM कार्ड उपलब्ध छैन</translation> <translation id="8455026683977728932">ADB चित्रण सक्षम पार्न सकिएन</translation> +<translation id="8456398879271637452">लाइभ क्याप्सन देखिइरहेको छ, फोकस सारेर अर्को डायलगमा लैजान Ctrl + Back वा Ctrl + Forward थिच्नुहोस्</translation> <translation id="845702320058262034">जडान गर्न सकिएन। आफ्नो फोनको ब्लुटुथ सक्रिय गरिएको कुरा सुनिश्चित गर्नुहोस्।</translation> <translation id="8457451314607652708">बुकमार्कहरू आयात गर्नुहोस्</translation> <translation id="8458627787104127436">सबै (<ph name="URL_COUNT" />) URL नयाँ विन्डोमा खोल्नुहोस्</translation> @@ -6834,6 +6846,7 @@ <translation id="9027459031423301635">लिङ्कलाई नयाँ &ट्याबमा खोल्नुहोस्</translation> <translation id="9030515284705930323">तपाईँको संगठनले तपाईँको खाताको लागि Google Play स्टोरलाई सक्रिय गरेको छैन। थप जानकारीका लागि आफ्नो प्रशासकलाई सम्पर्क गर्नुहोस्।</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269"><ph name="PLUGIN_NAME" /> अब उप्रान्त प्रयोग गर्न मिल्दैन</translation> <translation id="9031549947500880805">Google ड्राइभमा ब्याकअप गर्नुहोस् जुनसुकै बेला सजिलैसँग आफ्नो डेटा पुनर्स्थापना गर्नुहोस् वा यन्त्र बदल्नुहोस्। तपाईंको ब्याकअपमा एपको डेटा समावेश हुन्छ।</translation> <translation id="9033765790910064284">जे भए पनि जारी राख्नुहोस्</translation> <translation id="9033857511263905942">&टाँस्नुहोस्</translation> @@ -6842,6 +6855,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{तपाईं अब एक पटक प्रयास गर्न सक्नुहुन्छ।}other{तपाईं अब # पटक प्रयास गर्न सक्नुहुन्छ।}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571"><ph name="ORIGIN" /> को पासवर्ड अद्यावधिक गर्ने हो?</translation> +<translation id="9041049756004505730">लाइभ क्याप्सन देखिइरहेको छ, फोकस सारेर अर्को डायलगमा लैजान ⌘ + Option + अप एरो वा डाउन एरो थिच्नुहोस्</translation> <translation id="9041692268811217999">तपाईंको प्रशासकले तपाईंको यन्त्रमा रहेका स्थानीय फाइलहरूमाथिको पहुँचलाई असक्षम पार्नुभएको छ</translation> <translation id="904224458472510106">यो कारबाही अन्डू गर्न सकिँदैन</translation> <translation id="9042893549633094279">गोपनीयता र सुरक्षा</translation> @@ -6880,6 +6894,7 @@ <translation id="9088446193279799727">Linux कन्फिगर गर्न सकिएन। इन्टरनेट जोड्नुहोस् र फेरि प्रयास गर्नुहोस्।</translation> <translation id="9088917181875854783">कृपया यो पासकुञ्जी "<ph name="DEVICE_NAME" />" मा देखाइएको छ भनेर पुष्टि गर्नुहोस्:</translation> <translation id="9089416786594320554">आगत विधिहरू</translation> +<translation id="909108997331068008"><ph name="EXISTING_USER" /> को प्रोफाइल <ph name="NEW_USER" /> मा साइन इन गरिसकिएको छ</translation> <translation id="9093429538970210897">अपग्रेड गर्ने कार्य पूरा हुन नसकेका खण्डमा फाइलहरू नगुमुन् भन्नाका खातिर अपग्रेड गर्नुअघि फाइलहरू ब्याकअप गर्नुहोस्। तपाईंले अपग्रेड सुरु गर्नुभयो भने Linux (बिटा) बन्द हुने छ। कृपया सुरु गर्नुअघि खोलिएका फाइलहरू सुरक्षित गर्नुहोस्।</translation> <translation id="9094033019050270033">पासवर्ड अपडेट गर्नुहोस्</translation> <translation id="9094038138851891550">प्रयोगकर्ताको नाम अमान्य छ</translation> @@ -7053,5 +7068,6 @@ <translation id="994289308992179865">&लुप</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">सुरक्षित जडान स्थापना गर्दै...</translation> +<translation id="99731366405731005">Wi-Fi सिंक प्रयोग गर्न <ph name="LINK1_BEGIN" />Chrome Sync<ph name="LINK1_END" /> अन गर्नुहोस्। <ph name="LINK2_BEGIN" />थप जान्नुहोस्<ph name="LINK2_END" /></translation> <translation id="998747458861718449">निरीक्षण गर्नुहोस्</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index bb7eb9e..a947b22b2 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -2511,7 +2511,7 @@ <translation id="3882165008614329320">Bestaande video van camera of uit bestand</translation> <translation id="3886446263141354045">Je verzoek voor toegang tot deze website is verzonden naar <ph name="NAME" /></translation> <translation id="3888550877729210209">Notities maken met <ph name="LOCK_SCREEN_APP_NAME" /></translation> -<translation id="3890064827463908288">Chrome-synchronisatie aanzetten om wifi-synchronisatie te gebruiken</translation> +<translation id="3890064827463908288">Chrome-synchronisatie inschakelen om wifi-synchronisatie te gebruiken</translation> <translation id="3892414795099177503">OpenVPN/L2TP toevoegen...</translation> <translation id="3893536212201235195">Je toegankelijkheidsinstellingen lezen en wijzigen</translation> <translation id="3893630138897523026">ChromeVox (gesproken feedback)</translation> @@ -6866,7 +6866,7 @@ <translation id="9027459031423301635">Link openen op nieuw &tabblad</translation> <translation id="9030515284705930323">Je organisatie heeft de Google Play Store niet ingeschakeld voor jouw account. Neem contact op met je beheerder voor meer informatie.</translation> <translation id="9030785788945687215">Gmail</translation> -<translation id="9030855135435061269">'<ph name="PLUGIN_NAME" />' wordt niet meer ondersteund</translation> +<translation id="9030855135435061269"><ph name="PLUGIN_NAME" /> wordt niet meer ondersteund</translation> <translation id="9031549947500880805">Maak een back-up op Google Drive. Zet je gegevens eenvoudig terug of schakel wanneer je wilt tussen apparaten. De back-up bevat app-gegevens.</translation> <translation id="9033765790910064284">Toch doorgaan</translation> <translation id="9033857511263905942">&Plakken</translation> @@ -7088,6 +7088,6 @@ <translation id="994289308992179865">&Herhalen</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Beveiligde verbinding tot stand brengen...</translation> -<translation id="99731366405731005">Zet <ph name="LINK1_BEGIN" />Chrome-synchronisatie<ph name="LINK1_END" /> aan om wifi-synchronisatie te gebruiken. <ph name="LINK2_BEGIN" />Meer informatie<ph name="LINK2_END" /></translation> +<translation id="99731366405731005">Schakel <ph name="LINK1_BEGIN" />Chrome-synchronisatie<ph name="LINK1_END" /> in om wifi-synchronisatie te gebruiken. <ph name="LINK2_BEGIN" />Meer informatie<ph name="LINK2_END" /></translation> <translation id="998747458861718449">I&nspecteren</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index a157e63..57b3aaa 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -3781,7 +3781,7 @@ <translation id="5449588825071916739">Angi bokmerker for alle faner</translation> <translation id="5449716055534515760">Lukk vin&du</translation> <translation id="5452974209916053028">Gjeldende inkognitoøkt: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> -<translation id="5454005855577728171">Flyttet tekstboblen til <ph name="POSITION_ON_SCREEN_FROM_LEFT" /> % fra venstre og <ph name="POSITION_ON_SCREEN_FROM_TOP" />% fra toppen</translation> +<translation id="5454005855577728171">Flyttet tekstboblen til <ph name="POSITION_ON_SCREEN_FROM_LEFT" /> % fra venstre og <ph name="POSITION_ON_SCREEN_FROM_TOP" /> % fra toppen</translation> <translation id="5454166040603940656">med <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Ugyldig</translation> <translation id="5457459357461771897">lese og slette bilder, musikk og andre medier fra datamaskinen din</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb index 7044d4a..d32c7a06 100644 --- a/chrome/app/resources/generated_resources_or.xtb +++ b/chrome/app/resources/generated_resources_or.xtb
@@ -922,6 +922,7 @@ <translation id="204914487372604757">ସର୍ଟକଟ୍ ତିଆରି କରନ୍ତୁ</translation> <translation id="2050339315714019657">ପୋଟ୍ରେଟ୍</translation> <translation id="2053312383184521053">ନିଷ୍କ୍ରିୟ ସ୍ଥିତିରେ ଥିବା ଡାଟା</translation> +<translation id="2054665754582400095">ଆପଣଙ୍କ ଉପସ୍ଥିତି</translation> <translation id="2055585478631012616">ଖୋଲାଥିବା ଟାବ୍ଗୁଡ଼ିକ ସମେତ ଆପଣ ଏହି ସାଇଟ୍ଗୁଡ଼ିକରୁ ସାଇନ୍ ଆଉଟ୍ ହୋଇଯିବେ।</translation> <translation id="205560151218727633">Google ଆସିଷ୍ଟାଣ୍ଟ ଲୋଗୋ</translation> <translation id="2058456167109518507">ଡିଭାଇସ୍ ଚିହ୍ନଟ କରାଯାଇଛି</translation> @@ -1208,6 +1209,7 @@ <translation id="2387052489799050037">ମୂଳ ସ୍କ୍ରିନକୁ ଯାଆନ୍ତୁ</translation> <translation id="2387458720915042159">ପ୍ରକ୍ସି ସଂଯୋଗ ପ୍ରକାର</translation> <translation id="2390347491606624519">ପ୍ରକ୍ସି ସହିତ ସଂଯୋଗ କରାଯାଇପାରିଲା ନାହିଁ, ଦୟାକରି ପୁଣି ସାଇନ୍ ଇନ୍ କରନ୍ତୁ</translation> +<translation id="2390782873446084770">Wi-Fi ସିଙ୍କ୍</translation> <translation id="2391082728065870591">ମତାମତ ରିପୋର୍ଟ ପଠାନ୍ତୁ</translation> <translation id="2391419135980381625">ସାଧାରଣ ଫଣ୍ଟ</translation> <translation id="2392163307141705938"><ph name="IDS_SHORT_PRODUCT_NAME" /> ପାଇଁ ଆପଣଙ୍କ ବାପାମା ସେଟ୍ କରିଥିବା ସମୟ ସୀମାରେ ଆପଣ ପହଞ୍ଚି ଯାଇଛନ୍ତି।</translation> @@ -1863,6 +1865,7 @@ <translation id="3157931365184549694">ପୁନଃସଂରକ୍ଷଣ କରନ୍ତୁ</translation> <translation id="3158033540161634471">ଆପଣଙ୍କର ଟିପଚିହ୍ନ ସେଟ୍ ଅପ୍ କରନ୍ତୁ</translation> <translation id="3159493096109238499">ବେଜ୍</translation> +<translation id="3159978855457658359">ଡିଭାଇସର ନାମ ଏଡିଟ୍ କରନ୍ତୁ</translation> <translation id="3160842278951476457"><ph name="ISSUED_BY" /> [<ph name="ISSUED_TO" />] (ହାର୍ଡୱେୟାର-ସମର୍ଥିତ)</translation> <translation id="3161522574479303604">ସମସ୍ତ ଭାଷାଗୁଡ଼ିକ</translation> <translation id="3162853326462195145">ସ୍କୁଲ୍ ଆକାଉଣ୍ଟ</translation> @@ -2440,7 +2443,7 @@ <translation id="3822559385185038546">ଏହି ପ୍ରୋକ୍ସି ଆପଣଙ୍କର ବ୍ୟବସ୍ଥାପକଙ୍କ ଦ୍ୱାରା ଲାଗୁ କରାଯାଇଛି।</translation> <translation id="3823310065043511710">Linux ପାଇଁ ଅତିକମରେ <ph name="INSTALL_SIZE" />ର ସ୍ଥାନ ସୁପାରିଶ କରାଯାଇଛି।</translation> <translation id="3824621460022590830">ଡିଭାଇସ୍ ପଞ୍ଜିକରଣ ଟୋକନ୍ ଅବୈଧ ଅଟେ। ଦୟାକରି ଆପଣଙ୍କ ଡିଭାଇସର ମାଲିକ କିମ୍ବା ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କୁ ଯୋଗାଯୋଗ କରନ୍ତୁ। ତ୍ରୁଟି କୋଡ୍: <ph name="ERROR_CODE" />।</translation> -<translation id="3826071569074535339">ମୋସନ୍ ସେନ୍ସରଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିବାକୁ ଅନୁମତି ଦିଆଯାଇନାହିଁ</translation> +<translation id="3826071569074535339">ମୋସନ୍ ସେନ୍ସରଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିବାକୁ ଅନୁମତି ଦିଆଯାଇଛି</translation> <translation id="3826440694796503677">ଆପଣଙ୍କର ଆଡ୍ମିନିଷ୍ଟ୍ରେଟର୍ ଅଧିକ Google ଆକାଉଣ୍ଟ ଯୋଗ କରିବାକୁ ଅକ୍ଷମ କରିଛନ୍ତି</translation> <translation id="3827306204503227641">unsandboxed ପ୍ଲଗ୍ଇନ୍ସକୁ ଅନୁମତି ଦେବା ଜାରି ରଖନ୍ତୁ</translation> <translation id="3827774300009121996">&ପୂର୍ଣ୍ଣ ସ୍କ୍ରିନ୍</translation> @@ -3222,6 +3225,7 @@ <translation id="4761104368405085019">ଆପଣଙ୍କର ମାଇକ୍ରୋଫୋନ୍ ବ୍ୟବହାର କରନ୍ତୁ</translation> <translation id="4762718786438001384">ଡିଭାଇସ୍ ଡିସ୍କ୍ ସ୍ଥାନ ଅତ୍ୟନ୍ତ କମ୍</translation> <translation id="4763408175235639573">ଯେତେବେଳେ ଆପଣ ଏହି ପୃଷ୍ଠା ଦେଖିଥିଲେ, ସେତେବେଳେ ନିମ୍ନରେ ଦିଆଯାଇଥିବା କୁକୀଗୁଡ଼ିକ ସେଟ୍ କରାଯାଇଥିଲା</translation> +<translation id="4764368918650455114">ଉଭୟ ଡିଭାଇସକୁ ଅନଲକ୍ କରାଯାଇଛି, ସେଗୁଡ଼ିକ ପାଖାପାଖି ରହିଛି ଏବଂ ବ୍ଲୁଟୁଥ୍ ଚାଲୁ ଅଛି ବୋଲି ସୁନିଶ୍ଚିତ କରନ୍ତୁ। ଯଦି ଆପଣ ଏକ Chromebook ସହ ସେୟାର୍ କରୁଛନ୍ତି, ତେବେ ସେଥିରେ Nearby Share ଚାଲୁ କରାଯାଇଛି ବୋଲି ସୁନିଶ୍ଚିତ କରନ୍ତୁ (ସମୟ ଚୟନ କରି ସ୍ଥିତି କ୍ଷେତ୍ର ଖୋଲନ୍ତୁ, ତା'ପରେ Nearby Share ଚୟନ କରନ୍ତୁ)। <ph name="LINK_BEGIN" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="LINK_END" /></translation> <translation id="4765582662863429759">ଆପଣଙ୍କର ଫୋନ୍ରୁ Chromebookକୁ ଟେକ୍ସଟ୍ ପ୍ରତିସାରଣ କରିବାକୁ Androidର ମେସେଜ୍ଗୁଡ଼ିକୁ ଅନୁମତି ଦିଏ।</translation> <translation id="476598255842811483">ଆପଣଙ୍କ ଡିଭାଇସରେ ଆପଣ Nearby Share ଚାଲୁ ନକରିବା ପର୍ଯ୍ୟନ୍ତ କେହି ଏହାକୁ ଦେଖିପାରିବେ ନାହିଁ</translation> <translation id="4768332406694066911">ଆପଣଙ୍କ ପାଖରେ ଏହି ସଂଗଠନଗୁଡ଼ିକରୁ ସାର୍ଟିଫିକେଟ୍ଗୁଡ଼ିକ ଅଛି ଯାହା ଆପଣଙ୍କୁ ଚିହ୍ନଟ କରିଥାଏ</translation> @@ -3384,6 +3388,7 @@ <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation> <translation id="496185450405387901">ଆପଣଙ୍କର ଆଡ୍ମିନିଷ୍ଟ୍ରେଟର୍ଙ୍କ ଦ୍ଵାରା ଏହି ଆପ୍ ଇନ୍ଷ୍ଟଲ୍ କରାଯାଇଛି।</translation> <translation id="4964455510556214366">ବ୍ୟବସ୍ଥା</translation> +<translation id="496446150016900060">ଆପଣଙ୍କ ଫୋନ୍ ସହିତ ୱାଇ-ଫାଇ ନେଟୱାର୍କଗୁଡ଼ିକୁ ସିଙ୍କ୍ କରନ୍ତୁ</translation> <translation id="4965808351167763748">ଆପଣ କ’ଣ ସୁନିଶ୍ଚିତ ଯେ ଆପଣ Hangouts Meet ଚଲାଇବାକୁ ଏହି ଡିଭାଇସ୍ର ସେଟ୍ଅପ୍ କରିବାକୁ ଚାହୁଁଛନ୍ତି?</translation> <translation id="496888482094675990">ଫାଇଲ୍ସ ଆପ୍, ଆପଣ Google ଡ୍ରାଇଭ୍, ବାହ୍ୟ ଷ୍ଟୋରେଜ୍, କିମ୍ବା ଆପଣଙ୍କର Chrome OS ଡିଭାଇସ୍ରେ ସେଭ୍ କରିଥିବା ଫାଇଲ୍ଗୁଡ଼ିକୁ ଦ୍ରୁତ ଆକ୍ସେସ୍ ପ୍ରଦାନ କରେ।</translation> <translation id="4971412780836297815">ସମାପ୍ତ ହେବା ପରେ ଖୋଲନ୍ତୁ</translation> @@ -3690,6 +3695,7 @@ <translation id="5341980496415249280">ଦୟାକରି ଅପେକ୍ଷା କରନ୍ତୁ, ପ୍ୟାକ୍ ହେଉଛି...</translation> <translation id="5342091991439452114">PIN ନିଶ୍ଚିତ ରୂପେ ଅତି କମ୍ରେ <ph name="MINIMUM" /> ଅଙ୍କ ବିଶିଷ୍ଟ ହେବା ଦରକାର</translation> <translation id="5344036115151554031">Linuxକୁ ରିଷ୍ଟୋର୍ କରାଯାଉଛି</translation> +<translation id="5345916423802287046">ଆପଣ ସାଇନ୍ ଇନ୍ କରି ଆପ୍ ଆରମ୍ଭ କରନ୍ତୁ</translation> <translation id="5350293332385664455">Google Assistant ବନ୍ଦ କରନ୍ତୁ</translation> <translation id="535123479159372765">ଅନ୍ୟ ଏକ ଡିଭାଇସରୁ କପି କରାଯାଇଥିବା ଟେକ୍ସଟ୍</translation> <translation id="5352033265844765294">ଟାଇମ୍ ଷ୍ଟାମ୍ପିଂ</translation> @@ -3999,6 +4005,7 @@ <translation id="5704875434923668958">ଏହା ସହ ସିଙ୍କ କରାଯାଉଛି</translation> <translation id="5705005699929844214">ଆକ୍ସେସିବିଲିଟୀ ବିକଳ୍ପଗୁଡ଼ିକ ସର୍ବଦା ଦେଖାନ୍ତୁ</translation> <translation id="5705882733397021510">ପଛକୁ ଫେରନ୍ତୁ</translation> +<translation id="5707117624115653804">ଏହି ସେଟିଂକୁ ସମର୍ଥନ କରୁଥିବା ଆପ୍ ଏବଂ ସାଇଟଗୁଡ଼ିକ ପାଇଁ କ୍ୟାପ୍ସନର ଆକାର ଓ ଷ୍ଟାଇଲକୁ କଷ୍ଟମାଇଜ୍ କରନ୍ତୁ</translation> <translation id="5707185214361380026">ଏଠାରୁ ଏକ୍ସଟେନ୍ସନ୍ ଲୋଡ୍ କରିବାରେ ବିଫଳ ହେଲା:</translation> <translation id="5708171344853220004">Microsoft Principal Name</translation> <translation id="5709557627224531708">Chromeକୁ ଆପଣଙ୍କର ଡିଫଲ୍ଟ ବ୍ରାଉଜର୍ ଭାବେ ସେଟ୍ କରନ୍ତୁ।</translation> @@ -4162,6 +4169,7 @@ <translation id="5904614460720589786">ଏକ କନଫିଗରେସନ୍ ସମସ୍ୟା ଯୋଗୁଁ <ph name="APP_NAME" />କୁ ସେଟ୍ ଅପ୍ କରାଯାଇପାରିଲା ନାହିଁ। ଦୟାକରି ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ। ତ୍ରୁଟି କୋଡ୍: <ph name="ERROR_CODE" />।</translation> <translation id="5906655207909574370">ପ୍ରାୟ ଅପ୍-ଟୁ-ଡେଟ୍! ଅପଡେଟିଂ ସମାପ୍ତ କରିବା ପାଇଁ ନିଜ ଡିଭାଇସ୍କୁ ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ।</translation> <translation id="5906732635754427568">ଏହି ଡିଭାଇସ୍ରୁ ଏହି ଆପ୍ ସମ୍ବନ୍ଧିତ ଡାଟା କାଢ଼ିଦିଆଯିବ।</translation> +<translation id="5908474332780919512">ଆପଣ ସାଇନ୍ ଇନ୍ କରି ଆପ୍ ଆରମ୍ଭ କରନ୍ତୁ</translation> <translation id="5908695239556627796">ମାଉସ୍ ସ୍କ୍ରଲ୍ ବେଗ</translation> <translation id="5908769186679515905">ଫ୍ଲାସ୍ ଚଲାଇବାରୁ ସାଇଟ୍ଗୁଡ଼ିକୁ ବ୍ଲକ୍ କରନ୍ତୁ</translation> <translation id="5910363049092958439">ଛବି ଏପରି ଭାବେ &ସେଭ୍ କରନ୍ତୁ...</translation> @@ -4702,6 +4710,7 @@ <translation id="6532527800157340614">ଆପଣଙ୍କର ଆକ୍ସେସ୍ ଟୋକନକୁ ପୁନରୁଦ୍ଧାର କରାଯାଇ ନପାରିବା ଯୋଗୁଁ ସାଇନ୍-ଇନ୍ କରିବା ବିଫଳ ହୋଇଛି। ଦୟାକରି ଆପଣଙ୍କ ନେଟୱାର୍କ ସଂଯୋଗ ଯାଞ୍ଚ କରି ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> <translation id="6532663472409656417">ଏଣ୍ଟରପ୍ରାଇଜ୍ ପଞ୍ଜିକରଣ କରାଯାଇଛି</translation> <translation id="6535331821390304775">ସମ୍ବନ୍ଧିତ ଆପରେ ଏହି ପ୍ରକାର ଲିଙ୍କଗୁଡ଼ିକ ଖୋଲିବାକୁ <ph name="ORIGIN" />କୁ ସର୍ବଦା ଅନୁମତି ଦିଅନ୍ତୁ</translation> +<translation id="6537613839935722475">ନାମରେ ଅକ୍ଷର, ସଂଖ୍ଯା ଏବଂ ହାଇଫେନ୍ (-) ବ୍ୟବହାର କରାଯାଇପାରେ</translation> <translation id="6538635548667167211">ଡାଟା ବ୍ୟବହାରର ବର୍ତ୍ତମାନ ସେଟିଂ "ଡାଟା"ରେ ସେଟ୍ ହୋଇଛି</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />ଟିପ୍ପଣୀ:<ph name="END_BOLD" /> ଯଦି ଆପଣ ଜାଣିଛନ୍ତି ଯେ ଆପଣ କ'ଣ କରୁଛନ୍ତି କିମ୍ବା ଆପଣଙ୍କୁ ଏପରି କରିବାକୁ କୁହାଯାଇଛି, କାରଣ ଡାଟାର ସଂଗ୍ରହ କାର୍ଯ୍ୟଦକ୍ଷତାକୁ କମାଇପାରେ।</translation> <translation id="6541638731489116978">ଏହି ସାଇଟ୍କୁ ଆପଣଙ୍କ ମୋସନ୍ ସେନ୍ସର୍ ଆକ୍ସେସ୍ କରିବା ପାଇଁ ବ୍ଲକ୍ କରାଯାଇଛି।</translation> @@ -4791,6 +4800,7 @@ <translation id="6650234781371031356"><ph name="WEBSITE" /> ପାଇଁ ଆପଣଙ୍କର ପାସୱାର୍ଡ ଏହି ଡିଭାଇସରେ ଏବଂ ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ଷ୍ଟୋର୍ କରାଯାଇଥାଏ। ଆପଣ କେଉଁଟିକୁ ଡିଲିଟ୍ କରିବାକୁ ଚାହୁଁଛନ୍ତି?</translation> <translation id="665061930738760572">&ନୂଆ ୱିଣ୍ଡୋରେ ଖୋଲନ୍ତୁ</translation> <translation id="6651237644330755633">ୱେବ୍ସାଇଟ୍ଗୁଡ଼ିକୁ ଚିହ୍ନଟ କରିବା ପାଇଁ ଏହି ସାର୍ଟିଫିକେଟ୍କୁ ବିଶ୍ଵାସ କରନ୍ତୁ</translation> +<translation id="6651495917527016072">ଆପଣଙ୍କ ଫୋନ୍ ସହିତ ୱାଇ-ଫାଇ ନେଟୱାର୍କଗୁଡ଼ିକୁ ସିଙ୍କ୍ କରନ୍ତୁ। <ph name="LINK_BEGIN" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="LINK_END" /></translation> <translation id="665355505818177700">Chrome <ph name="MS_AD_NAME" /> ଏକତ୍ରିକରଣ କେବଳ x86_64 ପ୍ଲାଟ୍ଫର୍ମରେ ସମର୍ଥିତ ଅଟେ। ଗୋଟିଏ ARM କିମ୍ବା x86 ପ୍ଲାଟ୍ଫର୍ମର ଶୀର୍ଷଭାଗରେ ତିଆରି କରାଯାଇଥିବା Chromebook ଏହି କାର୍ଯ୍ୟକାରିତାକୁ ସମର୍ଥନ କରେ ନାହିଁ।</translation> <translation id="6654509035557065241">ପସନ୍ଦର ନେଟୱାର୍କ</translation> <translation id="6655190889273724601">ଡେଭେଲପର୍ ମୋଡ୍</translation> @@ -5119,7 +5129,7 @@ <translation id="7038632520572155338">ସ୍ୱିଚ୍ ଆକ୍ସେସ୍</translation> <translation id="7039326228527141150"><ph name="VENDOR_NAME" />ରୁ USB ଡିଭାଇସ୍ଗୁଡ଼ିକୁ ଆକ୍ସେସ୍ କରନ୍ତୁ</translation> <translation id="7039912931802252762">Microsoft ସ୍ମାର୍ଟ କାର୍ଡ ଲଗ୍ଅନ୍</translation> -<translation id="7039951224110875196">ପ୍ରତ୍ଯେକ ପିଲା ପାଇଁ ଏକ Google ଆକାଉଣ୍ଟ ତିଆରି କରନ୍ତୁ</translation> +<translation id="7039951224110875196">ପ୍ରତ୍ୟେକ ପିଲା ପାଇଁ ଏକ Google ଆକାଉଣ୍ଟ ତିଆରି କରନ୍ତୁ</translation> <translation id="7040230719604914234">ଅପରେଟର୍</translation> <translation id="7043108582968290193">ସମାପ୍ତ ହୋଇଛି! କୌଣସି ଅସଙ୍ଗତ ଆପ୍ଲିକେସନ୍ ମିଳିଲାନାହିଁ।</translation> <translation id="7044124535091449260">ସାଇଟ୍ ଆକ୍ସେସ୍ ବିଷୟରେ ଅଧିକ ଜାଣନ୍ତୁ</translation> @@ -5346,7 +5356,7 @@ <translation id="7324297612904500502">ବିଟା ଫୋରମ୍</translation> <translation id="7325209047678309347">କାଗଜ ଅଟକି ଯାଇଛି</translation> <translation id="7325437708553334317">ଉଚ୍ଚ କଣ୍ଟ୍ରାଷ୍ଟ ଏକ୍ସଟେନ୍ସନ୍</translation> -<translation id="7326004502692201767">ଏକ ପିଲା ପାଇଁ ଏହି <ph name="DEVICE_TYPE" /> ସେଟ୍ ଅପ୍ କରନ୍ତୁ</translation> +<translation id="7326004502692201767">ଗୋଟିଏ ପିଲା ପାଇଁ ଏହି <ph name="DEVICE_TYPE" /> ସେଟ୍ ଅପ୍ କରନ୍ତୁ</translation> <translation id="7328699668338161242">ଆପଣଙ୍କର ଆସିଷ୍ଟାଣ୍ଟ, ଆପଣଙ୍କର ଭଏସ୍କୁ ପୂର୍ବରୁ ଚିହ୍ନଟ କରିସାରିଛି</translation> <translation id="7328867076235380839">ଅବୈଧ ସଂଯୋଜନ</translation> <translation id="7329154610228416156">ସାଇନ୍-ଇନ୍ ବିଫଳ ହେଲା କାରଣ ଗୋଟିଏ ଅସୁରକ୍ଷିତ URL<ph name="BLOCKED_URL" />କୁ ବ୍ୟବହାର କରିବା ପାଇଁ ଏହାକୁ କନ୍ଫିଗର୍ କରାଯାଇଥିଲା। ଦୟାକରି ଆପଣଙ୍କର ଆଡ୍ମିନିଷ୍ଟ୍ରେଟର୍ଙ୍କ ସହିତ ଯୋଗାଯୋଗ କରନ୍ତୁ।</translation> @@ -5394,6 +5404,7 @@ <translation id="7375235221357833624">{0,plural, =1{ଏକ ଘଣ୍ଟା ଭିତରେ ଡିଭାଇସ୍ ଅପଡେଟ୍ କରନ୍ତୁ}other{# ଘଣ୍ଟା ଭିତରେ ଡିଭାଇସ୍ ଅପଡେଟ୍ କରନ୍ତୁ}}</translation> <translation id="7376553024552204454">ମାଉସ୍ କର୍ସର୍ ଚାଲୁଥିବା ବେଳେ ଏହାକୁ ହାଇଲାଇଟ୍ କରନ୍ତୁ</translation> <translation id="7377451353532943397">ସମ୍ବେଦନଶୀଳ ଆକ୍ସେସ୍ ଅବରୋଧ କରିବା ଜାରି ରଖନ୍ତୁ</translation> +<translation id="7378611153938412599">ଦୁର୍ବଳ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଅନୁମାନ କରିବା ସହଜ ଅଟେ। ଆପଣ ଜଟିଳ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ତିଆରି କରିବା ସୁନିଶ୍ଚିତ କରନ୍ତୁ। <ph name="BEGIN_LINK" />ଅଧିକ ସୁରକ୍ଷା ଟିପ୍ସ ଦେଖନ୍ତୁ।<ph name="END_LINK" /></translation> <translation id="73786666777299047">Chrome ୱେବ୍ ଷ୍ଟୋର୍ ଖୋଲନ୍ତୁ</translation> <translation id="7378812711085314936">ଡାଟା ସଂଯୋଗ ପ୍ରାପ୍ତ କରନ୍ତୁ</translation> <translation id="7380622428988553498">ଡିଭାଇସ୍ ନାମରେ ଅବୈଧ ଅକ୍ଷରଗୁଡ଼ିକ ଅଛି</translation> @@ -5918,6 +5929,7 @@ <translation id="7959074893852789871">ଫାଇଲ୍ରେ ଅନେକ ସାର୍ଟିଫିକେଟ୍ ଅଛି, ଯାହା ମଧ୍ୟରୁ କିଛି ଇମ୍ପୋର୍ଟ ହୋଇନାହିଁ:</translation> <translation id="7961015016161918242">ଆଦୌ ନୁହେଁ</translation> <translation id="7963001036288347286">ଟଚପ୍ୟାଡ୍ ଆକ୍ସଲରେସନ୍</translation> +<translation id="7963608432878156675">ବ୍ଲୁଟୁଥ୍ ଏବଂ ନେଟୱାର୍କ ସଂଯୋଗ ପାଇଁ ଏହି ନାମ ଅନ୍ୟ ଡିଭାଇସଗୁଡ଼ିକୁ ଦୃଶ୍ୟମାନ ହୁଏ</translation> <translation id="7963826112438303517">ଆପଣଙ୍କ ଭଏସ୍ ମଡେଲ୍କୁ ତିଆରି କରିବା ଏବଂ ଅପ୍ଡେଟ୍ କରିବା ପାଇଁ ଆପଣଙ୍କର ଆସିଷ୍ଟାଣ୍ଟ ଏହିସବୁ ରେକର୍ଡିଂକୁ ବ୍ୟବହାର କରେ, ଯାହା ଆପଣ ଭଏସ୍ ମ୍ୟାଚ୍ ଚାଲୁ କରିଥିବା ଡିଭାଇସ୍ରେ କେବଳ ସେଭ୍ ହୁଏ। ଆସିଷ୍ଟାଣ୍ଟ ସେଟିଂସକୁ ଯାଇ ଭଏସ୍ କାର୍ଯ୍ୟକଳାପ ଦେଖନ୍ତୁ କିମ୍ବା ପୁନଃପ୍ରଶିକ୍ଷଣ ଦିଅନ୍ତୁ।</translation> <translation id="7966241909927244760">ଛବି ଠିକଣା &କପି କରନ୍ତୁ</translation> <translation id="7966571622054096916">{COUNT,plural, =1{ବୁକମାର୍କ ତାଲିକାରେ 1ଟି ଆଇଟମ୍}other{ବୁକମାର୍କ ତାଲିକାରେ {COUNT}ଟି ଆଇଟମ୍}}</translation> @@ -6379,6 +6391,7 @@ <translation id="850875081535031620">କୌଣସି ହାନିକାରକ ସଫ୍ଟୱେର୍ ମିଳିଲା ନାହିଁ</translation> <translation id="8509177919508253835">ସୁରକ୍ଷା କୀଗୁଡ଼ିକ ରିସେଟ୍ କରନ୍ତୁ ଏବଂ ପିନ୍ଗୁଡ଼ିକ ତିଆରି କରନ୍ତୁ</translation> <translation id="8509646642152301857">ବନାନ ଯାଞ୍ଚ ଅଭିଧାନ ଡାଉନ୍ଲୋଡ୍ ବିଫଳ ହୋଇଛି।</translation> +<translation id="8512396579636492893">{COUNT,plural, =0{କୌଣସି ଦୁର୍ବଳ ପାସୱାର୍ଡ ମିଳିଲା ନାହିଁ}=1{{COUNT}ଟି ଦୁର୍ବଳ ପାସୱାର୍ଡ ମିଳିଲା}other{{COUNT}ଟି ଦୁର୍ବଳ ପାସୱାର୍ଡ ମିଳିଲା}}</translation> <translation id="8512476990829870887">ପ୍ରକ୍ରିୟା ଶେଷ କରନ୍ତୁ</translation> <translation id="851263357009351303">ଛବି ଦେଖାଇବା ପାଇଁ ସର୍ବଦା <ph name="HOST" />କୁ ଅନୁମତି ଦିଅନ୍ତୁ</translation> <translation id="8513108775083588393">ସ୍ୱତଃ-ଘୂର୍ଣ୍ଣନ</translation> @@ -6972,7 +6985,7 @@ <translation id="9179734824669616955">ଆପଣଙ୍କର <ph name="DEVICE_TYPE" />ରେ Linux (ବିଟା) ସେଟ୍ ଅପ୍ କରନ୍ତୁ</translation> <translation id="9180281769944411366">ଏହି ପ୍ରକ୍ରିୟା ପାଇଁ କିଛି ସମୟ ଲାଗିପାରେ। Linux କଣ୍ଟେନର୍ ଆରମ୍ଭ ହେଉଛି।</translation> <translation id="9180380851667544951">ସାଇଟ୍ ଆପଣଙ୍କର ସ୍କ୍ରିନ୍କୁ ସେୟାର୍ କରିପାରିବ</translation> -<translation id="9186963452600581158">ଏକ ପିଲାର Google ଆକାଉଣ୍ଟ ସହିତ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ</translation> +<translation id="9186963452600581158">ଗୋଟିଏ ପିଲାର Google ଆକାଉଣ୍ଟ ସହିତ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ</translation> <translation id="9188732951356337132">ବ୍ୟବହାର ଓ ଡାଏଗ୍ନୋଷ୍ଟିକ୍ ଡାଟାକୁ ପଠାନ୍ତୁ। ଏହି ଡିଭାଇସ୍ ବର୍ତ୍ତମାନ ସ୍ୱଚାଳିତରୂପେ ଡାଏଗ୍ନୋଷ୍ଟିକ୍, ଆପ୍ ଏବଂ ଆପ୍ ବ୍ୟବହାର ଡାଟା Googleକୁ ପଠାଉଛି। ଏହା ଆପଣଙ୍କର ପିଲାକୁ ଚିହ୍ନଟ କରିବାରେ ବ୍ୟବହାର କରାଯିବ ନାହିଁ ଏବଂ ସିଷ୍ଟମ୍ ଓ ଆପ୍ର ସ୍ଥିରତା ତଥା ଅନ୍ୟାନ୍ୟ ଉନ୍ନତି ଆଣିବାରେ ସାହାଯ୍ୟ କରିବ। କିଛି ଏକତ୍ରିତ ଡାଟା ମଧ୍ୟ Google ଆପ୍ସ ଏବଂ ଏହାର ସହଭାଗୀ ଯେପରିକି, Android ଡେଭଲପର୍, ମାନଙ୍କୁ ସାହାଯ୍ୟ କରିବ। ଯଦି ଆପଣଙ୍କର ପିଲା ପାଇଁ ଅତିରିକ୍ତ ୱେବ୍ ଏବଂ ଆପ୍ ଗତିବିଧି ସେଟିଂସ୍ ଚାଲୁ ସ୍ଥିତିରେ ଥାଏ, ତେବେ ଏହି ଡାଟା ହୁଏତ ସେମାନଙ୍କର Google ଆକାଉଣ୍ଟରେ ସେଭ୍ ହୋଇଯିବ। <ph name="BEGIN_LINK2" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="END_LINK2" /></translation> <translation id="9190063653747922532">L2TP/IPsec + ପୂର୍ବରୁ-ସେୟାର୍ କରାଯାଇଥିବା କୀ</translation> <translation id="9198090666959937775">ଆପଣଙ୍କ Android ଫୋନକୁ ଏକ ସୁରକ୍ଷା କୀ ଭାବରେ ବ୍ୟବହାର କରନ୍ତୁ</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb index 3de9808..c9959e4 100644 --- a/chrome/app/resources/generated_resources_pa.xtb +++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -870,6 +870,7 @@ <translation id="1976307821760494606"><ph name="DOMAIN" /> ਨੇ ADB ਡੀਬੱਗਿੰਗ ਨੂੰ ਬੰਦ ਕਰ ਦਿੱਤਾ ਹੈ। ਇਸ ਨਾਲ ਤੁਹਾਡੀ <ph name="DEVICE_TYPE" /> 24 ਘੰਟਿਆਂ ਵਿੱਚ ਰੀਸੈੱਟ ਹੋ ਜਾਵੇਗੀ। ਉਹਨਾਂ ਫ਼ਾਈਲਾਂ ਦਾ ਬੈਕਅੱਪ ਲਓ ਜਿਨ੍ਹਾਂ ਨੂੰ ਤੁਸੀਂ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ।</translation> <translation id="1977965994116744507">ਆਪਣੀ <ph name="DEVICE_TYPE" /> ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਲਈ ਫ਼ੋਨ ਨੂੰ ਨੇੜੇ ਲਿਆਓ।</translation> <translation id="1978006917103730774">ਭਵਿੱਖੀ ਸਾਫ਼ਟਵੇਅਰ ਅਤੇ ਸੁਰੱਖਿਆ ਅੱਪਡੇਟ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਸਥਾਪਤ ਕੀਤੇ ਜਾਣਗੇ।</translation> +<translation id="1978057560491495741">ਪਤਾ ਹਟਾਓ</translation> <translation id="1979095679518582070">ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਨੂੰ ਬੰਦ ਕਰਨ ਨਾਲ ਇਸ ਡੀਵਾਈਸ ਦੀਆਂ ਜ਼ਰੂਰੀ ਸੇਵਾਵਾਂ ਜਿਵੇਂ ਕਿ ਸਿਸਟਮ ਅੱਪਡੇਟ ਅਤੇ ਸੁਰੱਖਿਆ ਲਈ ਜ਼ਰੂਰੀ ਜਾਣਕਾਰੀ ਨੂੰ ਭੇਜਣ ਦੀ ਸਮਰੱਥਾ 'ਤੇ ਕੋਈ ਅਸਰ ਨਹੀਂ ਪੈਂਦਾ।</translation> <translation id="1979280758666859181">ਤੁਸੀਂ <ph name="PRODUCT_NAME" /> ਦੇ ਇੱਕ ਪੁਰਾਣੇ ਵਰਜਨ ਨਾਲ ਕਿਸੇ ਚੈਨਲ ਤੋਂ ਖਰਚਾ ਲੈ ਰਹੇ ਹੋ। ਜਦੋਂ ਚੈਨਲ ਵਰਜਨ ਤੁਹਾਡੇ ਡੀਵਾਈਸ 'ਤੇ ਇਸ ਵੇਲੇ ਸਥਾਪਤ ਕੀਤੇ ਵਰਜਨ ਨਾਲ ਮੇਲ ਖਾਂਦਾ ਹੈ ਤਾਂ ਚੈਨਲ ਤਬਦੀਲੀ ਨੂੰ ਲਾਗੂ ਕੀਤਾ ਜਾਵੇਗਾ।</translation> <translation id="197989455406964291">KDC ਵਿੱਚ ਇਨਕ੍ਰਿਪਸ਼ਨ ਕਿਸਮ ਦੀ ਸੁਵਿਧਾ ਨਹੀਂ ਹੈ</translation> @@ -1072,6 +1073,7 @@ <translation id="2224444042887712269">ਇਹ ਸੈਟਿੰਗ <ph name="OWNER_EMAIL" /> ਨਾਲ ਸੰਬੰਧਿਤ ਹੈ।</translation> <translation id="2224551243087462610">ਫੋਲਡਰ ਨਾਮ ਸੰਪਾਦਿਤ ਕਰੋ</translation> <translation id="2225864335125757863">ਆਪਣੇ ਖਾਤੇ ਨੂੰ ਸੁਰੱਖਿਅਤ ਰੱਖਣ ਲਈ ਤੁਰੰਤ ਇਹਨਾਂ ਪਾਸਵਰਡਾਂ ਨੂੰ ਬਦਲੋ:</translation> +<translation id="2226204716217107988">ਕੀ ਕਿਸੇ ਹੋਰ ਪ੍ਰੋਫਾਈਲ 'ਤੇ ਸਵਿੱਚ ਕਰਨਾ ਹੈ?</translation> <translation id="2226449515541314767">ਇਹ ਸਾਈਟ MIDI ਡਿਵਾਈਸਾਂ 'ਤੇ ਪੂਰਾ ਕੰਟਰੋਲ ਪਾਉਣ ਤੋਂ ਬਲਾਕ ਕੀਤੀ ਗਈ ਹੈ।</translation> <translation id="2226907662744526012">ਇੱਕ ਵਾਰ ਪਿੰਨ ਦਾਖਲ ਹੋਣ 'ਤੇ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਅਣਲਾਕ ਕਰੋ</translation> <translation id="222704500187107962">ਇਸ ਅਪਵਾਦ ਨੂੰ ਤੁਹਾਡੇ ਵੱਲੋਂ ਮੌਜੂਦਾ ਇਨਕੋਗਨਿਟੋ ਸੈਸ਼ਨ ਤੋਂ ਬਾਹਰ ਜਾਣ 'ਤੇ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਹਟਾਇਆ ਜਾਵੇਗਾ</translation> @@ -1141,6 +1143,7 @@ <translation id="2307462900900812319">ਨੈੱਟਵਰਕ ਸੰਰੂਪਿਤ ਕਰੋ</translation> <translation id="230927227160767054">ਇਹ ਪੰਨਾ ਇੱਕ ਸੇਵਾ ਹੈਂਡਲਰ ਸਥਾਪਤ ਕਰਨਾ ਚਾਹੁੰਦਾ ਹੈ।</translation> <translation id="2309620859903500144">ਇਸ ਸਾਈਟ ਨੂੰ ਤੁਹਾਡੇ ਮੋਸ਼ਨ ਜਾਂ ਲਾਈਟ ਸੈਂਸਰਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਤੋਂ ਬਲਾਕ ਕਰ ਦਿੱਤਾ ਗਿਆ ਹੈ।</translation> +<translation id="2312219318583366810">URL ਪੰਨਾ</translation> <translation id="2314165183524574721">ਮੌਜੂਦਾ ਦਿਖਣਯੋਗਤਾ ਸੈਟਿੰਗ 'ਲੁਕੀ ਹੋਈ' 'ਤੇ ਸੈੱਟ ਹੈ</translation> <translation id="2314774579020744484">ਪੰਨਿਆਂ ਦਾ ਅਨੁਵਾਦ ਕਰਨ ਵੇਲੇ ਵਰਤੀ ਜਾਂਦੀ ਭਾਸ਼ਾ</translation> <translation id="2315414688463285945">Linux ਫ਼ਾਈਲਾਂ ਦਾ ਸੰਰੂਪਣ ਕਰਨ ਵੇਲੇ ਗੜਬੜ ਹੋ ਗਈ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> @@ -2344,6 +2347,7 @@ <translation id="3713047097299026954">ਇਸ ਸੁਰੱਖਿਆ ਕੁੰਜੀ ਵਿੱਚ ਕੋਈ ਸਾਈਨ-ਇਨ ਡਾਟਾ ਨਹੀਂ ਹੈ</translation> <translation id="3714195043138862580">ਇਸ ਡੈਮੋ ਡੀਵਾਈਸ ਨੂੰ ਕਿਸੇ ਵਾਂਝਾਕਿਰਤ ਸਥਿਤੀ ਵਿੱਚ ਰੱਖਿਆ ਗਿਆ ਹੈ।</translation> <translation id="3714633008798122362">ਵੈਬ ਕੈਲੰਡਰ</translation> +<translation id="3715954932774762075">ਕਈ ਭਾਸ਼ਾਵਾਂ ਵਿੱਚ ਉਪਲਬਧ ਐਪਾਂ ਅਤੇ ਵੈੱਬਸਾਈਟਾਂ ਇਸ ਸੂਚੀ ਤੋਂ ਪਹਿਲੀ ਸਮਰਥਿਤ ਭਾਸ਼ਾ ਦੀ ਵਰਤੋਂ ਕਰਨਗੀਆਂ। ਇਹ ਤਰਜੀਹਾਂ ਤੁਹਾਡੀਆਂ ਬ੍ਰਾਊਜ਼ਰ ਸੈਟਿੰਗਾਂ ਨਾਲ ਸਮਕਾਲੀਕਿਰਤ ਕੀਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ। <ph name="BEGIN_LINK_LEARN_MORE" />ਹੋਰ ਜਾਣੋ<ph name="END_LINK_LEARN_MORE" /></translation> <translation id="3719826155360621982">ਹੋਮਪੇਜ</translation> <translation id="372062398998492895">CUPS</translation> <translation id="3721119614952978349">ਤੁਸੀਂ ਅਤੇ Google</translation> @@ -2504,6 +2508,7 @@ <translation id="3882165008614329320">ਕੈਮਰੇ ਜਾਂ ਫ਼ਾਈਲ ਤੋਂ ਮੌਜੂਦਾ ਵੀਡੀਓ</translation> <translation id="3886446263141354045">ਇਸ ਸਾਈਟ 'ਤੇ ਪਹੁੰਚ ਦੀ ਤੁਹਾਡੀ ਬੇਨਤੀ <ph name="NAME" /> ਨੂੰ ਭੇਜੀ ਗਈ ਹੈ</translation> <translation id="3888550877729210209"><ph name="LOCK_SCREEN_APP_NAME" /> ਨਾਲ ਨੋਟ-ਕਥਨ ਲਏ ਜਾ ਰਹੇ ਹਨ</translation> +<translation id="3890064827463908288">ਵਾਈ-ਫਾਈ ਸਿੰਕ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ Chrome ਸਮਕਾਲੀਕਰਨ ਨੂੰ ਚਾਲੂ ਕਰੋ</translation> <translation id="3892414795099177503">OpenVPN / L2TP ਸ਼ਾਮਲ ਕਰੋ...</translation> <translation id="3893536212201235195">ਆਪਣੀਆਂ ਪਹੁੰਚਯੋਗਤਾ ਸੈਟਿੰਗਾਂ ਪੜ੍ਹੋ ਅਤੇ ਬਦਲੋ</translation> <translation id="3893630138897523026">ChromeVox (ਬੋਲੀ ਪ੍ਰਤੀਕਰਮ)</translation> @@ -3778,6 +3783,7 @@ <translation id="5449588825071916739">ਸਾਰੀਆਂ ਟੈਬਾਂ ਨੂੰ ਬੁੱਕਮਾਰਕ ਕਰੋ</translation> <translation id="5449716055534515760">Win&dow ਬੰਦ ਕਰੋ</translation> <translation id="5452974209916053028">ਮੌਜੂਦਾ ਇਨਕੋਗਨਿਟੋ ਸੈਸ਼ਨ: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> +<translation id="5454005855577728171">ਸੁਰਖੀ ਵਾਲਾ ਬੁਲਬੁਲਾ <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% ਖੱਬੇ ਤੋਂ ਸੱਜੇ, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% ਉੱਪਰ ਤੋਂ ਹੇਠਾਂ ਨੂੰ ਲਿਜਾਇਆ ਗਿਆ</translation> <translation id="5454166040603940656"><ph name="PROVIDER" /> ਨਾਲ</translation> <translation id="5457113250005438886">ਅਵੈਧ</translation> <translation id="5457459357461771897">ਆਪਣੇ ਕੰਪਿਊਟਰ ਤੋਂ ਫ਼ੋਟੋਆਂ, ਸੰਗੀਤ ਅਤੇ ਹੋਰ ਮੀਡੀਆ ਪੜ੍ਹੋ ਅਤੇ ਮਿਟਾਓ</translation> @@ -3921,6 +3927,7 @@ <translation id="5602765853043467355">ਇਸ ਡੀਵਾਈਸ ਵਿੱਚੋਂ ਬੁੱਕਮਾਰਕ, ਇਤਿਹਾਸ, ਪਾਸਵਰਡ ਅਤੇ ਹੋਰ ਚੀਜ਼ਾਂ ਨੂੰ ਕਲੀਅਰ ਕਰੋ</translation> <translation id="5605623530403479164">ਹੋਰ ਖੋਜ ਇੰਜਣ</translation> <translation id="5605758115928394442">ਤੁਹਾਡੀ ਪਛਾਣ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਇੱਕ ਸੂਚਨਾ ਤੁਹਾਡੇ ਫ਼ੋਨ 'ਤੇ ਭੇਜੀ ਗਈ।</translation> +<translation id="560834977503641186">ਵਾਈ-ਫਾਈ ਸਿੰਕ, ਹੋਰ ਜਾਣੋ</translation> <translation id="5608580678041221894">ਕਾਂਟ-ਛਾਂਟ ਕਰਨ ਸਬੰਧੀ ਖੇਤਰ ਨੂੰ ਵਿਵਸਥਿਤ ਕਰਨ ਜਾਂ ਖਿਸਕਾਉਣ ਲਈ ਅੱਗੇ ਦਿੱਤੀਆਂ ਕੁੰਜੀਆਂ 'ਤੇ ਟੈਪ ਕਰੋ</translation> <translation id="5609231933459083978">ਐਪਲੀਕੇਸ਼ਨ ਅਵੈਧ ਜਾਪਦੀ ਹੈ।</translation> <translation id="5610038042047936818">ਕੈਮਰਾ ਮੋਡ 'ਤੇ ਸਵਿੱਚ ਕਰੋ</translation> @@ -4112,6 +4119,7 @@ <translation id="5841270259333717135">ਈਥਰਨੈੱਟ ਦਾ ਸੰਰੂਪਣ ਕਰੋ</translation> <translation id="5842497610951477805">ਬਲੂਟੁੱਥ ਚਾਲੂ</translation> <translation id="5843706793424741864">ਫਾਰੇਨਹੀਟ</translation> +<translation id="584451707753263735">ਲਾਈਵ ਸੁਰਖੀਆਂ ਦਿਖਣਯੋਗ, ਫੋਕਸ ਕਰਨ ਲਈ F6 ਦਬਾਓ</translation> <translation id="5844574845205796324">ਪੜਚੋਲ ਕਰਨ ਲਈ ਨਵੀਂ ਸਮੱਗਰੀ ਦਾ ਸੁਝਾਅ ਦਿਓ</translation> <translation id="5846200638699387931">ਰਿਲੇਸ਼ਨ ਦੇ ਸਿਨਟੈਕਸ ਵਿੱਚ ਗੜਬੜ: <ph name="ERROR_LINE" /></translation> <translation id="5846807460505171493">ਅੱਪਡੇਟ ਅਤੇ ਐਪਾਂ ਨੂੰ ਸਥਾਪਤ ਕਰੋ। ਜਾਰੀ ਰੱਖ ਕੇ, ਤੁਸੀਂ ਸਹਿਮਤੀ ਦਿੰਦੇ ਹੋ ਕਿ ਇਹ ਡੀਵਾਈਸ ਸੰਭਾਵੀ ਤੌਰ 'ਤੇ ਸੈਲਿਊਲਰ ਡਾਟੇ ਦੀ ਵਰਤੋਂ ਨਾਲ Google, ਤੁਹਾਡੇ ਕੈਰੀਅਰ ਅਤੇ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦੇ ਨਿਰਮਾਤਾ ਤੋਂ ਵੀ ਸਵੈਚਲਿਤ ਤੌਰ 'ਤੇ ਅੱਪਡੇਟ ਅਤੇ ਐਪਾਂ ਨੂੰ ਡਾਊਨਲੋਡ ਅਤੇ ਸਥਾਪਤ ਕਰ ਸਕਦਾ ਹੈ। ਇਹਨਾਂ ਐਪਾਂ ਵਿੱਚੋਂ ਕੁਝ ਐਪ-ਅੰਦਰ ਖਰੀਦਾਂ ਦੀ ਪੇਸ਼ਕਸ਼ ਕਰ ਸਕਦੀਆਂ ਹਨ।</translation> @@ -5368,6 +5376,7 @@ <translation id="7340431621085453413"><ph name="FULLSCREEN_ORIGIN" /> ਹੁਣ ਪੂਰੀ ਸਕ੍ਰੀਨ ਹੈ।</translation> <translation id="7340650977506865820">ਸਾਈਟ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ ਨੂੰ ਸਾਂਝਾ ਕਰ ਰਹੀ ਹੈ</translation> <translation id="7341834142292923918">ਇਸ ਸਾਈਟ ਤੱਕ ਪਹੁੰਚ ਕਰਨਾ ਚਾਹੁੰਦੀ ਹੈ</translation> +<translation id="7343372807593926528">ਵਿਚਾਰ ਭੇਜਣ ਤੋਂ ਪਹਿਲਾਂ ਕਿਰਪਾ ਕਰਕੇ ਸਮੱਸਿਆ ਦਾ ਵਰਣਨ ਕਰੋ।</translation> <translation id="7345706641791090287">ਆਪਣੇ ਪਾਸਵਰਡ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ</translation> <translation id="7346909386216857016">ਠੀਕ, ਸਮਝ ਲਿਆ</translation> <translation id="7347452120014970266">ਇੰਝ ਕਰਨ ਨਾਲ <ph name="ORIGIN_NAME" /> ਵੱਲੋਂ ਸਟੋਰ ਕੀਤੇ ਸਾਰੇ ਡਾਟੇ ਅਤੇ ਕੁਕੀਜ਼ ਅਤੇ ਇਸਦੀਆਂ ਸਥਾਪਤ ਕੀਤੀਆਂ ਐਪਾਂ ਨੂੰ ਕਲੀਅਰ ਕਰ ਦਿੱਤਾ ਜਾਵੇਗਾ</translation> @@ -5784,6 +5793,7 @@ <translation id="7819857487979277519">PSK (WPA ਜਾਂ RSN)</translation> <translation id="7819992334107904369">Chrome ਸਮਕਾਲੀਕਰਨ</translation> <translation id="782057141565633384">ਵੀਡੀਓ ਪਤਾ ਕਾ&ਪੀ ਕਰੋ</translation> +<translation id="7822187537422052256">ਕੀ ਤੁਸੀਂ ਪੱਕਾ ਇਸ ਪਤੇ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?</translation> <translation id="7824864914877854148">ਕਿਸੇ ਗੜਬੜ ਕਰਕੇ ਬੈਕਅੱਪ ਪੂਰਾ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ</translation> <translation id="7825666486843191125">ਉਹ ਸਾਰੇ ਸੰਪਰਕ ਜੋ ਸਕ੍ਰੀਨ ਅਣਲਾਕ ਹੋਣ 'ਤੇ ਤੁਹਾਡੇ ਨੇੜੇ ਹੁੰਦੇ ਹਨ</translation> <translation id="782590969421016895">ਮੌਜੂਦਾ ਸਫ਼ੇ ਵਰਤੋ</translation> @@ -6309,6 +6319,7 @@ <translation id="8419098111404128271">'<ph name="SEARCH_TEXT" />' ਦੇ ਖੋਜ ਨਤੀਜੇ</translation> <translation id="8419368276599091549">ਤੁਹਾਡੇ <ph name="DEVICE_TYPE" /> ਵਿੱਚ ਜੀ ਆਇਆਂ ਨੂੰ!</translation> <translation id="8420308167132684745">ਸ਼ਬਦਕੋਸ਼ ਇੰਦਰਾਜ਼ਾਂ ਦਾ ਸੰਪਾਦਨ ਕਰੋ</translation> +<translation id="8421361468937925547">ਲਾਈਵ ਸੁਰਖੀਆਂ (ਸਿਰਫ਼ ਅੰਗਰੇਜ਼ੀ)</translation> <translation id="8422787418163030046">ਟ੍ਰੇਅ ਮੌਜੂਦ ਨਹੀਂ ਹੈ</translation> <translation id="8425213833346101688">ਬਦਲੋ</translation> <translation id="8425492902634685834">ਟਾਸਕਬਾਰ ਤੇ ਪਿਨ ਕਰੋ</translation> @@ -6337,6 +6348,7 @@ <translation id="8449036207308062757">ਸਟੋਰੇਜ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ</translation> <translation id="8452135315243592079">ਗੁੰਮ ਸਿਮ ਕਾਰਡ</translation> <translation id="8455026683977728932">ADB ਚਿੱਤਰ ਨੂੰ ਚਾਲੂ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ</translation> +<translation id="8456398879271637452">ਲਾਈਵ ਸੁਰਖੀਆਂ ਦਿਖਣਯੋਗ, ਫੋਕਸ ਕਰਨ ਲਈ Ctrl + ਪਿੱਛੇ ਜਾਂ Ctrl + ਅੱਗੇ ਨੂੰ ਦਬਾਓ</translation> <translation id="845702320058262034">ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ। ਪੱਕਾ ਕਰੋ ਕਿ ਤੁਹਾਡੇ ਫ਼ੋਨ ਦਾ ਬਲੂਟੁੱਥ ਚਾਲੂ ਹੈ।</translation> <translation id="8457451314607652708">ਬੁੱਕਮਾਰਕ ਆਯਾਤ ਕਰੋ</translation> <translation id="8458627787104127436">ਨਵੀਂ ਵਿੰਡੋ ਵਿੱਚ ਸਾਰੇ (<ph name="URL_COUNT" />) ਖੋਲ੍ਹੋ</translation> @@ -6848,6 +6860,7 @@ <translation id="9027459031423301635">ਨਵੀਂ &ਟੈਬ ਵਿੱਚ ਲਿੰਕ ਖੋਲ੍ਹੋ</translation> <translation id="9030515284705930323">ਤੁਹਾਡੇ ਸੰਗਠਨ ਨੇ ਤੁਹਾਡੇ ਖਾਤੇ ਲਈ 'Google Play ਸਟੋਰ' ਨੂੰ ਚਾਲੂ ਨਹੀਂ ਕੀਤਾ ਹੋਇਆ ਹੈ। ਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।</translation> <translation id="9030785788945687215">Gmail</translation> +<translation id="9030855135435061269"><ph name="PLUGIN_NAME" /> ਹੁਣ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ</translation> <translation id="9031549947500880805">'Google ਡਰਾਈਵ' ਵਿੱਚ ਬੈਕਅੱਪ ਲਓ। ਕਿਸੇ ਵੇਲੇ ਵੀ ਅਸਾਨੀ ਨਾਲ ਆਪਣਾ ਡਾਟਾ ਮੁੜ-ਬਹਾਲ ਕਰੋ ਜਾਂ ਡੀਵਾਈਸਾਂ ਵਿਚਾਲੇ ਅਦਲਾ-ਬਦਲੀ ਕਰੋ। ਤੁਹਾਡੇ ਬੈਕਅੱਪ ਵਿੱਚ ਐਪ ਡਾਟਾ ਸ਼ਾਮਲ ਹੈ।</translation> <translation id="9033765790910064284">ਫਿਰ ਵੀ ਜਾਰੀ ਰੱਖੋ</translation> <translation id="9033857511263905942">&ਪੇਸਟ ਕਰੋ</translation> @@ -6856,6 +6869,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ।}one{ਤੁਹਾਡੇ ਕੋਲ # ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ।}other{ਤੁਹਾਡੇ ਕੋਲ # ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ ਹਨ।}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">ਕੀ <ph name="ORIGIN" /> ਲਈ ਪਾਸਵਰਡ ਅੱਪਡੇਟ ਕਰਨਾ ਹੈ?</translation> +<translation id="9041049756004505730">ਲਾਈਵ ਸੁਰਖੀਆਂ ਦਿਖਣਯੋਗ, ਫੋਕਸ ਕਰਨ ਲਈ ⌘ + ਵਿਕਲਪ + ਉੱਪਰ ਤੀਰ ਜਾਂ ਹੇਠਾਂ ਤੀਰ ਵਾਲੀ ਕੁੰਜੀ ਦਬਾਓ</translation> <translation id="9041692268811217999">ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਨੇ ਤੁਹਾਡੀ ਮਸ਼ੀਨ 'ਤੇ ਸਥਾਨਕ ਫ਼ਾਈਲਾਂ ਤੱਕ ਪਹੁੰਚ ਬੰਦ ਕਰ ਦਿੱਤੀ ਹੈ</translation> <translation id="904224458472510106">ਇਸ ਕਾਰਵਾਈ ਨੂੰ ਅਣਕੀਤਾ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ</translation> <translation id="9042893549633094279">ਪਰਦੇਦਾਰੀ ਅਤੇ ਸੁਰੱਖਿਆ</translation> @@ -6894,6 +6908,7 @@ <translation id="9088446193279799727">Linux ਦਾ ਸੰਰੂਪਣ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ। ਇੰਟਰਨੈੱਟ ਨਾਲ ਕਨੈਕਟ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> <translation id="9088917181875854783">ਕਿਰਪਾ ਕਰਕੇ ਪੁਸ਼ਟੀ ਕਰੋ ਕਿ ਇਹ ਪਾਸਕੁੰਜੀ "<ph name="DEVICE_NAME" />" ਤੇ ਦਿਖਾਈ ਜਾਂਦੀ ਹੈ:</translation> <translation id="9089416786594320554">ਇਨਪੁਟ ਵਿਧੀਆਂ</translation> +<translation id="909108997331068008"><ph name="EXISTING_USER" /> ਦਾ ਪ੍ਰੋਫਾਈਲ ਪਹਿਲਾਂ ਹੀ <ph name="NEW_USER" /> ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕੀਤਾ ਹੋਇਆ ਹੈ</translation> <translation id="9093429538970210897">ਅੱਪਗ੍ਰੇਡ ਪੂਰਾ ਨਾ ਹੋਣ ਦੀ ਹਾਲਤ ਵਿੱਚ ਫ਼ਾਈਲਾਂ ਦਾ ਬੈਕਅੱਪ ਲੈਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਅੱਪਗ੍ਰੇਡ ਸ਼ੁਰੂ ਕਰਨ 'ਤੇ Linux (ਬੀਟਾ) ਬੰਦ ਹੋ ਜਾਵੇਗਾ। ਕਿਰਪਾ ਕਰਕੇ ਅੱਗੇ ਵਧਣ ਤੋਂ ਪਹਿਲਾਂ ਖੁੱਲ੍ਹੀਆਂ ਫ਼ਾਈਲਾਂ ਨੂੰ ਰੱਖਿਅਤ ਕਰ ਲਵੋ।</translation> <translation id="9094033019050270033">ਪਾਸਵਰਡ ਅੱਪਡੇਟ ਕਰੋ</translation> <translation id="9094038138851891550">ਅਵੈਧ ਵਰਤੋਂਕਾਰ ਨਾਮ</translation> @@ -7067,5 +7082,6 @@ <translation id="994289308992179865">&ਲੂਪ</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">ਸੁਰੱਖਿ੍ਤ ਕਨੈਕਸ਼ਨ ਸਥਾਪਿਤ ਕਰ ਰਿਹਾ ਹੈ...</translation> +<translation id="99731366405731005">ਵਾਈ-ਫਾਈ ਸਿੰਕ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ <ph name="LINK1_BEGIN" />Chrome ਸਮਕਾਲੀਕਰਨ<ph name="LINK1_END" /> ਨੂੰ ਚਾਲੂ ਕਰੋ। <ph name="LINK2_BEGIN" />ਹੋਰ ਜਾਣੋ<ph name="LINK2_END" /></translation> <translation id="998747458861718449">ਜਾਂ&ਚ ਕਰੋ</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index b9c3915..ec79a29d 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -3782,7 +3782,7 @@ <translation id="5449588825071916739">Dodaj wszystkie karty do zakładek</translation> <translation id="5449716055534515760">Zamknij o&kno</translation> <translation id="5452974209916053028">Bieżąca sesja incognito: <ph name="RECENT_PERMISSIONS_CHANGE_SENTENCE_START" />, <ph name="RECENT_PERMISSIONS_CHANGE_1" />, <ph name="RECENT_PERMISSIONS_CHANGE_2" /></translation> -<translation id="5454005855577728171">Dymek z napisami został przesunięty <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% w poprzek, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% w dół</translation> +<translation id="5454005855577728171">Dymek z napisami został przesunięty o <ph name="POSITION_ON_SCREEN_FROM_LEFT" />% w poprzek, <ph name="POSITION_ON_SCREEN_FROM_TOP" />% w dół</translation> <translation id="5454166040603940656">za pomocą <ph name="PROVIDER" /></translation> <translation id="5457113250005438886">Nieprawidłowe</translation> <translation id="5457459357461771897">Odczyt i usuwanie zdjęć, muzyki oraz innych multimediów na komputerze</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index 9a92247..1caa3a0 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">Ваши документы, таблицы, презентации и рисунки синхронизируются. Запустите приложение "Google Диск", чтобы получить к ним доступ в режиме онлайн или офлайн.</translation> <translation id="1012876632442809908">Устройство USB-C (порт спереди)</translation> <translation id="1013707859758800957">На этой странице был запущен плагин, работающий вне тестовой среды.</translation> +<translation id="1015041505466489552">Джойстик TrackPoint</translation> <translation id="1015318665228971643">Изменение названия папки</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{<ph name="DEVICE_TYPE" />: последний день для установки обновлений}one{<ph name="DEVICE_TYPE" />: на установку обновлений остался {NUM_DAYS} день}few{<ph name="DEVICE_TYPE" />: на установку обновлений осталось {NUM_DAYS} дня}many{<ph name="DEVICE_TYPE" />: на установку обновлений осталось {NUM_DAYS} дней}other{<ph name="DEVICE_TYPE" />: на установку обновлений осталось {NUM_DAYS} дня}}</translation> <translation id="1016566241875885511">Дополнительная информация (необязательно)</translation> @@ -557,7 +558,7 @@ <translation id="1627408615528139100">Файл уже скачан</translation> <translation id="1628948239858170093">Проверить файл перед открытием?</translation> <translation id="1629314197035607094">Срок действия пароля истек.</translation> -<translation id="163072119192489970">Разрешить сайтам отправлять и получать данные в фоновом режиме</translation> +<translation id="163072119192489970">Разрешить сайтам завершать отправку и получение данных</translation> <translation id="1630768113285622200">Перезапустить и продолжить</translation> <translation id="1632082166874334883">Пароль, сохраненный в вашем аккаунте Google</translation> <translation id="1632803087685957583">Позволяет настроить подсказки, скорость повтора клавиш и т д.</translation> @@ -2665,7 +2666,7 @@ <translation id="4058793769387728514">Проверить документ</translation> <translation id="406070391919917862">Фоновые приложения</translation> <translation id="4061374428807229313">Чтобы открыть доступ к папке, нажмите на нее правой кнопкой мыши в приложении "Файлы" и выберите "Предоставить доступ Parallels Desktop".</translation> -<translation id="406213378265872299">Настраиваемое поведение</translation> +<translation id="406213378265872299">Специальные настройки</translation> <translation id="4065876735068446555">Возможно, вам нужно перейти на страницу входа сети <ph name="NETWORK_ID" />.</translation> <translation id="4066207411788646768">Чтобы увидеть принтеры, доступные в вашей сети, подключитесь к Интернету.</translation> <translation id="4068776064906523561">Сохраненные отпечатки пальцев</translation> @@ -4119,7 +4120,7 @@ <translation id="5841270259333717135">Настроить Ethernet</translation> <translation id="5842497610951477805">Включение и отключение Bluetooth</translation> <translation id="5843706793424741864">По шкале Фаренгейта</translation> -<translation id="584451707753263735">Отображаются автоматические субтитры. Чтобы переключаться между диалоговыми окнами, нажимайте клавишу F6.</translation> +<translation id="584451707753263735">Отображаются автоматические субтитры. Чтобы переключаться между окнами, нажимайте клавишу F6.</translation> <translation id="5844574845205796324">Предлагать контент</translation> <translation id="5846200638699387931">Ошибка синтаксиса отношений: <ph name="ERROR_LINE" />.</translation> <translation id="5846807460505171493">Установка обновлений и приложений. Продолжая, вы разрешаете устройству автоматически скачивать и устанавливать обновления и приложения от производителя устройства, оператора связи и компании Google (в том числе по мобильной сети). Некоторые из этих приложений могут предлагать платный контент.</translation> @@ -4515,7 +4516,7 @@ <translation id="6295158916970320988">Все сайты</translation> <translation id="6295855836753816081">Сохранение...</translation> <translation id="6298962879096096191">Использование Google Play для установки приложений Android</translation> -<translation id="6300177430812514606">Запретить сайтам отправлять и получать данные в фоновом режиме</translation> +<translation id="6300177430812514606">Запретить сайтам завершать отправку и получение данных</translation> <translation id="630065524203833229">В&ыход</translation> <translation id="6300718114348072351">Не удалось автоматически настроить принтер "<ph name="PRINTER_NAME" />". Задайте дополнительные параметры. <ph name="LINK_BEGIN" />Подробнее…<ph name="LINK_END" /></translation> <translation id="6301076166764763868">Чтобы использовать браузер в личных целях, а не как <ph name="EXISTING_USER" />, создайте в Chrome профиль для аккаунта <ph name="NEW_USER" />.</translation> @@ -6350,7 +6351,7 @@ <translation id="8449036207308062757">Управление хранилищем</translation> <translation id="8452135315243592079">SIM-карта не обнаружена</translation> <translation id="8455026683977728932">Не удалось включить ADB для создания иллюстраций</translation> -<translation id="8456398879271637452">Отображаются автоматические субтитры. Чтобы переключаться между диалоговыми окнами, нажимайте клавиши Ctrl + Назад или Ctrl + Вперед.</translation> +<translation id="8456398879271637452">Отображаются автоматические субтитры. Чтобы переключаться между окнами, нажимайте клавиши Ctrl + Назад или Ctrl + Вперед.</translation> <translation id="845702320058262034">Не удается подключиться к телефону. Убедитесь, что на нем включен Bluetooth.</translation> <translation id="8457451314607652708">Импортировать закладки</translation> <translation id="8458627787104127436">Открыть все (<ph name="URL_COUNT" />) в новом окне</translation> @@ -6871,7 +6872,7 @@ <translation id="9039014462651733343">{NUM_ATTEMPTS,plural, =1{У вас осталась одна попытка.}one{У вас осталась # попытка.}few{У вас осталось # попытки.}many{У вас осталось # попыток.}other{У вас осталось # попытки.}}</translation> <translation id="9039663905644212491">PEAP</translation> <translation id="9040661932550800571">Обновить пароль для <ph name="ORIGIN" />?</translation> -<translation id="9041049756004505730">Отображаются автоматические субтитры. Чтобы переключаться между диалоговыми окнами, нажимайте клавиши ⌘ + Option + Стрелка вверх или Стрелка вниз.</translation> +<translation id="9041049756004505730">Отображаются автоматические субтитры. Чтобы переключаться между окнами, нажимайте клавиши ⌘ + Option + Стрелка вверх или Стрелка вниз.</translation> <translation id="9041692268811217999">Доступ к локальным файлам на вашем компьютере отключен администратором.</translation> <translation id="904224458472510106">Это действие нельзя будет отменить.</translation> <translation id="9042893549633094279">Конфиденциальность и безопасность</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb index 3cecafd..8cf98bb9 100644 --- a/chrome/app/resources/generated_resources_si.xtb +++ b/chrome/app/resources/generated_resources_si.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">ඔබේ ලේඛන, පත්රිකා, ස්ලයිඩ, සහ චිත්ර ගොනු සමමු කෙරෙමින් පවතී. ඒවා වෙත ඔන්ලයින් හෝ ඕෆ්ලයින් ලෙස පිවිසීමට Google Drive විවෘත කරන්න.</translation> <translation id="1012876632442809908">USB-C උපාංගය (ඉදිරිපස තොට)</translation> <translation id="1013707859758800957">මෙම පිටුව මත unsandboxed ප්ලගිනයකට ඉඩ දෙන ලදී.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">ෆෝල්ඩරයේ නම සංස්කරණය</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{<ph name="DEVICE_TYPE" /> යාවත්කාලීන කිරීමට ඇති අවසාන දිනය}one{<ph name="DEVICE_TYPE" /> දින {NUM_DAYS}ක් ඇතුළත යාවත්කාලීන කරන්න}other{<ph name="DEVICE_TYPE" /> දින {NUM_DAYS}ක් ඇතුළත යාවත්කාලීන කරන්න}}</translation> <translation id="1016566241875885511">අතිරේක තතු (විකල්පමය)</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index 65a211f..45e16bec 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">Vaše súbory v službách Dokumenty, Tabuľky, Prezentácie a Nákresy sa synchronizujú. Otvorte službu Disk Google a pristúpte k ním online alebo offline.</translation> <translation id="1012876632442809908">Zariadenie USB-C (port vpredu)</translation> <translation id="1013707859758800957">Na tejto stránke bolo povolené spustenie doplnku, ktorý nie je v karanténe</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">Úprava názvu priečinka</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{Posledný deň na aktualizáciu zariadenia <ph name="DEVICE_TYPE" />}few{Aktualizujte <ph name="DEVICE_TYPE" /> do {NUM_DAYS} dní}many{Aktualizujte <ph name="DEVICE_TYPE" /> do {NUM_DAYS} dňa}other{Aktualizujte <ph name="DEVICE_TYPE" /> do {NUM_DAYS} dní}}</translation> <translation id="1016566241875885511">Ďalšie informácie (nepovinné)</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index 877ffd1..e8162ba4 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">Datoteke v Google Dokumentih, Google Preglednicah, Google Predstavitvah in Google Risbah se sinhronizirajo. Če želite dostopati do njih, ko imate internetno povezavo ali ste brez nje, odprite aplikacijo Google Drive.</translation> <translation id="1012876632442809908">Naprava USB-C (sprednja vrata)</translation> <translation id="1013707859758800957">Vtičniku brez varnostnih omejitev je bilo dovoljeno izvajanje na tej strani.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">Urejanje imena mape</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{Zadnji dan za posodobitev naprave <ph name="DEVICE_TYPE" />}one{Napravo <ph name="DEVICE_TYPE" /> posodobite v {NUM_DAYS} dnevu}two{Napravo <ph name="DEVICE_TYPE" /> posodobite v {NUM_DAYS} dnevih}few{Napravo <ph name="DEVICE_TYPE" /> posodobite v {NUM_DAYS} dnevih}other{Napravo <ph name="DEVICE_TYPE" /> posodobite v {NUM_DAYS} dnevih}}</translation> <translation id="1016566241875885511">Dodatni podatki (izbirno)</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index 58d0dba9..8bb14ae 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">Faili zako za Hati, Majedwali, Slaidi, na Michoro zinasawazishwa. Fungua programu ya Hifadhi ya Google ili uzifikie mtandaoni ama nje ya mtandao.</translation> <translation id="1012876632442809908">Kifaa cha USB-C (mlango wa mbele)</translation> <translation id="1013707859758800957">Programu jalizi isiyo kwenye sandbox iliruhusiwa kutekeleza kwenye ukurasa huu.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">Badilisha Jina la Folda</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{Siku ya mwisho ya kusasisha <ph name="DEVICE_TYPE" />}other{Sasisha <ph name="DEVICE_TYPE" /> ndani ya siku {NUM_DAYS}}}</translation> <translation id="1016566241875885511">Maelezo ya ziada (hiari)</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 8419edfc..3fd2c78 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">உங்கள் 'ஆவணங்கள்', 'தாள்கள்', 'ஸ்லைடுகள்' மற்றும் 'வரைபடக்' கோப்புகள் ஒத்திசைக்கப்படுகின்றன. அவற்றை ஆன்லைனிலோ ஆஃப்லைனிலோ அணுக Google இயக்கக ஆப்ஸைத் திறக்கவும்.</translation> <translation id="1012876632442809908">USB-C சாதனம் (முன்பக்கப் போர்ட்)</translation> <translation id="1013707859758800957">சாண்ட்பாக்ஸ் செய்யப்படாத செருகுநிரல், இந்தப் பக்கத்தில் இயங்க அனுமதிக்கப்பட்டது.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">கோப்புறையின் பெயரை மாற்று</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{<ph name="DEVICE_TYPE" /> சாதனத்தைப் புதுப்பிப்பதற்கான கடைசி நாள்}other{{NUM_DAYS} நாட்களுக்குள் <ph name="DEVICE_TYPE" /> சாதனத்தைப் புதுப்பிக்க வேண்டும்}}</translation> <translation id="1016566241875885511">கூடுதல் தகவல் (விரும்பினால்)</translation> @@ -928,6 +929,7 @@ <translation id="204914487372604757">ஷார்ட்கட்டை உருவாக்குக</translation> <translation id="2050339315714019657">செங்குத்து நிலை</translation> <translation id="2053312383184521053">செயல்படா நிலையில் இருக்கும் தரவு</translation> +<translation id="2054665754582400095">எனது செயல்பாடு</translation> <translation id="2055585478631012616">திறந்துள்ள தாவல்களில் உள்ளவை உட்பட இந்தத் தளங்களிலிருந்து வெளியேற்றப்படுவீர்கள்</translation> <translation id="205560151218727633">Google அசிஸ்டண்ட் லோகோ</translation> <translation id="2058456167109518507">சாதனம் கண்டறியப்பட்டுள்ளது</translation> @@ -1214,6 +1216,7 @@ <translation id="2387052489799050037">முகப்பிற்குச் செல்லுதல்</translation> <translation id="2387458720915042159">ப்ராக்ஸி இணைப்பு வகை</translation> <translation id="2390347491606624519">ப்ராக்ஸியுடன் இணைக்க முடியவில்லை, மீண்டும் உள்நுழையவும்</translation> +<translation id="2390782873446084770">Wi-Fi ஒத்திசைவு</translation> <translation id="2391082728065870591">கருத்து அறிக்கையை அனுப்பு</translation> <translation id="2391419135980381625">நிலையான எழுத்துரு</translation> <translation id="2392163307141705938"><ph name="IDS_SHORT_PRODUCT_NAME" /> ஐப் பயன்படுத்த உங்கள் பெற்றோர் அமைத்த நேர வரம்பை அடைந்துவிட்டீர்கள்.</translation> @@ -1870,6 +1873,7 @@ <translation id="3157931365184549694">மீட்டமை</translation> <translation id="3158033540161634471">உங்கள் கைரேகையை அமைக்கவும்</translation> <translation id="3159493096109238499">பெய்ஜ்</translation> +<translation id="3159978855457658359">சாதனத்தின் பெயரை மாற்றுங்கள்</translation> <translation id="3160842278951476457"><ph name="ISSUED_BY" /> [<ph name="ISSUED_TO" />] (வன்பொருளில் சேமிக்கப்பட்டிருக்கும்)</translation> <translation id="3161522574479303604">எல்லா மொழிகளும்</translation> <translation id="3162853326462195145">பள்ளிக் கணக்கு</translation> @@ -3230,6 +3234,7 @@ <translation id="4761104368405085019">உங்கள் மைக்ரோஃபோனைப் பயன்படுத்தலாம்</translation> <translation id="4762718786438001384">சாதனத்தின் வட்டில் காலியிடம் மிகவும் குறைவாக உள்ளது</translation> <translation id="4763408175235639573">இந்தப் பக்கத்தை நீங்கள் பார்த்தபோது பின்வரும் குக்கீகள் அமைக்கப்பட்டன:</translation> +<translation id="4764368918650455114">இரண்டு சாதனங்களும் அன்லாக் செய்யப்பட்டிருப்பதையும் அருகருகே இருப்பதையும் அவற்றில் புளூடூத் ஆன் செய்யப்பட்டிருப்பதையும் உறுதிசெய்துகொள்ளவும். Chromebookகுடன் பகிர்கிறீர்கள் எனில் அதில் ‘அருகிலுள்ளவற்றுடன் பகிர்தல்’ அம்சம் ஆன் செய்யப்பட்டிருப்பதை உறுதிசெய்துகொள்ளவும் (நேரத்தைத் தேர்ந்தெடுத்து நிலைப் பகுதியைத் திறந்துவிட்டு ‘அருகிலுள்ளவற்றுடன் பகிர்தல்’ அம்சத்தைத் தேர்ந்தெடுக்கவும்). <ph name="LINK_BEGIN" />மேலும் அறிக<ph name="LINK_END" /></translation> <translation id="4765582662863429759">உங்கள் மொபைலில் இருந்து Chromebookகுக்கு மெசேஜ்களை ரிலே செய்ய Android மெசேஜஸை அனுமதிக்கும்</translation> <translation id="476598255842811483">உங்கள் சாதனத்தில் 'அருகிலுள்ளவற்றுடன் பகிர்தல்' அம்சத்தை நீங்கள் ஆன் செய்யாத வரை எவராலும் உங்களுடன் பகிர முடியாது</translation> <translation id="4768332406694066911">உங்களை அடையாளங்காணும் இந்த நிறுவனங்களின் சான்றிதழ்கள் உள்ளன</translation> @@ -3392,6 +3397,7 @@ <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation> <translation id="496185450405387901">உங்கள் நிர்வாகி இந்த ஆப்ஸை நிறுவியுள்ளார்.</translation> <translation id="4964455510556214366">ஒழுங்கமைவு</translation> +<translation id="496446150016900060">வைஃபை நெட்வொர்க்குகளை உங்கள் மொபைலுடன் ஒத்திசைத்தல்</translation> <translation id="4965808351167763748">Hangouts Meetஐ இயக்க, இந்தச் சாதனத்தை நிச்சயமாக அமைக்க விரும்புகிறீர்களா?</translation> <translation id="496888482094675990">Google இயக்ககம், வெளிப்புறச் சேமிப்பகம் அல்லது உங்கள் Chrome OS சாதனத்தில் சேமித்துள்ள கோப்புகளுக்கான விரைவான அணுகலை Files ஆப்ஸ் வழங்குகிறது.</translation> <translation id="4971412780836297815">முடிந்ததும் திற</translation> @@ -3698,6 +3704,7 @@ <translation id="5341980496415249280">தொகுக்கிறது, காத்திருக்கவும்...</translation> <translation id="5342091991439452114">பின்னில் குறைந்தது <ph name="MINIMUM" /> இலக்கங்கள் இருக்க வேண்டும்</translation> <translation id="5344036115151554031">Linuxஸை மீட்டெடுக்கிறது</translation> +<translation id="5345916423802287046">நான் உள்நுழையும்போது ஆப்ஸைத் தொடங்கு</translation> <translation id="5350293332385664455">Google Assistantடை முடக்கு</translation> <translation id="535123479159372765">மற்றொரு சாதனத்திலிருந்து நகலெடுக்கப்பட்ட உரை</translation> <translation id="5352033265844765294">நேர முத்திரையிடுதல்</translation> @@ -4008,6 +4015,7 @@ <translation id="5704875434923668958">இதற்கு ஒத்திசைக்கிறது:</translation> <translation id="5705005699929844214">எப்போதும் அணுகல்தன்மை விருப்பங்களைக் காட்டு</translation> <translation id="5705882733397021510">பின்செல்</translation> +<translation id="5707117624115653804">இந்த அமைப்பு ஆதரிக்கப்படும் ஆப்ஸிலும் தளங்களிலும் வசனத்தின் அளவையும் நடையையும் பிரத்தியேகமாக்குங்கள்</translation> <translation id="5707185214361380026">இதிலிருந்து நீட்டிப்பை ஏற்றுவதில் தோல்வி:</translation> <translation id="5708171344853220004">Microsoft Principal பெயர்</translation> <translation id="5709557627224531708">Chromeமை உங்கள் இயல்பு உலாவியாக அமைக்கவும்</translation> @@ -4171,6 +4179,7 @@ <translation id="5904614460720589786">உள்ளமைவுச் சிக்கல் காரணமாக <ph name="APP_NAME" /> ஆப்ஸை அமைக்க முடியவில்லை. உங்கள் நிர்வாகியைத் தொடர்புகொள்ளவும். பிழைக் குறியீடு: <ph name="ERROR_CODE" />.</translation> <translation id="5906655207909574370">கிட்டத்தட்ட புதுப்பிக்கப்பட்டது! புதுப்பிப்பதை முடிக்க, சாதனத்தை மறுதொடக்கம் செய்யவும்.</translation> <translation id="5906732635754427568">இந்தப் பயன்பாட்டுடன் தொடர்புடைய தரவு, எல்லாச் சாதனங்களிலிருந்தும் அகற்றப்படும்.</translation> +<translation id="5908474332780919512">நான் உள்நுழையும்போது ஆப்ஸைத் தொடங்கு</translation> <translation id="5908695239556627796">மவுஸ் நகர்த்துதல் வேகம்</translation> <translation id="5908769186679515905">Flashஐ இயக்குவதிலிருந்து தளங்களைத் தடு</translation> <translation id="5910363049092958439">படத்தை இவ்வாறு சே&மி...</translation> @@ -4710,6 +4719,7 @@ <translation id="6532527800157340614">உங்கள் அணுகல் டோக்கனை மீட்டெடுக்க இயலாததால் உள்நுழைய முடியவில்லை. நெட்வொர்க் இணைப்பைச் சரிபார்த்துவிட்டு மீண்டும் முயலவும்.</translation> <translation id="6532663472409656417">நிறுவனத்தால் பதிவுசெய்யப்பட்டது</translation> <translation id="6535331821390304775">தொடர்புடைய ஆப்ஸில் இந்த வகை இணைப்புகளைத் திறக்க எப்போதும் <ph name="ORIGIN" /> ஐ அனுமதி</translation> +<translation id="6537613839935722475">எழுத்துகள், எண்கள், இடைக்கோடுகள் (-) ஆகியவற்றைப் பெயரில் பயன்படுத்தலாம்</translation> <translation id="6538635548667167211">தற்போது டேட்டா உபயோக அமைப்பு ‘டேட்டா’ என அமைக்கப்பட்டுள்ளது</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />குறிப்பு:<ph name="END_BOLD" /> தரவைச் சேகரிப்பது செயல்திறனைக் குறைக்கும் என்பதால், நீங்கள் தெரிந்துதான் செய்கிறீர்கள் என்றால் அல்லது அவ்வாறு செய்ய வேண்டுமெனக் கேட்டுக்கொள்ளப்பட்டிருந்தால் மட்டும் இயக்கவும்.</translation> <translation id="6541638731489116978">இந்தத் தளம் உங்கள் மோஷன் சென்சார்களை அணுகுவது தடுக்கப்பட்டுள்ளது.</translation> @@ -4798,6 +4808,7 @@ <translation id="6650234781371031356"><ph name="WEBSITE" /> என்ற தளத்திற்கான கடவுச்சொல் இந்தச் சாதனத்திலும் உங்கள் Google கணக்கிலும் சேமிக்கப்பட்டுள்ளது. எதிலிருந்து அதை நீக்க விரும்புகிறீர்கள்?</translation> <translation id="665061930738760572">&புதிய சாளரத்தில் திற</translation> <translation id="6651237644330755633">இணையதளங்களை அடையாளங்காண, இந்தச் சான்றிதழை நம்பு</translation> +<translation id="6651495917527016072">வைஃபை நெட்வொர்க்குகள் உங்கள் மொபைலுடன் ஒத்திசைக்கப்படும். <ph name="LINK_BEGIN" />மேலும் அறிக<ph name="LINK_END" /></translation> <translation id="665355505818177700">x86_64 இயங்குதளங்களில் மட்டுமே Chrome <ph name="MS_AD_NAME" /> ஒருங்கிணைப்பு ஆதரிக்கப்படும். ARM அல்லது x86 இயங்குதளத்தைப் பயன்படுத்தி கட்டமைக்கப்பட்ட Chromebookகள், இந்தச் செயல்பாட்டை ஆதரிக்காது.</translation> <translation id="6654509035557065241">விருப்பமான நெட்வொர்க்காக அமை</translation> <translation id="6655190889273724601">டெவெலப்பர் பயன்முறை</translation> @@ -5401,6 +5412,7 @@ <translation id="7375235221357833624">{0,plural, =1{ஒரு மணிநேரத்திற்குள் சாதனத்தைப் புதுப்பிக்கவும்}other{# மணிநேரத்திற்குள் சாதனத்தைப் புதுப்பிக்கவும்}}</translation> <translation id="7376553024552204454">மவுஸ் கர்சரை நகர்த்தும் போது, அதை ஹைலைட் செய்</translation> <translation id="7377451353532943397">தொடர்ந்து சென்சார் அணுகலைத் தடு</translation> +<translation id="7378611153938412599">வலுவற்ற கடவுச்சொற்களை யூகிப்பது எளிது என்பதால் வலிமையான கடவுச்சொற்களை உருவாக்குங்கள். <ph name="BEGIN_LINK" />கூடுதல் உதவிக்குறிப்புகளைக் காண்க.<ph name="END_LINK" /></translation> <translation id="73786666777299047">Chrome இணைய அங்காடியைத் திற</translation> <translation id="7378812711085314936">டேட்டா இணைப்பைப் பெறு</translation> <translation id="7380622428988553498">சாதனத்தின் பெயரில் தவறான எழுத்துகள் உள்ளன</translation> @@ -5925,6 +5937,7 @@ <translation id="7959074893852789871">இந்தக் கோப்பில் பல சான்றிதழ்கள் உள்ளன, அவற்றில் சில இறக்குமதி செய்யப்படவில்லை:</translation> <translation id="7961015016161918242">எப்போதும் இல்லை</translation> <translation id="7963001036288347286">டச்பேட் ஆக்ஸிலரேஷன்</translation> +<translation id="7963608432878156675">புளூடூத் & நெட்வொர்க் இணைப்புகளுக்காக, பிற சாதனங்களுக்கு இந்தப் பெயர் காட்டப்படும்</translation> <translation id="7963826112438303517">அசிஸ்டண்ட் உங்கள் குரல் மாதிரியை உருவாக்கவும் மேம்படுத்தவும் இந்தப் பதிவுகளையும் நீங்கள் பேசிய கோரிக்கைகளையும் பயன்படுத்தும், இவை நீங்கள் Voice Matchசை இயக்கியுள்ள சாதனங்களில் மட்டும் சேமிக்கப்படும். அசிஸ்டண்ட் அமைப்புகளில் குரல் செயல்பாட்டைப் பார்க்கலாம் அல்லது மீண்டும் பயிற்சியளிக்கலாம்.</translation> <translation id="7966241909927244760">பட முகவரியை ந&கலெடு</translation> <translation id="7966571622054096916">{COUNT,plural, =1{புக்மார்க் பட்டியலில் 1 புக்மார்க் உள்ளது}other{புக்மார்க் பட்டியலில் {COUNT} புக்மார்க்குகள் உள்ளன}}</translation> @@ -6389,6 +6402,7 @@ <translation id="850875081535031620">தீங்கிழைக்கும் மென்பொருள் இல்லை</translation> <translation id="8509177919508253835">பாதுகாப்பு விசைகளை ரீசெட் செய்து பின்களை உருவாக்கலாம்</translation> <translation id="8509646642152301857">எழுத்துப் பிழை சரிபார்ப்பு அகராதியைப் பதிவிறக்குவதில் தோல்வி.</translation> +<translation id="8512396579636492893">{COUNT,plural, =0{வலுவற்ற கடவுச்சொற்கள் இல்லை}=1{வலுவற்ற {COUNT} கடவுச்சொல் உள்ளது}other{வலுவற்ற {COUNT} கடவுச்சொற்கள் உள்ளன}}</translation> <translation id="8512476990829870887">செயலாக்கத்தை முடி</translation> <translation id="851263357009351303"><ph name="HOST" /> ஐ படங்களைக் காண்பிக்க எப்போதும் அனுமதி</translation> <translation id="8513108775083588393">தானாகச் சுழற்று</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index 1da2352..99b558e 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">Google Dokümanlar, E-Tablolar, Slaytlar ve Çizimler dosyalarınız senkronize ediliyor. Bunlara çevrimiçi veya çevrimdışı olarak erişmek için Google Drive uygulamasını açın.</translation> <translation id="1012876632442809908">USB-C cihaz (ön bağlantı noktası)</translation> <translation id="1013707859758800957">Korumalı alanda olmayan bir eklentinin bu sayfada çalışmasına izin verildi.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">Klasör Adını Düzenle</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{<ph name="DEVICE_TYPE" /> cihazı güncellemek için son gün}other{<ph name="DEVICE_TYPE" /> cihazı {NUM_DAYS} gün içinde güncelleyin}}</translation> <translation id="1016566241875885511">Ek bilgi (isteğe bağlı)</translation> @@ -2510,7 +2511,7 @@ <translation id="3882165008614329320">Kameradan veya dosyadan mevcut video</translation> <translation id="3886446263141354045">Bu siteye erişim isteğiniz şu kişiye gönderildi: <ph name="NAME" /></translation> <translation id="3888550877729210209"><ph name="LOCK_SCREEN_APP_NAME" /> ile not alınıyor</translation> -<translation id="3890064827463908288">Wi-Fi Senkronizasyonunu kullanmak için Chrome Senkronizasyonunu açın</translation> +<translation id="3890064827463908288">Wi-Fi Senkronizasyonu'nu kullanmak için Chrome Senkronizasyonu'nu açın</translation> <translation id="3892414795099177503">OpenVPN / L2TP Ekle...</translation> <translation id="3893536212201235195">Erişilebilirlik ayarlarınızı okuma ve değiştirme</translation> <translation id="3893630138897523026">ChromeVox (sesli geri bildirim)</translation> @@ -7087,6 +7088,6 @@ <translation id="994289308992179865">&Döngü</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Güvenli bağlantı oluşturuluyor...</translation> -<translation id="99731366405731005">Wi-Fi Senkronizasyonunu kullanmak için <ph name="LINK1_BEGIN" />Chrome Senkronizasyonunu<ph name="LINK1_END" /> açın. <ph name="LINK2_BEGIN" />Daha fazla bilgi<ph name="LINK2_END" /></translation> +<translation id="99731366405731005">Wi-Fi Senkronizasyonu'nu kullanmak için <ph name="LINK1_BEGIN" />Chrome Senkronizasyonu<ph name="LINK1_END" />'nu açın. <ph name="LINK2_BEGIN" />Daha fazla bilgi<ph name="LINK2_END" /></translation> <translation id="998747458861718449">İ&ncele</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb index 82e9fa5..d2dc637d 100644 --- a/chrome/app/resources/generated_resources_ur.xtb +++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -929,6 +929,7 @@ <translation id="204914487372604757">شارٹ کٹ بنائیں</translation> <translation id="2050339315714019657">پورٹریٹ</translation> <translation id="2053312383184521053">معطل صورتحال کا ڈیٹا</translation> +<translation id="2054665754582400095">آپ کی موجودگی</translation> <translation id="2055585478631012616">اوپن ٹیبز سمیت، آپ ان سائٹس سے سائن آؤٹ ہو جائیں گے</translation> <translation id="205560151218727633">Google اسسٹنٹ لوگو</translation> <translation id="2058456167109518507">آلہ کا پتا چلا</translation> @@ -1215,6 +1216,7 @@ <translation id="2387052489799050037">ہوم پر جائیں</translation> <translation id="2387458720915042159">پراکسی کنکشن کی قسم</translation> <translation id="2390347491606624519">پراکسی سے منسلک نہیں ہو سکتے، براہ کرم دوبارہ سائن ان کریں</translation> +<translation id="2390782873446084770">Wi-Fi سِنک</translation> <translation id="2391082728065870591">تاثرات کی رپورٹ بھیجیں</translation> <translation id="2391419135980381625">معیاری فونٹ</translation> <translation id="2392163307141705938"><ph name="IDS_SHORT_PRODUCT_NAME" /> کے لیے آپ کے والدین کی سیٹ کی ہوئی آپ کی وقت کی حد پوری ہو گئی۔</translation> @@ -1871,6 +1873,7 @@ <translation id="3157931365184549694">بحال کریں</translation> <translation id="3158033540161634471">اپنے فنگر پرنٹ کو ترتیب دیں</translation> <translation id="3159493096109238499">زردی مائل بھورا</translation> +<translation id="3159978855457658359">آلے کے نام میں ترمیم کریں</translation> <translation id="3160842278951476457"><ph name="ISSUED_BY" /> [<ph name="ISSUED_TO" />] (ہارڈ ویئر کے ذریعے تعاون یافتہ)</translation> <translation id="3161522574479303604">سبھی زبانیں</translation> <translation id="3162853326462195145">اسکول کا اکاؤنٹ</translation> @@ -3231,6 +3234,7 @@ <translation id="4761104368405085019">اپنا مائیکروفون استعمال کریں</translation> <translation id="4762718786438001384">آلہ کے ڈسک کی جگہ انتہائی کم ہے</translation> <translation id="4763408175235639573">جب آپ نے یہ صفحہ ملاحظہ کیا تو مندرجہ ذیل کوکیز سیٹ کی گئی تھیں</translation> +<translation id="4764368918650455114">یقینی بنائیں کہ دونوں آلات غیر مقفل ہیں، ایک دوسرے کے قریب ہیں اور بلوٹوتھ آن ہیں۔ اگر آپ کسی Chromebook کے ساتھ اشتراک کر رہے ہیں تو اس بات کو یقینی بنائیں کہ اس میں قریبی آلات کے ساتھ اشتراک آن ہو چکا ہے (وقت کو منتخب کرکے اسٹیٹس ایریا کھولیں، پھر قریبی آلات کے ساتھ اشتراک کو منتخب کریں)۔ <ph name="LINK_BEGIN" />مزید جانیں<ph name="LINK_END" /></translation> <translation id="4765582662863429759">Android پیغامات کو آپ کے فون سے آپ کے Chromebook پر متنی پیغامت بھیجنے کی اجازت دیتی ہے</translation> <translation id="476598255842811483">آپ کے آلے پر آپ کے قریبی آلات کے ساتھ اشتراک کو کھولنے تک کوئی بھی آپ کے ساتھ اشتراک نہیں کر سکتا</translation> <translation id="4768332406694066911">آپ کی شناخت کرنے والی ان تنظیموں کی جانب سے آپ کے پاس سرٹیفیکیٹس ہیں</translation> @@ -3393,6 +3397,7 @@ <translation id="4960294539892203357"><ph name="WINDOW_TITLE" /> - <ph name="PROFILE_NAME" /></translation> <translation id="496185450405387901">یہ ایپ آپ کے منتظم نے انسٹال کی ہے۔</translation> <translation id="4964455510556214366">انتظام</translation> +<translation id="496446150016900060">اپنے فون کے ساتھ Wi-Fi نیٹ ورکس کو سنک کریں</translation> <translation id="4965808351167763748">کیا آپ واقعی Hangouts Meet چلانے کیلئے اس آلہ کو سیٹ اپ کرنا چاہتے ہیں؟</translation> <translation id="496888482094675990">فائلز ایپ ان فائلوں تک فوری رسائی فراہم کرتی ہے جنہیں آپ نے Google Drive، خارجی اسٹوریج یا اپنے Chrome OS آلے پر محفوظ کیا ہے۔</translation> <translation id="4971412780836297815">مکمل ہو جانے پر کھولیں</translation> @@ -3699,6 +3704,7 @@ <translation id="5341980496415249280">براہ کرم انتظار کریں، پیکنگ ہو رہی ہے…</translation> <translation id="5342091991439452114">PIN کا کم از کم <ph name="MINIMUM" /> ہندسے کا ہونا ضروری ہے</translation> <translation id="5344036115151554031">Linux بحال کیا جا رہا ہے</translation> +<translation id="5345916423802287046">اپنے سائن ان کرتے وقت ایپ شروع کریں</translation> <translation id="5350293332385664455">Google اسسٹنٹ کو بند کریں</translation> <translation id="535123479159372765">دوسرے آلے سے ٹیکسٹ کاپی کیا گیا</translation> <translation id="5352033265844765294">ٹائم اسٹامپنگ</translation> @@ -4008,6 +4014,7 @@ <translation id="5704875434923668958">یہاں مطابقت پذیری کی جا رہی ہے</translation> <translation id="5705005699929844214">ایکسیسبیلٹی اختیارات ہمیشہ دکھائیں</translation> <translation id="5705882733397021510">واپس جائیں</translation> +<translation id="5707117624115653804">اس ترتیب کو سپورٹ کرنے والی ایپس اور سائٹس کے ليے کیپشن سائز اور طرز کو حسب ضرورت بنائیں</translation> <translation id="5707185214361380026">ایکسٹیشن کو اس سے لوڈ کرنے میں ناکام:</translation> <translation id="5708171344853220004">Microsoft کا اصولی نام</translation> <translation id="5709557627224531708">Chrome کو اپنے ڈیفالٹ براؤزر کے بطور سیٹ کریں</translation> @@ -4171,6 +4178,7 @@ <translation id="5904614460720589786">کنفیگریشن میں مسئلہ پیش آنے کی وجہ سے <ph name="APP_NAME" /> کو سیٹ اپ نہیں کیا جا سکا۔ براہ کرم اپنے منتظم سے رابطہ کریں۔ خرابی کا کوڈ: <ph name="ERROR_CODE" />۔</translation> <translation id="5906655207909574370">تقریباً اپ ٹو ڈیٹ! اپ ڈیٹ کرنے کو مکمل کرنے کیلئے اپنا آلہ دوبارہ شروع کریں۔</translation> <translation id="5906732635754427568">اس ایپ سے وابستہ ڈیٹا کو اس آلہ سے ہٹا دیا جائے گا۔</translation> +<translation id="5908474332780919512">اپنے سائن ان کرتے وقت ایپ شروع کریں</translation> <translation id="5908695239556627796">ماؤس کے اسکرول کی رفتار</translation> <translation id="5908769186679515905">سائٹس کو فلیش چلانے سے مسدود کریں</translation> <translation id="5910363049092958439">تصویر مح&فوظ کریں بطور…</translation> @@ -4710,6 +4718,7 @@ <translation id="6532527800157340614">سائن ان ناکام ہو گیا کیونکہ آپ کا رسائی کا ٹوکن دوبارہ حاصل نہیں ہو سکا۔ براہ کرم اپنا نیٹ ورک کنکشن چیک کریں اور دوبارہ کوشش کریں۔</translation> <translation id="6532663472409656417">انٹرپرائز کا ادراج کیا گیا</translation> <translation id="6535331821390304775">وابستہ ایپ میں اس قسم کے لنکس کو کھولنے کے لیے ہمیشہ <ph name="ORIGIN" /> کو اجازت دیں</translation> +<translation id="6537613839935722475">نام حروف، اعداد اور ہائفنز (-) کا استعمال کر سکتا ہے</translation> <translation id="6538635548667167211">موجودہ ڈیٹا استعمال کی ترتیب ڈیٹا ہے</translation> <translation id="654039047105555694"><ph name="BEGIN_BOLD" />نوٹ:<ph name="END_BOLD" /> صرف اس وقت فعال کریں جب آپ کو معلوم ہو کہ آپ کیا کر رہے ہیں یا اگر آپ سے ایسا کرنے کو کہا گیا ہو، کیونکہ ڈیٹا جمع کرنے سے کارکردگی کم ہو سکتی ہے۔</translation> <translation id="6541638731489116978">اس سائٹ کو آپ کے موشن سینسرز تک رسائی حاصل کرنے سے مسدود کر دیا گیا ہے۔</translation> @@ -4798,6 +4807,7 @@ <translation id="6650234781371031356"><ph name="WEBSITE" /> کیلئے آپ کا پاس ورڈ اس آلے پر اور آپ کے Google اکاؤنٹ میں محفوظ ہے۔ آپ کسے حذف کرنا چاہتے ہیں؟</translation> <translation id="665061930738760572">نئی ونڈو میں کھولیں</translation> <translation id="6651237644330755633">ویب سائٹس کی شناخت کرنے کیلئے اس سرٹیفیکیٹ پر بھروسہ کریں</translation> +<translation id="6651495917527016072">اپنے فون کے ساتھ Wi-Fi نیٹ ورکس کو سنک کریں۔ <ph name="LINK_BEGIN" />مزید جانیں<ph name="LINK_END" /></translation> <translation id="665355505818177700">Chrome <ph name="MS_AD_NAME" /> انضمام صرف x86_64 پلیٹ فارمز پر تعاون یافتہ ہے۔ ARM یا x86 پلیٹ فارم پر تیار کردہ Chromebooks اس فعالیت کو سپورٹ نہیں کرتے ہیں۔</translation> <translation id="6654509035557065241">نیٹ ورک کو ترجیح دیں</translation> <translation id="6655190889273724601">ڈویلپر وضع</translation> @@ -5401,6 +5411,7 @@ <translation id="7375235221357833624">{0,plural, =1{ایک گھنٹے کے اندر آلہ اپ ڈیٹ کریں}other{# گھنٹے کے اندر آلہ اپ ڈیٹ کریں}}</translation> <translation id="7376553024552204454">ماؤس کا کرسر حرکت میں ہونے پر اسے ہائی لائٹ کریں</translation> <translation id="7377451353532943397">سینسر تک رسائی کو مسدود کرنا جاری رکھیں</translation> +<translation id="7378611153938412599">کمزور پاس ورڈز کا اندازہ لگانا آسان ہوتا ہے۔ مضبوط پاس ورڈز تخلیق کرنا یقینی بنائیں۔ <ph name="BEGIN_LINK" />سیکیورٹی کی مزید تجاویز دیکھیں۔<ph name="END_LINK" /></translation> <translation id="73786666777299047">Chrome ویب اسٹور کھولیں</translation> <translation id="7378812711085314936">ڈیٹا کنکشن حاصل کریں</translation> <translation id="7380622428988553498">آلے کے نام میں غلط حروف شامل ہیں</translation> @@ -5926,6 +5937,7 @@ <translation id="7959074893852789871">فائل میں متعدد سرٹیفیکیٹس شامل ہیں، ان میں سے کچھ کو درآمد نہیں کیا گیا:</translation> <translation id="7961015016161918242">کبھی نہیں</translation> <translation id="7963001036288347286">ٹچ پیڈ کا ایکسیلریشن</translation> +<translation id="7963608432878156675">یہ نام بلوٹوتھ اور نیٹ ورک کنکشنز کے لیے دیگر آلات کے لیے مرئی ہے</translation> <translation id="7963826112438303517">آپ کی اسسٹنٹ آپ کا صوتی ماڈل تخلیق اور اسے اپ ڈیٹ کرنے کیلئے ان ریکارڈنگز اور آپ کی صوتی درخواستوں کا استعمال کرتی ہے۔ یہ ماڈل صرف ان آلات پر اسٹور کیا جاتا ہے جن پر آپ نے Voice Match کو آن کر رکھا ہے۔ اسسٹنٹ کی ترتیبات میں صوتی سرگرمی دیکھیں یا دوبارہ تربیت دیں۔</translation> <translation id="7966241909927244760">تصویر کا پتہ کا&پی کریں</translation> <translation id="7966571622054096916">{COUNT,plural, =1{بُک مارک کی فہرست میں 1 آئٹم}other{بُک مارک کی فہرست میں {COUNT} آئٹمز}}</translation> @@ -6389,6 +6401,7 @@ <translation id="850875081535031620">کوئی نقصان دہ سافٹ ویئر نہیں ملا</translation> <translation id="8509177919508253835">سیکیورٹی کلیدوں کو دوبارہ ترتیب دیں اور PINs تخلیق کریں</translation> <translation id="8509646642152301857">املا کی جانچ کی لغت کو ڈاؤن لوڈ کرنا ناکام ہوگیا۔</translation> +<translation id="8512396579636492893">{COUNT,plural, =0{کوئی کمزور پاس ورڈز نہیں ملے}=1{{COUNT} کمزور پاس ورڈ ملا}other{{COUNT} کمزور پاس ورڈز ملے}}</translation> <translation id="8512476990829870887">کارروائی ختم کریں</translation> <translation id="851263357009351303"><ph name="HOST" /> کو تصاویر دکھانے کی ہمیشہ اجازت دیں</translation> <translation id="8513108775083588393">خودکار گھمائیں</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb index 766cafa..b86d301 100644 --- a/chrome/app/resources/generated_resources_uz.xtb +++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -1214,7 +1214,7 @@ <translation id="2387052489799050037">Boshiga</translation> <translation id="2387458720915042159">Proksi-server orqali ulanish turi</translation> <translation id="2390347491606624519">Proksi-serverga ulanilmadi, hisobingizga qaytadan kiring</translation> -<translation id="2390782873446084770">Wi-Fi sinxronizatsiyasi</translation> +<translation id="2390782873446084770">Wi-Fi Sync</translation> <translation id="2391082728065870591">Fikr va mulohaza hisobotini yuborish</translation> <translation id="2391419135980381625">Standard shrift</translation> <translation id="2392163307141705938">Ota-onangiz <ph name="IDS_SHORT_PRODUCT_NAME" /> uchun belgilagan foydalanish vaqti tugadi.</translation> @@ -2509,7 +2509,7 @@ <translation id="3882165008614329320">Kamera yoki galereyadan olingan video</translation> <translation id="3886446263141354045">Bu saytni ochishga ruxsat so‘rovi <ph name="NAME" />ga yuborildi</translation> <translation id="3888550877729210209">Qaydlar <ph name="LOCK_SCREEN_APP_NAME" /> dasturida yoziladi</translation> -<translation id="3890064827463908288">Wi-Fi tarmoqlarni sinxronlash uchun Chrome sinxronizatsiyasini yoqing</translation> +<translation id="3890064827463908288">Wi-Fi Sync ishlatish uchun Chrome Sync funksiyasini yoqing</translation> <translation id="3892414795099177503">OpenVPN yoki L2TP qo‘shish...</translation> <translation id="3893536212201235195">Maxsus imkoniyatlar sozlamarini o‘qish va o‘zgartirish</translation> <translation id="3893630138897523026">ChromeVox (ovozli ta’rif)</translation> @@ -3928,7 +3928,7 @@ <translation id="5602765853043467355">Qurilmadagi xatcho‘plar, tarix, parollar va boshqa ma’lumotlarni tozalash</translation> <translation id="5605623530403479164">Boshqa qidiruv tizimlari</translation> <translation id="5605758115928394442">Telefoningizga bildirishnoma yuborildi. Shaxsingizni tasdiqlang.</translation> -<translation id="560834977503641186">Wi-Fi sinxronizatsiyasi, Batafsil</translation> +<translation id="560834977503641186">Wi-Fi Sync, Batafsil</translation> <translation id="5608580678041221894">Qirqilayotgan maydonni surish yoki moslash uchun quyidagi tugmalar ustiga bosing</translation> <translation id="5609231933459083978">Ilova nomi noto‘g‘ri kiritilganga o‘xshaydi.</translation> <translation id="5610038042047936818">Foto rejimini yoqish</translation> @@ -4983,7 +4983,7 @@ <translation id="6865313869410766144">Avtomatik to‘ldirish ma’lumotlari</translation> <translation id="6865598234501509159">Sahifa <ph name="LANGUAGE" /> tilida emas</translation> <translation id="6865708901122695652">WebRTC hodisa jurnallari (<ph name="WEBRTC_EVENT_LOG_COUNT" />)</translation> -<translation id="686609795364435700">Tinch joy</translation> +<translation id="686609795364435700">Sokin</translation> <translation id="686664946474413495">Rang harorati</translation> <translation id="6868934826811377550">Batafsil</translation> <translation id="6871644448911473373">OCSP javob beruvchisi: <ph name="LOCATION" /></translation> @@ -5206,7 +5206,7 @@ <translation id="7121362699166175603">Manzil qatoridagi tarix va avto‘ldirishlarni tozalaydi. Google hisobingiz orqali bajargan internetdagi faoliyatingizni <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> orqali ko‘rishingiz mumkin.</translation> <translation id="7121438501124788993">Dasturchi rejimi</translation> <translation id="7121728544325372695">Smart tirelar</translation> -<translation id="7123030151043029868">Bir nechta fayllarni avtomati yuklashga ruxsat berilgan</translation> +<translation id="7123030151043029868">Bir nechta faylni avtomatik yuklashga ruxsat berilgan</translation> <translation id="7123360114020465152">Printer ta’minoti to‘xtatilgan</translation> <translation id="7125148293026877011">Crostini tizimini oʻchirish</translation> <translation id="7127980134843952133">Yuklanishlar tarixi</translation> @@ -6321,7 +6321,7 @@ <translation id="8419098111404128271">“<ph name="SEARCH_TEXT" />” uchun qidiruv natijalari</translation> <translation id="8419368276599091549"><ph name="DEVICE_TYPE" /> qurilmasiga xush kelibsiz!</translation> <translation id="8420308167132684745">Lugʻat yozuvlarini tahrirlash</translation> -<translation id="8421361468937925547">Jonli izoh (Faqat ingliz tilida)</translation> +<translation id="8421361468937925547">Jonli izoh (faqat ingliz tilida)</translation> <translation id="8422787418163030046">Tarnov joyida emas</translation> <translation id="8425213833346101688">O‘zgartirish</translation> <translation id="8425492902634685834">Vazifalar paneliga qadash</translation> @@ -6397,7 +6397,7 @@ <translation id="850875081535031620">Birorta ham zararli dastur topilmadi</translation> <translation id="8509177919508253835">Elektron kalitlarni asliga qaytarish va PIN kodlar yaratish</translation> <translation id="8509646642152301857">Imlo lug‘atini yuklab olish amalga oshmadi.</translation> -<translation id="8512396579636492893">{COUNT,plural, =0{Kuchsiz parol topilmadi}=1{{COUNT} ta kuchsiz parol topildi}other{{COUNT} ta kuchsiz parol topildi}}</translation> +<translation id="8512396579636492893">{COUNT,plural, =0{Kuchsiz parollar topilmadi}=1{{COUNT} ta kuchsiz parol topildi}other{{COUNT} ta kuchsiz parol topildi}}</translation> <translation id="8512476990829870887">Jarayonni yakunlash</translation> <translation id="851263357009351303"><ph name="HOST" /> rasmlarni doim ko‘rsatsin</translation> <translation id="8513108775083588393">Avto-burilish</translation> @@ -7085,6 +7085,6 @@ <translation id="994289308992179865">&Takrorlash</translation> <translation id="995782501881226248">YouTube</translation> <translation id="996250603853062861">Xavfsiz aloqa o‘rnatilmoqda...</translation> -<translation id="99731366405731005">Wi-Fi tarmoqlarni sinxronlash uchun <ph name="LINK1_BEGIN" />Chrome sinxronizatsiyasini<ph name="LINK1_END" /> yoqing <ph name="LINK2_BEGIN" />Batafsil<ph name="LINK2_END" /></translation> +<translation id="99731366405731005">Wi-Fi Sync ishlatish uchun <ph name="LINK1_BEGIN" />Chrome Sync<ph name="LINK1_END" /> funksiyasini yoqing <ph name="LINK2_BEGIN" />Batafsil<ph name="LINK2_END" /></translation> <translation id="998747458861718449">Kodini ko‘rish</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index 8e22da5..73f2ccaf 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">Các tệp Google Tài liệu, Trang tính, Trang trình bày và Bản vẽ của bạn đang được đồng bộ hóa. Mở ứng dụng Google Drive để truy cập chúng trực tuyến hoặc ngoại tuyến.</translation> <translation id="1012876632442809908">Thiết bị USB-C (cổng phía trước)</translation> <translation id="1013707859758800957">Một plugin không có hộp cát được cho phép chạy trên trang này.</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">Chỉnh sửa tên thư mục</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{Ngày cuối để cập nhật thiết bị <ph name="DEVICE_TYPE" />}other{Cập nhật thiết bị <ph name="DEVICE_TYPE" /> trong vòng {NUM_DAYS} ngày}}</translation> <translation id="1016566241875885511">Thông tin bổ sung (không bắt buộc)</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index 84672eab..07358ea 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">正在同步您的文档、表格、幻灯片和绘图文件。打开Google云端硬盘应用可在线或离线访问这些文件。</translation> <translation id="1012876632442809908">USB-C 设备(前方端口)</translation> <translation id="1013707859758800957">某个未经过沙盒屏蔽的插件已获准在此页上运行。</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">修改文件夹名称</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{今天是 <ph name="DEVICE_TYPE" /> 更新期限的最后一天}other{请在 {NUM_DAYS} 天内更新 <ph name="DEVICE_TYPE" />}}</translation> <translation id="1016566241875885511">其他信息(选填)</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index 4de83f3..7854702 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">系統正在同步處理你的文件、試算表、簡報和繪圖檔案。開啟 Google 雲端硬碟應用程式即可上網或離線存取你的檔案。</translation> <translation id="1012876632442809908">USB-C 裝置 (前方連接埠)</translation> <translation id="1013707859758800957">已允許這個網頁執行無沙箱防護的外掛程。</translation> +<translation id="1015041505466489552">TrackPoint</translation> <translation id="1015318665228971643">編輯資料夾名稱</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{今天是「<ph name="DEVICE_TYPE" />」更新期限的最後一天}other{請在 {NUM_DAYS} 天內更新「<ph name="DEVICE_TYPE" />」}}</translation> <translation id="1016566241875885511">其他資訊 (選填)</translation> @@ -558,7 +559,7 @@ <translation id="1627408615528139100">已下載</translation> <translation id="1628948239858170093">要先掃描檔案再開啟嗎?</translation> <translation id="1629314197035607094">密碼已過期</translation> -<translation id="163072119192489970">可以繼續完成傳送及接收資料</translation> +<translation id="163072119192489970">可以完成資料的傳送和接收</translation> <translation id="1630768113285622200">重新啟動並繼續</translation> <translation id="1632082166874334883">儲存在 Google 帳戶中的密碼</translation> <translation id="1632803087685957583">讓你調整鍵盤按鍵重複輸入速率、字詞預測功能等等</translation> @@ -957,7 +958,7 @@ <translation id="2090165459409185032">如要還原您的帳戶資訊,請前往 google.com/accounts/recovery</translation> <translation id="2090876986345970080">系統安全性設定</translation> <translation id="2091887806945687916">音訊</translation> -<translation id="209539936453343974">如要設定家長監護功能,孩子必須擁有受家長管理的 Google 帳戶。<ph name="DEVICE_TYPE_PLURAL" /> 可讓家長透過 Family Link 應用程式限制裝置使用時間、核准/封鎖網站,以及執行更多操作。如果孩子需要在 Google Classroom 等網站上完成學校作業,可於稍後新增學校帳戶。</translation> +<translation id="209539936453343974">如要設定家長監護功能,孩子必須擁有由家長管理的 Google 帳戶。<ph name="DEVICE_TYPE_PLURAL" /> 可讓家長透過 Family Link 應用程式限制裝置使用時間、核准/封鎖網站,以及執行更多操作。如果孩子需要在 Google Classroom 等網站上完成學校作業,之後可再新增學校帳戶。</translation> <translation id="2096715839409389970">清除第三方 Cookie</translation> <translation id="2097372108957554726">你必須登入 Chrome 註冊新裝置</translation> <translation id="2098805196501063469">檢查其餘密碼</translation> @@ -2502,7 +2503,7 @@ <translation id="3873423927483480833">顯示 PIN 碼</translation> <translation id="3873915545594852654">ARC++ 發生問題。</translation> <translation id="3874164307099183178">開啟 Google 助理</translation> -<translation id="3877075909000773256"><ph name="USER_NAME" />在裝置上的「鄰近分享」設定,所用分享帳戶為 <ph name="USER_EMAIL" />。</translation> +<translation id="3877075909000773256"><ph name="USER_NAME" />在裝置上的「鄰近分享」設定,透過 <ph name="USER_EMAIL" /> 進行分享。</translation> <translation id="387771067039689031">不得使用外掛程式存取電腦</translation> <translation id="3879748587602334249">下載管理員</translation> <translation id="3881478300875776315">顯示較少行</translation> @@ -2665,7 +2666,7 @@ <translation id="4058793769387728514">立即檢查文件</translation> <translation id="406070391919917862">背景應用程式</translation> <translation id="4061374428807229313">如要共用資料夾,請在「檔案」應用程式中的資料夾上按一下滑鼠右鍵,然後選取 [與 Parallels Desktop 共用]。</translation> -<translation id="406213378265872299">自訂行為</translation> +<translation id="406213378265872299">自訂設定</translation> <translation id="4065876735068446555">目前使用的網路 (<ph name="NETWORK_ID" />) 可能會要求您造訪登入網頁。</translation> <translation id="4066207411788646768">如要查看網路中的可用印表機,請檢查你的連線狀態</translation> <translation id="4068776064906523561">已儲存的指紋</translation> @@ -3835,7 +3836,7 @@ <translation id="5500709606820808700">今天已執行安全檢查</translation> <translation id="5501809658163361512">{COUNT,plural, =1{無法從「<ph name="DEVICE_NAME" />」接收 <ph name="ATTACHMENTS" />}other{無法從「<ph name="DEVICE_NAME" />」接收 <ph name="ATTACHMENTS" />}}</translation> <translation id="5502500733115278303">從 Firefox 匯入的書籤</translation> -<translation id="5502915260472117187">兒童</translation> +<translation id="5502915260472117187">孩子</translation> <translation id="5503982651688210506">繼續允許 <ph name="HOST" /> 使用與調整攝影機,以及存取麥克風</translation> <translation id="5505264765875738116">網站無法要求傳送通知給你</translation> <translation id="5505307013568720083">墨水已用盡</translation> @@ -4515,7 +4516,7 @@ <translation id="6295158916970320988">所有網站</translation> <translation id="6295855836753816081">儲存中...</translation> <translation id="6298962879096096191">使用 Google Play 安裝 Android 應用程式</translation> -<translation id="6300177430812514606">不得繼續完成傳送或接收資料</translation> +<translation id="6300177430812514606">不得完成資料的傳送或接收</translation> <translation id="630065524203833229">結束(&X)</translation> <translation id="6300718114348072351">無法自動設定「<ph name="PRINTER_NAME" />」。請手動設定印表機的進階選項。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation> <translation id="6301076166764763868">如要將個人瀏覽與 <ph name="EXISTING_USER" /> 的瀏覽區隔開來,請為「<ph name="NEW_USER" />」建立新的設定檔</translation> @@ -6208,7 +6209,7 @@ <translation id="826905130698769948">用戶端憑證無效</translation> <translation id="8270242299912238708">PDF 文件</translation> <translation id="827097179112817503">顯示 [首頁] 按鈕</translation> -<translation id="8271379370373330993">後續幾個步驟須由家長完成。你可以在完成帳戶設定後將 <ph name="DEVICE_TYPE" /> 返還給孩子。</translation> +<translation id="8271379370373330993">後續幾個步驟須由家長完成。你可以在完成帳戶設定後將 <ph name="DEVICE_TYPE" /> 交還給孩子。</translation> <translation id="8272443605911821513">如要管理擴充功能,只需按一下 [其他工具] 選單裡的 [擴充功能] 即可。</translation> <translation id="8274332263553132018">投放檔案</translation> <translation id="8274924778568117936">完成更新前,請勿將 <ph name="DEVICE_TYPE" /> 關機。<ph name="DEVICE_TYPE" /> 會在安裝完成後重新啟動。</translation> @@ -6233,7 +6234,7 @@ <translation id="8300011035382349091">編輯此分頁的書籤</translation> <translation id="8300374739238450534">午夜藍</translation> <translation id="8300849813060516376">OTASP 失敗</translation> -<translation id="8304383784961451596">你未獲授權,無法使用這個裝置。請與管理員聯絡,要求對方授予登入權限,或是使用 Family Link 受監督的 Google 帳戶登入。</translation> +<translation id="8304383784961451596">你未獲授權,無法使用這個裝置。請與管理員聯絡,要求對方授予登入權限,或使用受 Family Link 監督的 Google 帳戶登入。</translation> <translation id="8308179586020895837">當 <ph name="HOST" /> 要求存取攝影機時詢問我。</translation> <translation id="830868413617744215">測試版</translation> <translation id="8309458809024885768">憑證已存在</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb index 97e62204..2ad7aa0 100644 --- a/chrome/app/resources/generated_resources_zu.xtb +++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -17,6 +17,7 @@ <translation id="1012794136286421601">Amadokhumenti wakho, Amashidi, Amaslayidi, namafayela wemidwebo ayavumelaniswa. Vula uhlelo lokusebenza le-Google Drayivu ukuze ufinyelele kuwo uku-inthanethi noma okungaxhunyiwe ku-inthanethi.</translation> <translation id="1012876632442809908">Idivayisi ye-USB-C (imbobo ephambili)</translation> <translation id="1013707859758800957">I-plugin e-unsandboxed iye yavunyelwa ukuthi iqalise kuleli khasi.</translation> +<translation id="1015041505466489552">I-TrackPoint</translation> <translation id="1015318665228971643">Hlela igama lefolda</translation> <translation id="1015578595646638936">{NUM_DAYS,plural, =1{Usuku lokugcina lokubuyekeza i-<ph name="DEVICE_TYPE" />}one{Buyekeza i-<ph name="DEVICE_TYPE" /> phakathi nezinsuku ezingu-{NUM_DAYS}}other{Buyekeza i-<ph name="DEVICE_TYPE" /> phakathi nezinsuku ezingu-{NUM_DAYS}}}</translation> <translation id="1016566241875885511">lwazi olungeziwe (inketho)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_af.xtb b/chrome/app/resources/google_chrome_strings_af.xtb index 5807a7e..a460aee 100644 --- a/chrome/app/resources/google_chrome_strings_af.xtb +++ b/chrome/app/resources/google_chrome_strings_af.xtb
@@ -82,6 +82,7 @@ <translation id="2926676257163822632">Swak wagwoorde is maklik om te raai. Laat Chrome <ph name="BEGIN_LINK" />sterk wagwoorde vir jou skep en onthou<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">Chrome het nie opgedateer nie; iets het skeefgeloop. <ph name="BEGIN_LINK" />Stel Chrome-opdateringprobleme en mislukte opdaterings reg.<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – Netwerkaanmelding – Chrome</translation> +<translation id="298099161970687941">Vra wanneer Chrome oopmaak</translation> <translation id="3037838751736561277">Google Chrome is in agtergrondmodus.</translation> <translation id="3059710691562604940">Veiligblaai is afgeskakel. Chrome beveel aan dat jy dit aanskakel.</translation> <translation id="3065168410429928842">Chrome-oortjie</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ar.xtb b/chrome/app/resources/google_chrome_strings_ar.xtb index c9a4071..689dffc 100644 --- a/chrome/app/resources/google_chrome_strings_ar.xtb +++ b/chrome/app/resources/google_chrome_strings_ar.xtb
@@ -80,6 +80,7 @@ <translation id="2926676257163822632">من السهل تخمين كلمات المرور الضعيفة. يمكنك السماح لمتصفِّح Chrome <ph name="BEGIN_LINK" />بإنشاء كلمات مرور قوية وتذكُّرها لك<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">تعذّر تحديث Chrome بسبب حدوث خطأ. <ph name="BEGIN_LINK" />حلّ مشاكل تحديث Chrome وتعذُّر التحديثات<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - Chrome - تسجيل الدخول إلى الشبكة</translation> +<translation id="298099161970687941">السؤال عند فتح متصفِّح Chrome</translation> <translation id="3037838751736561277">Google Chrome في وضع الخلفية.</translation> <translation id="3059710691562604940">تم إيقاف "التصفّح الآمن" ويقترح متصفّح Chrome تفعيله.</translation> <translation id="3065168410429928842">علامة تبويب Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_as.xtb b/chrome/app/resources/google_chrome_strings_as.xtb index 8693f776..a2b9cd5 100644 --- a/chrome/app/resources/google_chrome_strings_as.xtb +++ b/chrome/app/resources/google_chrome_strings_as.xtb
@@ -79,6 +79,7 @@ <translation id="2871893339301912279">আপুনি Chromeত ছাইন ইন হৈ আছে!</translation> <translation id="2885378588091291677">কাৰ্য পৰিচালক</translation> <translation id="2888126860611144412">Chromeৰ বিষয়ে</translation> +<translation id="2926676257163822632">দুৰ্বল পাছৱৰ্ডসমূহ অনুমান কৰিবলৈ সহজ। Chromeক <ph name="BEGIN_LINK" />আপোনাৰ বাবে শক্তিশালী পাছৱৰ্ড সৃষ্টি কৰিবলৈ আৰু মনত ৰাখিবলৈ দিয়ক<ph name="END_LINK" />।</translation> <translation id="2929907241665500097">Chrome আপডে'ট হোৱা নাই, কিবা ভুল হৈছে। <ph name="BEGIN_LINK" />Chromeৰ আপডে'ট সম্পর্কীয় সমস্যাবোৰ আৰু বিফল হোৱা আপডে'টসমূহ সমাধান কৰক।<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - নেটৱর্কত ছাইন ইন - Chrome</translation> <translation id="3037838751736561277">Google Chrome নেপথ্যৰ ম’ডত আছে।</translation>
diff --git a/chrome/app/resources/google_chrome_strings_be.xtb b/chrome/app/resources/google_chrome_strings_be.xtb index 8b36e72..ac08e26 100644 --- a/chrome/app/resources/google_chrome_strings_be.xtb +++ b/chrome/app/resources/google_chrome_strings_be.xtb
@@ -82,6 +82,7 @@ <translation id="2926676257163822632">Ненадзейныя паролі лёгка адгадаць. Дазвольце Chrome <ph name="BEGIN_LINK" />ствараць для вас надзейныя паролі і запамінаць іх<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">Chrome не абнавіўся. Нешта пайшло не так. <ph name="BEGIN_LINK" />Выправіце праблемы з абнаўленнем Chrome і памылкі абнаўлення.<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – Уваход у сетку – Chrome</translation> +<translation id="298099161970687941">Пытацца пры адкрыцці Chrome</translation> <translation id="3037838751736561277">Google Chrome працуе ў фонавым рэжыме.</translation> <translation id="3059710691562604940">"Бяспечны прагляд" выключаны. Chrome рэкамендуе ўключыць гэты рэжым.</translation> <translation id="3065168410429928842">Укладка Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bg.xtb b/chrome/app/resources/google_chrome_strings_bg.xtb index cc10779..782aeab 100644 --- a/chrome/app/resources/google_chrome_strings_bg.xtb +++ b/chrome/app/resources/google_chrome_strings_bg.xtb
@@ -80,6 +80,7 @@ <translation id="2926676257163822632">Ненадеждните пароли са лесни за отгатване. Използвайте Chrome <ph name="BEGIN_LINK" />за създаване и запомняне на надеждни пароли за профилите ви<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">Chrome не се актуализира, защото нещо се обърка. <ph name="BEGIN_LINK" />Отстранете проблеми с актуализирането на Chrome и неуспешни актуализации<ph name="END_LINK" />.</translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – Вход в мрежата – Chrome</translation> +<translation id="298099161970687941">Запитване, когато Chrome се отвори</translation> <translation id="3037838751736561277">Google Chrome работи на заден план.</translation> <translation id="3059710691562604940">Функцията „Безопасно сърфиране“ е изключена. Chrome препоръчва да я включите.</translation> <translation id="3065168410429928842">Раздел в Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_de.xtb b/chrome/app/resources/google_chrome_strings_de.xtb index bf233e4..5146730 100644 --- a/chrome/app/resources/google_chrome_strings_de.xtb +++ b/chrome/app/resources/google_chrome_strings_de.xtb
@@ -146,7 +146,7 @@ <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation> <translation id="4771048833395599659">Diese Datei ist eventuell schädlich und wurde von Chrome blockiert.</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="4831688036548685548">Chrome hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: vor Kurzem.</translation> +<translation id="4831688036548685548">Chrome hat auf Ihrem Computer keine bekannte schädliche Software gefunden. Zuletzt geprüft: gerade eben.</translation> <translation id="4891791193823137474">Google Chrome im Hintergrund ausführen</translation> <translation id="4895437082222824641">Link in neuem Chrome-Tab öffnen</translation> <translation id="4953650215774548573">Google Chrome als Standardbrowser festlegen</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es-419.xtb b/chrome/app/resources/google_chrome_strings_es-419.xtb index dc8b92e..dc420a1a 100644 --- a/chrome/app/resources/google_chrome_strings_es-419.xtb +++ b/chrome/app/resources/google_chrome_strings_es-419.xtb
@@ -75,8 +75,10 @@ <translation id="2871893339301912279">Accediste a Google Chrome.</translation> <translation id="2885378588091291677">Administrador de tareas</translation> <translation id="2888126860611144412">Acerca de Chrome</translation> +<translation id="2926676257163822632">Las contraseñas poco seguras son fáciles de adivinar. Permite que Chrome <ph name="BEGIN_LINK" />cree y recuerde contraseñas seguras para ti<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">No se actualizó Chrome porque se produjo un error. <ph name="BEGIN_LINK" />Soluciona los problemas de actualización y las actualizaciones con error de Chrome.<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" />: Acceso a la red - Chrome</translation> +<translation id="298099161970687941">Preguntar al abrir Chrome</translation> <translation id="3037838751736561277">Google Chrome está en modo de segundo plano</translation> <translation id="3059710691562604940">La Navegación segura está desactivada. Chrome recomienda activarla.</translation> <translation id="3065168410429928842">Pestaña de Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_eu.xtb b/chrome/app/resources/google_chrome_strings_eu.xtb index 954b8300..09da7b0d 100644 --- a/chrome/app/resources/google_chrome_strings_eu.xtb +++ b/chrome/app/resources/google_chrome_strings_eu.xtb
@@ -82,6 +82,7 @@ <translation id="2926676257163822632">Seguruak ez diren pasahitzak erraz asmatzen dira. Utzi Chrome-ri <ph name="BEGIN_LINK" />pasahitz seguruak sortzen eta gogoratzen<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">Chrome ez da eguneratu arazoren bat izan delako. <ph name="BEGIN_LINK" />Konpondu Chrome eguneratzeko arazoak eta huts egindako eguneratzeak.<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - Hasi saioa sarean - Chrome</translation> +<translation id="298099161970687941">Galdetu Chrome irekitzean</translation> <translation id="3037838751736561277">Google Chrome atzeko planoko moduan dago.</translation> <translation id="3059710691562604940">Arakatze segurua desaktibatuta dago. Aktibatzea gomendatzen du Chrome-k.</translation> <translation id="3065168410429928842">Chrome fitxa</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fa.xtb b/chrome/app/resources/google_chrome_strings_fa.xtb index b07316cf..2363386 100644 --- a/chrome/app/resources/google_chrome_strings_fa.xtb +++ b/chrome/app/resources/google_chrome_strings_fa.xtb
@@ -78,6 +78,7 @@ <translation id="2926676257163822632">گذرواژههای ضعیف را میتوان بهراحتی حدس زد. به Chrome اجازه دهید <ph name="BEGIN_LINK" />گذرواژههایی قوی برایتان ایجاد کند و آنها را بهخاطر بسپارد<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">Chrome بهروزرسانی نشد؛ مشکلی پیش آمد. <ph name="BEGIN_LINK" />مشکلات بهروزرسانی Chrome و بهروزرسانیهای ناموفق را برطرف کنید.<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - ورود به سیستم شبکه - Chrome</translation> +<translation id="298099161970687941">وقتی Chrome را باز میکنم سؤال شود</translation> <translation id="3037838751736561277">Google Chrome در حالت پسزمینه است.</translation> <translation id="3059710691562604940">«مرور ایمن» خاموش است. Chrome توصیه میکند آن را روشن کنید.</translation> <translation id="3065168410429928842">برگه Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fi.xtb b/chrome/app/resources/google_chrome_strings_fi.xtb index 0cf0fc3..a67c03e 100644 --- a/chrome/app/resources/google_chrome_strings_fi.xtb +++ b/chrome/app/resources/google_chrome_strings_fi.xtb
@@ -78,6 +78,7 @@ <translation id="2926676257163822632">Heikko salasana on helppo arvata. Chrome voi <ph name="BEGIN_LINK" />luoda ja muistaa vahvoja salasanoja puolestasi<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">Chromea ei päivitetty, vaan jotain meni pieleen. <ph name="BEGIN_LINK" />Korjaa Chromen päivitysongelmat ja epäonnistuneet päivitykset<ph name="END_LINK" />.</translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – Kirjautuminen verkkoon – Chrome</translation> +<translation id="298099161970687941">Kysy, kun Chrome avataan</translation> <translation id="3037838751736561277">Google Chrome on käynnissä taustalla.</translation> <translation id="3059710691562604940">Selaussuoja on pois päältä. Chrome suosittelee laittamaan sen päälle.</translation> <translation id="3065168410429928842">Chrome-välilehti</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fr-CA.xtb b/chrome/app/resources/google_chrome_strings_fr-CA.xtb index bcf32f6..b73a1ce058 100644 --- a/chrome/app/resources/google_chrome_strings_fr-CA.xtb +++ b/chrome/app/resources/google_chrome_strings_fr-CA.xtb
@@ -82,6 +82,7 @@ <translation id="2926676257163822632">Les mots de passe faibles sont faciles à deviner. Vous pouvez laisser Chrome <ph name="BEGIN_LINK" />créer et mémoriser des mots de passe forts pour vous<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">La mise à jour de Chrome n'a pas été installée. Une erreur s'est produite. <ph name="BEGIN_LINK" />Découvrez comment résoudre les problèmes de mise à jour de Chrome.<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – Connexion au réseau – Chrome</translation> +<translation id="298099161970687941">Demander quand Chrome s'ouvre</translation> <translation id="3037838751736561277">Google Chrome fonctionne en mode arrière-plan.</translation> <translation id="3059710691562604940">La navigation sécurisée est désactivée. Chrome vous recommande de l'activer.</translation> <translation id="3065168410429928842">Onglet Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fr.xtb b/chrome/app/resources/google_chrome_strings_fr.xtb index a373d507..e5033aa 100644 --- a/chrome/app/resources/google_chrome_strings_fr.xtb +++ b/chrome/app/resources/google_chrome_strings_fr.xtb
@@ -18,7 +18,7 @@ <translation id="1355000804395496115">Utilisez plusieurs profils dans Chrome pour distinguer la navigation professionnelle de la navigation personnelle, ou pour les différentes personnes qui utilisent cet appareil</translation> <translation id="137466361146087520">Version bêta de Google Chrome</translation> <translation id="1399397803214730675">Une version plus récente de Google Chrome est déjà installée sur cet ordinateur. Si celle-ci ne fonctionne pas, désinstallez Google Chrome, puis réessayez.</translation> -<translation id="140541193409212341">Une erreur s'est produite alors que Chrome était en train de rechercher des logiciels malveillants sur votre ordinateur</translation> +<translation id="140541193409212341">Une erreur s'est produite alors que Chrome vérifiait la présence de logiciels malveillants sur votre ordinateur</translation> <translation id="1434626383986940139">Applications Chrome Canary</translation> <translation id="1513277449617685876">Pour distinguer votre navigation personnelle de celle associée à votre compte <ph name="NEW_USER" />, créez un profil dans Chrome</translation> <translation id="1553358976309200471">Mettre à jour Chrome</translation> @@ -60,7 +60,7 @@ <translation id="2429317896000329049">Impossible de synchroniser vos données dans Google Chrome, car la synchronisation n'est pas disponible pour votre domaine.</translation> <translation id="2467438592969358367">Google Chrome veut exporter vos mots de passe. Pour autoriser cette action, saisissez votre mot de passe Windows.</translation> <translation id="2485422356828889247">Désinstaller</translation> -<translation id="252502352004572774">Chrome recherche des logiciels malveillants sur votre ordinateur…</translation> +<translation id="252502352004572774">Chrome est en train de vérifier la présence de logiciels malveillants sur votre ordinateur…</translation> <translation id="2534507159460261402">Google Pay (copiée dans Chrome)</translation> <translation id="2580411288591421699">Impossible d'installer la version de Google Chrome qui est en cours d'exécution. Fermez Google Chrome et réessayez.</translation> <translation id="2586406160782125153">Cette action aura pour effet de supprimer vos données de navigation de cet appareil. Pour récupérer vos données ultérieurement, connectez-vous à Chrome en tant que <ph name="USER_EMAIL" />.</translation> @@ -275,7 +275,7 @@ <translation id="8834965163890861871">Google Chrome tente de modifier les mots de passe. Pour autoriser cette action, saisissez votre mot de passe Windows.</translation> <translation id="884296878221830158">Elle contrôle également la page qui s'affiche au démarrage de Chrome ou lorsque vous cliquez sur le bouton Accueil.</translation> <translation id="8862326446509486874">Vous ne disposez pas des droits requis pour installer la version système. Relancez l'installation en vous connectant comme administrateur.</translation> -<translation id="8907906903932240086">Chrome peut rechercher des logiciels malveillants sur votre ordinateur</translation> +<translation id="8907906903932240086">Chrome peut vérifier la présence de logiciels malveillants sur votre ordinateur</translation> <translation id="8914504000324227558">Relancer Google Chrome</translation> <translation id="8922193594870374009">Pour envoyer un numéro depuis <ph name="ORIGIN" /> vers votre téléphone Android, connectez-vous à Chrome sur les deux appareils.</translation> <translation id="8999208279178790196">{0,plural, =0{Une mise à jour de Chrome est disponible}=1{Une mise à jour de Chrome est disponible}one{Une mise à jour de Chrome est disponible depuis # jour}other{Une mise à jour de Chrome est disponible depuis # jours}}</translation> @@ -283,7 +283,7 @@ <translation id="9067395829937117663">Vous devez disposer de Windows 7 ou version ultérieure pour utiliser Google Chrome.</translation> <translation id="911206726377975832">Supprimer également vos données de navigation ?</translation> <translation id="9138603949443464873">Pour appliquer vos modifications, relancez Chrome</translation> -<translation id="9155112650704618965">{NUM_HOURS,plural, =1{Chrome n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a une heure.}one{Chrome n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_HOURS} heure.}other{Chrome n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_HOURS} heures.}}</translation> +<translation id="9155112650704618965">{NUM_HOURS,plural, =1{Chrome n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a 1 heure.}one{Chrome n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_HOURS} heure.}other{Chrome n'a détecté aucun logiciel malveillant connu sur votre ordinateur. Dernière vérification : il y a {NUM_HOURS} heures.}}</translation> <translation id="919706545465235479">Mettre à jour Chrome pour lancer la synchronisation</translation> <translation id="989369509083708165">Google Chrome est votre navigateur par défaut</translation> </translationbundle> \ No newline at end of file
diff --git a/chrome/app/resources/google_chrome_strings_hu.xtb b/chrome/app/resources/google_chrome_strings_hu.xtb index 8cd80b0..a077cfb 100644 --- a/chrome/app/resources/google_chrome_strings_hu.xtb +++ b/chrome/app/resources/google_chrome_strings_hu.xtb
@@ -78,6 +78,7 @@ <translation id="2926676257163822632">A gyenge jelszavakat könnyű kitalálni. Engedélyezze a Chrome számára, hogy <ph name="BEGIN_LINK" /> erős jelszavakat hozzon létre Önnek, és megjegyezze őket<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">Ismeretlen hiba történt, ezért a Chrome nem frissült. <ph name="BEGIN_LINK" />A Chrome frissítési problémáinak megoldása.<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – Hálózati bejelentkezés – Chrome</translation> +<translation id="298099161970687941">Kérdezzen rá a Chrome megnyitásakor</translation> <translation id="3037838751736561277">A Google Chrome háttérmódban van.</translation> <translation id="3059710691562604940">A Biztonságos Böngészés ki van kapcsolva. A Chrome a szolgáltatás bekapcsolását javasolja.</translation> <translation id="3065168410429928842">Chrome-lap</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hy.xtb b/chrome/app/resources/google_chrome_strings_hy.xtb index f1028e9..5803bf26 100644 --- a/chrome/app/resources/google_chrome_strings_hy.xtb +++ b/chrome/app/resources/google_chrome_strings_hy.xtb
@@ -80,6 +80,7 @@ <translation id="2926676257163822632">Թույլ գաղտնաբառերը հեշտ է գուշակել։ Թույլատրեք Chrome-ին <ph name="BEGIN_LINK" />գաղտնաբառեր ստեղծել և պահել ձեզ համար<ph name="END_LINK" />։</translation> <translation id="2929907241665500097">Անհայտ սխալի պատճառով չհաջողվեց թարմացնել Chrome-ը։ <ph name="BEGIN_LINK" />Շտկել Chrome-ի թարմացման հետ կապված խնդիրները<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" />– Ցանցի մուտք – Chrome</translation> +<translation id="298099161970687941">Հարցնել, երբ գործարկվում է Chrome-ը</translation> <translation id="3037838751736561277">Google Chrome-ն աշխատում է ֆոնային ռեժիմում:</translation> <translation id="3059710691562604940">Անվտանգ դիտարկումն անջատված է։ Chrome-ը խորհուրդ է տալիս միացնել այն։</translation> <translation id="3065168410429928842">Chrome-ի ներդիր</translation>
diff --git a/chrome/app/resources/google_chrome_strings_it.xtb b/chrome/app/resources/google_chrome_strings_it.xtb index d56c405..2811d5b4 100644 --- a/chrome/app/resources/google_chrome_strings_it.xtb +++ b/chrome/app/resources/google_chrome_strings_it.xtb
@@ -57,7 +57,7 @@ <translation id="2429317896000329049">Impossibile sincronizzare i dati in Google Chrome perché la sincronizzazione non è disponibile per il tuo dominio.</translation> <translation id="2467438592969358367">Google Chrome vuole esportare le password. Per consentire l'esportazione, digita la tua password Windows.</translation> <translation id="2485422356828889247">Disinstalla</translation> -<translation id="252502352004572774">Chrome sta controllando la presenza di software indesiderato sul computer…</translation> +<translation id="252502352004572774">Chrome sta controllando la presenza di software dannoso sul computer…</translation> <translation id="2534507159460261402">Google Pay (copiata in Chrome)</translation> <translation id="2580411288591421699">Impossibile installare la stessa versione di Google Chrome attualmente in esecuzione. Chiudi Google Chrome e riprova.</translation> <translation id="2586406160782125153">Verranno eliminati i tuoi dati di navigazione da questo dispositivo. Per recuperare i dati in un secondo momento, accedi a Chrome come <ph name="USER_EMAIL" />.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_iw.xtb b/chrome/app/resources/google_chrome_strings_iw.xtb index c34c9abe..f9790d74 100644 --- a/chrome/app/resources/google_chrome_strings_iw.xtb +++ b/chrome/app/resources/google_chrome_strings_iw.xtb
@@ -2,11 +2,11 @@ <!DOCTYPE translationbundle> <translationbundle lang="iw"> <translation id="1001534784610492198">הארכיון של המתקין פגום או שאינו חוקי. הורד שוב את Google Chrome.</translation> -<translation id="102763973188675173">כדי להתאים אישית את Google Chrome ולשלוט בו טוב יותר, כדאי להוריד את העדכון החדש.</translation> +<translation id="102763973188675173">כדי להתאים אישית את Google Chrome ולשלוט בו טוב יותר, יש להוריד את העדכון החדש.</translation> <translation id="1051826050538111504">יש במחשב שלך תוכנה מזיקה. Chrome יכול להסיר אותה, לשחזר את ההגדרות שלך ולהשבית תוספים כדי שהדפדפן יחזור שוב לפעולה רגילה.</translation> <translation id="1065672644894730302">לא היתה אפשרות לקרוא את ההעדפות שלך. ייתכן שחלק מהתכונות לא יהיו זמינות ושינויים בהעדפות לא יישמרו.</translation> <translation id="1088300314857992706">בכתובת <ph name="USER_EMAIL_ADDRESS" /> השתמשו בעבר ב-Chrome</translation> -<translation id="1088654056000736875">Chrome מסיר תוכנה מזיקה מהמחשב שלך…</translation> +<translation id="1088654056000736875">Chrome מסיר כעת תוכנה מזיקה מהמחשב שלך…</translation> <translation id="1097330777386562916">קובצי ה-Cookie ונתוני האתר ינוקו בכל יציאה מ-Chrome</translation> <translation id="110877069173485804">זה ה-Chrome שלך</translation> <translation id="1125124144982679672">מי משתמש/ת ב-Chrome?</translation> @@ -78,6 +78,7 @@ <translation id="2926676257163822632">קל לנחש סיסמאות חלשות. באמצעות Chrome אפשר <ph name="BEGIN_LINK" />ליצור ולזכור סיסמאות חזקות<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">Chrome לא התעדכן, משהו השתבש. <ph name="BEGIN_LINK" />לטיפול בבעיות בעדכון של Chrome ובעדכונים שנכשלו<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – כניסה לרשת – Chrome</translation> +<translation id="298099161970687941">הצגת שאלה בפתיחה של Chrome</translation> <translation id="3037838751736561277">Google Chrome נמצא במצב רקע.</translation> <translation id="3059710691562604940">הגלישה הבטוחה כבויה. ההמלצה של Chrome היא להפעיל אותה.</translation> <translation id="3065168410429928842">כרטיסייה של Chrome</translation> @@ -161,7 +162,7 @@ <translation id="532046782124376502">אזהרה: Google Chrome לא יכול למנוע מתוספים לתעד את היסטוריית הגלישה שלך. כדי להשבית את התוסף הזה במצב גלישה בסתר, יש לבטל את האפשרות הזו.</translation> <translation id="5386244825306882791">הגדרה זו גם קובעת איזה דף מוצג כשמפעילים את Chrome או כשמבצעים חיפוש מסרגל הכתובות.</translation> <translation id="5394833366792865639">שיתוף כרטיסיית Chrome</translation> -<translation id="5409605318138185493">{NUM_DAYS,plural, =1{Chrome לא גילה תוכנות מזיקות ידועות במחשב שלך. בדיקה אחרונה: לפני יום אחד.}two{Chrome לא גילה תוכנות מזיקות ידועות במחשב שלך. בדיקה אחרונה: לפני יומיים ({NUM_DAYS}).}many{Chrome לא גילה תוכנות מזיקות ידועות במחשב שלך. בדיקה אחרונה: לפני {NUM_DAYS} ימים.}other{Chrome לא גילה תוכנות מזיקות ידועות במחשב שלך. בדיקה אחרונה: לפני {NUM_DAYS} ימים.}}</translation> +<translation id="5409605318138185493">{NUM_DAYS,plural, =1{Chrome לא גילה תוכנות מזיקות ידועות במחשב שלך. בדיקה אחרונה: לפני יום אחד.}two{Chrome לא גילה תוכנות מזיקות ידועות במחשב שלך. בדיקה אחרונה: לפני ({NUM_DAYS}) ימים.}many{Chrome לא גילה תוכנות מזיקות ידועות במחשב שלך. בדיקה אחרונה: לפני {NUM_DAYS} ימים.}other{Chrome לא גילה תוכנות מזיקות ידועות במחשב שלך. בדיקה אחרונה: לפני {NUM_DAYS} ימים.}}</translation> <translation id="5430073640787465221">קובץ ההעדפות שלך פגום או לא חוקי. Google Chrome לא יכול לשחזר את ההגדרות שלך.</translation> <translation id="556024056938947818">Google Chrome מנסה להציג סיסמאות.</translation> <translation id="5566025111015594046">Google Chrome (mDNS-In)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ja.xtb b/chrome/app/resources/google_chrome_strings_ja.xtb index e462a4d0..0698d95 100644 --- a/chrome/app/resources/google_chrome_strings_ja.xtb +++ b/chrome/app/resources/google_chrome_strings_ja.xtb
@@ -78,6 +78,7 @@ <translation id="2926676257163822632">脆弱なパスワードは簡単に推測されてしまいます。Chrome で<ph name="BEGIN_LINK" />安全性の高いパスワードを自動生成して保存する<ph name="END_LINK" />ことができます。</translation> <translation id="2929907241665500097">エラーが発生したため、Chrome が更新されませんでした。<ph name="BEGIN_LINK" />Chrome の更新に関する問題を解決してください。<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - ネットワークにログイン - Chrome</translation> +<translation id="298099161970687941">Chrome を開くときに確認する</translation> <translation id="3037838751736561277">Google Chrome はバックグラウンド モードです。</translation> <translation id="3059710691562604940">セーフ ブラウジングがオフになっています。Chrome はオンにすることをおすすめしています。</translation> <translation id="3065168410429928842">Chrome タブ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ml.xtb b/chrome/app/resources/google_chrome_strings_ml.xtb index d28fe9c..2aaf53f0 100644 --- a/chrome/app/resources/google_chrome_strings_ml.xtb +++ b/chrome/app/resources/google_chrome_strings_ml.xtb
@@ -82,6 +82,7 @@ <translation id="2926676257163822632">ദുർബലമായ പാസ്വേഡുകൾ ഊഹിക്കാൻ എളുപ്പമാണ്. <ph name="BEGIN_LINK" />നിങ്ങൾക്കായി ശക്തമായ പാസ്വേഡുകൾ സൃഷ്ടിക്കാനും ഓർമ്മിക്കാനും<ph name="END_LINK" /> 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="298099161970687941">Chrome തുറക്കുമ്പോൾ ചോദിക്കുക</translation> <translation id="3037838751736561277">Google Chrome ഒരു പശ്ചാത്തല മോഡിലാണ്.</translation> <translation id="3059710691562604940">സുരക്ഷിത ബ്രൗസിംഗ് ഓഫാണ്. ഇത് ഓണാക്കാൻ Chrome നിർദ്ദേശിക്കുന്നു.</translation> <translation id="3065168410429928842">Chrome ടാബ്</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mr.xtb b/chrome/app/resources/google_chrome_strings_mr.xtb index adc5b2b..ba68b856 100644 --- a/chrome/app/resources/google_chrome_strings_mr.xtb +++ b/chrome/app/resources/google_chrome_strings_mr.xtb
@@ -57,7 +57,7 @@ <translation id="2309047409763057870">ही Google Chrome ची दुय्यम स्थापना असून त्यास तुमचा डीफॉल्ट ब्राउझर बनवू शकत नाही.</translation> <translation id="2348335408836342058">या साइटसाठी Chrome ला तुमचा कॅमेरा आणि मायक्रोफोन ॲक्सेस करण्याची परवानगी हवी आहे</translation> <translation id="234869673307233423">Chrome तुमचे पासवर्ड तपासू शकत नाही. नंतर पुन्हा प्रयत्न करा.</translation> -<translation id="2429317896000329049">आपल्या डोमेनसाठी संकालन उपलब्ध नसल्यामुळे Google Chrome तुमचा डेटा संकालित करू शकले नाही.</translation> +<translation id="2429317896000329049">आपल्या डोमेनसाठी सिंक उपलब्ध नसल्यामुळे Google Chrome तुमचा डेटा संकालित करू शकले नाही.</translation> <translation id="2467438592969358367">Google Chrome ला तुमचे पासवर्ड निर्यात करायचे आहेत. हे करू देण्यासाठी तुमचा Windows पासवर्ड टाइप करा.</translation> <translation id="2485422356828889247">अनइंस्टॉल करा</translation> <translation id="252502352004572774">Chrome तुमच्या कॉंप्युटरमधील हानिकारक सॉफ्टवेअर तपासत आहे...</translation> @@ -183,7 +183,7 @@ <translation id="5867197326698922595">Google Chrome पासवर्ड संपादित करण्याचा प्रयत्न करत आहे.</translation> <translation id="5895138241574237353">रीस्टार्ट करा</translation> <translation id="5903106910045431592"><ph name="PAGE_TITLE" /> - नेटवर्क साइन इन</translation> -<translation id="5940385492829620908">तुमचे वेब, बुकमार्क आणि अन्य Chrome सामग्री येथे थेट आहे.</translation> +<translation id="5940385492829620908">तुमचे वेब, बुकमार्क आणि अन्य Chrome आशय येथे थेट आहे.</translation> <translation id="5941830788786076944">Google Chromeला डीफॉल्ट ब्राउझर बनवा</translation> <translation id="6070348360322141662">अतिरिक्त सुरक्षिततेसाठी, Google Chrome तुमचा डेटा एंक्रिप्ट करेल</translation> <translation id="6113794647360055231">Chrome आता उत्कृष्ट झाले आहे</translation> @@ -221,7 +221,7 @@ <translation id="7339898014177206373">नवीन विंडो</translation> <translation id="7398801000654795464">तुम्ही <ph name="USER_EMAIL_ADDRESS" /> या रुपात Chrome मध्ये साइन इन केले होते. कृपया पुन्हा साइन इन करण्यासाठी समान खाते वापरा.</translation> <translation id="7408085963519505752">Chrome OS अटी</translation> -<translation id="7419046106786626209">आपल्या डोमेनसाठी संकालन उपलब्ध नसल्यामुळे Chrome OS तुमचा डेटा संकालित करू शकले नाही.</translation> +<translation id="7419046106786626209">आपल्या डोमेनसाठी सिंक उपलब्ध नसल्यामुळे Chrome OS तुमचा डेटा संकालित करू शकले नाही.</translation> <translation id="7423733001651488593">यामुळे या डिव्हाइसवरून तुमचा ब्राउझिंग डेटा कायमचा हटवला जाईल. डेटा रिकव्हर करण्यासाठी, Chrome वर या खात्याने साइन इन करा</translation> <translation id="7486227612705979895">ॲड्रेस बारमध्ये सूचना देण्यासाठी Chrome तुमची ड्राइव्ह ॲक्सेस करेल</translation> <translation id="7535429826459677826">Google Chrome डेव्हलपर</translation>
diff --git a/chrome/app/resources/google_chrome_strings_or.xtb b/chrome/app/resources/google_chrome_strings_or.xtb index 2f1b0462..c07df58 100644 --- a/chrome/app/resources/google_chrome_strings_or.xtb +++ b/chrome/app/resources/google_chrome_strings_or.xtb
@@ -79,6 +79,7 @@ <translation id="2871893339301912279">ଆପଣ Chromeରେ ସାଇନ୍ ଇନ୍ କରିଛନ୍ତି!</translation> <translation id="2885378588091291677">ଟାସ୍କ ପରିଚାଳକ</translation> <translation id="2888126860611144412">Chrome ବିଷୟରେ</translation> +<translation id="2926676257163822632">ଦୁର୍ବଳ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ଅନୁମାନ କରିବା ସହଜ ଅଟେ। Chromeକୁ <ph name="BEGIN_LINK" />ଆପଣଙ୍କ ପାଇଁ ଜଟିଳ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ତିଆରି କରି ମନେ ରଖିବାକୁ ଦିଅନ୍ତୁ<ph name="END_LINK" />।</translation> <translation id="2929907241665500097">Chrome ଅପଡେଟ୍ ହେଲା ନାହିଁ, କିଛି ତ୍ରୁଟି ହୋଇଗଲା। <ph name="BEGIN_LINK" />Chrome ଅପଡେଟ୍ ସମସ୍ୟା ଏବଂ ବିଫଳ ଅପଡେଟଗୁଡ଼ିକର ସମାଧାନ କରନ୍ତୁ।<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - ନେଟୱାର୍କ ସାଇନ୍-ଇନ୍ - Chrome</translation> <translation id="3037838751736561277">Google Chrome ପୃଷ୍ଠପଟ ମୋଡ୍ରେ ଅଛି।</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ru.xtb b/chrome/app/resources/google_chrome_strings_ru.xtb index 761d0a2..bd5dbea 100644 --- a/chrome/app/resources/google_chrome_strings_ru.xtb +++ b/chrome/app/resources/google_chrome_strings_ru.xtb
@@ -78,6 +78,7 @@ <translation id="2926676257163822632">Простые пароли легко подобрать. Разрешите Chrome <ph name="BEGIN_LINK" />создавать и хранить надежные пароли для вас<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">Не удалось обновить Chrome. <ph name="BEGIN_LINK" />Выяснить причины неполадок и устранить их<ph name="END_LINK" /></translation> <translation id="2969728957078202736">"<ph name="PAGE_TITLE" />" – вход в сеть – Chrome</translation> +<translation id="298099161970687941">Спрашивать во время запуска Chrome</translation> <translation id="3037838751736561277">Google Chrome работает в фоновом режиме</translation> <translation id="3059710691562604940">Безопасный просмотр отключен. Chrome рекомендует включить его.</translation> <translation id="3065168410429928842">Вкладка Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_si.xtb b/chrome/app/resources/google_chrome_strings_si.xtb index 7649240..874ab6c 100644 --- a/chrome/app/resources/google_chrome_strings_si.xtb +++ b/chrome/app/resources/google_chrome_strings_si.xtb
@@ -82,6 +82,7 @@ <translation id="2926676257163822632">දුර්වල මුරපද අනුමානය කිරීමට පහසුයි. <ph name="BEGIN_LINK" />ඔබ සඳහා ප්රබල මුරපද තැනීමට සහ මතක තබා ගැනීමට<ph name="END_LINK" /> 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="298099161970687941">Chrome විවෘත වන විට අසන්න</translation> <translation id="3037838751736561277">Google Chrome පසුබිම් ප්රකාරය තුළ ඇත.</translation> <translation id="3059710691562604940">සුරක්ෂිත පිරික්සුම ක්රියාවිරහිතයි. එය ක්රියාත්මක කිරීමට Chrome නිර්දේශ කරයි.</translation> <translation id="3065168410429928842">Chrome පටිත්ත</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sk.xtb b/chrome/app/resources/google_chrome_strings_sk.xtb index c9c6967..3a28a35 100644 --- a/chrome/app/resources/google_chrome_strings_sk.xtb +++ b/chrome/app/resources/google_chrome_strings_sk.xtb
@@ -80,6 +80,7 @@ <translation id="2926676257163822632">Slabé heslá sa dajú ľahko uhádnuť. Povoľte Chromu, <ph name="BEGIN_LINK" />aby vám vytváral silné heslá a pamätal si ich<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">Chrome sa neaktualizoval. Vyskytol sa problém. <ph name="BEGIN_LINK" />Vyriešiť problémy so sťahovaním aktualizácií Chromu a neúspešnými aktualizáciami<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – prihlásenie do siete – Chrome</translation> +<translation id="298099161970687941">Opýtať sa pri otvorení Chromu</translation> <translation id="3037838751736561277">Google Chrome je v režime na pozadí.</translation> <translation id="3059710691562604940">Bezpečné prehliadanie je vypnuté. Chrome ho odporúča zapnúť.</translation> <translation id="3065168410429928842">Karta Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sl.xtb b/chrome/app/resources/google_chrome_strings_sl.xtb index bea4c31..7a5d0fa 100644 --- a/chrome/app/resources/google_chrome_strings_sl.xtb +++ b/chrome/app/resources/google_chrome_strings_sl.xtb
@@ -82,6 +82,7 @@ <translation id="2926676257163822632">Šibka gesla je preprosto ugotoviti. Chromu omogočite, da <ph name="BEGIN_LINK" />ustvari zapletena gesla za vas in jih shrani<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">Chrome se ni posodobil, prišlo je do napake. <ph name="BEGIN_LINK" />Odpravite težave s posodobitvijo Chroma in neuspelimi posodobitvami Chroma.<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – Prijava v omrežje – Chrome</translation> +<translation id="298099161970687941">Vprašaj, ko se Chrome odpre</translation> <translation id="3037838751736561277">Google Chrome se izvaja v ozadju.</translation> <translation id="3059710691562604940">Varno brskanje je izklopljeno. Chrome priporoča, da ga vklopite.</translation> <translation id="3065168410429928842">Zavihek v Chromu</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sw.xtb b/chrome/app/resources/google_chrome_strings_sw.xtb index ff57d86..4a71ac6 100644 --- a/chrome/app/resources/google_chrome_strings_sw.xtb +++ b/chrome/app/resources/google_chrome_strings_sw.xtb
@@ -82,6 +82,7 @@ <translation id="2926676257163822632">Ni rahisi kukisia manenosiri dhaifu. Iruhusu Chrome <ph name="BEGIN_LINK" />itunge na ikumbuke manenosiri thabiti kwa niaba yako<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">Chrome haijasasishwa, hitilafu fulani imetokea. <ph name="BEGIN_LINK" />Rekebisha matatizo ya sasisho la Chrome na masasisho ambayo hayakuwekwa.<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - Kuingia katika Akaunti ya Mtandao - Chrome</translation> +<translation id="298099161970687941">Uliza Chrome inapofunguka</translation> <translation id="3037838751736561277">Google Chrome iko katika hali ya chini chini.</translation> <translation id="3059710691562604940">Kipengele cha Kuvinjari Salama kimezimwa. Chrome inapendekeza ukiwashe.</translation> <translation id="3065168410429928842">Kichupo cha Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ta.xtb b/chrome/app/resources/google_chrome_strings_ta.xtb index 950cf98c..78ef5551 100644 --- a/chrome/app/resources/google_chrome_strings_ta.xtb +++ b/chrome/app/resources/google_chrome_strings_ta.xtb
@@ -75,8 +75,10 @@ <translation id="2871893339301912279">Chrome இல் உள்நுழைந்துள்ளீர்கள்!</translation> <translation id="2885378588091291677">செயல் நிர்வாகி</translation> <translation id="2888126860611144412">Chrome அறிமுகம்</translation> +<translation id="2926676257163822632">வலுவற்ற கடவுச்சொற்களை யூகிப்பது எளிது என்பதால் <ph name="BEGIN_LINK" />வலிமையான கடவுச்சொற்களை உருவாக்கவும் நினைவில்கொள்ளவும்<ph name="END_LINK" /> 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="298099161970687941">Chromeமைத் திறக்கும்போது கேள்</translation> <translation id="3037838751736561277">Google Chrome பின்புலப் பயன்முறையில் இயங்குகிறது.</translation> <translation id="3059710691562604940">’பாதுகாப்பு உலாவல்‘ அம்சம் முடக்கப்பட்டுள்ளது. அதை இயக்குமாறு Chrome பரிந்துரைக்கிறது.</translation> <translation id="3065168410429928842">Chrome தாவல்</translation>
diff --git a/chrome/app/resources/google_chrome_strings_tr.xtb b/chrome/app/resources/google_chrome_strings_tr.xtb index e7b1790..7be1a976 100644 --- a/chrome/app/resources/google_chrome_strings_tr.xtb +++ b/chrome/app/resources/google_chrome_strings_tr.xtb
@@ -78,6 +78,7 @@ <translation id="2926676257163822632">Zayıf şifrelerin tahmin edilmesi kolaydır. Chrome'un <ph name="BEGIN_LINK" />sizin için güçlü şifre oluşturup bu şifreleri hatırlamasına<ph name="END_LINK" /> izin verin.</translation> <translation id="2929907241665500097">Chrome güncellenmedi. Bir sorun oluştu. <ph name="BEGIN_LINK" />Chrome güncelleme sorunlarını ve başarısız güncellemeleri düzeltin.<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - Ağda Oturum Açın - Chrome</translation> +<translation id="298099161970687941">Chrome açıldığında sor</translation> <translation id="3037838751736561277">Google Chrome arka plan modunda.</translation> <translation id="3059710691562604940">Güvenli Tarama kapalı. Chrome bunun açılmasını öneriyor.</translation> <translation id="3065168410429928842">Chrome Sekmesi</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ur.xtb b/chrome/app/resources/google_chrome_strings_ur.xtb index db8835f..6c9e6c5 100644 --- a/chrome/app/resources/google_chrome_strings_ur.xtb +++ b/chrome/app/resources/google_chrome_strings_ur.xtb
@@ -79,6 +79,7 @@ <translation id="2871893339301912279">آپ Chrome میں سائن ان ہیں!</translation> <translation id="2885378588091291677">ٹاسک مینیجر</translation> <translation id="2888126860611144412">Chrome کے بارے میں</translation> +<translation id="2926676257163822632">کمزور پاس ورڈز کا اندازہ لگانا آسان ہوتا ہے۔ Chrome کو <ph name="BEGIN_LINK" />آپ کے لیے مضبوط پاس ورڈز تخلیق کرنے اور یاد رکھنے دیں<ph name="END_LINK" />۔</translation> <translation id="2929907241665500097">Chrome اپ ڈیٹ نہیں ہوا، کچھ غلط ہو گیا۔ <ph name="BEGIN_LINK" />Chrome اپ ڈیٹ کی دشواریوں اور ناکام اپ ڈیٹس کو درست کریں۔<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - نیٹ ورک سائن ان - Chrome</translation> <translation id="3037838751736561277">Google Chrome پس منظر وضع میں ہے۔</translation>
diff --git a/chrome/app/resources/google_chrome_strings_uz.xtb b/chrome/app/resources/google_chrome_strings_uz.xtb index e7bee91..91af301c 100644 --- a/chrome/app/resources/google_chrome_strings_uz.xtb +++ b/chrome/app/resources/google_chrome_strings_uz.xtb
@@ -149,7 +149,7 @@ <translation id="4754614261631455953">Google Chrome Canary (mDNS-In)</translation> <translation id="4771048833395599659">Bu fayl zararli bo‘lishi mumkin va u Chrome tomonidan bloklandi.</translation> <translation id="479167709087336770">Google qidiruvida ishlatiladigan imlo tekshiruvi vositasidan foydalanadi. Brauzerda kiritiladigan matn Google serverlariga yuboriladi. Buni istalgan vaqtda sozlamalar orqali oʻzgartirish mumkin.</translation> -<translation id="4831688036548685548">Chrome kompyuteringizdan zararli dasturlarni topa olmadi. Oxirgi marta: hozirgina tekshirilgan.</translation> +<translation id="4831688036548685548">Chrome kompyuteringizdan zararli dasturlarni topa olmadi. Oxirgi marta: hozirgina tekshirildi.</translation> <translation id="4891791193823137474">Google Chrome fonda ishlashiga ruxsat</translation> <translation id="4895437082222824641">&Havolani yangi varaqda ochish</translation> <translation id="4953650215774548573">Google Chrome‘ni standart brauzer etib tayinlash</translation>
diff --git a/chrome/app/resources/google_chrome_strings_vi.xtb b/chrome/app/resources/google_chrome_strings_vi.xtb index 962c625..04cfe6f 100644 --- a/chrome/app/resources/google_chrome_strings_vi.xtb +++ b/chrome/app/resources/google_chrome_strings_vi.xtb
@@ -80,6 +80,7 @@ <translation id="2926676257163822632">Mật khẩu yếu thường dễ đoán. Chrome có thể <ph name="BEGIN_LINK" />tạo mật khẩu mạnh và ghi nhớ mật khẩu này cho bạn<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">Đã xảy ra lỗi nên Chrome chưa cập nhật được. <ph name="BEGIN_LINK" />Hãy khắc phục các vấn đề cập nhật và các bản cập nhật không thành công của Chrome.<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> – Đăng nhập vào mạng – Chrome</translation> +<translation id="298099161970687941">Hỏi khi Chrome mở</translation> <translation id="3037838751736561277">Google Chrome đang chạy trong nền.</translation> <translation id="3059710691562604940">Tính năng Duyệt web an toàn đang tắt. Bạn nên bật tính năng này trên Chrome.</translation> <translation id="3065168410429928842">Thẻ trình duyệt Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-CN.xtb b/chrome/app/resources/google_chrome_strings_zh-CN.xtb index d7dadbc..f56229b5 100644 --- a/chrome/app/resources/google_chrome_strings_zh-CN.xtb +++ b/chrome/app/resources/google_chrome_strings_zh-CN.xtb
@@ -77,6 +77,7 @@ <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="298099161970687941">在 Chrome 打开时询问</translation> <translation id="3037838751736561277">Google Chrome处于后台运行模式。</translation> <translation id="3059710691562604940">“安全浏览”功能已关闭。Chrome 建议开启此功能。</translation> <translation id="3065168410429928842">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 1f4dd88..a5f92e3 100644 --- a/chrome/app/resources/google_chrome_strings_zh-TW.xtb +++ b/chrome/app/resources/google_chrome_strings_zh-TW.xtb
@@ -78,6 +78,7 @@ <translation id="2926676257163822632">低強度密碼很容易讓有心人士猜中,請讓 Chrome <ph name="BEGIN_LINK" />為你建立一組高強度密碼,並儲存在 Chrome 中<ph name="END_LINK" />。</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="298099161970687941">在 Chrome 開啟時詢問</translation> <translation id="3037838751736561277">Google Chrome 正在背景模式中執行。</translation> <translation id="3059710691562604940">安全瀏覽功能已停用。Chrome 建議啟用這項功能。</translation> <translation id="3065168410429928842">Chrome 分頁</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zu.xtb b/chrome/app/resources/google_chrome_strings_zu.xtb index 43f39d30..73bbb7f 100644 --- a/chrome/app/resources/google_chrome_strings_zu.xtb +++ b/chrome/app/resources/google_chrome_strings_zu.xtb
@@ -82,6 +82,7 @@ <translation id="2926676257163822632">Amaphasiwedi angaqinile aqageleka kalula. Vumela i-Chrome <ph name="BEGIN_LINK" />ikudalele futhi ikhumbule amaphasiwedi aqinile<ph name="END_LINK" />.</translation> <translation id="2929907241665500097">I-Chrome ayibuyekezekanga, kunokuthile okungahambanga kahle. <ph name="BEGIN_LINK" />Lungisa izinkinga zokubuyekaza kwe-Chrome nezibuyekezo ezihlulekile.<ph name="END_LINK" /></translation> <translation id="2969728957078202736"><ph name="PAGE_TITLE" /> - Inethiwekhi Yokungena ngemvume - i-Chrome</translation> +<translation id="298099161970687941">Buza uma i-Chrome ivuleka</translation> <translation id="3037838751736561277">I-Google Chrome ikumodi yangemuva.</translation> <translation id="3059710691562604940">Ukuphequlula okuphephile kuvaliwe. I-Chrome incoma ukuba kuvulwe.</translation> <translation id="3065168410429928842">Ithebhu le-Chrome</translation>
diff --git a/chrome/app/settings_strings.grdp b/chrome/app/settings_strings.grdp index c371d91..c63ae9b9 100644 --- a/chrome/app/settings_strings.grdp +++ b/chrome/app/settings_strings.grdp
@@ -1839,6 +1839,30 @@ <message name="IDS_SETTINGS_SITE_SETTINGS_INSECURE_CONTENT_BLOCKED_EXCEPTIONS" desc="Label for the blocked exceptions site list of the insecure content content setting."> Not allowed to show insecure content </message> + <message name="IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_DESCRIPTION" desc="Description of the notifications content setting."> + Sites usually send notifications to let you know about breaking news or chat messages + </message> + <message name="IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_ALLOWED" desc="Label for the enabled option of the notifications content setting."> + Sites can ask to send notifications + </message> + <message name="IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_PARTIAL" desc="Label for the partial option of the notifications content setting."> + Use quieter messaging (recommended) + </message> + <message name="IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_PARTIAL_SUB_LABEL" desc="Sub-label for the partial option of the notifications content setting."> + Sites can't interrupt you by asking to send notifications + </message> + <message name="IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_BLOCKED" desc="Label for the blocked option of the notifications content setting."> + Block notifications + </message> + <message name="IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_BLOCKED_SUB_LABEL" desc="Sub-label for the blocked option of the notifications content setting."> + Features that need notifications won't work + </message> + <message name="IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_ALLOWED_EXCEPTIONS" desc="Label for the allowed exceptions site list of the notifications content setting."> + Allowed to send notifications + </message> + <message name="IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_BLOCKED_EXCEPTIONS" desc="Label for the blocked exceptions site list of the notifications content setting."> + Not allowed to send notifications + </message> <message name="IDS_SETTINGS_SITE_SETTINGS_PAYMENT_HANDLERS_DESCRIPTION" desc="Description of the payment handlers content setting."> Sites usually install payment handlers for shopping features like easier checkout </message>
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_ALLOWED.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_ALLOWED.png.sha1 new file mode 100644 index 0000000..d96e8127 --- /dev/null +++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_ALLOWED.png.sha1
@@ -0,0 +1 @@ +aa9abf5359a9fe9f5eeb24a6f4b37fb0633f5de8 \ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_ALLOWED_EXCEPTIONS.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_ALLOWED_EXCEPTIONS.png.sha1 new file mode 100644 index 0000000..d96e8127 --- /dev/null +++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_ALLOWED_EXCEPTIONS.png.sha1
@@ -0,0 +1 @@ +aa9abf5359a9fe9f5eeb24a6f4b37fb0633f5de8 \ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_BLOCKED.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_BLOCKED.png.sha1 new file mode 100644 index 0000000..d96e8127 --- /dev/null +++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_BLOCKED.png.sha1
@@ -0,0 +1 @@ +aa9abf5359a9fe9f5eeb24a6f4b37fb0633f5de8 \ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_BLOCKED_EXCEPTIONS.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_BLOCKED_EXCEPTIONS.png.sha1 new file mode 100644 index 0000000..d96e8127 --- /dev/null +++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_BLOCKED_EXCEPTIONS.png.sha1
@@ -0,0 +1 @@ +aa9abf5359a9fe9f5eeb24a6f4b37fb0633f5de8 \ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_BLOCKED_SUB_LABEL.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_BLOCKED_SUB_LABEL.png.sha1 new file mode 100644 index 0000000..d96e8127 --- /dev/null +++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_BLOCKED_SUB_LABEL.png.sha1
@@ -0,0 +1 @@ +aa9abf5359a9fe9f5eeb24a6f4b37fb0633f5de8 \ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_DESCRIPTION.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_DESCRIPTION.png.sha1 new file mode 100644 index 0000000..d96e8127 --- /dev/null +++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_DESCRIPTION.png.sha1
@@ -0,0 +1 @@ +aa9abf5359a9fe9f5eeb24a6f4b37fb0633f5de8 \ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_PARTIAL.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_PARTIAL.png.sha1 new file mode 100644 index 0000000..d96e8127 --- /dev/null +++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_PARTIAL.png.sha1
@@ -0,0 +1 @@ +aa9abf5359a9fe9f5eeb24a6f4b37fb0633f5de8 \ No newline at end of file
diff --git a/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_PARTIAL_SUB_LABEL.png.sha1 b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_PARTIAL_SUB_LABEL.png.sha1 new file mode 100644 index 0000000..d96e8127 --- /dev/null +++ b/chrome/app/settings_strings_grdp/IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_PARTIAL_SUB_LABEL.png.sha1
@@ -0,0 +1 @@ +aa9abf5359a9fe9f5eeb24a6f4b37fb0633f5de8 \ No newline at end of file
diff --git a/chrome/browser/android/customtabs/detached_resource_request.cc b/chrome/browser/android/customtabs/detached_resource_request.cc index e90f277..dd6aa4d 100644 --- a/chrome/browser/android/customtabs/detached_resource_request.cc +++ b/chrome/browser/android/customtabs/detached_resource_request.cc
@@ -126,7 +126,7 @@ // key. resource_request->trusted_params = network::ResourceRequest::TrustedParams(); resource_request->trusted_params->isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, site_for_cookies_origin, + net::IsolationInfo::RequestType::kOther, site_for_cookies_origin, site_for_cookies_origin, net::SiteForCookies::FromOrigin(site_for_cookies_origin));
diff --git a/chrome/browser/android/feature_engagement/tracker_factory_android.cc b/chrome/browser/android/feature_engagement/tracker_factory_android.cc index 20fcd1e9..8b48d02a 100644 --- a/chrome/browser/android/feature_engagement/tracker_factory_android.cc +++ b/chrome/browser/android/feature_engagement/tracker_factory_android.cc
@@ -7,8 +7,20 @@ #include "chrome/browser/feature_engagement/tracker_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_android.h" +#include "components/feature_engagement/public/android/wrapping_test_tracker.h" #include "components/feature_engagement/public/tracker.h" +namespace { + +std::unique_ptr<KeyedService> CreateWrapperTrackerFactory( + base::android::ScopedJavaGlobalRef<jobject> jtracker, + content::BrowserContext* context) { + return base::WrapUnique( + new feature_engagement::WrappingTestTracker(jtracker)); +} + +} // namespace + static base::android::ScopedJavaLocalRef<jobject> JNI_TrackerFactory_GetTrackerForProfile( JNIEnv* env, @@ -19,3 +31,16 @@ feature_engagement::TrackerFactory::GetInstance()->GetForBrowserContext( profile)); } + +static void JNI_TrackerFactory_SetTestingFactory( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& jprofile, + const base::android::JavaParamRef<jobject>& jtracker) { + Profile* profile = ProfileAndroid::FromProfileAndroid(jprofile); + DCHECK(profile); + + feature_engagement::TrackerFactory::GetInstance()->SetTestingFactory( + profile, base::BindRepeating( + &CreateWrapperTrackerFactory, + base::android::ScopedJavaGlobalRef<jobject>(jtracker))); +}
diff --git a/chrome/browser/android/profile_key_util.cc b/chrome/browser/android/profile_key_util.cc index 44f868c3..94a8ea99 100644 --- a/chrome/browser/android/profile_key_util.cc +++ b/chrome/browser/android/profile_key_util.cc
@@ -5,6 +5,7 @@ #include "chrome/browser/android/profile_key_util.h" #include "chrome/browser/android/profile_key_startup_accessor.h" +#include "chrome/browser/profiles/profile_key.h" #include "chrome/browser/profiles/profile_manager.h" namespace android { @@ -22,7 +23,7 @@ ProfileKey* key = ProfileKeyStartupAccessor::GetInstance()->profile_key(); if (!key) key = GetProfile()->GetProfileKey(); - DCHECK(key); + DCHECK(key && !key->IsOffTheRecord()); return key; }
diff --git a/chrome/browser/android/webapk/webapk_icon_hasher.cc b/chrome/browser/android/webapk/webapk_icon_hasher.cc index 2e53fafe..bb594bbd 100644 --- a/chrome/browser/android/webapk/webapk_icon_hasher.cc +++ b/chrome/browser/android/webapk/webapk_icon_hasher.cc
@@ -131,7 +131,7 @@ auto resource_request = std::make_unique<network::ResourceRequest>(); resource_request->trusted_params = network::ResourceRequest::TrustedParams(); resource_request->trusted_params->isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, request_initiator, + net::IsolationInfo::RequestType::kOther, request_initiator, request_initiator, net::SiteForCookies()); resource_request->request_initiator = request_initiator; resource_request->url = icon_url;
diff --git a/chrome/browser/apps/app_service/app_service_proxy.cc b/chrome/browser/apps/app_service/app_service_proxy.cc index a75a0f8..dd1e4ed 100644 --- a/chrome/browser/apps/app_service/app_service_proxy.cc +++ b/chrome/browser/apps/app_service/app_service_proxy.cc
@@ -470,6 +470,19 @@ std::move(callback)); } +void AppServiceProxy::ExecuteContextMenuCommand(const std::string& app_id, + int command_id, + const std::string& shortcut_id, + int64_t display_id) { + if (!app_service_.is_connected()) { + return; + } + + apps::mojom::AppType app_type = cache_.GetAppType(app_id); + app_service_->ExecuteContextMenuCommand(app_type, app_id, command_id, + shortcut_id, display_id); +} + void AppServiceProxy::OpenNativeSettings(const std::string& app_id) { if (app_service_.is_connected()) { cache_.ForOneApp(app_id, [this](const apps::AppUpdate& update) {
diff --git a/chrome/browser/apps/app_service/app_service_proxy.h b/chrome/browser/apps/app_service/app_service_proxy.h index a34746f6..9cda62b 100644 --- a/chrome/browser/apps/app_service/app_service_proxy.h +++ b/chrome/browser/apps/app_service/app_service_proxy.h
@@ -203,6 +203,14 @@ int64_t display_id, apps::mojom::Publisher::GetMenuModelCallback callback); + // Executes a shortcut menu |command_id| and |shortcut_id| for a menu item + // previously built with GetMenuModel(). |app_id| is the menu app. + // |display_id| is the id of the display from which the app is launched. + void ExecuteContextMenuCommand(const std::string& app_id, + int command_id, + const std::string& shortcut_id, + int64_t display_id); + // Opens native settings for the app with |app_id|. void OpenNativeSettings(const std::string& app_id);
diff --git a/chrome/browser/apps/app_service/arc_apps.cc b/chrome/browser/apps/app_service/arc_apps.cc index 8ce808c..cc319847 100644 --- a/chrome/browser/apps/app_service/arc_apps.cc +++ b/chrome/browser/apps/app_service/arc_apps.cc
@@ -962,6 +962,13 @@ std::move(callback)); } +void ArcApps::ExecuteContextMenuCommand(const std::string& app_id, + int command_id, + const std::string& shortcut_id, + int64_t display_id) { + arc::ExecuteArcShortcutCommand(profile_, app_id, shortcut_id, display_id); +} + void ArcApps::OpenNativeSettings(const std::string& app_id) { ArcAppListPrefs* prefs = ArcAppListPrefs::Get(profile_); if (!prefs) {
diff --git a/chrome/browser/apps/app_service/arc_apps.h b/chrome/browser/apps/app_service/arc_apps.h index 79d0d56..38e41cf0 100644 --- a/chrome/browser/apps/app_service/arc_apps.h +++ b/chrome/browser/apps/app_service/arc_apps.h
@@ -107,6 +107,10 @@ apps::mojom::MenuType menu_type, int64_t display_id, GetMenuModelCallback callback) override; + void ExecuteContextMenuCommand(const std::string& app_id, + int command_id, + const std::string& shortcut_id, + int64_t display_id) override; void OpenNativeSettings(const std::string& app_id) override; void OnPreferredAppSet( const std::string& app_id,
diff --git a/chrome/browser/apps/app_service/menu_util.cc b/chrome/browser/apps/app_service/menu_util.cc index 212c72c..9366516 100644 --- a/chrome/browser/apps/app_service/menu_util.cc +++ b/chrome/browser/apps/app_service/menu_util.cc
@@ -68,7 +68,7 @@ const gfx::ImageSkia& icon, apps::mojom::MenuItemsPtr* menu_items) { apps::mojom::MenuItemPtr menu_item = apps::mojom::MenuItem::New(); - menu_item->type = apps::mojom::MenuItemType::kArcCommand; + menu_item->type = apps::mojom::MenuItemType::kPublisherCommand; menu_item->command_id = command_id; menu_item->shortcut_id = shortcut_id; menu_item->label = label; @@ -182,7 +182,7 @@ break; case apps::mojom::MenuItemType::kRadio: case apps::mojom::MenuItemType::kSeparator: - case apps::mojom::MenuItemType::kArcCommand: + case apps::mojom::MenuItemType::kPublisherCommand: NOTREACHED(); return false; } @@ -197,7 +197,7 @@ case apps::mojom::MenuItemType::kSeparator: model->AddSeparator(static_cast<ui::MenuSeparatorType>(item->command_id)); break; - case apps::mojom::MenuItemType::kArcCommand: { + case apps::mojom::MenuItemType::kPublisherCommand: { model->AddItemWithIcon(item->command_id, base::UTF8ToUTF16(item->label), ui::ImageModel::FromImageSkia(item->image)); arc::ArcAppShortcutItem arc_shortcut_item;
diff --git a/chrome/browser/apps/app_service/web_apps_base.cc b/chrome/browser/apps/app_service/web_apps_base.cc index 357206b..b278bc5 100644 --- a/chrome/browser/apps/app_service/web_apps_base.cc +++ b/chrome/browser/apps/app_service/web_apps_base.cc
@@ -415,11 +415,7 @@ return; } - for (const web_app::WebApp& web_app : registrar->AllApps()) { - if (web_app.is_in_sync_install()) { - continue; - } - + for (const web_app::WebApp& web_app : registrar->GetApps()) { if (primary_pattern.Matches(web_app.start_url()) && Accepts(web_app.app_id())) { apps::mojom::AppPtr app = apps::mojom::App::New(); @@ -548,8 +544,8 @@ if (!registrar) return; - for (const web_app::WebApp& web_app : registrar->AllApps()) { - if (!web_app.is_in_sync_install() && Accepts(web_app.app_id())) { + for (const web_app::WebApp& web_app : registrar->GetApps()) { + if (Accepts(web_app.app_id())) { apps_out->push_back(Convert(&web_app, readiness)); } }
diff --git a/chrome/browser/apps/app_service/web_apps_chromeos.cc b/chrome/browser/apps/app_service/web_apps_chromeos.cc index 3287456..51c096bd 100644 --- a/chrome/browser/apps/app_service/web_apps_chromeos.cc +++ b/chrome/browser/apps/app_service/web_apps_chromeos.cc
@@ -233,6 +233,14 @@ std::move(callback).Run(std::move(menu_items)); } +void WebAppsChromeOs::ExecuteContextMenuCommand(const std::string& app_id, + int command_id, + const std::string& shortcut_id, + int64_t display_id) { + // TODO(crbug.com/1129721) Implement it for shortcut menu in web apps. + NOTIMPLEMENTED(); +} + void WebAppsChromeOs::OnWebAppUninstalled(const web_app::AppId& app_id) { const web_app::WebApp* web_app = GetWebApp(app_id); if (!web_app || !Accepts(app_id)) {
diff --git a/chrome/browser/apps/app_service/web_apps_chromeos.h b/chrome/browser/apps/app_service/web_apps_chromeos.h index 357c437a..e915a75 100644 --- a/chrome/browser/apps/app_service/web_apps_chromeos.h +++ b/chrome/browser/apps/app_service/web_apps_chromeos.h
@@ -64,6 +64,10 @@ apps::mojom::MenuType menu_type, int64_t display_id, GetMenuModelCallback callback) override; + void ExecuteContextMenuCommand(const std::string& app_id, + int command_id, + const std::string& shortcut_id, + int64_t display_id) override; // web_app::AppRegistrarObserver: void OnWebAppUninstalled(const web_app::AppId& app_id) override;
diff --git a/chrome/browser/browsing_data/access_context_audit_database.cc b/chrome/browser/browsing_data/access_context_audit_database.cc index 676e6d82..5ac9e50d 100644 --- a/chrome/browser/browsing_data/access_context_audit_database.cc +++ b/chrome/browser/browsing_data/access_context_audit_database.cc
@@ -19,8 +19,6 @@ const base::FilePath::CharType kDatabaseName[] = FILE_PATH_LITERAL("AccessContextAudit"); -const char kCookieTableName[] = "cookies"; -const char kStorageAPITableName[] = "originStorageAPIs"; static const int kVersionNumber = 1; // Callback that is fired upon an SQLite error, razes the database if the error @@ -54,10 +52,9 @@ // Returns true if a cookie table already exists in |db|, but is missing the // is_persistent field. bool CookieTableMissingIsPersistent(sql::Database* db) { - std::string select = "SELECT sql FROM sqlite_master WHERE name = '"; - select.append(kCookieTableName); - select.append("' AND type = 'table'"); - sql::Statement statement(db->GetUniqueStatement(select.c_str())); + const char kSelectCookieTable[] = + "SELECT sql FROM sqlite_master WHERE name = 'cookies' AND type = 'table'"; + sql::Statement statement(db->GetUniqueStatement(kSelectCookieTable)); // Unable to step implies cookies table does not exist. if (!statement.Step()) @@ -69,10 +66,9 @@ // Removes all cookie records in |db| with is_persistent = false. bool DeleteNonPersistentCookies(sql::Database* db) { - std::string remove = "DELETE FROM "; - remove.append(kCookieTableName); - remove.append(" WHERE is_persistent != 1"); - return db->Execute(remove.c_str()); + const char kRemoveNonPersistent[] = + "DELETE FROM cookies WHERE is_persistent != 1"; + return db->Execute(kRemoveNonPersistent); } bool IsContentSettingSessionOnly( @@ -192,38 +188,33 @@ // Simply remove the table in this case. Due to a flag misconfiguration this // version of the table was pushed to all canary users for a short period. // TODO(crbug.com/1102006): Remove this code before M86 branch point. - std::string drop_table = "DROP TABLE "; - drop_table.append(kCookieTableName); - if (!db_.Execute(drop_table.c_str())) + const char kDropCookiesTable[] = "DROP TABLE cookies"; + if (!db_.Execute(kDropCookiesTable)) return false; } - std::string create_table; - create_table.append("CREATE TABLE IF NOT EXISTS "); - create_table.append(kCookieTableName); - create_table.append( + const char kCreateCookiesTable[] = + "CREATE TABLE IF NOT EXISTS cookies " "(top_frame_origin TEXT NOT NULL," "name TEXT NOT NULL," "domain TEXT NOT NULL," "path TEXT NOT NULL," "access_utc INTEGER NOT NULL," "is_persistent INTEGER NOT NULL," - "PRIMARY KEY (top_frame_origin, name, domain, path))"); + "PRIMARY KEY (top_frame_origin, name, domain, path))"; - if (!db_.Execute(create_table.c_str())) + if (!db_.Execute(kCreateCookiesTable)) return false; - create_table.clear(); - create_table.append("CREATE TABLE IF NOT EXISTS "); - create_table.append(kStorageAPITableName); - create_table.append( + const char kCreateStorageApiTable[] = + "CREATE TABLE IF NOT EXISTS originStorageAPIs" "(top_frame_origin TEXT NOT NULL," "type INTEGER NOT NULL," "origin TEXT NOT NULL," "access_utc INTEGER NOT NULL," - "PRIMARY KEY (top_frame_origin, origin, type))"); + "PRIMARY KEY (top_frame_origin, origin, type))"; - return db_.Execute(create_table.c_str()); + return db_.Execute(kCreateStorageApiTable); } void AccessContextAuditDatabase::ComputeDatabaseMetrics() { @@ -286,23 +277,19 @@ // Create both insert statements ahead of iterating over records. These are // highly likely to both be used, and should be in the statement cache. - std::string insert; - insert.append("INSERT OR REPLACE INTO "); - insert.append(kCookieTableName); - insert.append( + const char kInsertCookieRecord[] = + "INSERT OR REPLACE INTO cookies " "(top_frame_origin, name, domain, path, access_utc, is_persistent) " - "VALUES (?, ?, ?, ?, ?, ?)"); + "VALUES (?, ?, ?, ?, ?, ?)"; sql::Statement insert_cookie( - db_.GetCachedStatement(SQL_FROM_HERE, insert.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kInsertCookieRecord)); - insert.clear(); - insert.append("INSERT OR REPLACE INTO "); - insert.append(kStorageAPITableName); - insert.append( + const char kInsertStorageApiRecord[] = + "INSERT OR REPLACE INTO originStorageAPIs" "(top_frame_origin, type, origin, access_utc) " - "VALUES (?, ?, ?, ?)"); + "VALUES (?, ?, ?, ?)"; sql::Statement insert_storage_api( - db_.GetCachedStatement(SQL_FROM_HERE, insert.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kInsertStorageApiRecord)); for (const auto& record : records) { if (record.type == StorageAPIType::kCookie) { @@ -340,23 +327,22 @@ void AccessContextAuditDatabase::RemoveRecord(const AccessRecord& record) { sql::Statement remove_statement; - std::string remove; - remove.append("DELETE FROM "); if (record.type == StorageAPIType::kCookie) { - remove.append(kCookieTableName); - remove.append( - " WHERE top_frame_origin = ? AND name = ? AND domain = ? AND path = ?"); + const char kRemoveCookieRecord[] = + "DELETE FROM cookies WHERE top_frame_origin = ? AND name = ? AND " + "domain = ? AND path = ?"; remove_statement.Assign( - db_.GetCachedStatement(SQL_FROM_HERE, remove.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kRemoveCookieRecord)); remove_statement.BindString(0, record.top_frame_origin.Serialize()); remove_statement.BindString(1, record.name); remove_statement.BindString(2, record.domain); remove_statement.BindString(3, record.path); } else { - remove.append(kStorageAPITableName); - remove.append(" WHERE top_frame_origin = ? AND type = ? AND origin = ?"); + const char kRemoveStorageApiRecord[] = + "DELETE FROM originStorageAPIs WHERE top_frame_origin = ? AND type = ? " + "AND origin = ?"; remove_statement.Assign( - db_.GetCachedStatement(SQL_FROM_HERE, remove.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kRemoveStorageApiRecord)); remove_statement.BindString(0, record.top_frame_origin.Serialize()); remove_statement.BindInt(1, static_cast<int>(record.type)); remove_statement.BindString(2, record.origin.Serialize()); @@ -371,14 +357,12 @@ if (!transaction.Begin()) return; - std::string delete_cookies_table = "DELETE FROM "; - delete_cookies_table.append(kCookieTableName); - if (!db_.Execute(delete_cookies_table.c_str())) + const char kClearCookiesTable[] = "DELETE FROM cookies"; + if (!db_.Execute(kClearCookiesTable)) return; - std::string delete_storage_api_table = "DELETE FROM "; - delete_storage_api_table.append(kStorageAPITableName); - if (!db_.Execute(delete_storage_api_table.c_str())) + const char kClearStorageApiTable[] = "DELETE FROM originStorageAPIs"; + if (!db_.Execute(kClearStorageApiTable)) return; transaction.Commit(); @@ -390,22 +374,20 @@ if (!transaction.Begin()) return; - std::string remove = "DELETE FROM "; - remove.append(kCookieTableName); - remove.append(" WHERE access_utc BETWEEN ? AND ?"); + const char kRemoveCookieRecords[] = + "DELETE FROM cookies WHERE access_utc BETWEEN ? AND ?"; sql::Statement remove_cookies( - db_.GetCachedStatement(SQL_FROM_HERE, remove.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kRemoveCookieRecords)); remove_cookies.BindInt64(0, begin.ToDeltaSinceWindowsEpoch().InMicroseconds()); remove_cookies.BindInt64(1, end.ToDeltaSinceWindowsEpoch().InMicroseconds()); if (!remove_cookies.Run()) return; - remove = "DELETE FROM "; - remove.append(kStorageAPITableName); - remove.append(" WHERE access_utc BETWEEN ? AND ?"); + const char kRemoveStorageApiRecords[] = + "DELETE FROM originStorageAPIs WHERE access_utc BETWEEN ? AND ?"; sql::Statement remove_storage_apis( - db_.GetCachedStatement(SQL_FROM_HERE, remove.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kRemoveStorageApiRecords)); remove_storage_apis.BindInt64( 0, begin.ToDeltaSinceWindowsEpoch().InMicroseconds()); remove_storage_apis.BindInt64( @@ -441,10 +423,9 @@ // Extract the set of all domains from the cookies table, determine the // effective content setting, and store for removal if appropriate. - std::string select = "SELECT DISTINCT domain FROM "; - select.append(kCookieTableName); + const char kSelectCookieDomains[] = "SELECT DISTINCT domain FROM cookies"; sql::Statement select_cookie_domains( - db_.GetCachedStatement(SQL_FROM_HERE, select.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kSelectCookieDomains)); std::vector<std::string> cookie_domains_for_removal; while (select_cookie_domains.Step()) { @@ -460,10 +441,10 @@ } // Repeat the above, but for the origin keyed storage API table. - select = "SELECT DISTINCT origin FROM "; - select.append(kStorageAPITableName); + const char kSelectStorageOrigins[] = + "SELECT DISTINCT origin FROM originStorageAPIs"; sql::Statement select_storage_origins( - db_.GetCachedStatement(SQL_FROM_HERE, select.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kSelectStorageOrigins)); std::vector<std::string> storage_origins_for_removal; while (select_storage_origins.Step()) { @@ -474,11 +455,9 @@ // Remove entries belonging to cookie domains and origins identified as having // a SESSION_ONLY content setting. - std::string remove = "DELETE FROM "; - remove.append(kCookieTableName); - remove.append(" WHERE domain = ?"); + const char kRemoveCookieRecords[] = "DELETE FROM cookies WHERE domain = ?"; sql::Statement remove_cookies( - db_.GetCachedStatement(SQL_FROM_HERE, remove.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kRemoveCookieRecords)); for (const auto& domain : cookie_domains_for_removal) { remove_cookies.BindString(0, domain); @@ -487,11 +466,10 @@ remove_cookies.Reset(true); } - remove = "DELETE FROM "; - remove.append(kStorageAPITableName); - remove.append(" WHERE origin = ?"); + const char kRemoveStorageApiRecords[] = + "DELETE FROM originStorageAPIs WHERE origin = ?"; sql::Statement remove_storage_apis( - db_.GetCachedStatement(SQL_FROM_HERE, remove.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kRemoveStorageApiRecords)); for (const auto& origin : storage_origins_for_removal) { remove_storage_apis.BindString(0, origin); @@ -507,12 +485,10 @@ const std::string& name, const std::string& domain, const std::string& path) { - std::string remove; - remove.append("DELETE FROM "); - remove.append(kCookieTableName); - remove.append(" WHERE name = ? AND domain = ? AND path = ?"); + const char kRemoveCookieRecords[] = + "DELETE FROM cookies WHERE name = ? AND domain = ? AND path = ?"; sql::Statement remove_statement( - db_.GetCachedStatement(SQL_FROM_HERE, remove.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kRemoveCookieRecords)); remove_statement.BindString(0, name); remove_statement.BindString(1, domain); remove_statement.BindString(2, path); @@ -522,12 +498,10 @@ void AccessContextAuditDatabase::RemoveAllRecordsForOriginKeyedStorage( const url::Origin& origin, StorageAPIType type) { - std::string remove; - remove.append("DELETE FROM "); - remove.append(kStorageAPITableName); - remove.append(" WHERE origin = ? AND type = ?"); + const char kRemoveStorageApiRecords[] = + "DELETE FROM originStorageAPIs WHERE origin = ? AND type = ?"; sql::Statement remove_statement( - db_.GetCachedStatement(SQL_FROM_HERE, remove.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kRemoveStorageApiRecords)); remove_statement.BindString(0, origin.Serialize()); remove_statement.BindInt(1, static_cast<int>(type)); remove_statement.Run(); @@ -541,17 +515,15 @@ // Remove all records with a top frame origin present in |origins| from both // the cookies and storage API tables. - std::string remove = "DELETE FROM "; - remove.append(kCookieTableName); - remove.append(" WHERE top_frame_origin = ?"); + const char kRemoveTopFrameFromCookies[] = + "DELETE FROM cookies WHERE top_frame_origin = ?"; sql::Statement remove_cookies( - db_.GetCachedStatement(SQL_FROM_HERE, remove.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kRemoveTopFrameFromCookies)); - remove = "DELETE FROM "; - remove.append(kStorageAPITableName); - remove.append(" WHERE top_frame_origin = ?"); + const char kRemoveTopFrameFromStorageApis[] = + "DELETE FROM originStorageAPIs WHERE top_frame_origin = ?"; sql::Statement remove_storage_apis( - db_.GetCachedStatement(SQL_FROM_HERE, remove.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kRemoveTopFrameFromStorageApis)); for (const auto& origin : origins) { remove_storage_apis.BindString(0, origin.Serialize()); @@ -572,13 +544,11 @@ AccessContextAuditDatabase::GetAllRecords() { std::vector<AccessContextAuditDatabase::AccessRecord> records; - std::string select; - select.append( + const char kSelectCookieRecords[] = "SELECT top_frame_origin, name, domain, path, access_utc, is_persistent " - "FROM "); - select.append(kCookieTableName); + "FROM cookies"; sql::Statement select_cookies( - db_.GetCachedStatement(SQL_FROM_HERE, select.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kSelectCookieRecords)); while (select_cookies.Step()) { records.emplace_back( @@ -590,11 +560,11 @@ select_cookies.ColumnBool(5)); } - select.clear(); - select.append("SELECT top_frame_origin, type, origin, access_utc FROM "); - select.append(kStorageAPITableName); + const char kSelectStorageApiRecords[] = + "SELECT top_frame_origin, type, origin, access_utc FROM " + "originStorageAPIs"; sql::Statement select_storage_api( - db_.GetCachedStatement(SQL_FROM_HERE, select.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kSelectStorageApiRecords)); while (select_storage_api.Step()) { records.emplace_back( @@ -624,11 +594,11 @@ // The number of records retrieved is sub-optimal by at most a factor of // StorageAPIType::kMaxType, so we're not missing sub-linear optimization // opportunity here. - std::string select = "SELECT origin, type FROM "; - select.append(kStorageAPITableName); - select.append(" WHERE access_utc BETWEEN ? AND ?"); + const char kSelectOriginAndType[] = + "SELECT origin, type FROM originStorageAPIs WHERE access_utc BETWEEN ? " + "AND ?"; sql::Statement select_storage_api( - db_.GetCachedStatement(SQL_FROM_HERE, select.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kSelectOriginAndType)); select_storage_api.BindInt64( 0, begin.ToDeltaSinceWindowsEpoch().InMicroseconds()); select_storage_api.BindInt64(1, @@ -647,11 +617,10 @@ } } - std::string remove = "DELETE FROM "; - remove.append(kStorageAPITableName); - remove.append(" WHERE origin = ? AND type = ?"); + const char kDeleteOnOriginAndType[] = + "DELETE FROM originStorageAPIs WHERE origin = ? AND type = ?"; sql::Statement remove_statement( - db_.GetCachedStatement(SQL_FROM_HERE, remove.c_str())); + db_.GetCachedStatement(SQL_FROM_HERE, kDeleteOnOriginAndType)); for (const auto& origin_type : origin_type_pairs_for_removal) { remove_statement.BindString(0, origin_type.first.Serialize());
diff --git a/chrome/browser/browsing_data/counters/hosted_apps_counter.cc b/chrome/browser/browsing_data/counters/hosted_apps_counter.cc index 9d44257..3581b9db 100644 --- a/chrome/browser/browsing_data/counters/hosted_apps_counter.cc +++ b/chrome/browser/browsing_data/counters/hosted_apps_counter.cc
@@ -7,6 +7,7 @@ #include <algorithm> #include <string> +#include "chrome/browser/extensions/extension_special_storage_policy.h" #include "chrome/browser/profiles/profile.h" #include "components/browsing_data/core/pref_names.h" #include "extensions/browser/extension_registry.h" @@ -16,30 +17,30 @@ HostedAppsCounter::HostedAppsCounter(Profile* profile) : profile_(profile) {} -HostedAppsCounter::~HostedAppsCounter() {} +HostedAppsCounter::~HostedAppsCounter() = default; const char* HostedAppsCounter::GetPrefName() const { return browsing_data::prefs::kDeleteHostedAppsData; } void HostedAppsCounter::Count() { - int count = 0; std::vector<std::string> names; std::unique_ptr<extensions::ExtensionSet> extensions = extensions::ExtensionRegistry::Get(profile_) ->GenerateInstalledExtensionsSet(); + auto* special_storage_policy = profile_->GetExtensionSpecialStoragePolicy(); for (const auto& extension : *extensions) { // Exclude kChromeAppId because this is not a proper hosted app. It is just // a shortcut to launch Chrome on Chrome OS. - if (extension->is_hosted_app() && + if (special_storage_policy->NeedsProtection(extension.get()) && extension->id() != extension_misc::kChromeAppId) { names.push_back(extension->short_name()); } } - count = names.size(); + int count = names.size(); // Give the first two names (alphabetically) as examples. std::sort(names.begin(), names.end());
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index b8dd278..315e8c9 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -1745,8 +1745,6 @@ "login/screens/network_screen.h", "login/screens/packaged_license_screen.cc", "login/screens/packaged_license_screen.h", - "login/screens/parental_handoff_screen.cc", - "login/screens/parental_handoff_screen.h", "login/screens/recommend_apps/fake_recommend_apps_fetcher.cc", "login/screens/recommend_apps/fake_recommend_apps_fetcher.h", "login/screens/recommend_apps/recommend_apps_fetcher.cc",
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.cc b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.cc index 2aecdbd..b62a0bd 100644 --- a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.cc +++ b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.cc
@@ -271,13 +271,6 @@ std::move(callback).Run(base::File::FILE_ERROR_NOT_FOUND, {}); return; } - if (read_only_) { - // We can return default metadata for read-only roots without Mojo calls, - // since all properties on ExtraFileMetadata are about write capabilities. - std::move(callback).Run(base::File::FILE_OK, {}); - return; - } - GetDocument(path, base::BindOnce( &ArcDocumentsProviderRoot::GetExtraMetadataFromDocument, weak_ptr_factory_.GetWeakPtr(), std::move(callback))); @@ -727,6 +720,7 @@ metadata.supports_delete = document->supports_delete; metadata.supports_rename = document->supports_rename; metadata.dir_supports_create = document->dir_supports_create; + metadata.supports_thumbnail = document->supports_thumbnail; std::move(callback).Run(base::File::FILE_OK, metadata); }
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h index 93a7bf1..0656876 100644 --- a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h +++ b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h
@@ -41,8 +41,7 @@ base::Time last_modified; }; - // Extra metadata about write capabilities. All fields are false on read-only - // roots. + // Extra metadata in addition to the metadata provided in base::File::Info. struct ExtraFileMetadata { // True if a document is deletable. bool supports_delete; @@ -51,6 +50,9 @@ // True if a document is a directory that supports creation of new files // within it. bool dir_supports_create; + // True if a document will return a valid thumbnail from + // the DocumentsProvider.openDocumentThumbnail() Android API call. + bool supports_thumbnail; }; // TODO(crbug.com/755451): Use OnceCallback/RepeatingCallback. @@ -186,8 +188,6 @@ ResolveToContentUrlCallback callback); // Get extra metadata of the file at |path|. - // The metadata is about capatility of write operations. - // See ExtraFileMetadata for the supported capabilities. void GetExtraFileMetadata(const base::FilePath& path, GetExtraMetadataCallback callback);
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc index 5f918d2..f1dd091 100644 --- a/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc +++ b/chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_unittest.cc
@@ -46,6 +46,7 @@ bool supports_delete; bool supports_rename; bool dir_supports_create; + bool supports_thumbnail; }; // Fake file system hierarchy: @@ -70,17 +71,17 @@ "dir", kAndroidDirectoryMimeType, -1, 22, true, true, - true}; + true, false}; constexpr DocumentSpec kPhotoSpec{"photo-id", kDirSpec.document_id, "photo.jpg", "image/jpeg", 3, 33, true, true, - true}; + true, true}; constexpr DocumentSpec kMusicSpec{"music-id", kDirSpec.document_id, "music.bin", "audio/mp3", 4, 44, true, true, - true}; + true, false}; constexpr DocumentSpec kNoDeleteSpec{"no-delete-id", kDirSpec.document_id, "no-delete.jpg", @@ -89,6 +90,7 @@ 45, false, true, + true, true}; constexpr DocumentSpec kNoRenameSpec{"no-rename-id", kDirSpec.document_id, @@ -98,29 +100,38 @@ 46, true, false, + true, true}; constexpr DocumentSpec kDupsSpec{"dups-id", kRootSpec.document_id, "dups", kAndroidDirectoryMimeType, -1, 55, true, true, - true}; -constexpr DocumentSpec kDup1Spec{ - "dup1-id", kDupsSpec.document_id, "dup.mp4", "video/mp4", 6, 66, true, true, - true}; -constexpr DocumentSpec kDup2Spec{ - "dup2-id", kDupsSpec.document_id, "dup.mp4", "video/mp4", 7, 77, true, true, - true}; -constexpr DocumentSpec kDup3Spec{ - "dup3-id", kDupsSpec.document_id, "dup.mp4", "video/mp4", 8, 88, true, true, - true}; -constexpr DocumentSpec kDup4Spec{ - "dup4-id", kDupsSpec.document_id, "dup.mp4", "video/mp4", 9, 99, true, true, - true}; + true, false}; +constexpr DocumentSpec kDup1Spec{"dup1-id", kDupsSpec.document_id, + "dup.mp4", "video/mp4", + 6, 66, + true, true, + true, false}; +constexpr DocumentSpec kDup2Spec{"dup2-id", kDupsSpec.document_id, + "dup.mp4", "video/mp4", + 7, 77, + true, true, + true, false}; +constexpr DocumentSpec kDup3Spec{"dup3-id", kDupsSpec.document_id, + "dup.mp4", "video/mp4", + 8, 88, + true, true, + true, false}; +constexpr DocumentSpec kDup4Spec{"dup4-id", kDupsSpec.document_id, + "dup.mp4", "video/mp4", + 9, 99, + true, true, + true, false}; constexpr DocumentSpec kRoDirSpec{"ro-dir-id", kRootSpec.document_id, "ro-dir", kAndroidDirectoryMimeType, -1, 56, false, false, - false}; + false, false}; // The order is intentionally shuffled here so that // FileSystemInstance::GetChildDocuments() returns documents in shuffled order. @@ -130,10 +141,10 @@ kDupsSpec, kDup2Spec, kDup1Spec, kDup4Spec, kDup3Spec, kRoDirSpec}; Document ToDocument(const DocumentSpec& spec) { - return Document(kAuthority, spec.document_id, spec.parent_document_id, - spec.display_name, spec.mime_type, spec.size, - spec.last_modified, spec.supports_delete, - spec.supports_rename, spec.dir_supports_create); + return Document( + kAuthority, spec.document_id, spec.parent_document_id, spec.display_name, + spec.mime_type, spec.size, spec.last_modified, spec.supports_delete, + spec.supports_rename, spec.dir_supports_create, spec.supports_thumbnail); } void ExpectMatchesSpec(const base::File::Info& info, const DocumentSpec& spec) { @@ -1336,6 +1347,7 @@ EXPECT_FALSE(metadata.supports_delete); EXPECT_TRUE(metadata.supports_rename); EXPECT_TRUE(metadata.dir_supports_create); + EXPECT_TRUE(metadata.supports_thumbnail); }, &run_loop)); run_loop.Run(); @@ -1353,6 +1365,7 @@ EXPECT_TRUE(metadata.supports_delete); EXPECT_FALSE(metadata.supports_rename); EXPECT_TRUE(metadata.dir_supports_create); + EXPECT_TRUE(metadata.supports_thumbnail); }, &run_loop)); run_loop.Run(); @@ -1370,6 +1383,7 @@ EXPECT_FALSE(metadata.supports_delete); EXPECT_FALSE(metadata.supports_rename); EXPECT_FALSE(metadata.dir_supports_create); + EXPECT_FALSE(metadata.supports_thumbnail); }, &run_loop)); run_loop.Run(); @@ -1387,6 +1401,7 @@ EXPECT_FALSE(metadata.supports_delete); EXPECT_FALSE(metadata.supports_rename); EXPECT_FALSE(metadata.dir_supports_create); + EXPECT_FALSE(metadata.supports_thumbnail); }, &run_loop)); run_loop.Run();
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.cc b/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.cc index 37ab0b2..f39ae3c 100644 --- a/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.cc +++ b/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.cc
@@ -175,6 +175,27 @@ file_system_instance->OpenFileToRead(url.spec(), std::move(callback)); } +void ArcFileSystemOperationRunner::OpenThumbnail( + const GURL& url, + const gfx::Size& size, + OpenThumbnailCallback callback) { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + if (should_defer_) { + deferred_operations_.emplace_back(base::BindOnce( + &ArcFileSystemOperationRunner::OpenThumbnail, + weak_ptr_factory_.GetWeakPtr(), url, size, std::move(callback))); + return; + } + auto* file_system_instance = ARC_GET_INSTANCE_FOR_METHOD( + arc_bridge_service_->file_system(), OpenThumbnail); + if (!file_system_instance) { + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), mojo::ScopedHandle())); + return; + } + file_system_instance->OpenThumbnail(url.spec(), size, std::move(callback)); +} + void ArcFileSystemOperationRunner::OpenFileToWrite( const GURL& url, OpenFileToWriteCallback callback) {
diff --git a/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h b/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h index 682002f..f8a75fcb 100644 --- a/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h +++ b/chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h
@@ -71,6 +71,8 @@ using GetMimeTypeCallback = mojom::FileSystemInstance::GetMimeTypeCallback; using OpenFileToReadCallback = mojom::FileSystemInstance::OpenFileToReadCallback; + using OpenThumbnailCallback = + mojom::FileSystemInstance::OpenThumbnailCallback; using OpenFileToWriteCallback = mojom::FileSystemInstance::OpenFileToWriteCallback; using GetDocumentCallback = mojom::FileSystemInstance::GetDocumentCallback; @@ -132,6 +134,9 @@ void GetFileSize(const GURL& url, GetFileSizeCallback callback); void GetMimeType(const GURL& url, GetMimeTypeCallback callback); void OpenFileToRead(const GURL& url, OpenFileToReadCallback callback); + void OpenThumbnail(const GURL& url, + const gfx::Size& size, + OpenThumbnailCallback callback); void OpenFileToWrite(const GURL& url, OpenFileToWriteCallback callback); void GetDocument(const std::string& authority, const std::string& document_id,
diff --git a/chrome/browser/chromeos/certificate_provider/certificate_info.cc b/chrome/browser/chromeos/certificate_provider/certificate_info.cc index 1e56c15b..8d07180cf 100644 --- a/chrome/browser/chromeos/certificate_provider/certificate_info.cc +++ b/chrome/browser/chromeos/certificate_provider/certificate_info.cc
@@ -4,6 +4,8 @@ #include "chrome/browser/chromeos/certificate_provider/certificate_info.h" +#include "net/cert/x509_certificate.h" + namespace chromeos { namespace certificate_provider { @@ -13,5 +15,13 @@ CertificateInfo::~CertificateInfo() {} +bool CertificateInfo::operator==(const CertificateInfo& other) const { + return net::X509Certificate::CalculateFingerprint256( + this->certificate->cert_buffer()) == + net::X509Certificate::CalculateFingerprint256( + other.certificate->cert_buffer()) && + this->supported_algorithms == other.supported_algorithms; +} + } // namespace certificate_provider } // namespace chromeos
diff --git a/chrome/browser/chromeos/certificate_provider/certificate_info.h b/chrome/browser/chromeos/certificate_provider/certificate_info.h index e1b4e4ee..2bf7af6 100644 --- a/chrome/browser/chromeos/certificate_provider/certificate_info.h +++ b/chrome/browser/chromeos/certificate_provider/certificate_info.h
@@ -23,6 +23,8 @@ CertificateInfo(const CertificateInfo& other); ~CertificateInfo(); + bool operator==(const CertificateInfo& other) const; + scoped_refptr<net::X509Certificate> certificate; // Contains the list of supported signature algorithms, using TLS 1.3's // SignatureScheme values. See net::SSLPrivateKey documentation for details.
diff --git a/chrome/browser/chromeos/certificate_provider/certificate_provider_service.cc b/chrome/browser/chromeos/certificate_provider/certificate_provider_service.cc index e799e52..8e43d03 100644 --- a/chrome/browser/chromeos/certificate_provider/certificate_provider_service.cc +++ b/chrome/browser/chromeos/certificate_provider/certificate_provider_service.cc
@@ -221,6 +221,8 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); certificate_map_.UpdateCertificatesForExtension(extension_id, certificate_infos); + for (auto& observer : observers_) + observer.OnCertificatesUpdated(extension_id, certificate_infos); } bool CertificateProviderService::SetExtensionCertificateReplyReceived(
diff --git a/chrome/browser/chromeos/certificate_provider/certificate_provider_service.h b/chrome/browser/chromeos/certificate_provider/certificate_provider_service.h index 728636f5a..0865a4d1 100644 --- a/chrome/browser/chromeos/certificate_provider/certificate_provider_service.h +++ b/chrome/browser/chromeos/certificate_provider/certificate_provider_service.h
@@ -99,6 +99,11 @@ class Observer : public base::CheckedObserver { public: + // Called when an extension updates the certificates it provides. + virtual void OnCertificatesUpdated( + const std::string& extension_id, + const CertificateInfoList& certificate_infos) {} + // Called when a sign request gets successfully completed. virtual void OnSignCompleted( const scoped_refptr<net::X509Certificate>& certificate,
diff --git a/chrome/browser/chromeos/certificate_provider/certificate_provider_service_unittest.cc b/chrome/browser/chromeos/certificate_provider/certificate_provider_service_unittest.cc index 11bc865a..6824294 100644 --- a/chrome/browser/chromeos/certificate_provider/certificate_provider_service_unittest.cc +++ b/chrome/browser/chromeos/certificate_provider/certificate_provider_service_unittest.cc
@@ -138,6 +138,10 @@ class MockObserver : public CertificateProviderService::Observer { public: + MOCK_METHOD2( + OnCertificatesUpdated, + void(const std::string& extension_id, + const certificate_provider::CertificateInfoList& certificate_infos)); MOCK_METHOD2(OnSignCompleted, void(const scoped_refptr<net::X509Certificate>& certificate, const std::string& extension_id)); @@ -209,6 +213,7 @@ const certificate_provider::CertificateInfo& cert_info) { certificate_provider::CertificateInfoList infos; infos.push_back(cert_info); + EXPECT_CALL(observer_, OnCertificatesUpdated(extension_id, infos)); service_->SetCertificatesProvidedByExtension(extension_id, infos); service_->SetExtensionCertificateReplyReceived(extension_id, cert_request_id); @@ -316,6 +321,9 @@ test_delegate_->provider_extensions_.insert(kExtension2); { const int cert_request_id = RequestCertificatesFromExtensions(nullptr); + EXPECT_CALL(observer_, + OnCertificatesUpdated( + kExtension1, certificate_provider::CertificateInfoList())); service_->SetCertificatesProvidedByExtension( kExtension1, certificate_provider::CertificateInfoList()); service_->SetExtensionCertificateReplyReceived(kExtension1,
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_thumbnail.cc b/chrome/browser/chromeos/extensions/file_manager/private_api_thumbnail.cc index 61949ef..647c91fa 100644 --- a/chrome/browser/chromeos/extensions/file_manager/private_api_thumbnail.cc +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_thumbnail.cc
@@ -9,18 +9,23 @@ #include "base/files/file_util.h" #include "base/memory/read_only_shared_memory_region.h" #include "base/strings/strcat.h" +#include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root_map.h" +#include "chrome/browser/chromeos/arc/fileapi/arc_file_system_operation_runner.h" #include "chrome/browser/chromeos/drive/drive_integration_service.h" #include "chrome/browser/chromeos/extensions/file_manager/private_api_util.h" #include "chrome/browser/chromeos/file_manager/fileapi_util.h" +#include "chrome/browser/chromeos/file_manager/path_util.h" #include "chrome/browser/printing/printing_service.h" +#include "chrome/browser/profiles/profile.h" #include "chrome/common/extensions/api/file_manager_private.h" #include "chrome/common/extensions/api/file_manager_private_internal.h" #include "components/signin/public/identity_manager/consent_level.h" #include "content/public/browser/browser_task_traits.h" #include "content/public/browser/browser_thread.h" #include "mojo/public/cpp/bindings/callback_helpers.h" +#include "net/base/mime_sniffer.h" +#include "net/base/mime_util.h" #include "storage/browser/file_system/file_system_context.h" -#include "storage/browser/file_system/file_system_url.h" #include "storage/common/file_system/file_system_types.h" #include "storage/common/file_system/file_system_util.h" #include "third_party/skia/include/core/SkBitmap.h" @@ -29,11 +34,14 @@ namespace extensions { namespace { -// Encodes PNG data as a data URL. -std::string MakeThumbnailDataUrlOnThreadPool( - base::span<const uint8_t> png_data) { +constexpr char kMimeTypeImagePng[] = "image/png"; + +// Encodes binary data as a data URL. +std::string MakeThumbnailDataUrlOnThreadPool(const std::string& mimeType, + base::span<const uint8_t> data) { base::AssertLongCPUWorkAllowed(); - return base::StrCat({"data:image/png;base64,", base::Base64Encode(png_data)}); + return base::StrCat( + {"data:", mimeType, ";base64,", base::Base64Encode(data)}); } // Converts bitmap to a PNG image and encodes it as a data URL. @@ -49,7 +57,7 @@ return std::string(); } return MakeThumbnailDataUrlOnThreadPool( - base::make_span(png_data->bytes(), png_data->size())); + kMimeTypeImagePng, base::make_span(png_data->bytes(), png_data->size())); } // The maximum size of the input PDF file for which thumbnails are generated. @@ -75,6 +83,30 @@ return contents; } +// Max size of a file returned by DocumentsProvider openDocumentThumbnail() +// Arbitrary, but sets some sensible upper limit. +constexpr int kDocumentsProviderMaxThumbnailSizeInBytes = 1024 * 1024; + +std::string ReadMojoHandleToDataUrl(mojo::PlatformHandle&& handle) { + base::ScopedFILE file(FileToFILE(base::File(handle.ReleaseFD()), "rb")); + std::string contents; + if (!base::ReadStreamToStringWithMaxSize( + file.get(), kDocumentsProviderMaxThumbnailSizeInBytes, &contents)) { + return std::string(); + } + std::string mime_type; + if (!net::SniffMimeTypeFromLocalData(contents, &mime_type)) { + return std::string(); + } + if (!net::MatchesMimeType("image/*", mime_type)) { + return std::string(); + } + return MakeThumbnailDataUrlOnThreadPool( + mime_type, + base::make_span(reinterpret_cast<const uint8_t*>(contents.c_str()), + contents.size())); +} + } // namespace FileManagerPrivateGetThumbnailFunction::FileManagerPrivateGetThumbnailFunction() @@ -148,7 +180,9 @@ return; } base::ThreadPool::PostTaskAndReplyWithResult( - FROM_HERE, base::BindOnce(&MakeThumbnailDataUrlOnThreadPool, *data), + FROM_HERE, + base::BindOnce(&MakeThumbnailDataUrlOnThreadPool, kMimeTypeImagePng, + *data), base::BindOnce(&FileManagerPrivateInternalGetDriveThumbnailFunction:: SendEncodedThumbnail, this)); @@ -240,4 +274,108 @@ this)); } +FileManagerPrivateInternalGetArcDocumentsProviderThumbnailFunction:: + FileManagerPrivateInternalGetArcDocumentsProviderThumbnailFunction() = + default; + +FileManagerPrivateInternalGetArcDocumentsProviderThumbnailFunction:: + ~FileManagerPrivateInternalGetArcDocumentsProviderThumbnailFunction() = + default; + +ExtensionFunction::ResponseAction +FileManagerPrivateInternalGetArcDocumentsProviderThumbnailFunction::Run() { + using extensions::api::file_manager_private_internal:: + GetArcDocumentsProviderThumbnail::Params; + const std::unique_ptr<Params> params(Params::Create(*args_)); + EXTENSION_FUNCTION_VALIDATE(params); + + scoped_refptr<storage::FileSystemContext> file_system_context = + file_manager::util::GetFileSystemContextForRenderFrameHost( + chrome_details_.GetProfile(), render_frame_host()); + const GURL url = GURL(params->url); + const storage::FileSystemURL file_system_url = + file_system_context->CrackURL(url); + + auto* root_map = arc::ArcDocumentsProviderRootMap::GetForBrowserContext( + chrome_details_.GetProfile()); + base::FilePath path; + auto* root = root_map->ParseAndLookup(file_system_url, &path); + if (!root) { + return RespondNow(Error("File not found")); + } + + const gfx::Size size_hint(params->width_hint, params->height_hint); + root->GetExtraFileMetadata( + path, + base::BindOnce( + &FileManagerPrivateInternalGetArcDocumentsProviderThumbnailFunction:: + OnGetExtraFileMetadata, + this, size_hint, file_system_url)); + return RespondLater(); +} + +void FileManagerPrivateInternalGetArcDocumentsProviderThumbnailFunction:: + OnGetExtraFileMetadata( + const gfx::Size& size_hint, + const storage::FileSystemURL& file_system_url, + base::File::Error result, + const arc::ArcDocumentsProviderRoot::ExtraFileMetadata& metadata) { + if (result != base::File::FILE_OK) { + Respond(Error(base::File::ErrorToString(result))); + return; + } + + if (!metadata.supports_thumbnail) { + Respond(OneArgument(std::make_unique<base::Value>(""))); + return; + } + + file_manager::util::ConvertToContentUrls( + chrome_details_.GetProfile(), + std::vector<storage::FileSystemURL>{file_system_url}, + base::BindOnce( + &FileManagerPrivateInternalGetArcDocumentsProviderThumbnailFunction:: + GotContentUrls, + this, size_hint)); +} + +void FileManagerPrivateInternalGetArcDocumentsProviderThumbnailFunction:: + GotContentUrls(const gfx::Size& size_hint, const std::vector<GURL>& urls) { + if (urls.size() != 1 || urls[0] == GURL()) { + Respond(Error("Failed to resolve to countent URL")); + return; + } + + const auto& url = urls[0]; + auto* runner = arc::ArcFileSystemOperationRunner::GetForBrowserContext( + chrome_details_.GetProfile()); + runner->OpenThumbnail( + url, size_hint, + mojo::WrapCallbackWithDefaultInvokeIfNotRun( + base::BindOnce( + &FileManagerPrivateInternalGetArcDocumentsProviderThumbnailFunction:: + GotArcThumbnailFileHandle, + this), + mojo::ScopedHandle())); +} + +void FileManagerPrivateInternalGetArcDocumentsProviderThumbnailFunction:: + GotArcThumbnailFileHandle(mojo::ScopedHandle handle) { + mojo::PlatformHandle platform_handle = + mojo::UnwrapPlatformHandle(std::move(handle)); + + if (!platform_handle.is_valid()) { + Respond(Error("File not found")); + return; + } + + base::ThreadPool::PostTaskAndReplyWithResult( + FROM_HERE, {base::MayBlock()}, + base::BindOnce(&ReadMojoHandleToDataUrl, std::move(platform_handle)), + base::BindOnce( + &FileManagerPrivateInternalGetArcDocumentsProviderThumbnailFunction:: + SendEncodedThumbnail, + this)); +} + } // namespace extensions
diff --git a/chrome/browser/chromeos/extensions/file_manager/private_api_thumbnail.h b/chrome/browser/chromeos/extensions/file_manager/private_api_thumbnail.h index 7ca6a0d4..6ef283f64 100644 --- a/chrome/browser/chromeos/extensions/file_manager/private_api_thumbnail.h +++ b/chrome/browser/chromeos/extensions/file_manager/private_api_thumbnail.h
@@ -13,9 +13,12 @@ #include "chrome/browser/chromeos/extensions/file_manager/private_api_base.h" +#include "chrome/browser/chromeos/arc/fileapi/arc_documents_provider_root.h" #include "chrome/browser/extensions/chrome_extension_function_details.h" +#include "chrome/common/extensions/api/file_manager_private_internal.h" #include "chrome/services/printing/public/mojom/pdf_thumbnailer.mojom.h" #include "mojo/public/cpp/bindings/remote.h" +#include "storage/browser/file_system/file_system_url.h" class SkBitmap; @@ -93,6 +96,38 @@ constexpr static int kDpi = 30; }; +class FileManagerPrivateInternalGetArcDocumentsProviderThumbnailFunction + : public FileManagerPrivateGetThumbnailFunction { + public: + DECLARE_EXTENSION_FUNCTION( + "fileManagerPrivateInternal.getArcDocumentsProviderThumbnail", + FILEMANAGERPRIVATEINTERNAL_GETARCDOCUMENTSPROVIDERTHUMBNAIL) + + FileManagerPrivateInternalGetArcDocumentsProviderThumbnailFunction(); + + protected: + ~FileManagerPrivateInternalGetArcDocumentsProviderThumbnailFunction() + override; + + // ExtensionFunction overrides. + ResponseAction Run() override; + + private: + // A callback invoked when ExtraFileMetadata is returned from ARC. + void OnGetExtraFileMetadata( + const gfx::Size& size_hint, + const storage::FileSystemURL& file_system_url, + base::File::Error result, + const arc::ArcDocumentsProviderRoot::ExtraFileMetadata& metadata); + + // A callback invoked when a FilesystemURL is resolved to content URLs. + void GotContentUrls(const gfx::Size& size_hint, + const std::vector<GURL>& urls); + + // A callback invoked when ARC thumbnail file has been opened. + void GotArcThumbnailFileHandle(mojo::ScopedHandle handle); +}; + } // namespace extensions #endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_PRIVATE_API_THUMBNAIL_H_
diff --git a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc index 36e45998..673eec7c 100644 --- a/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc +++ b/chrome/browser/chromeos/file_manager/file_manager_browsertest.cc
@@ -896,14 +896,16 @@ WRAPPED_INSTANTIATE_TEST_SUITE_P( GridView, /* grid_view.js */ FilesAppBrowserTest, - ::testing::Values(TestCase("showGridViewDownloads").DisableFilesNg(), - TestCase("showGridViewDownloads").InGuestMode(), - TestCase("showGridViewDownloads").FilesNg(), - TestCase("showGridViewDrive"), - TestCase("showGridViewButtonSwitches"), - TestCase("showGridViewKeyboardSelectionA11y"), - TestCase("showGridViewTitles").FilesNg(), - TestCase("showGridViewMouseSelectionA11y"))); + ::testing::Values( + TestCase("showGridViewDownloads").DisableFilesNg(), + TestCase("showGridViewDownloads").InGuestMode(), + TestCase("showGridViewDownloads").FilesNg(), + TestCase("showGridViewDrive"), + TestCase("showGridViewButtonSwitches"), + TestCase("showGridViewKeyboardSelectionA11y"), + TestCase("showGridViewTitles").FilesNg(), + TestCase("showGridViewMouseSelectionA11y"), + TestCase("showGridViewDocumentsProvider").EnableDocumentsProvider())); WRAPPED_INSTANTIATE_TEST_SUITE_P( Providers, /* providers.js */
diff --git a/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc b/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc index 35f60c11..f7cc4d1 100644 --- a/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc +++ b/chrome/browser/chromeos/file_manager/file_manager_browsertest_base.cc
@@ -337,6 +337,7 @@ EntryType type; // Entry type: file or directory. SharedOption shared_option; // File entry sharing option. std::string source_file_name; // Source file name prototype. + std::string thumbnail_file_name; // DocumentsProvider thumbnail file name. std::string target_path; // Target file or directory path. std::string name_text; // Display file name. std::string team_drive_name; // Name of team drive this entry is in. @@ -352,6 +353,11 @@ return *this; } + TestEntryInfo& SetThumbnailFileName(const std::string& file_name) { + thumbnail_file_name = file_name; + return *this; + } + TestEntryInfo& SetMimeType(const std::string& type) { mime_type = type; return *this; @@ -396,6 +402,8 @@ &MapStringToEntryType); converter->RegisterStringField("sourceFileName", &TestEntryInfo::source_file_name); + converter->RegisterStringField("thumbnailFileName", + &TestEntryInfo::thumbnail_file_name); converter->RegisterStringField("targetPath", &TestEntryInfo::target_path); converter->RegisterStringField("nameText", &TestEntryInfo::name_text); converter->RegisterStringField("teamDriveName", @@ -1285,7 +1293,8 @@ authority_, entry.name_text, root_document_id_, entry.name_text, GetMimeType(entry), GetFileSize(entry), entry.last_modified_time.ToJavaTime(), entry.capabilities.can_delete, - entry.capabilities.can_rename, entry.capabilities.can_add_children); + entry.capabilities.can_rename, entry.capabilities.can_add_children, + !entry.thumbnail_file_name.empty()); file_system_instance_->AddDocument(document); if (entry.type != AddEntriesMessage::FILE) @@ -1293,9 +1302,13 @@ std::string canonical_url = base::StrCat( {"content://", authority_, "/document/", EncodeURI(entry.name_text)}); - file_system_instance_->AddFile(arc::FakeFileSystemInstance::File( + arc::FakeFileSystemInstance::File file( canonical_url, GetTestFileContent(entry.source_file_name), - GetMimeType(entry), arc::FakeFileSystemInstance::File::Seekable::NO)); + GetMimeType(entry), arc::FakeFileSystemInstance::File::Seekable::NO); + if (!entry.thumbnail_file_name.empty()) { + file.thumbnail_content = GetTestFileContent(entry.thumbnail_file_name); + } + file_system_instance_->AddFile(file); } virtual bool Mount(Profile* profile) {
diff --git a/chrome/browser/chromeos/file_manager/file_manager_jstest_base.cc b/chrome/browser/chromeos/file_manager/file_manager_jstest_base.cc index 0851bef0..d360ac4 100644 --- a/chrome/browser/chromeos/file_manager/file_manager_jstest_base.cc +++ b/chrome/browser/chromeos/file_manager/file_manager_jstest_base.cc
@@ -90,6 +90,8 @@ std::move(callback).Run(response.get()); } + bool ShouldServeMimeTypeAsContentTypeHeader() override { return true; } + // It currently only serves HTML/JS/CSS/SVG. std::string GetMimeType(const std::string& path) override { if (base::EndsWith(path, ".html", base::CompareCase::INSENSITIVE_ASCII)) {
diff --git a/chrome/browser/chromeos/file_manager/file_manager_string_util.cc b/chrome/browser/chromeos/file_manager/file_manager_string_util.cc index 594d8f7..4b68cef 100644 --- a/chrome/browser/chromeos/file_manager/file_manager_string_util.cc +++ b/chrome/browser/chromeos/file_manager/file_manager_string_util.cc
@@ -937,6 +937,10 @@ SET_STRING("TRANSFER_PROGRESS_SUMMARY", IDS_FILE_BROWSER_TRANSFER_PROGRESS_SUMMARY); SET_STRING("TYPE_COLUMN_LABEL", IDS_FILE_BROWSER_TYPE_COLUMN_LABEL); + SET_STRING("UNDO_DELETE_ACTION_LABEL", + IDS_FILE_BROWSER_UNDO_DELETE_ACTION_LABEL); + SET_STRING("UNDO_DELETE_ONE", IDS_FILE_BROWSER_UNDO_DELETE_ONE); + SET_STRING("UNDO_DELETE_SOME", IDS_FILE_BROWSER_UNDO_DELETE_SOME); SET_STRING("UNKNOWN_FILESYSTEM_WARNING", IDS_FILE_BROWSER_UNKNOWN_FILESYSTEM_WARNING); SET_STRING("UNMOUNT_DEVICE_BUTTON_LABEL",
diff --git a/chrome/browser/chromeos/file_manager/path_util.cc b/chrome/browser/chromeos/file_manager/path_util.cc index 70f5fe9..48b1f77b 100644 --- a/chrome/browser/chromeos/file_manager/path_util.cc +++ b/chrome/browser/chromeos/file_manager/path_util.cc
@@ -570,6 +570,7 @@ } void ConvertToContentUrls( + Profile* profile, const std::vector<storage::FileSystemURL>& file_system_urls, ConvertToContentUrlsCallback callback) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); @@ -579,7 +580,6 @@ return; } - Profile* profile = GetPrimaryProfile(); auto* documents_provider_root_map = profile ? arc::ArcDocumentsProviderRootMap::GetForBrowserContext(profile) : nullptr; @@ -624,6 +624,13 @@ } } +void ConvertToContentUrls( + const std::vector<storage::FileSystemURL>& file_system_urls, + ConvertToContentUrlsCallback callback) { + ConvertToContentUrls(GetPrimaryProfile(), file_system_urls, + std::move(callback)); +} + bool ReplacePrefix(std::string* s, const std::string& prefix, const std::string& replacement) {
diff --git a/chrome/browser/chromeos/file_manager/path_util.h b/chrome/browser/chromeos/file_manager/path_util.h index 7204dcf..3ed927f4 100644 --- a/chrome/browser/chromeos/file_manager/path_util.h +++ b/chrome/browser/chromeos/file_manager/path_util.h
@@ -126,6 +126,12 @@ // Always returns a vector of the same size as |file_system_urls|. // Empty GURLs are filled in the vector if conversion fails. void ConvertToContentUrls( + Profile* profile, + const std::vector<storage::FileSystemURL>& file_system_urls, + ConvertToContentUrlsCallback callback); + +// Convers Chrome OS file system URLs using a primary profile. +void ConvertToContentUrls( const std::vector<storage::FileSystemURL>& file_system_urls, ConvertToContentUrlsCallback callback);
diff --git a/chrome/browser/chromeos/login/debug_overlay_browsertest.cc b/chrome/browser/chromeos/login/debug_overlay_browsertest.cc index 94961621..daf9d2a 100644 --- a/chrome/browser/chromeos/login/debug_overlay_browsertest.cc +++ b/chrome/browser/chromeos/login/debug_overlay_browsertest.cc
@@ -22,8 +22,8 @@ constexpr char kDebugOverlay[] = "debuggerOverlay"; constexpr char kScreensPanel[] = "DebuggerPanelScreens"; -constexpr int kOobeScreensCount = 38; -constexpr int kLoginScreensCount = 33; +constexpr int kOobeScreensCount = 37; +constexpr int kLoginScreensCount = 32; std::string ElementsInPanel(const std::string& panel) { return base::StrCat({"$('", panel, "').children.length"});
diff --git a/chrome/browser/chromeos/login/screens/parental_handoff_screen.cc b/chrome/browser/chromeos/login/screens/parental_handoff_screen.cc deleted file mode 100644 index caca1165..0000000 --- a/chrome/browser/chromeos/login/screens/parental_handoff_screen.cc +++ /dev/null
@@ -1,109 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/chromeos/login/screens/parental_handoff_screen.h" - -#include <string> - -#include "base/strings/string16.h" -#include "chrome/browser/chromeos/login/oobe_screen.h" -#include "chrome/browser/chromeos/login/screen_manager.h" -#include "chrome/browser/chromeos/profiles/profile_helper.h" -#include "chrome/browser/profiles/profile.h" -#include "chrome/browser/profiles/profile_manager.h" -#include "chrome/browser/supervised_user/supervised_user_features.h" -#include "chrome/browser/ui/webui/chromeos/login/parental_handoff_screen_handler.h" -#include "chrome/grit/chromium_strings.h" -#include "chrome/grit/generated_resources.h" -#include "components/user_manager/user.h" -#include "components/user_manager/user_manager.h" -#include "ui/base/l10n/l10n_util.h" - -namespace chromeos { - -namespace { - -constexpr char kUserActionNext[] = "next"; - -base::string16 GetActiveUserName() { - const user_manager::User* user = - user_manager::UserManager::Get()->GetActiveUser(); - if (!user || !user->IsChild()) - return base::string16(); - return user->GetDisplayName(); -} - -} // namespace - -// static -ParentalHandoffScreen* ParentalHandoffScreen::Get( - ScreenManager* screen_manager) { - return static_cast<ParentalHandoffScreen*>( - screen_manager->GetScreen(ParentalHandoffScreenView::kScreenId)); -} - -// static -std::string ParentalHandoffScreen::GetResultString( - ParentalHandoffScreen::Result result) { - switch (result) { - case ParentalHandoffScreen::Result::DONE: - return "Done"; - case ParentalHandoffScreen::Result::SKIPPED: - return BaseScreen::kNotApplicable; - } -} - -ParentalHandoffScreen::ParentalHandoffScreen( - ParentalHandoffScreenView* view, - const ScreenExitCallback& exit_callback) - : BaseScreen(ParentalHandoffScreenView::kScreenId, - OobeScreenPriority::DEFAULT), - view_(view), - exit_callback_(exit_callback) { - if (view_) - view_->Bind(this); -} - -ParentalHandoffScreen::~ParentalHandoffScreen() { - if (view_) - view_->Unbind(); -} - -void ParentalHandoffScreen::OnViewDestroyed(ParentalHandoffScreenView* view) { - if (view_ == view) - view_ = nullptr; -} - -bool ParentalHandoffScreen::MaybeSkip(WizardContext* context) { - Profile* profile = ProfileManager::GetActiveUserProfile(); - if (profile->IsChild() && supervised_users::IsEduCoexistenceFlowV2Enabled()) { - return false; - } - - exit_callback_.Run(Result::SKIPPED); - return true; -} - -void ParentalHandoffScreen::ShowImpl() { - if (!view_) - return; - - base::string16 user_name = GetActiveUserName(); - - view_->Show(l10n_util::GetStringFUTF16( - IDS_LOGIN_PARENTAL_HANDOFF_SCREEN_TITLE, user_name), - l10n_util::GetStringFUTF16( - IDS_LOGIN_PARENTAL_HANDOFF_SCREEN_SUBTITLE, user_name)); -} -void ParentalHandoffScreen::HideImpl() {} - -void ParentalHandoffScreen::OnUserAction(const std::string& action_id) { - if (action_id == kUserActionNext) { - exit_callback_.Run(Result::DONE); - } else { - BaseScreen::OnUserAction(action_id); - } -} - -} // namespace chromeos
diff --git a/chrome/browser/chromeos/login/screens/parental_handoff_screen.h b/chrome/browser/chromeos/login/screens/parental_handoff_screen.h deleted file mode 100644 index 79b4dbd2..0000000 --- a/chrome/browser/chromeos/login/screens/parental_handoff_screen.h +++ /dev/null
@@ -1,54 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_PARENTAL_HANDOFF_SCREEN_H_ -#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_PARENTAL_HANDOFF_SCREEN_H_ - -#include <string> - -#include "base/bind.h" -#include "chrome/browser/chromeos/login/screens/base_screen.h" - -namespace chromeos { - -class ParentalHandoffScreenView; -class WizardContext; -class ScreenManager; - -class ParentalHandoffScreen : public BaseScreen { - public: - enum class Result { DONE, SKIPPED }; - - static ParentalHandoffScreen* Get(ScreenManager* screen_manager); - static std::string GetResultString(Result result); - - using ScreenExitCallback = base::RepeatingCallback<void(Result)>; - ParentalHandoffScreen(ParentalHandoffScreenView* view, - const ScreenExitCallback& exit_callback); - ParentalHandoffScreen(const ParentalHandoffScreen&) = delete; - ParentalHandoffScreen& operator=(const ParentalHandoffScreen&) = delete; - ~ParentalHandoffScreen() override; - - void OnViewDestroyed(ParentalHandoffScreenView* view); - - ScreenExitCallback get_exit_callback_for_test() { return exit_callback_; } - - void set_exit_callback_for_test(const ScreenExitCallback& exit_callback) { - exit_callback_ = exit_callback; - } - - private: - // BaseScreen: - bool MaybeSkip(WizardContext* context) override; - void ShowImpl() override; - void HideImpl() override; - void OnUserAction(const std::string& action_id) override; - - ParentalHandoffScreenView* view_ = nullptr; - ScreenExitCallback exit_callback_; -}; - -} // namespace chromeos - -#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENS_PARENTAL_HANDOFF_SCREEN_H_
diff --git a/chrome/browser/chromeos/login/screens/parental_handoff_screen_browsertest.cc b/chrome/browser/chromeos/login/screens/parental_handoff_screen_browsertest.cc deleted file mode 100644 index 5d74300..0000000 --- a/chrome/browser/chromeos/login/screens/parental_handoff_screen_browsertest.cc +++ /dev/null
@@ -1,197 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/chromeos/login/screens/parental_handoff_screen.h" - -#include "base/callback.h" -#include "base/optional.h" -#include "base/run_loop.h" -#include "base/test/metrics/histogram_tester.h" -#include "base/test/scoped_feature_list.h" -#include "chrome/browser/chromeos/login/screens/edu_coexistence_login_screen.h" -#include "chrome/browser/chromeos/login/test/fake_gaia_mixin.h" -#include "chrome/browser/chromeos/login/test/js_checker.h" -#include "chrome/browser/chromeos/login/test/local_policy_test_server_mixin.h" -#include "chrome/browser/chromeos/login/test/login_manager_mixin.h" -#include "chrome/browser/chromeos/login/test/oobe_base_test.h" -#include "chrome/browser/chromeos/login/test/oobe_screen_exit_waiter.h" -#include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h" -#include "chrome/browser/chromeos/login/test/user_policy_mixin.h" -#include "chrome/browser/chromeos/login/test/wizard_controller_screen_exit_waiter.h" -#include "chrome/browser/chromeos/login/wizard_context.h" -#include "chrome/browser/chromeos/login/wizard_controller.h" -#include "chrome/browser/supervised_user/supervised_user_features.h" -#include "chrome/browser/supervised_user/supervised_user_service.h" -#include "chrome/browser/ui/webui/chromeos/login/parental_handoff_screen_handler.h" -#include "chrome/browser/ui/webui/chromeos/login/user_creation_screen_handler.h" -#include "chrome/browser/ui/webui/chromeos/system_web_dialog_delegate.h" -#include "components/account_id/account_id.h" -#include "content/public/test/browser_test.h" - -namespace chromeos { - -namespace { - -const test::UIPath kParentalHandoffDialog = {"parental-handoff", - "parentalHandoffDialog"}; -const test::UIPath kNextButton = {"parental-handoff", "nextButton"}; - -SystemWebDialogDelegate* GetEduCoexistenceLoginDialog() { - return chromeos::SystemWebDialogDelegate::FindInstance( - SupervisedUserService::GetEduCoexistenceLoginUrl()); -} - -} // namespace - -class ParentalHandoffScreenBrowserTest : public OobeBaseTest { - public: - ParentalHandoffScreenBrowserTest(); - ParentalHandoffScreenBrowserTest(const ParentalHandoffScreenBrowserTest&) = - delete; - ParentalHandoffScreenBrowserTest& operator=( - const ParentalHandoffScreenBrowserTest&) = delete; - ~ParentalHandoffScreenBrowserTest() override = default; - - void SetUpOnMainThread() override; - - protected: - void WaitForScreenExit(); - - ParentalHandoffScreen* GetParentalHandoffScreen(); - - const base::Optional<ParentalHandoffScreen::Result>& result() const { - return result_; - } - - LoginManagerMixin& login_manager_mixin() { return login_manager_mixin_; } - - base::HistogramTester& histogram_tester() { return histogram_tester_; } - - private: - void HandleScreenExit(ParentalHandoffScreen::Result result); - - base::OnceCallback<void()> quit_closure_; - - base::Optional<ParentalHandoffScreen::Result> result_; - - ParentalHandoffScreen::ScreenExitCallback original_callback_; - - FakeGaiaMixin fake_gaia_{&mixin_host_, embedded_test_server()}; - - base::test::ScopedFeatureList feature_list_; - - base::HistogramTester histogram_tester_; - - LoginManagerMixin login_manager_mixin_{&mixin_host_, /* initial_users */ {}, - &fake_gaia_}; -}; - -ParentalHandoffScreenBrowserTest::ParentalHandoffScreenBrowserTest() { - feature_list_.InitAndEnableFeature(supervised_users::kEduCoexistenceFlowV2); -} - -void ParentalHandoffScreenBrowserTest::SetUpOnMainThread() { - ParentalHandoffScreen* screen = GetParentalHandoffScreen(); - original_callback_ = screen->get_exit_callback_for_test(); - screen->set_exit_callback_for_test( - base::BindRepeating(&ParentalHandoffScreenBrowserTest::HandleScreenExit, - base::Unretained(this))); - OobeBaseTest::SetUpOnMainThread(); -} - -void ParentalHandoffScreenBrowserTest::WaitForScreenExit() { - if (result_.has_value()) - return; - base::RunLoop run_loop; - quit_closure_ = base::BindOnce(run_loop.QuitClosure()); - run_loop.Run(); -} - -ParentalHandoffScreen* -ParentalHandoffScreenBrowserTest::GetParentalHandoffScreen() { - return ParentalHandoffScreen::Get( - WizardController::default_controller()->screen_manager()); -} - -void ParentalHandoffScreenBrowserTest::HandleScreenExit( - ParentalHandoffScreen::Result result) { - result_ = result; - original_callback_.Run(result); - if (quit_closure_) - std::move(quit_closure_).Run(); -} - -IN_PROC_BROWSER_TEST_F(ParentalHandoffScreenBrowserTest, RegularUserLogin) { - login_manager_mixin().LoginAsNewRegularUser(); - WaitForScreenExit(); - - // Regular user login shouldn't show the EduCoexistenceLoginScreen. - EXPECT_EQ(result().value(), ParentalHandoffScreen::Result::SKIPPED); - - histogram_tester().ExpectTotalCount( - "OOBE.StepCompletionTimeByExitReason.Parental-handoff.Done", 0); -} - -class ParentalHandoffScreenChildBrowserTest - : public ParentalHandoffScreenBrowserTest { - public: - // Child users require a user policy, set up an empty one so the user can - // get through login. - void SetUpInProcessBrowserTestFixture() override { - ASSERT_TRUE(user_policy_mixin_.RequestPolicyUpdate()); - ParentalHandoffScreenBrowserTest::SetUpInProcessBrowserTestFixture(); - } - - void LoginAsNewChildUser() { - WizardController::default_controller() - ->get_wizard_context_for_testing() - ->sign_in_as_child = true; - login_manager_mixin().LoginAsNewChildUser(); - - WizardControllerExitWaiter(UserCreationView::kScreenId).Wait(); - base::RunLoop().RunUntilIdle(); - - ASSERT_EQ( - WizardController::default_controller()->current_screen()->screen_id(), - EduCoexistenceLoginScreen::kScreenId); - - // Current screen is EduCoexistenceLoginScreen. Close it. - GetEduCoexistenceLoginDialog()->Close(); - - OobeScreenWaiter waiter(ParentalHandoffScreenView::kScreenId); - waiter.Wait(); - } - - protected: - void ClickNextButtonOnParentalHandoffScreen() { - test::OobeJS().ExpectVisiblePath(kParentalHandoffDialog); - test::OobeJS().ExpectVisiblePath(kNextButton); - test::OobeJS().TapOnPath(kNextButton); - } - - private: - LocalPolicyTestServerMixin policy_server_mixin_{&mixin_host_}; - UserPolicyMixin user_policy_mixin_{ - &mixin_host_, - AccountId::FromUserEmailGaiaId(test::kTestEmail, test::kTestGaiaId), - &policy_server_mixin_}; -}; - -IN_PROC_BROWSER_TEST_F(ParentalHandoffScreenChildBrowserTest, ChildUserLogin) { - LoginAsNewChildUser(); - - WizardController* wizard = WizardController::default_controller(); - - EXPECT_EQ(wizard->current_screen()->screen_id(), - ParentalHandoffScreenView::kScreenId); - - ClickNextButtonOnParentalHandoffScreen(); - - WaitForScreenExit(); - - histogram_tester().ExpectTotalCount( - "OOBE.StepCompletionTimeByExitReason.Parental-handoff.Done", 1); -} - -} // namespace chromeos
diff --git a/chrome/browser/chromeos/login/wizard_controller.cc b/chrome/browser/chromeos/login/wizard_controller.cc index 027c416..029d741 100644 --- a/chrome/browser/chromeos/login/wizard_controller.cc +++ b/chrome/browser/chromeos/login/wizard_controller.cc
@@ -137,7 +137,6 @@ #include "chrome/browser/ui/webui/chromeos/login/network_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/oobe_ui.h" #include "chrome/browser/ui/webui/chromeos/login/packaged_license_screen_handler.h" -#include "chrome/browser/ui/webui/chromeos/login/parental_handoff_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/reset_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/signin_fatal_error_screen_handler.h" @@ -683,11 +682,6 @@ base::BindRepeating(&WizardController::OnSignInFatalErrorScreenExit, weak_factory_.GetWeakPtr()))); - append(std::make_unique<ParentalHandoffScreen>( - oobe_ui->GetView<ParentalHandoffScreenHandler>(), - base::BindRepeating(&WizardController::OnParentalHandoffScreenExit, - weak_factory_.GetWeakPtr()))); - return result; } @@ -881,10 +875,6 @@ SetCurrentScreen(GetScreen(EduCoexistenceLoginScreen::kScreenId)); } -void WizardController::ShowParentalHandoffScreen() { - SetCurrentScreen(GetScreen(ParentalHandoffScreenView::kScreenId)); -} - void WizardController::ShowActiveDirectoryPasswordChangeScreen( const std::string& username) { ActiveDirectoryPasswordChangeScreen::Get(screen_manager()) @@ -955,13 +945,6 @@ ShowSyncConsentScreen(); } -void WizardController::OnParentalHandoffScreenExit( - ParentalHandoffScreen::Result result) { - OnScreenExit(ParentalHandoffScreenView::kScreenId, - ParentalHandoffScreen::GetResultString(result)); - ShowMultiDeviceSetupScreen(); -} - void WizardController::SkipToLoginForTesting() { VLOG(1) << "WizardController::SkipToLoginForTesting()"; if (current_screen_ && current_screen_->screen_id() == GaiaView::kScreenId) @@ -1416,7 +1399,7 @@ AssistantOptInFlowScreen::Result result) { OnScreenExit(AssistantOptInFlowScreenView::kScreenId, AssistantOptInFlowScreen::GetResultString(result)); - ShowParentalHandoffScreen(); + ShowMultiDeviceSetupScreen(); } void WizardController::OnMultiDeviceSetupScreenExit( @@ -1932,8 +1915,7 @@ current_screen_id == FingerprintSetupScreenView::kScreenId || current_screen_id == ArcTermsOfServiceScreenView::kScreenId || current_screen_id == DiscoverScreenView::kScreenId || - current_screen_id == MarketingOptInScreenView::kScreenId || - current_screen_id == ParentalHandoffScreenView::kScreenId) { + current_screen_id == MarketingOptInScreenView::kScreenId) { default_controller()->OnOobeFlowFinished(); } else { LOG(WARNING) << "SkipPostLoginScreensForTesting(): Ignore screen "
diff --git a/chrome/browser/chromeos/login/wizard_controller.h b/chrome/browser/chromeos/login/wizard_controller.h index 9c68709..22e926f2 100644 --- a/chrome/browser/chromeos/login/wizard_controller.h +++ b/chrome/browser/chromeos/login/wizard_controller.h
@@ -42,7 +42,6 @@ #include "chrome/browser/chromeos/login/screens/multidevice_setup_screen.h" #include "chrome/browser/chromeos/login/screens/network_screen.h" #include "chrome/browser/chromeos/login/screens/packaged_license_screen.h" -#include "chrome/browser/chromeos/login/screens/parental_handoff_screen.h" #include "chrome/browser/chromeos/login/screens/recommend_apps_screen.h" #include "chrome/browser/chromeos/login/screens/signin_fatal_error_screen.h" #include "chrome/browser/chromeos/login/screens/sync_consent_screen.h" @@ -256,7 +255,6 @@ void ShowMarketingOptInScreen(); void ShowPackagedLicenseScreen(); void ShowEduCoexistenceLoginScreen(); - void ShowParentalHandoffScreen(); // Shows images login screen. void ShowLoginScreen(); @@ -318,7 +316,6 @@ void OnSignInFatalErrorScreenExit(); void OnEduCoexistenceLoginScreenExit( EduCoexistenceLoginScreen::Result result); - void OnParentalHandoffScreenExit(ParentalHandoffScreen::Result result); // Callback invoked once it has been determined whether the device is disabled // or not.
diff --git a/chrome/browser/chromeos/platform_keys/platform_keys_service.h b/chrome/browser/chromeos/platform_keys/platform_keys_service.h index 3bcc33a..2d95482 100644 --- a/chrome/browser/chromeos/platform_keys/platform_keys_service.h +++ b/chrome/browser/chromeos/platform_keys/platform_keys_service.h
@@ -59,9 +59,9 @@ base::OnceCallback<void(std::vector<std::string> public_key_spki_der_list, Status status)>; -using ImportCertificateCallback = base::Callback<void(Status status)>; +using ImportCertificateCallback = base::OnceCallback<void(Status status)>; -using RemoveCertificateCallback = base::Callback<void(Status status)>; +using RemoveCertificateCallback = base::OnceCallback<void(Status status)>; using RemoveKeyCallback = base::OnceCallback<void(Status status)>;
diff --git a/chrome/browser/chromeos/policy/dlp/enterprise_clipboard_dlp_controller.cc b/chrome/browser/chromeos/policy/dlp/enterprise_clipboard_dlp_controller.cc index 40eabeb..cde992c3 100644 --- a/chrome/browser/chromeos/policy/dlp/enterprise_clipboard_dlp_controller.cc +++ b/chrome/browser/chromeos/policy/dlp/enterprise_clipboard_dlp_controller.cc
@@ -41,7 +41,7 @@ bool EnterpriseClipboardDlpController::IsDataReadAllowed( const ui::ClipboardDataEndpoint* const data_src, const ui::ClipboardDataEndpoint* const data_dst) const { - if (!data_src) { + if (!data_src || data_src->type() == ui::EndpointType::kClipboardHistory) { return true; }
diff --git a/chrome/browser/chromeos/usb/cros_usb_detector.cc b/chrome/browser/chromeos/usb/cros_usb_detector.cc index 3436559..96c5ba3e 100644 --- a/chrome/browser/chromeos/usb/cros_usb_detector.cc +++ b/chrome/browser/chromeos/usb/cros_usb_detector.cc
@@ -651,17 +651,33 @@ } base::Optional<uint8_t> guest_port; - for (const auto& device : usb_devices_) { - if (device.guid == guid && device.shared_vm_name == vm_name) { - guest_port = device.guest_port; - break; - } - } + for (auto& device : usb_devices_) { + if (device.guid != guid) + continue; - if (!guest_port) { - LOG(ERROR) << "No port found to detach " << guid; - RelinquishDeviceClaim(guid); - std::move(callback).Run(/*success=*/true); + guest_port = device.guest_port; + if (device.shared_vm_name == vm_name && guest_port) + break; + + LOG(WARNING) << "Failed to detach " << guid << " from " << vm_name + << ". It appears to be shared with " + << (device.shared_vm_name ? *device.shared_vm_name + : "[not shared]") + << " at port " + << (guest_port ? base::NumberToString(*guest_port) + : "[not attached]") + << "."; + if (device.shared_vm_name == vm_name) { + // The VM hasn't been started yet, attaching is in progress, or attaching + // failed. + // TODO(timloh): Check what happens if attaching to a different VM races + // with an in progress attach. + RelinquishDeviceClaim(guid); + device.shared_vm_name = base::nullopt; + std::move(callback).Run(/*success=*/true); + return; + } + std::move(callback).Run(/*success=*/false); return; }
diff --git a/chrome/browser/chromeos/usb/cros_usb_detector_unittest.cc b/chrome/browser/chromeos/usb/cros_usb_detector_unittest.cc index 1d2a69fd..93579c3 100644 --- a/chrome/browser/chromeos/usb/cros_usb_detector_unittest.cc +++ b/chrome/browser/chromeos/usb/cros_usb_detector_unittest.cc
@@ -167,17 +167,31 @@ chromeos::CrosUsbDetector::Get()->ConnectToDeviceManager(); } - void AttachDeviceToVm(const std::string& vm_name, const std::string& guid) { + void AttachDeviceToVm(const std::string& vm_name, + const std::string& guid, + bool success = true) { + base::Optional<vm_tools::concierge::AttachUsbDeviceResponse> response; + response.emplace(); + response->set_success(success); + response->set_guest_port(0); + fake_concierge_client_->set_attach_usb_device_response(response); + cros_usb_detector_->AttachUsbDeviceToVm( vm_name, guid, - base::BindOnce([](bool result) { EXPECT_TRUE(result); })); + base::BindOnce( + [](bool expected, bool actual) { EXPECT_EQ(expected, actual); }, + success)); base::RunLoop().RunUntilIdle(); } - void DetachDeviceFromVm(const std::string& vm_name, const std::string& guid) { + void DetachDeviceFromVm(const std::string& vm_name, + const std::string& guid, + bool expected_success) { cros_usb_detector_->DetachUsbDeviceFromVm( vm_name, guid, - base::BindOnce([](bool result) { EXPECT_TRUE(result); })); + base::BindOnce( + [](bool expected, bool actual) { EXPECT_EQ(expected, actual); }, + expected_success)); base::RunLoop().RunUntilIdle(); } @@ -852,7 +866,7 @@ EXPECT_EQ(0x00000006U, device_info.allowed_interfaces_mask); } -TEST_F(CrosUsbDetectorTest, DetachBeforeAttach) { +TEST_F(CrosUsbDetectorTest, SwitchAttachedDevice) { ConnectToDeviceManager(); base::RunLoop().RunUntilIdle(); @@ -865,16 +879,66 @@ EXPECT_FALSE(device_info.shared_vm_name.has_value()); AttachDeviceToVm("VM1", device_info.guid); - base::RunLoop().RunUntilIdle(); device_info = GetSingleDeviceInfo(); EXPECT_TRUE(device_info.shared_vm_name.has_value()); EXPECT_EQ("VM1", *device_info.shared_vm_name); + EXPECT_TRUE(device_info.guest_port.has_value()); EXPECT_FALSE(fake_concierge_client_->detach_usb_device_called()); + // Device is attached to VM1. We need to detach before sharing with VM2. AttachDeviceToVm("VM2", device_info.guid); - base::RunLoop().RunUntilIdle(); device_info = GetSingleDeviceInfo(); EXPECT_TRUE(device_info.shared_vm_name.has_value()); EXPECT_EQ("VM2", *device_info.shared_vm_name); EXPECT_TRUE(fake_concierge_client_->detach_usb_device_called()); } + +TEST_F(CrosUsbDetectorTest, SwitchNotAttachedDevice) { + ConnectToDeviceManager(); + base::RunLoop().RunUntilIdle(); + + auto device_1 = base::MakeRefCounted<device::FakeUsbDeviceInfo>( + 0, 1, kManufacturerName, kProductName_1, "002"); + device_manager_.AddDevice(device_1); + base::RunLoop().RunUntilIdle(); + + auto device_info = GetSingleDeviceInfo(); + EXPECT_FALSE(device_info.shared_vm_name.has_value()); + + AttachDeviceToVm("VM1", device_info.guid, /*success=*/false); + device_info = GetSingleDeviceInfo(); + EXPECT_TRUE(device_info.shared_vm_name.has_value()); + EXPECT_EQ("VM1", *device_info.shared_vm_name); + EXPECT_FALSE(device_info.guest_port.has_value()); + + // Device is shared with but not attached to VM1, e.g. it hasn't yet been + // started. We don't need to detach. + AttachDeviceToVm("VM2", device_info.guid); + device_info = GetSingleDeviceInfo(); + EXPECT_TRUE(device_info.shared_vm_name.has_value()); + EXPECT_EQ("VM2", *device_info.shared_vm_name); + EXPECT_FALSE(fake_concierge_client_->detach_usb_device_called()); +} + +TEST_F(CrosUsbDetectorTest, DetachFromDifferentVM) { + ConnectToDeviceManager(); + base::RunLoop().RunUntilIdle(); + + auto device_1 = base::MakeRefCounted<device::FakeUsbDeviceInfo>( + 0, 1, kManufacturerName, kProductName_1, "002"); + device_manager_.AddDevice(device_1); + base::RunLoop().RunUntilIdle(); + + auto device_info = GetSingleDeviceInfo(); + EXPECT_FALSE(device_info.shared_vm_name.has_value()); + + AttachDeviceToVm("VM1", device_info.guid); + device_info = GetSingleDeviceInfo(); + EXPECT_TRUE(device_info.shared_vm_name.has_value()); + EXPECT_EQ("VM1", *device_info.shared_vm_name); + + // Device is not attached to VM2, so this will no-op. + DetachDeviceFromVm("VM2", device_info.guid, /*expected_success=*/false); + EXPECT_FALSE(fake_concierge_client_->detach_usb_device_called()); + EXPECT_EQ("VM1", *device_info.shared_vm_name); +}
diff --git a/chrome/browser/content_settings/generated_notification_pref.h b/chrome/browser/content_settings/generated_notification_pref.h index fa43078..d65a8c2a 100644 --- a/chrome/browser/content_settings/generated_notification_pref.h +++ b/chrome/browser/content_settings/generated_notification_pref.h
@@ -17,7 +17,13 @@ extern const char kGeneratedNotificationPref[]; -enum class NotificationSetting { ASK, QUIETER_MESSAGING, BLOCK }; +// Must be kept in sync with the enum of the same name in +// chrome/browser/resources/settings/site_settings/constants.js +enum class NotificationSetting { + ASK = 0, + QUIETER_MESSAGING = 1, + BLOCK = 2, +}; // A generated preference which represents the effective Notification setting // state based on the Notification content setting and quieter UI user
diff --git a/chrome/browser/download/simple_download_manager_coordinator_factory.cc b/chrome/browser/download/simple_download_manager_coordinator_factory.cc index 749aaff..337e402 100644 --- a/chrome/browser/download/simple_download_manager_coordinator_factory.cc +++ b/chrome/browser/download/simple_download_manager_coordinator_factory.cc
@@ -60,7 +60,7 @@ return std::make_unique<download::SimpleDownloadManagerCoordinator>( base::BindRepeating(&DownloadUrlWithDownloadManager, base::Unretained(key)), - key->IsOffTheRecord()); + !key->IsOffTheRecord()); } SimpleFactoryKey* SimpleDownloadManagerCoordinatorFactory::GetKeyToUse(
diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc b/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc index e1893e98..0cc936b 100644 --- a/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc +++ b/chrome/browser/extensions/api/browsing_data/browsing_data_api.cc
@@ -34,10 +34,6 @@ #include "extensions/common/extension.h" #include "net/base/registry_controlled_domains/registry_controlled_domain.h" -#if BUILDFLAG(ENABLE_PLUGINS) -#include "chrome/browser/plugins/plugin_prefs.h" -#endif - using browsing_data::BrowsingDataType; using browsing_data::ClearBrowsingDataTab; using content::BrowserThread; @@ -59,7 +55,7 @@ const char kIndexedDBKey[] = "indexedDB"; const char kLocalStorageKey[] = "localStorage"; const char kPasswordsKey[] = "passwords"; -const char kPluginDataKey[] = "pluginData"; +const char kPluginDataKeyDeprecated[] = "pluginData"; const char kServiceWorkersKey[] = "serviceWorkers"; const char kCacheStorageKey[] = "cacheStorage"; const char kWebSQLKey[] = "webSQL"; @@ -120,8 +116,6 @@ return content::BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE; if (strcmp(key, extension_browsing_data_api_constants::kPasswordsKey) == 0) return ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS; - if (strcmp(key, extension_browsing_data_api_constants::kPluginDataKey) == 0) - return ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA; if (strcmp(key, extension_browsing_data_api_constants::kServiceWorkersKey) == 0) return content::BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS; @@ -230,12 +224,10 @@ SetDetails(selected.get(), permitted.get(), extension_browsing_data_api_constants::kCacheStorageKey, delete_site_data); - + // PluginData is not supported anymore. (crbug.com/1135791) SetDetails(selected.get(), permitted.get(), - extension_browsing_data_api_constants::kPluginDataKey, - delete_site_data && - prefs_->GetBoolean(prefs::kClearPluginLSODataEnabled)); - + extension_browsing_data_api_constants::kPluginDataKeyDeprecated, + false); SetDetails(selected.get(), permitted.get(), extension_browsing_data_api_constants::kHistoryKey, isDataTypeSelected(BrowsingDataType::HISTORY, tab)); @@ -354,47 +346,17 @@ return RespondNow( Error(extension_browsing_data_api_constants::kDeleteProhibitedError)); } - -#if BUILDFLAG(ENABLE_PLUGINS) - if (removal_mask_ & - ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA) { - // If we're being asked to remove plugin data, check whether it's actually - // supported. - base::ThreadPool::PostTask( - FROM_HERE, - {base::MayBlock(), base::TaskShutdownBehavior::SKIP_ON_SHUTDOWN, - base::TaskPriority::USER_VISIBLE}, - base::BindOnce( - &BrowsingDataRemoverFunction::CheckRemovingPluginDataSupported, - this, PluginPrefs::GetForProfile(profile))); - } else { - StartRemoving(); - } -#else StartRemoving(); -#endif return did_respond() ? AlreadyResponded() : RespondLater(); } -BrowsingDataRemoverFunction::~BrowsingDataRemoverFunction() {} +BrowsingDataRemoverFunction::~BrowsingDataRemoverFunction() = default; bool BrowsingDataRemoverFunction::IsPauseSyncAllowed() { return true; } -#if BUILDFLAG(ENABLE_PLUGINS) -void BrowsingDataRemoverFunction::CheckRemovingPluginDataSupported( - scoped_refptr<PluginPrefs> plugin_prefs) { - // We don't support this after Flash deprecation. - removal_mask_ &= ~ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA; - - content::GetUIThreadTaskRunner({})->PostTask( - FROM_HERE, - base::BindOnce(&BrowsingDataRemoverFunction::StartRemoving, this)); -} -#endif - void BrowsingDataRemoverFunction::StartRemoving() { Profile* profile = Profile::FromBrowserContext(browser_context()); content::BrowsingDataRemover* remover = @@ -459,7 +421,7 @@ // UNPROTECTED_WEB if the developer doesn't specify anything. *origin_type_mask = content::BrowsingDataRemover::ORIGIN_TYPE_UNPROTECTED_WEB; - const base::DictionaryValue* d = NULL; + const base::DictionaryValue* d = nullptr; if (options.HasKey(extension_browsing_data_api_constants::kOriginTypesKey)) { if (!options.GetDictionary( extension_browsing_data_api_constants::kOriginTypesKey, &d)) { @@ -607,7 +569,8 @@ bool BrowsingDataRemovePluginDataFunction::GetRemovalMask( uint64_t* removal_mask) { - *removal_mask = ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA; + // Plugin data is not supported anymore. (crbug.com/1135788) + *removal_mask = 0; return true; }
diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_api.h b/chrome/browser/extensions/api/browsing_data/browsing_data_api.h index a4143c0..c101eab 100644 --- a/chrome/browser/extensions/api/browsing_data/browsing_data_api.h +++ b/chrome/browser/extensions/api/browsing_data/browsing_data_api.h
@@ -18,9 +18,7 @@ #include "content/public/browser/browsing_data_filter_builder.h" #include "content/public/browser/browsing_data_remover.h" #include "extensions/browser/extension_function.h" -#include "ppapi/buildflags/buildflags.h" -class PluginPrefs; class PrefService; namespace extension_browsing_data_api_constants { @@ -70,7 +68,7 @@ ResponseAction Run() override; protected: - ~BrowsingDataSettingsFunction() override {} + ~BrowsingDataSettingsFunction() override = default; private: // Sets a boolean value in the |selected_dict| with the |data_type| as a key, @@ -124,13 +122,6 @@ // pausing Sync would prevent the data from being deleted on the server. virtual bool IsPauseSyncAllowed(); -#if BUILDFLAG(ENABLE_PLUGINS) - // Updates the removal bitmask according to whether removing plugin data is - // supported or not. - void CheckRemovingPluginDataSupported( - scoped_refptr<PluginPrefs> plugin_prefs); -#endif - // Parse the developer-provided |origin_types| object into |origin_type_mask| // that can be used with the BrowsingDataRemover. // Returns true if parsing was successful. @@ -171,7 +162,7 @@ BROWSINGDATA_REMOVEAPPCACHE) protected: - ~BrowsingDataRemoveAppcacheFunction() override {} + ~BrowsingDataRemoveAppcacheFunction() override = default; // BrowsingDataRemoverFunction: bool GetRemovalMask(uint64_t* removal_mask) override; @@ -182,7 +173,7 @@ DECLARE_EXTENSION_FUNCTION("browsingData.remove", BROWSINGDATA_REMOVE) protected: - ~BrowsingDataRemoveFunction() override {} + ~BrowsingDataRemoveFunction() override = default; // BrowsingDataRemoverFunction: bool GetRemovalMask(uint64_t* removal_mask) override; @@ -195,7 +186,7 @@ BROWSINGDATA_REMOVECACHE) protected: - ~BrowsingDataRemoveCacheFunction() override {} + ~BrowsingDataRemoveCacheFunction() override = default; // BrowsingDataRemoverFunction: bool GetRemovalMask(uint64_t* removal_mask) override; @@ -207,7 +198,7 @@ BROWSINGDATA_REMOVECOOKIES) protected: - ~BrowsingDataRemoveCookiesFunction() override {} + ~BrowsingDataRemoveCookiesFunction() override = default; // BrowsingDataRemoverFunction: bool GetRemovalMask(uint64_t* removal_mask) override; @@ -219,7 +210,7 @@ BROWSINGDATA_REMOVEDOWNLOADS) protected: - ~BrowsingDataRemoveDownloadsFunction() override {} + ~BrowsingDataRemoveDownloadsFunction() override = default; // BrowsingDataRemoverFunction: bool GetRemovalMask(uint64_t* removal_mask) override; @@ -232,7 +223,7 @@ BROWSINGDATA_REMOVEFILESYSTEMS) protected: - ~BrowsingDataRemoveFileSystemsFunction() override {} + ~BrowsingDataRemoveFileSystemsFunction() override = default; // BrowsingDataRemoverFunction: bool GetRemovalMask(uint64_t* removal_mask) override; @@ -244,7 +235,7 @@ BROWSINGDATA_REMOVEFORMDATA) protected: - ~BrowsingDataRemoveFormDataFunction() override {} + ~BrowsingDataRemoveFormDataFunction() override = default; // BrowsingDataRemoverFunction: bool GetRemovalMask(uint64_t* removal_mask) override; @@ -256,7 +247,7 @@ BROWSINGDATA_REMOVEHISTORY) protected: - ~BrowsingDataRemoveHistoryFunction() override {} + ~BrowsingDataRemoveHistoryFunction() override = default; // BrowsingDataRemoverFunction: bool GetRemovalMask(uint64_t* removal_mask) override; @@ -268,7 +259,7 @@ BROWSINGDATA_REMOVEINDEXEDDB) protected: - ~BrowsingDataRemoveIndexedDBFunction() override {} + ~BrowsingDataRemoveIndexedDBFunction() override = default; // BrowsingDataRemoverFunction: bool GetRemovalMask(uint64_t* removal_mask) override; @@ -281,7 +272,7 @@ BROWSINGDATA_REMOVELOCALSTORAGE) protected: - ~BrowsingDataRemoveLocalStorageFunction() override {} + ~BrowsingDataRemoveLocalStorageFunction() override = default; // BrowsingDataRemoverFunction: bool GetRemovalMask(uint64_t* removal_mask) override; @@ -294,7 +285,7 @@ BROWSINGDATA_REMOVEPLUGINDATA) protected: - ~BrowsingDataRemovePluginDataFunction() override {} + ~BrowsingDataRemovePluginDataFunction() override = default; // BrowsingDataRemoverFunction: bool GetRemovalMask(uint64_t* removal_mask) override; @@ -306,7 +297,7 @@ BROWSINGDATA_REMOVEPASSWORDS) protected: - ~BrowsingDataRemovePasswordsFunction() override {} + ~BrowsingDataRemovePasswordsFunction() override = default; // BrowsingDataRemoverFunction: bool GetRemovalMask(uint64_t* removal_mask) override; @@ -319,7 +310,7 @@ BROWSINGDATA_REMOVESERVICEWORKERS) protected: - ~BrowsingDataRemoveServiceWorkersFunction() override {} + ~BrowsingDataRemoveServiceWorkersFunction() override = default; // BrowsingDataRemoverFunction: bool GetRemovalMask(uint64_t* removal_mask) override; @@ -332,7 +323,7 @@ BROWSINGDATA_REMOVECACHESTORAGE) protected: - ~BrowsingDataRemoveCacheStorageFunction() override {} + ~BrowsingDataRemoveCacheStorageFunction() override = default; // BrowsingDataRemoverFunction: bool GetRemovalMask(uint64_t* removal_mask) override; @@ -344,7 +335,7 @@ BROWSINGDATA_REMOVEWEBSQL) protected: - ~BrowsingDataRemoveWebSQLFunction() override {} + ~BrowsingDataRemoveWebSQLFunction() override = default; // BrowsingDataRemoverFunction: bool GetRemovalMask(uint64_t* removal_mask) override;
diff --git a/chrome/browser/extensions/api/browsing_data/browsing_data_unittest.cc b/chrome/browser/extensions/api/browsing_data/browsing_data_unittest.cc index d1ffd3ac..07df19ef 100644 --- a/chrome/browser/extensions/api/browsing_data/browsing_data_unittest.cc +++ b/chrome/browser/extensions/api/browsing_data/browsing_data_unittest.cc
@@ -93,10 +93,10 @@ uint64_t expected_mask) { auto function = base::MakeRefCounted<BrowsingDataRemoveFunction>(); SCOPED_TRACE(data_types); - EXPECT_EQ(NULL, RunFunctionAndReturnSingleResult( - function.get(), - std::string("[{\"since\": 1},") + data_types + "]", - browser())); + EXPECT_EQ(nullptr, RunFunctionAndReturnSingleResult( + function.get(), + std::string("[{\"since\": 1},") + data_types + "]", + browser())); EXPECT_EQ(expected_mask, GetRemovalMask()); EXPECT_EQ(UNPROTECTED_WEB, GetOriginTypeMask()); } @@ -113,11 +113,11 @@ uint64_t expected_mask) { auto function = base::MakeRefCounted<BrowsingDataRemoveFunction>(); SCOPED_TRACE(protectedStr); - EXPECT_EQ(NULL, RunFunctionAndReturnSingleResult( - function.get(), - "[{\"originTypes\": " + protectedStr + - "}, {\"cookies\": true}]", - browser())); + EXPECT_EQ(nullptr, RunFunctionAndReturnSingleResult( + function.get(), + "[{\"originTypes\": " + protectedStr + + "}, {\"cookies\": true}]", + browser())); EXPECT_EQ(expected_mask, GetOriginTypeMask()); } @@ -125,7 +125,7 @@ void RunAndCompareRemovalMask(uint64_t expected_mask) { scoped_refptr<ShortcutFunction> function = new ShortcutFunction(); SCOPED_TRACE(ShortcutFunction::static_function_name()); - EXPECT_EQ(NULL, + EXPECT_EQ(nullptr, RunFunctionAndReturnSingleResult( function.get(), std::string("[{\"since\": 1}]"), browser())); EXPECT_EQ(expected_mask, GetRemovalMask()); @@ -270,8 +270,8 @@ content::BrowsingDataRemover::DATA_TYPE_INDEXED_DB) | GetAsMask(data_to_remove, "localStorage", content::BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE) | - GetAsMask(data_to_remove, "pluginData", - ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA) | + // PluginData is not supported anymore. + GetAsMask(data_to_remove, "pluginData", 0) | GetAsMask(data_to_remove, "passwords", ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS) | GetAsMask(data_to_remove, "serviceWorkers", @@ -289,8 +289,8 @@ std::string args = "[{\"since\": 1}," + data_types + "]"; if (permitted) { - EXPECT_EQ(NULL, RunFunctionAndReturnSingleResult(function.get(), args, - browser())) + EXPECT_EQ(nullptr, RunFunctionAndReturnSingleResult(function.get(), args, + browser())) << " for " << args; } else { EXPECT_EQ(RunFunctionAndReturnError(function.get(), args, browser()), @@ -367,8 +367,9 @@ TEST_F(BrowsingDataApiTest, RemoveBrowsingDataAll) { auto function = base::MakeRefCounted<BrowsingDataRemoveFunction>(); - EXPECT_EQ(NULL, RunFunctionAndReturnSingleResult( - function.get(), kRemoveEverythingArguments, browser())); + EXPECT_EQ(nullptr, + RunFunctionAndReturnSingleResult( + function.get(), kRemoveEverythingArguments, browser())); EXPECT_EQ(base::Time::FromDoubleT(1.0), GetBeginTime()); EXPECT_EQ( @@ -439,7 +440,6 @@ "localStorage", content::BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE); RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( "passwords", ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS); - // We can't remove plugin data inside a test profile. RunBrowsingDataRemoveWithKeyAndCompareRemovalMask( "serviceWorkers", content::BrowsingDataRemover::DATA_TYPE_SERVICE_WORKERS); @@ -493,7 +493,7 @@ { auto remove_function = base::MakeRefCounted<BrowsingDataRemoveFunction>(); SCOPED_TRACE("remove_json"); - EXPECT_EQ(NULL, + EXPECT_EQ(nullptr, RunFunctionAndReturnSingleResult( remove_function.get(), std::string("[{\"since\": 1},") + json + "]", browser())); @@ -523,7 +523,6 @@ content::BrowsingDataRemover::DATA_TYPE_INDEXED_DB); RunAndCompareRemovalMask<BrowsingDataRemoveLocalStorageFunction>( content::BrowsingDataRemover::DATA_TYPE_LOCAL_STORAGE); - // We can't remove plugin data inside a test profile. RunAndCompareRemovalMask<BrowsingDataRemovePasswordsFunction>( ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PASSWORDS); RunAndCompareRemovalMask<BrowsingDataRemoveServiceWorkersFunction>( @@ -571,33 +570,24 @@ // Test cookie and app data settings. TEST_F(BrowsingDataApiTest, SettingsFunctionSiteData) { - int supported_site_data_except_plugins = + int supported_site_data = (content::BrowsingDataRemover::DATA_TYPE_COOKIES | content::BrowsingDataRemover::DATA_TYPE_DOM_STORAGE) & ~content::BrowsingDataRemover::DATA_TYPE_BACKGROUND_FETCH & ~content::BrowsingDataRemover::DATA_TYPE_EMBEDDER_DOM_STORAGE; - int supported_site_data = - supported_site_data_except_plugins | - ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA; - SetPrefsAndVerifySettings(content::BrowsingDataRemover::DATA_TYPE_COOKIES, - UNPROTECTED_WEB, - supported_site_data_except_plugins); + UNPROTECTED_WEB, supported_site_data); SetPrefsAndVerifySettings( ChromeBrowsingDataRemoverDelegate::DATA_TYPE_HOSTED_APP_DATA_TEST_ONLY, - PROTECTED_WEB, supported_site_data_except_plugins); + PROTECTED_WEB, supported_site_data); SetPrefsAndVerifySettings(content::BrowsingDataRemover::DATA_TYPE_COOKIES | ChromeBrowsingDataRemoverDelegate:: DATA_TYPE_HOSTED_APP_DATA_TEST_ONLY, PROTECTED_WEB | UNPROTECTED_WEB, - supported_site_data_except_plugins); - SetPrefsAndVerifySettings( - content::BrowsingDataRemover::DATA_TYPE_COOKIES | - ChromeBrowsingDataRemoverDelegate::DATA_TYPE_PLUGIN_DATA, - UNPROTECTED_WEB, supported_site_data); + supported_site_data); SetBasicPrefsAndVerifySettings( content::BrowsingDataRemover::DATA_TYPE_COOKIES, UNPROTECTED_WEB, - supported_site_data_except_plugins); + supported_site_data); } // Test an arbitrary assortment of settings.
diff --git a/chrome/browser/extensions/api/crash_report_private/crash_report_private_api.cc b/chrome/browser/extensions/api/crash_report_private/crash_report_private_api.cc index a10de90f..760af37 100644 --- a/chrome/browser/extensions/api/crash_report_private/crash_report_private_api.cc +++ b/chrome/browser/extensions/api/crash_report_private/crash_report_private_api.cc
@@ -5,6 +5,7 @@ #include "chrome/browser/extensions/api/crash_report_private/crash_report_private_api.h" #include "base/time/default_clock.h" +#include "chrome/browser/browser_process.h" #include "components/crash/content/browser/error_reporting/javascript_error_report.h" #include "components/crash/content/browser/error_reporting/send_javascript_error_report.h" @@ -64,6 +65,8 @@ error_report.stack_trace = std::move(*params->info.stack_trace); } + error_report.app_locale = g_browser_process->GetApplicationLocale(); + SendJavaScriptErrorReport( std::move(error_report), base::BindOnce(&CrashReportPrivateReportErrorFunction::OnReportComplete,
diff --git a/chrome/browser/extensions/api/crash_report_private/crash_report_private_apitest.cc b/chrome/browser/extensions/api/crash_report_private/crash_report_private_apitest.cc index 406d361..6057dc9 100644 --- a/chrome/browser/extensions/api/crash_report_private/crash_report_private_apitest.cc +++ b/chrome/browser/extensions/api/crash_report_private/crash_report_private_apitest.cc
@@ -101,7 +101,8 @@ ASSERT_TRUE(report); EXPECT_THAT( report->query, - MatchesRegex("browser=Chrome&browser_process_uptime_ms=\\d+&browser_" + MatchesRegex("app_locale=en-US&browser=Chrome&browser_process_uptime_ms=" + "\\d+&browser_" "version=1.2.3.4&channel=Stable&" "error_message=hi&full_url=http%3A%2F%2Fwww.test.com%2F&" "os=ChromeOS&os_version=" + @@ -132,7 +133,8 @@ // "Chrome%20(Chrome%20OS)" and then the second escapes the '%' into '%25'. EXPECT_THAT( report->query, - MatchesRegex("browser=Chrome&browser_process_uptime_ms=\\d+&browser_" + MatchesRegex("app_locale=en-US&browser=Chrome&browser_process_uptime_ms=" + "\\d+&browser_" "version=1.2.3.4&channel=Stable&column=456&" "error_message=hi&full_url=http%3A%2F%2Fwww.test.com%2Ffoo" "&line=123&os=ChromeOS&os_version=" + @@ -162,14 +164,14 @@ ASSERT_TRUE(report); EXPECT_THAT( report->query, - MatchesRegex( - "browser=Chrome&browser_process_uptime_ms=\\d+&browser_version=1.2." - "3.4&channel=Stable&column=456&" - "error_message=hi&full_url=http%3A%2F%2Fwww.test.com%2Ffoo&" - "line=123&os=ChromeOS&os_version=" + - GetOsVersion() + - "&prod=TestApp&src=http%3A%2F%2Fwww.test.com%2Ffoo&type=" - "JavascriptError&url=%2Ffoo&ver=1.0.0.0")); + MatchesRegex("app_locale=en-US&browser=Chrome&browser_process_uptime_ms=" + "\\d+&browser_version=1.2." + "3.4&channel=Stable&column=456&" + "error_message=hi&full_url=http%3A%2F%2Fwww.test.com%2Ffoo&" + "line=123&os=ChromeOS&os_version=" + + GetOsVersion() + + "&prod=TestApp&src=http%3A%2F%2Fwww.test.com%2Ffoo&type=" + "JavascriptError&url=%2Ffoo&ver=1.0.0.0")); EXPECT_EQ(report->content, ""); } @@ -194,7 +196,8 @@ EXPECT_THAT( report->query, MatchesRegex( - "browser=Chrome&browser_process_uptime_ms=\\d+&browser_version=1.2." + "app_locale=en-US&browser=Chrome&browser_process_uptime_ms=\\d+&" + "browser_version=1.2." "3.4&channel=Stable&column=456&" "error_message=%5BMAC%20OUI%3D06%3A00%3A00%20IFACE%3D1%5D&" "full_url=http%3A%2F%2Fwww.test.com%2Ffoo&line=123&os=ChromeOS&"
diff --git a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api_ash.cc b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api_ash.cc index 1c62485..712c89e0 100644 --- a/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api_ash.cc +++ b/chrome/browser/extensions/api/enterprise_platform_keys/enterprise_platform_keys_api_ash.cc
@@ -120,7 +120,7 @@ browser_context()); platform_keys_service->GetCertificates( platform_keys_token_id.value(), - base::Bind( + base::BindOnce( &EnterprisePlatformKeysGetCertificatesFunction::OnGotCertificates, this)); return RespondLater(); @@ -181,9 +181,9 @@ platform_keys_service->ImportCertificate( platform_keys_token_id.value(), cert_x509, - base::Bind(&EnterprisePlatformKeysImportCertificateFunction:: - OnImportedCertificate, - this)); + base::BindOnce(&EnterprisePlatformKeysImportCertificateFunction:: + OnImportedCertificate, + this)); return RespondLater(); } @@ -228,9 +228,9 @@ platform_keys_service->RemoveCertificate( platform_keys_token_id.value(), cert_x509, - base::Bind(&EnterprisePlatformKeysRemoveCertificateFunction:: - OnRemovedCertificate, - this)); + base::BindOnce(&EnterprisePlatformKeysRemoveCertificateFunction:: + OnRemovedCertificate, + this)); return RespondLater(); }
diff --git a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc index f6d875d0..26efafa 100644 --- a/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc +++ b/chrome/browser/extensions/api/passwords_private/passwords_private_delegate_impl.cc
@@ -435,7 +435,8 @@ auto* client = ChromePasswordManagerClient::FromWebContents(web_contents); DCHECK(client); if (const std::string* sort_key = password_id_generator_.TryGetKey(id)) - password_manager_presenter_->MovePasswordToAccountStore(*sort_key, client); + password_manager_presenter_->MovePasswordToAccountStore({*sort_key}, + client); } void PasswordsPrivateDelegateImpl::ImportPasswords(
diff --git a/chrome/browser/extensions/api/settings_private/generated_prefs.cc b/chrome/browser/extensions/api/settings_private/generated_prefs.cc index 56416301..4ff9d4cc 100644 --- a/chrome/browser/extensions/api/settings_private/generated_prefs.cc +++ b/chrome/browser/extensions/api/settings_private/generated_prefs.cc
@@ -7,6 +7,7 @@ #include "base/callback.h" #include "build/build_config.h" #include "chrome/browser/content_settings/generated_cookie_prefs.h" +#include "chrome/browser/content_settings/generated_notification_pref.h" #include "chrome/browser/extensions/api/settings_private/generated_pref.h" #include "chrome/browser/extensions/api/settings_private/prefs_util_enums.h" #include "chrome/browser/password_manager/generated_password_leak_detection_pref.h" @@ -99,6 +100,8 @@ std::make_unique<GeneratedPasswordLeakDetectionPref>(profile_); prefs_[safe_browsing::kGeneratedSafeBrowsingPref] = std::make_unique<safe_browsing::GeneratedSafeBrowsingPref>(profile_); + prefs_[content_settings::kGeneratedNotificationPref] = + std::make_unique<content_settings::GeneratedNotificationPref>(profile_); } } // namespace settings_private
diff --git a/chrome/browser/extensions/api/settings_private/prefs_util.cc b/chrome/browser/extensions/api/settings_private/prefs_util.cc index 362afa0..93d11c6 100644 --- a/chrome/browser/extensions/api/settings_private/prefs_util.cc +++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc
@@ -10,6 +10,7 @@ #include "chrome/browser/browser_process.h" #include "chrome/browser/browser_process_platform_part.h" #include "chrome/browser/content_settings/generated_cookie_prefs.h" +#include "chrome/browser/content_settings/generated_notification_pref.h" #include "chrome/browser/extensions/api/settings_private/generated_prefs.h" #include "chrome/browser/extensions/api/settings_private/generated_prefs_factory.h" #include "chrome/browser/extensions/settings_api_helpers.h" @@ -331,6 +332,8 @@ settings_api::PrefType::PREF_TYPE_BOOLEAN; (*s_allowlist)[::prefs::kCookieControlsMode] = settings_api::PrefType::PREF_TYPE_NUMBER; + (*s_allowlist)[::content_settings::kGeneratedNotificationPref] = + settings_api::PrefType::PREF_TYPE_NUMBER; (*s_allowlist)[::prefs::kPluginsAlwaysOpenPdfExternally] = settings_api::PrefType::PREF_TYPE_BOOLEAN; (*s_allowlist)[::prefs::kEnableDRM] =
diff --git a/chrome/browser/extensions/api/web_request/web_request_apitest.cc b/chrome/browser/extensions/api/web_request/web_request_apitest.cc index bb55b50f..450b390 100644 --- a/chrome/browser/extensions/api/web_request/web_request_apitest.cc +++ b/chrome/browser/extensions/api/web_request/web_request_apitest.cc
@@ -3624,8 +3624,8 @@ EXPECT_TRUE( resource_request->trusted_params->isolation_info.IsEqualForTesting( net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, - redirected_origin, redirected_origin, + net::IsolationInfo::RequestType::kMainFrame, redirected_origin, + redirected_origin, net::SiteForCookies::FromOrigin(redirected_origin)))); } @@ -3675,8 +3675,8 @@ EXPECT_TRUE( resource_request->trusted_params->isolation_info.IsEqualForTesting( net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateFrameOnly, - top_level_origin, redirected_origin, + net::IsolationInfo::RequestType::kSubFrame, top_level_origin, + redirected_origin, net::SiteForCookies::FromOrigin(top_level_origin)))); }
diff --git a/chrome/browser/flag-metadata.json b/chrome/browser/flag-metadata.json index 0af5697..542a74c 100644 --- a/chrome/browser/flag-metadata.json +++ b/chrome/browser/flag-metadata.json
@@ -1679,6 +1679,11 @@ "expiry_milestone": 80 }, { + "name": "enable-incognito-authentication-ios", + "owners": [ "stkhapugin", "bling-flags" ], + "expiry_milestone": 90 + }, + { "name": "enable-incognito-shortcut-on-desktop", "owners": [ "rhalavati", "chrome-privacy-core@google.com" ], "expiry_milestone": 92 @@ -1758,7 +1763,7 @@ { "name": "enable-md-rounded-corners-on-dialogs", "owners": [ "tluk" ], - "expiry_milestone": 87 + "expiry_milestone": 90 }, { "name": "enable-media-feeds",
diff --git a/chrome/browser/media/feeds/media_feeds_fetcher.cc b/chrome/browser/media/feeds/media_feeds_fetcher.cc index 28dadbf0..1ff1627 100644 --- a/chrome/browser/media/feeds/media_feeds_fetcher.cc +++ b/chrome/browser/media/feeds/media_feeds_fetcher.cc
@@ -116,7 +116,7 @@ resource_request->site_for_cookies = net::SiteForCookies::FromOrigin(origin); resource_request->trusted_params = network::ResourceRequest::TrustedParams(); resource_request->trusted_params->isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, origin, origin, + net::IsolationInfo::RequestType::kOther, origin, origin, net::SiteForCookies::FromOrigin(origin)); if (bypass_cache)
diff --git a/chrome/browser/media/webrtc/desktop_capture_access_handler.cc b/chrome/browser/media/webrtc/desktop_capture_access_handler.cc index e561093..d1f99d09 100644 --- a/chrome/browser/media/webrtc/desktop_capture_access_handler.cc +++ b/chrome/browser/media/webrtc/desktop_capture_access_handler.cc
@@ -206,7 +206,6 @@ #else gfx::NativeWindow parent_window = NULL; #endif - web_contents = NULL; // Some extensions do not require user approval, because they provide their // own user approval UI.
diff --git a/chrome/browser/media/webrtc/media_stream_capture_indicator.cc b/chrome/browser/media/webrtc/media_stream_capture_indicator.cc index 5b4c59f..0ad4021 100644 --- a/chrome/browser/media/webrtc/media_stream_capture_indicator.cc +++ b/chrome/browser/media/webrtc/media_stream_capture_indicator.cc
@@ -332,6 +332,7 @@ content::WebContents* web_contents, const blink::MediaStreamDevices& devices, std::unique_ptr<MediaStreamUI> ui) { + DCHECK(web_contents); auto& usage = usage_map_[web_contents]; if (!usage) usage = std::make_unique<WebContentsDeviceUsage>(this, web_contents);
diff --git a/chrome/browser/permissions/abusive_origin_permission_revocation_request.h b/chrome/browser/permissions/abusive_origin_permission_revocation_request.h index 7064841..18aeb4b 100644 --- a/chrome/browser/permissions/abusive_origin_permission_revocation_request.h +++ b/chrome/browser/permissions/abusive_origin_permission_revocation_request.h
@@ -9,8 +9,8 @@ #include "base/memory/weak_ptr.h" #include "base/optional.h" #include "chrome/browser/permissions/crowd_deny_safe_browsing_request.h" +#include "url/gurl.h" -class GURL; class Profile; enum class ContentSettingsType; @@ -62,7 +62,7 @@ base::Optional<CrowdDenySafeBrowsingRequest> safe_browsing_request_; Profile* profile_; - const GURL& origin_; + const GURL origin_; OutcomeCallback callback_; base::WeakPtrFactory<AbusiveOriginPermissionRevocationRequest> weak_factory_{ this};
diff --git a/chrome/browser/predictors/prefetch_manager.cc b/chrome/browser/predictors/prefetch_manager.cc index 3996b04..b32d16e7 100644 --- a/chrome/browser/predictors/prefetch_manager.cc +++ b/chrome/browser/predictors/prefetch_manager.cc
@@ -237,8 +237,8 @@ request.trusted_params = network::ResourceRequest::TrustedParams(); request.trusted_params->isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, top_frame_origin, - frame_origin, net::SiteForCookies::FromUrl(info.url)); + net::IsolationInfo::RequestType::kOther, top_frame_origin, frame_origin, + net::SiteForCookies::FromUrl(info.url)); // TODO(crbug.com/1092329): Ensure the request is seen by extensions.
diff --git a/chrome/browser/prerender/isolated/isolated_prerender_tab_helper.cc b/chrome/browser/prerender/isolated/isolated_prerender_tab_helper.cc index 7e111304..274c41e 100644 --- a/chrome/browser/prerender/isolated/isolated_prerender_tab_helper.cc +++ b/chrome/browser/prerender/isolated/isolated_prerender_tab_helper.cc
@@ -696,7 +696,7 @@ url::Origin origin = url::Origin::Create(url); net::IsolationInfo isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, origin, origin, + net::IsolationInfo::RequestType::kMainFrame, origin, origin, net::SiteForCookies::FromOrigin(origin)); network::ResourceRequest::TrustedParams trusted_params; trusted_params.isolation_info = isolation_info;
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 624ccfb3..88c08b0 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_iw.xtb
@@ -394,7 +394,7 @@ <translation id="3935615366277838204"><ph name="LETTER" /> גדולה</translation> <translation id="3936394396199829062">סומק לבנדר</translation> <translation id="3943857333388298514">הדבק</translation> -<translation id="3962990492275676168">התחל לקרוא מהמיקום הנוכחי</translation> +<translation id="3962990492275676168">יש להתחיל לקרוא מהמיקום הנוכחי</translation> <translation id="3970951409746498040">חום חול</translation> <translation id="3989324057180830702">tgl btn</translation> <translation id="3991317907213946254">מוקסין</translation> @@ -858,7 +858,7 @@ <translation id="7714340021005120797">אין עוד תיבות משולבות</translation> <translation id="772146615414628379">מזל טוב! למדת את כל המידע הבסיסי שיאפשר לך להשתמש ב-ChromeVox. חשוב לזכור שאפשר לפתוח את תפריט הפקודות של ChromeVox בכל שלב על ידי הקשה על Search+מקש הנקודה. כדי לקבל מידע נוסף על ChromeVox ו-Chrome OS, אפשר לעיין במאמרים הבאים. אם סיימת עם המדריך, אפשר להשתמש ב-ChromeVox כדי לנווט ללחצן 'סגירה' וללחוץ עליו.</translation> -<translation id="7724603315864178912">חתוך</translation> +<translation id="7724603315864178912">חיתוך</translation> <translation id="7731785449856576010">אין עוד ווידג'טים של מדיה</translation> <translation id="773906353055481349">כדי לנווט לפי תא, יש להקיש על Search+Ctrl+Alt ביחד עם מקשי החיצים</translation> <translation id="7763537600611320912">ההורדה של <ph name="FILE_NAME" /> התחילה</translation> @@ -950,12 +950,12 @@ <translation id="8463645336674919227">יציאה משגיאת דקדוק</translation> <translation id="847040613207937740">אין עוד תיבות סימון</translation> <translation id="8473540203671727883">הקראת הטקסט שנמצא מתחת לסמן של העכבר</translation> -<translation id="8476408756881832830">השהה את ההשמעה כשתוסף ה-ChromeVox מקריא</translation> +<translation id="8476408756881832830">אני רוצה להשהות את ההשמעה כשתוסף ה-ChromeVox מקריא</translation> <translation id="8476508772960940536">סקירת חלון</translation> <translation id="8503360654911991865">הקטן רמת פירוט של ניווט</translation> <translation id="8520472399088452386">לחצן סיבוב</translation> <translation id="8534394844575788431">עיצוב</translation> -<translation id="8542271685829952264">כדי לראות את כל הפקודות והקיצורים הזמינים ב-ChromeVox, הקש על מקש החיפוש ומקש הנקודה. לאחר מכן השתמש במקשי החיצים כדי לנווט בתפריטים. השתמש במקש Enter כדי להפעיל פקודה. הקשה על מקש החיפוש יחד עם o ולאחר מכן t תחזיר אותך לכאן.</translation> +<translation id="8542271685829952264">כדי לראות את כל הפקודות והקיצורים הזמינים ב-ChromeVox, יש להקיש על מקש החיפוש ומקש הנקודה. לאחר מכן יש להשתמש במקשי החיצים כדי לנווט בתפריטים. יש להשתמש במקש Enter כדי להפעיל פקודה. הקשה על מקש החיפוש יחד עם o ולאחר מכן t תחזיר אותך לכאן.</translation> <translation id="8548973727659841685">תו</translation> <translation id="8561322612995434619">כולל חלון קופץ</translation> <translation id="8571096049907249734">בחירה מרובה</translation>
diff --git a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb index 601fa25..3407115 100644 --- a/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb +++ b/chrome/browser/resources/chromeos/accessibility/strings/accessibility_strings_mr.xtb
@@ -174,7 +174,7 @@ <translation id="2311237334957139798">ग्रॅन्युलॅरिटीवर मागीलवर हलवा</translation> <translation id="2314393392395134769">सबस्क्रिप्ट नाही</translation> <translation id="2318372665160196757">मुख्य</translation> -<translation id="2329324941084714723">टॅब पॅनेल</translation> +<translation id="2329324941084714723">टॅब पॅनल</translation> <translation id="2347456970887948350">एक लिंक</translation> <translation id="2381733276052567791">भाषण सुरू किंवा बंद करा</translation> <translation id="2390264819538553347">पुढे जाण्यासाठी, एंटर दाबा; मागे जाण्यासाठी, बॅकस्पेस दाबा.</translation> @@ -531,7 +531,7 @@ <translation id="5020651427400641814">स्पीच लॉगिंग सुरू करा</translation> <translation id="5041394372352067729">ब्रेल डिस्प्ले पेजच्या सर्वात वर हलवा</translation> <translation id="5042770794184672516">बोलण्याचा आवाज वाढवा</translation> -<translation id="5042992464904238023">वेब सामग्री</translation> +<translation id="5042992464904238023">वेब आशय</translation> <translation id="5050015258024679800">मागील स्तर 4 शीर्षक</translation> <translation id="5054047268577924192">मागील सूची आयटम</translation> <translation id="5085453135206054947">फिकट जांभळट लाल</translation> @@ -963,7 +963,7 @@ <translation id="8584721346566392021">h5</translation> <translation id="8587549812518406253">पुढील सूची आयटम</translation> <translation id="8591343418134616947">मागील पातळी सहा शीर्षक नाही</translation> -<translation id="8603071050456974042">ChromeVox पॅनेल</translation> +<translation id="8603071050456974042">ChromeVox पॅनल</translation> <translation id="8606621670302093223">तारीख नियंत्रण</translation> <translation id="8613709718990529335">हिरवट निळा</translation> <translation id="8625173877182443267">पुढील पातळी सहा शीर्षक नाही</translation>
diff --git a/chrome/browser/resources/chromeos/login/BUILD.gn b/chrome/browser/resources/chromeos/login/BUILD.gn index 4f2e722b..7ddffe24 100644 --- a/chrome/browser/resources/chromeos/login/BUILD.gn +++ b/chrome/browser/resources/chromeos/login/BUILD.gn
@@ -39,7 +39,6 @@ ":oobe_supervision_transition", ":oobe_update", ":oobe_welcome", - ":parental_handoff", ":recommend_apps", ":saml_confirm_password", ":sync_consent", @@ -276,14 +275,6 @@ ] } -js_library("parental_handoff") { - deps = [ - "components:login_screen_behavior", - "components:oobe_dialog_host_behavior", - "components:oobe_i18n_behavior", - ] -} - js_library("recommend_apps") { deps = [ "components:login_screen_behavior",
diff --git a/chrome/browser/resources/chromeos/login/oobe_reset.html b/chrome/browser/resources/chromeos/login/oobe_reset.html index 470ccbfc..5ea64a4 100644 --- a/chrome/browser/resources/chromeos/login/oobe_reset.html +++ b/chrome/browser/resources/chromeos/login/oobe_reset.html
@@ -27,7 +27,9 @@ <!-- Subtitle: Powerwash state (depends on powerwash mode) --> <div hidden="[[!inPowerwashState_]]"> <div>[[powerwashStateSubtitle_]]</div> - <div>[[i18nDynamic(locale, 'resetWarningDataDetails')]]</div> + <div> + [[i18nDynamic(locale, 'resetWarningDataDetails')]] + </div> </div> <!-- Help Link - Hidden when reverting/rolling back. --> <if expr="_google_chrome">
diff --git a/chrome/browser/resources/chromeos/login/parental_handoff.html b/chrome/browser/resources/chromeos/login/parental_handoff.html deleted file mode 100644 index 9ba88fa5..0000000 --- a/chrome/browser/resources/chromeos/login/parental_handoff.html +++ /dev/null
@@ -1,37 +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. --> - -<link rel="import" href="chrome://oobe/custom_elements.html"> -<link rel="import" href="chrome://resources/cr_elements/shared_vars_css.html"> -<link rel="import" href="chrome://resources/html/i18n_behavior.html"> - -<dom-module id="parental-handoff"> - <template> - <style include="oobe-dialog-host"></style> - <oobe-dialog id="parentalHandoffDialog" role="dialog" has-buttons - aria-label$="[[title_]]"> - <hd-iron-icon icon1x="oobe-32:googleg" icon2x="oobe-64:googleg" - slot="oobe-icon"> - </hd-iron-icon> - <h1 slot="title"> - [[title_]] - </h1> - <div slot="subtitle"> - [[subtitle_]] - </div> - <div slot="footer" class="flex layout vertical center center-justified"> - <!-- TODO(yilkal): Replace the following image when the appropriate - image is ready to be used --> - <img srcset="images/1x/parental_control.svg 1x, - images/2x/parental_control.svg 2x" class="oobe-illustration" - alt$="[[title_]]"> - </div> - <div slot="bottom-buttons" class="layout horizontal end-justified"> - <oobe-next-button id="nextButton" - text-key="parentalHandoffDialogNextButton" class="focus-on-show" - inverse on-click="onNextButtonPressed_"></oobe-next-button> - </div> - </oobe-dialog> - </template> -</dom-module>
diff --git a/chrome/browser/resources/chromeos/login/parental_handoff.js b/chrome/browser/resources/chromeos/login/parental_handoff.js deleted file mode 100644 index cbe7e2c5..0000000 --- a/chrome/browser/resources/chromeos/login/parental_handoff.js +++ /dev/null
@@ -1,68 +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. - -/** - * @fileoverview Polymer element for Parental Handoff screen. - */ - -Polymer({ - is: 'parental-handoff', - - behaviors: [OobeI18nBehavior, OobeDialogHostBehavior, LoginScreenBehavior], - - properties: { - /** - * THe title to be displayed - */ - title_: { - type: String, - value: '', - }, - - /** - * The subtitle to be displayed. - */ - subtitle_: { - type: String, - value: '', - }, - }, - - /** - * Event handler that is invoked just before the frame is shown. - * @param {Object} data Screen init payload - */ - onBeforeShow(data) { - if ('title' in data) { - this.title_ = data.title; - } - - if ('subtitle' in data) { - this.subtitle_ = data.subtitle; - } - }, - - ready() { - this.initializeLoginScreen('ParentalHandoffScreen', { - resetAllowed: true, - }); - }, - - /* - * Executed on language change. - */ - updateLocalizedContent() { - this.i18nUpdateLocale(); - }, - - /** - * On-tap event handler for Next button. - * - * @private - */ - onNextButtonPressed_() { - this.userActed('next'); - }, - -});
diff --git a/chrome/browser/resources/chromeos/login/structure/components_common.html b/chrome/browser/resources/chromeos/login/structure/components_common.html index 3d5680d0..6523a5b 100644 --- a/chrome/browser/resources/chromeos/login/structure/components_common.html +++ b/chrome/browser/resources/chromeos/login/structure/components_common.html
@@ -54,7 +54,6 @@ <include src="../family_link_notice.html"> <include src="../user_creation.html"> <include src="../screen_signin_fatal_error.html"> -<include src="../parental_handoff.html"> <include src="components_[OOBE].html">
diff --git a/chrome/browser/resources/chromeos/login/structure/components_common.js b/chrome/browser/resources/chromeos/login/structure/components_common.js index a0e132d..427f2aca 100644 --- a/chrome/browser/resources/chromeos/login/structure/components_common.js +++ b/chrome/browser/resources/chromeos/login/structure/components_common.js
@@ -53,6 +53,5 @@ // <include src="../family_link_notice.js"> // <include src="../user_creation.js"> // <include src="../screen_signin_fatal_error.js"> -// <include src="../parental_handoff.js"> // <include src="components_[OOBE].js">
diff --git a/chrome/browser/resources/chromeos/login/structure/screens_common.html b/chrome/browser/resources/chromeos/login/structure/screens_common.html index e80800f..934c0466 100644 --- a/chrome/browser/resources/chromeos/login/structure/screens_common.html +++ b/chrome/browser/resources/chromeos/login/structure/screens_common.html
@@ -45,5 +45,3 @@ </family-link-notice> <user-creation id="user-creation" class="step hidden"> </user-creation> -<parental-handoff id="parental-handoff" class="step hidden"> -</parental-handoff>
diff --git a/chrome/browser/resources/discards/database_tab.js b/chrome/browser/resources/discards/database_tab.js index 76cbd33..893b0710 100644 --- a/chrome/browser/resources/discards/database_tab.js +++ b/chrome/browser/resources/discards/database_tab.js
@@ -400,12 +400,11 @@ if (feature.useTimestamp) { const nowSecondsFromEpoch = Math.round(Date.now() / 1000); return 'Used ' + - durationToString( - Number(BigInt(nowSecondsFromEpoch) - feature.useTimestamp)); + durationToString(nowSecondsFromEpoch - feature.useTimestamp); } if (feature.observationDuration) { - return secondsToString(Number(feature.observationDuration)); + return secondsToString(feature.observationDuration); } return 'N/A';
diff --git a/chrome/browser/resources/discards/discards_tab.js b/chrome/browser/resources/discards/discards_tab.js index f5c5edfd..96302321 100644 --- a/chrome/browser/resources/discards/discards_tab.js +++ b/chrome/browser/resources/discards/discards_tab.js
@@ -222,9 +222,10 @@ case mojom.LifecycleUnitState.DISCARDED: return 'discarded (' + this.discardReasonToString_(reason) + ')' + ((reason === mojom.LifecycleUnitDiscardReason.URGENT) ? ' at ' + - // Must convert since Date constructor takes milliseconds. - (new Date(Number(stateChangeTime.microseconds) / 1000) - .toLocaleString()) : + // Must convert since Date constructor takes + // milliseconds. + (new Date(stateChangeTime.microseconds / 1000)) + .toLocaleString() : ''); } assertNotReached('Unknown lifecycle state: ' + state);
diff --git a/chrome/browser/resources/discards/graph_doc.js b/chrome/browser/resources/discards/graph_doc.js index 99468f7e..e3ce7e1d 100644 --- a/chrome/browser/resources/discards/graph_doc.js +++ b/chrome/browser/resources/discards/graph_doc.js
@@ -231,7 +231,7 @@ /** @implements {d3.ForceNode} */ class GraphNode { constructor(id) { - /** @type {bigint} */ + /** @type {number} */ this.id = id; /** @type {string} */ this.color = 'black'; @@ -316,7 +316,7 @@ return -200; } - /** @return {!Array<bigint>} an array of node ids. */ + /** @return {!Array<number>} an array of node ids. */ get linkTargets() { return []; } @@ -326,7 +326,7 @@ * things, but be owned by exactly one (per relationship type). As such, the * relationship is expressed on the *owned* object. These links are drawn with * an arrow at the beginning of the link, pointing to the owned object. - * @return {!Array<bigint>} an array of node ids. + * @return {!Array<number>} an array of node ids. */ get dashedLinkTargets() { return []; @@ -334,14 +334,11 @@ /** * Selects a color string from an id. - * @param {bigint} id The id the returned color is selected from. + * @param {number} id The id the returned color is selected from. * @return {string} */ selectColor(id) { - if (id < 0) { - id = -id; - } - return d3.schemeSet3[Number(id % BigInt(12))]; + return d3.schemeSet3[Math.abs(id) % 12]; } } @@ -630,7 +627,7 @@ */ this.dashedLinkGroup_ = null; - /** @private {!Map<bigint, !GraphNode>} */ + /** @private {!Map<number, !GraphNode>} */ this.nodes_ = new Map(); /** @@ -849,7 +846,7 @@ */ nodeDescriptions_(nodeDescriptions) { for (const nodeId in nodeDescriptions) { - const node = this.nodes_.get(BigInt(nodeId)); + const node = this.nodes_.get(Number.parseInt(nodeId, 10)); if (node && node.tooltip) { node.tooltip.onDescription(nodeDescriptions[nodeId]); } @@ -892,7 +889,7 @@ } const type = /** @type {string} */ (event.data[0]); - const data = /** @type {Object|number|bigint} */ (event.data[1]); + const data = /** @type {Object|number} */ (event.data[1]); switch (type) { case 'frameCreated': this.frameCreated( @@ -931,7 +928,7 @@ /** @type {!discards.mojom.WorkerInfo} */ (data)); break; case 'nodeDeleted': - this.nodeDeleted(/** @type {bigint} */ (data)); + this.nodeDeleted(/** @type {number} */ (data)); break; case 'nodeDescriptions': this.nodeDescriptions_(/** @type {!Object<string>} */ (data));
diff --git a/chrome/browser/resources/discards/graph_tab_template.js b/chrome/browser/resources/discards/graph_tab_template.js index 41d68cde..62e0ded 100644 --- a/chrome/browser/resources/discards/graph_tab_template.js +++ b/chrome/browser/resources/discards/graph_tab_template.js
@@ -18,7 +18,7 @@ /** * @param {string} type - * @param {Object|number|bigint} data + * @param {Object|number} data */ postMessage_(type, data) { this.contentWindow_.postMessage([type, data], '*'); @@ -118,12 +118,12 @@ */ onMessage_(event) { const type = /** @type {string} */ (event.data[0]); - const data = /** @type {Object|number|bigint} */ (event.data[1]); + const data = /** @type {Object|number} */ (event.data[1]); switch (type) { case 'requestNodeDescriptions': // Forward the request through the mojoms and bounce the reply back. this.graphDump_ - .requestNodeDescriptions(/** @type {!Array<bigint>} */ (data)) + .requestNodeDescriptions(/** @type {!Array<number>} */ (data)) .then( (descriptions) => this.contentWindow_.postMessage( ['nodeDescriptions', descriptions.nodeDescriptionsJson],
diff --git a/chrome/browser/resources/feed_internals/feed_internals.js b/chrome/browser/resources/feed_internals/feed_internals.js index 1d4a2c94..32c14f9 100644 --- a/chrome/browser/resources/feed_internals/feed_internals.js +++ b/chrome/browser/resources/feed_internals/feed_internals.js
@@ -111,9 +111,9 @@ * @return {string} */ function toDateString(timeSinceEpoch) { - const microseconds = Number(timeSinceEpoch.microseconds); - return microseconds === 0 ? '' : - new Date(microseconds / 1000).toLocaleString(); + return timeSinceEpoch.microseconds === 0 ? + '' : + new Date(timeSinceEpoch.microseconds / 1000).toLocaleString(); } /**
diff --git a/chrome/browser/resources/interventions_internals/index.js b/chrome/browser/resources/interventions_internals/index.js index 410aca9..d88edff 100644 --- a/chrome/browser/resources/interventions_internals/index.js +++ b/chrome/browser/resources/interventions_internals/index.js
@@ -465,7 +465,7 @@ */ logNewMessage(log) { insertMessageRowToMessageLogTable( - Number(log.time), log.type, log.description, log.url.url, log.pageId); + log.time, log.type, log.description, log.url.url, log.pageId); }, /** @@ -473,7 +473,7 @@ * * @override * @param {!string} host The blocklisted host. - * @param {bigint} time The time when the host was blocklisted in milliseconds + * @param {number} time The time when the host was blocklisted in milliseconds * since Unix epoch. */ onBlocklistedHost(host, time) { @@ -487,7 +487,7 @@ const timeTd = document.createElement('td'); timeTd.setAttribute('class', 'host-blocklisted-time'); - timeTd.textContent = getTimeFormat(Number(time)); + timeTd.textContent = getTimeFormat(time); row.appendChild(timeTd); // TODO(thanhdle): Insert row at correct index. crbug.com/776105. @@ -511,12 +511,12 @@ * Update the blocklist cleared status on the page. * * @override - * @param {bigint} time The time of the event in milliseconds since Unix + * @param {number} time The time of the event in milliseconds since Unix * epoch. */ onBlocklistCleared(time) { const blocklistClearedStatus = $('blocklist-last-cleared-time'); - blocklistClearedStatus.textContent = getTimeFormat(Number(time)); + blocklistClearedStatus.textContent = getTimeFormat(time); // Remove hosts from table. const blocklistedHostsTable = $('blocklisted-hosts-table'); @@ -529,8 +529,7 @@ // Log event message. insertMessageRowToMessageLogTable( - Number(time), 'Blocklist', 'Blocklist Cleared', '' /* URL */, - 0 /* pageId */); + time, 'Blocklist', 'Blocklist Cleared', '' /* URL */, 0 /* pageId */); }, /**
diff --git a/chrome/browser/resources/media/media_feeds.js b/chrome/browser/resources/media/media_feeds.js index e7dabd9f..0e91bc2 100644 --- a/chrome/browser/resources/media/media_feeds.js +++ b/chrome/browser/resources/media/media_feeds.js
@@ -377,7 +377,7 @@ * @returns {number} */ function timeDeltaToSeconds(timeDelta) { - return Number(timeDelta.microseconds) / 1000 / 1000; + return timeDelta.microseconds / 1000 / 1000; } /**
diff --git a/chrome/browser/resources/new_tab_page/utils.js b/chrome/browser/resources/new_tab_page/utils.js index 72e8a89..2b2e750a 100644 --- a/chrome/browser/resources/new_tab_page/utils.js +++ b/chrome/browser/resources/new_tab_page/utils.js
@@ -65,7 +65,7 @@ * @returns {!mojoBase.mojom.TimeDelta} */ export function mojoTimeDelta(timeDelta) { - return {microseconds: BigInt(Math.floor(timeDelta * 1000))}; + return {microseconds: Math.floor(timeDelta * 1000)}; } /**
diff --git a/chrome/browser/resources/settings/BUILD.gn b/chrome/browser/resources/settings/BUILD.gn index 142c3f6..0ed8864 100644 --- a/chrome/browser/resources/settings/BUILD.gn +++ b/chrome/browser/resources/settings/BUILD.gn
@@ -532,6 +532,7 @@ "languages_page:languages_page", "privacy_page:cookies_page", "privacy_page:security_page", + "site_settings:category_setting_exceptions", "site_settings:local_data_browser_proxy", "site_settings:protocol_handlers", "site_settings:settings_category_default_radio_group",
diff --git a/chrome/browser/resources/settings/page_visibility.js b/chrome/browser/resources/settings/page_visibility.js index 458b47d..2b2347a8 100644 --- a/chrome/browser/resources/settings/page_visibility.js +++ b/chrome/browser/resources/settings/page_visibility.js
@@ -48,12 +48,15 @@ export let pageVisibility; if (loadTimeData.getBoolean('isGuest')) { + const isEphemeralGuestProfile = + loadTimeData.getBoolean('isEphemeralGuestProfile'); + // "if not chromeos" and "if chromeos" in two completely separate blocks // to work around closure compiler. // <if expr="not chromeos"> pageVisibility = { - autofill: false, - people: false, + autofill: isEphemeralGuestProfile, + people: isEphemeralGuestProfile, privacy: false, onStartup: false, reset: false,
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.html b/chrome/browser/resources/settings/privacy_page/privacy_page.html index fa8c91d0..24891b9 100644 --- a/chrome/browser/resources/settings/privacy_page/privacy_page.html +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.html
@@ -1,7 +1,25 @@ <style include="cr-shared-style settings-shared iron-flex"> - .content-settings-header { + .content-settings-header, + #notificationRadioGroup { padding: 0 var(--cr-section-padding); } + + #notificationSubHeading { + padding-bottom: 10px; + } + + settings-collapse-radio-button { + --settings-collapse-toggle-min-height: var(--settings-row-min-height); + } + + settings-collapse-radio-button.two-line { + --settings-collapse-toggle-min-height: + var(--settings-row-two-line-min-height); + } + + settings-collapse-radio-button:not(:first-of-type) { + --settings-collapse-separator-line: var(--cr-separator-line); + } </style> <template is="dom-if" if="[[showClearBrowsingDataDialog_]]" restamp> <settings-clear-browsing-data-dialog prefs="{{prefs}}" @@ -534,33 +552,79 @@ <settings-subpage page-title="$i18n{siteSettingsCategoryNotifications}" search-label="$i18n{siteSettingsAllSitesSearch}" search-term="{{searchFilter_}}"> - <template is="dom-if" if="[[enableQuietNotificationPromptsSetting_]]"> - <category-default-setting - toggle-off-label="$i18n{siteSettingsNotificationsAsk}" - toggle-on-label="$i18n{siteSettingsNotificationsAsk}" + <template is="dom-if" if="[[enableContentSettingsRedesign_]]"> + <div id="notificationRadioGroup"> + <h2>$i18n{siteSettingsNotificationsDescription}</h2> + <h2>$i18n{siteSettingsDefaultBehavior}</h2> + <div id="notificationSubHeading" class="secondary"> + $i18n{siteSettingsDefaultBehaviorDescription} + </div> + <settings-radio-group + pref="{{prefs.generated.notification}}" + selectable-elements="settings-collapse-radio-button"> + <settings-collapse-radio-button no-collapse + name="[[notificationSettingEnum_.ASK]]" + pref="[[prefs.generated.notification]]" + label="$i18n{siteSettingsNotificationsAllowed}" + icon="settings:notifications"> + </settings-collapse-radio-button> + <template is="dom-if" + if="[[enableQuietNotificationPromptsSetting_]]"> + <settings-collapse-radio-button no-collapse class="two-line" + name="[[notificationSettingEnum_.QUIETER_MESSAGING]]" + pref="[[prefs.generated.notification]]" + label="$i18n{siteSettingsNotificationsAllowed}" + sub-label="$i18n{siteSettingsNotificationsPartial}" + icon="settings:notifications"> + </settings-collapse-radio-button> + </template> + <settings-collapse-radio-button no-collapse class="two-line" + name="[[notificationSettingEnum_.BLOCK]]" + pref="[[prefs.generated.notification]]" + label="$i18n{siteSettingsNotificationsBlocked}" + sub-label="$i18n{siteSettingsNotificationsBlockedSubLabel}" + icon="settings:block"> + </settings-collapse-radio-button> + </settings-radio-group> + </div> + <category-setting-exceptions category="[[ContentSettingsTypes.NOTIFICATIONS]]" - sub-option-pref="{{prefs.profile.content_settings.enable_quiet_permission_ui.notifications}}" - sub-option-label= - "$i18n{siteSettingsEnableQuietNotificationPrompts}" - sub-option-mode="pref"> - </category-default-setting> + allow-header="$i18n{siteSettingsNotificationsAllowedExceptions}" + block-header="$i18n{siteSettingsNotificationsBlockedExceptions}" + search-filter="[[searchFilter_]]"> + </category-setting-exceptions> </template> - <template is="dom-if" if="[[!enableQuietNotificationPromptsSetting_]]"> - <category-default-setting - toggle-off-label="$i18n{siteSettingsCategoryNotifications}" - toggle-on-label="$i18n{siteSettingsCategoryNotifications}" - toggle-off-description="$i18n{siteSettingsNotificationsBlock}" - toggle-on-description="$i18n{siteSettingsNotificationsAsk}" + <template is="dom-if" if="[[!enableContentSettingsRedesign_]]"> + <template is="dom-if" + if="[[enableQuietNotificationPromptsSetting_]]"> + <category-default-setting + toggle-off-label="$i18n{siteSettingsNotificationsAsk}" + toggle-on-label="$i18n{siteSettingsNotificationsAsk}" + category="[[ContentSettingsTypes.NOTIFICATIONS]]" + sub-option-pref="{{prefs.profile.content_settings.enable_quiet_permission_ui.notifications}}" + sub-option-label= + "$i18n{siteSettingsEnableQuietNotificationPrompts}" + sub-option-mode="pref"> + </category-default-setting> + </template> + <template is="dom-if" + if="[[!enableQuietNotificationPromptsSetting_]]"> + <category-default-setting + toggle-off-label="$i18n{siteSettingsCategoryNotifications}" + toggle-on-label="$i18n{siteSettingsCategoryNotifications}" + toggle-off-description="$i18n{siteSettingsNotificationsBlock}" + toggle-on-description="$i18n{siteSettingsNotificationsAsk}" + category="[[ContentSettingsTypes.NOTIFICATIONS]]" + sub-option-mode="none"> + </category-default-setting> + </template> + <category-setting-exceptions category="[[ContentSettingsTypes.NOTIFICATIONS]]" - sub-option-mode="none"> - </category-default-setting> + block-header="$i18n{siteSettingsBlock}" + allow-header="$i18n{siteSettingsAllow}" + search-filter="[[searchFilter_]]"> + </category-setting-exceptions> </template> - <category-setting-exceptions - category="[[ContentSettingsTypes.NOTIFICATIONS]]" - block-header="$i18n{siteSettingsBlock}" - allow-header="$i18n{siteSettingsAllow}" - search-filter="[[searchFilter_]]"> - </category-setting-exceptions> </settings-subpage> </template> <template is="dom-if" route-path="/content/flash" no-search>
diff --git a/chrome/browser/resources/settings/privacy_page/privacy_page.js b/chrome/browser/resources/settings/privacy_page/privacy_page.js index 4618929..ae7466a 100644 --- a/chrome/browser/resources/settings/privacy_page/privacy_page.js +++ b/chrome/browser/resources/settings/privacy_page/privacy_page.js
@@ -32,7 +32,7 @@ import {PrefsBehavior} from '../prefs/prefs_behavior.m.js'; import {routes} from '../route.js'; import {RouteObserverBehavior, Router} from '../router.m.js'; -import {ChooserType, ContentSettingsTypes, CookieControlsMode} from '../site_settings/constants.js'; +import {ChooserType, ContentSettingsTypes, CookieControlsMode, NotificationSetting} from '../site_settings/constants.js'; import {SiteSettingsPrefsBrowserProxyImpl} from '../site_settings/site_settings_prefs_browser_proxy.js'; import {PrivacyPageBrowserProxy, PrivacyPageBrowserProxyImpl} from './privacy_page_browser_proxy.m.js'; @@ -191,6 +191,15 @@ }, }, + /** + * Expose NotificationSetting enum to HTML bindings. + * @private + */ + notificationSettingEnum_: { + type: Object, + value: NotificationSetting, + }, + /** @private */ searchFilter_: String,
diff --git a/chrome/browser/resources/settings/route.js b/chrome/browser/resources/settings/route.js index 1a2e94d..628c280 100644 --- a/chrome/browser/resources/settings/route.js +++ b/chrome/browser/resources/settings/route.js
@@ -102,7 +102,8 @@ r.SIGN_OUT.isNavigableDialog = true; r.SEARCH = r.BASIC.createSection('/search', 'search'); - if (!loadTimeData.getBoolean('isGuest')) { + if (!loadTimeData.getBoolean('isGuest') || + loadTimeData.getBoolean('isEphemeralGuestProfile')) { r.PEOPLE = r.BASIC.createSection('/people', 'people'); r.SYNC = r.PEOPLE.createChild('/syncSetup'); r.SYNC_ADVANCED = r.SYNC.createChild('/syncSetup/advanced');
diff --git a/chrome/browser/resources/settings/site_settings/constants.js b/chrome/browser/resources/settings/site_settings/constants.js index 4b456ddd..8a36821 100644 --- a/chrome/browser/resources/settings/site_settings/constants.js +++ b/chrome/browser/resources/settings/site_settings/constants.js
@@ -109,6 +109,18 @@ }; /** + * Enumeration of states for the notification default setting generated pref. + * Must be kept in sync with the enum of the same name located in: + * chrome/browser/content_settings/generated_notification_pref.h + * @enum {number} + */ +export const NotificationSetting = { + ASK: 0, + QUIETER_MESSAGING: 1, + BLOCK: 2, +}; + +/** * A category value to use for the All Sites list. * @type {string} */
diff --git a/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.html b/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.html index 912d8bf..d88cef1a 100644 --- a/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.html +++ b/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.html
@@ -12,6 +12,11 @@ --settings-collapse-toggle-min-height: var(--settings-row-min-height); } + settings-collapse-radio-button.two-line { + --settings-collapse-toggle-min-height: + var(--settings-row-two-line-min-height); + } + settings-collapse-radio-button:not(:first-of-type) { --settings-collapse-separator-line: var(--cr-separator-line); } @@ -28,6 +33,7 @@ on-change="onSelectedChanged_"> <settings-collapse-radio-button id="enabledRadioOption" + class$="[[getEnabledButtonClass_(allowOptionSubLabel)]]" name="[[siteContentRadioSettingEnum_.ENABLED]]" pref="[[pref_]]" label="[[allowOptionLabel]]" @@ -38,6 +44,7 @@ </settings-collapse-radio-button> <settings-collapse-radio-button id="disabledRadioOption" + class$="[[getDisabledButtonClass_(blockOptionSubLabel)]]" name="[[siteContentRadioSettingEnum_.DISABLED]]" pref="[[pref_]]" label="[[blockOptionLabel]]"
diff --git a/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.js b/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.js index 3066a46..78ca938 100644 --- a/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.js +++ b/chrome/browser/resources/settings/site_settings/settings_category_default_radio_group.js
@@ -123,6 +123,22 @@ }, /** + * @return {string} + * @private + */ + getEnabledButtonClass_() { + return this.allowOptionSubLabel ? 'two-line' : ''; + }, + + /** + * @return {string} + * @private + */ + getDisabledButtonClass_() { + return this.blockOptionSubLabel ? 'two-line' : ''; + }, + + /** * A handler for changing the default permission value for a content type. * This is also called during page setup after we get the default state. * @private
diff --git a/chrome/browser/supervised_user/supervised_user_features.cc b/chrome/browser/supervised_user/supervised_user_features.cc index 130db69..1c0ee95 100644 --- a/chrome/browser/supervised_user/supervised_user_features.cc +++ b/chrome/browser/supervised_user/supervised_user_features.cc
@@ -4,8 +4,6 @@ #include "chrome/browser/supervised_user/supervised_user_features.h" -#include "base/feature_list.h" - namespace supervised_users { const base::Feature kSupervisedUserIframeFilter{ @@ -17,9 +15,4 @@ const base::Feature kEduCoexistenceFlowV2{"EduCoexistenceV2", base::FEATURE_DISABLED_BY_DEFAULT}; - -bool IsEduCoexistenceFlowV2Enabled() { - return base::FeatureList::IsEnabled(kEduCoexistenceFlowV2); -} - } // namespace supervised_users
diff --git a/chrome/browser/supervised_user/supervised_user_features.h b/chrome/browser/supervised_user/supervised_user_features.h index 419381a..cc1212a2 100644 --- a/chrome/browser/supervised_user/supervised_user_features.h +++ b/chrome/browser/supervised_user/supervised_user_features.h
@@ -15,8 +15,6 @@ extern const base::Feature kEduCoexistenceFlowV2; -bool IsEduCoexistenceFlowV2Enabled(); - } // namespace supervised_users #endif // CHROME_BROWSER_SUPERVISED_USER_SUPERVISED_USER_FEATURES_H_
diff --git a/chrome/browser/ui/BUILD.gn b/chrome/browser/ui/BUILD.gn index b6fedc7a..c7ff81d7 100644 --- a/chrome/browser/ui/BUILD.gn +++ b/chrome/browser/ui/BUILD.gn
@@ -2322,8 +2322,6 @@ "webui/chromeos/login/oobe_ui.h", "webui/chromeos/login/packaged_license_screen_handler.cc", "webui/chromeos/login/packaged_license_screen_handler.h", - "webui/chromeos/login/parental_handoff_screen_handler.cc", - "webui/chromeos/login/parental_handoff_screen_handler.h", "webui/chromeos/login/recommend_apps_screen_handler.cc", "webui/chromeos/login/recommend_apps_screen_handler.h", "webui/chromeos/login/reset_screen_handler.cc",
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 aeed09f..ad641357 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
@@ -300,6 +300,7 @@ <translation id="3211426585530211793">Het <ph name="ITEM_TITLE" /> uitgevee</translation> <translation id="3211503082155944789"><ph name="READING_LIST_COUNT" /> ongeleesde bladsye</translation> <translation id="321773570071367578">As jy jou wagfrase vergeet het of hierdie instelling wil verander, <ph name="BEGIN_LINK" />stel sinkronisering terug<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">Google Chrome as 'n sekuriteitsleutel</translation> <translation id="3232754137068452469">Webprogram</translation> <translation id="3236059992281584593">1 minuut oor</translation> <translation id="3244271242291266297">MM</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 4eb80e6..60690fff7 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
@@ -300,6 +300,7 @@ <translation id="3211426585530211793">تم حذف العنصر <ph name="ITEM_TITLE" /></translation> <translation id="3211503082155944789"><ph name="READING_LIST_COUNT" /> صفحة غير مقروءة</translation> <translation id="321773570071367578">إذا نسيت عبارة المرور أو رغبت في تغيير هذا الإعداد، يمكنك <ph name="BEGIN_LINK" />إعادة ضبط المزامنة<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">استخدام Google Chrome كمفتاح أمان</translation> <translation id="3232754137068452469">تطبيق الويب</translation> <translation id="3236059992281584593">يتبقى دقيقة واحدة</translation> <translation id="3244271242291266297">الشهر</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb index 00b83638..4897092f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_be.xtb
@@ -300,6 +300,7 @@ <translation id="3211426585530211793">Выдалена: <ph name="ITEM_TITLE" /></translation> <translation id="3211503082155944789">Непрачытаных старонак: <ph name="READING_LIST_COUNT" /></translation> <translation id="321773570071367578">Калі вы забылі фразу-пароль або хочаце змяніць гэту наладу, <ph name="BEGIN_LINK" />скіньце сінхранізацыю<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">Google Chrome як ключ бяспекі</translation> <translation id="3232754137068452469">Вэб-праграма</translation> <translation id="3236059992281584593">Засталася 1 хвіліна</translation> <translation id="3244271242291266297">ММ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb index d38b5ce..d1f4fd5b 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bg.xtb
@@ -300,6 +300,7 @@ <translation id="3211426585530211793">Изтрихте „<ph name="ITEM_TITLE" />“</translation> <translation id="3211503082155944789"><ph name="READING_LIST_COUNT" /> непрочетени страници</translation> <translation id="321773570071367578">Ако забравите пропуска си или искате да промените тази настройка, <ph name="BEGIN_LINK" />нулирайте синхронизирането<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">Google Chrome като ключ за сигурност</translation> <translation id="3232754137068452469">Уеб приложение</translation> <translation id="3236059992281584593">Остава 1 мин</translation> <translation id="3244271242291266297">ММ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb index 5a2f946e..bd692c2 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bn.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">স্ক্রিন ক্যাপচার</translation> <translation id="1111673857033749125">আপনার অন্যান্য ডিভাইসে সেভ করা বুকমার্কগুলি এখানে দেখা যাবে।</translation> <translation id="1113597929977215864">সরলীকৃত ভিউ দেখান</translation> +<translation id="1123070903960493543">আপনি Chrome-এর সাথে কীভাবে ইন্টার্যাক্ট করেন, আপনার বেছে নেওয়া সেটিংস, Chrome ক্র্যাশ হয়ে যাওয়ার তথ্য অন্তর্ভুক্ত রয়েছে</translation> <translation id="1126809382673880764">এই মোডে আপনার ডিভাইসের ক্ষতি করতে পারে এমন ওয়েবসাইট, ডাউনলোড অথবা এক্সটেনশন থেকে কোনও সুরক্ষা পাওয়া সম্ভব হয় না। তবে Gmail এবং Search-এর মতো অন্যান্য Google পরিষেবায়, যেখানে উপলভ্য সেখানে আপনি এখনও 'Safe Browsing'-এর সুরক্ষা পাবেন।</translation> <translation id="1129510026454351943">বিবরণ: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{১টি ডাউনলোড বাকি আছে।}one{#টি ডাউনলোড বাকি আছে।}other{#টি ডাউনলোড বাকি আছে।}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> শেয়ার করা যাচ্ছে না</translation> <translation id="1477626028522505441">সার্ভার সমস্যার কারণে <ph name="FILE_NAME" /> ডাউনলোড করা যায়নি।</translation> <translation id="1506061864768559482">সার্চ ইঞ্জিন</translation> +<translation id="151267239139452619">ডাউনলোডে যোগ করুন</translation> <translation id="1513352483775369820">বুকমার্কগুলি এবং ওয়েব ইতিহাস</translation> <translation id="1513858653616922153">পাসওয়ার্ড মুছুন</translation> <translation id="1521774566618522728">আজ ব্যবহার করা হয়েছে</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> সংরক্ষণ করা হয়েছে</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> বন্ধ করা হয়েছে</translation> <translation id="2139186145475833000">হোম স্ক্রীনে যোগ করুন</translation> +<translation id="214888715418183969">Chrome-এর সাথে আপনি কী কী স্বচ্ছন্দে শেয়ার করতে পারবেন তা বেছে নিন। আপনার শেয়ার করা মেট্রিক্স Chrome-এর ফিচার, পারফর্ম্যান্স ও স্থিতিশীলতা উন্নত করে তুলতে ব্যবহার করা হবে।</translation> <translation id="2154484045852737596">কার্ড সম্পাদনা করুন</translation> <translation id="2154710561487035718">ইউআরএল কপি করুন</translation> <translation id="2156074688469523661">(<ph name="NUMBER_OF_SITES" />)টি সাইট বাকি আছে</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR কোড</translation> <translation id="218608176142494674">শেয়ার করা সংক্রান্ত বিজ্ঞপ্তি</translation> <translation id="2195339740518523951">Chrome-এ সবচেয়ে বেশি সুরক্ষা পান</translation> +<translation id="2200113223741723867">ব্যবহারের ডেটা শেয়ার করার সেটিংস ম্যানেজ করুন</translation> <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> হিসেবে চালিয়ে যান</translation> <translation id="2234876718134438132">সিঙ্ক এবং Google পরিষেবাগুলি</translation> <translation id="2239812875700136898">'Discover-এর বিকল্প' বোতামে ক্লিক করে আপনার ফিডের কন্টেন্ট নিয়ন্ত্রণ করুন</translation> @@ -370,6 +374,7 @@ <translation id="3771290962915251154">অভিভাবকীয় নিয়ন্ত্রণ চালু থাকায় এই সেটিং বন্ধ আছে</translation> <translation id="3771694256347217732">Google পরিষেবার শর্তাবলী</translation> <translation id="3773755127849930740">যুক্ত করার মঞ্জুরি দিতে <ph name="BEGIN_LINK" />ব্লুটুথ চালু করুন<ph name="END_LINK" /></translation> +<translation id="3773856050682458546">এখানে প্রাথমিক ডেটা ছাড়াও আপনি যে ওয়েবসাইটে যান ও অ্যাপগুলি ব্যবহার করেন, তার তথ্য রয়েছে</translation> <translation id="3775705724665058594">আপনার ডিভাইসে পাঠান</translation> <translation id="3778956594442850293">হোম স্ক্রিনে যোগ করা হয়েছে</translation> <translation id="3789841737615482174">ইনস্টল করুন</translation> @@ -405,7 +410,9 @@ <translation id="3988466920954086464">সার্চের ফলাফল ঝটপট এই প্যানেলে দেখুন</translation> <translation id="4000212216660919741">অফলাইন হোম</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# ঘণ্টা}one{# ঘণ্টা}other{# ঘণ্টা}}</translation> +<translation id="4045764304651014138">ব্যবহারের ডেটা</translation> <translation id="4056223980640387499">সেপিয়া</translation> +<translation id="4057643060762047384">এতে যোগ করুন:</translation> <translation id="4060598801229743805">স্ক্রীনের প্রায় উপরের দিকে বিকল্পগুলি উপলব্ধ</translation> <translation id="4062305924942672200">আইনী তথ্য</translation> <translation id="4084682180776658562">বুকমার্ক</translation> @@ -546,6 +553,7 @@ <translation id="5039804452771397117">অনুমতি দিন</translation> <translation id="5040262127954254034">গোপনীয়তা</translation> <translation id="5087580092889165836">কার্ড জুড়ুন</translation> +<translation id="5091249083535528968">বেশি ব্যবহারের ডেটা</translation> <translation id="509429900233858213">একটি ত্রুটি ঘটেছে৷</translation> <translation id="510275257476243843">১ ঘণ্টা বাকি আছে</translation> <translation id="5123685120097942451">ছদ্মবেশী ট্যাব</translation> @@ -652,6 +660,7 @@ <translation id="5833984609253377421">লিঙ্ক শেয়ার করুন</translation> <translation id="5836192821815272682">Chrome-এর আপডেট ডাউনলোড করা হচ্ছে…</translation> <translation id="5853623416121554550">পজ করা হয়েছে</translation> +<translation id="5854512288214985237">Google-এর কাছে কোনও পরিসংখ্যান বা ক্র্যাশ রিপোর্ট পাঠানো হয়নি</translation> <translation id="5854790677617711513">৩০ দিনের বেশি পুরনো</translation> <translation id="5855546874025048181">রিফাইন করুন: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome ব্লুটুথ অ্যাডাপ্টার চালু করতে পারছে না</translation> @@ -724,6 +733,7 @@ <translation id="6303969859164067831">সাইন-আউট করুন এবং সিঙ্ক করা বন্ধ করুন</translation> <translation id="6312687380483398334">ওয়েব অ্যাপ (কোনও রকম আওয়াজ ছাড়া)</translation> <translation id="6316139424528454185">এই Android ভার্সন সমর্থিত নয়</translation> +<translation id="6321526113093607004">বুকমার্কে যোগ করুন</translation> <translation id="6324034347079777476">Android সিস্টেম সিঙ্ক অক্ষম করা হয়েছে</translation> <translation id="6333140779060797560"><ph name="APPLICATION" /> এর মাধ্যমে শেয়ার করুন</translation> <translation id="6337234675334993532">এনক্রিপশন</translation> @@ -741,6 +751,7 @@ <translation id="6402652558933147609"><ph name="VIOLATED_URL" />-এ <ph name="ERROR_CODE" /></translation> <translation id="6404511346730675251">বুকমার্ক সম্পাদনা করুন</translation> <translation id="6406506848690869874">সিঙ্ক</translation> +<translation id="6410404864818553978">প্রাথমিক ব্যবহারের ডেটা</translation> <translation id="6410883413783534063">ট্যাবগুলি খুলে রাখুন যাতে একই সাথে বিভিন্ন পৃষ্ঠাতে যেতে পারেন</translation> <translation id="6412673304250309937">Chrome-এ স্টোর করা নিরাপদ নয় এমন সাইটের তালিকা থেকে সাইটগুলির ইউআরএল পরীক্ষা করে দেখে। যদি কোনও সাইট আপনার পাসওয়ার্ড চুরি করার চেষ্টা করে বা আপনি কোনও ক্ষতিকারক ফাইল ডাউনলোড করলে, Safe Browsing-এ Chrome পৃষ্ঠার কিছু কন্টেন্ট সহ ইউআরএলও হয়ত পাঠাতে পারে।</translation> <translation id="641643625718530986">প্রিন্ট...</translation> @@ -834,6 +845,7 @@ <translation id="7015203776128479407">সিঙ্কের প্রাথমিক সেট-আপ সম্পূর্ণ হয়নি। সিঙ্ক বন্ধ আছে।</translation> <translation id="7022756207310403729">ব্রাউজারে খুলুন</translation> <translation id="702463548815491781">'টকব্যাক' অথবা 'অ্যাক্সেস পরিবর্তন করুন' চালু করা থাকলে এটি করার সাজেশন পাবেন</translation> +<translation id="7027549951530753705"><ph name="ITEM_TITLE" /> ফিরিয়ে আনা হয়েছে</translation> <translation id="7029809446516969842">পাসওয়ার্ড</translation> <translation id="703523980599857277">হোমপেজ পরিবর্তন করুন</translation> <translation id="7054588988317389591">ছবির বিবরণ পেতে চান?</translation> @@ -1016,6 +1028,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> এবং আরও অনেক সাইট</translation> <translation id="8327155640814342956">সবচেয়ে ভাল ব্রাউজিং অভিজ্ঞতা পেতে, Chrome আপডেট করুন</translation> <translation id="8349013245300336738">ব্যবহার করা ডেটার পরিমাণ অনুযায়ী সাজান</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" />টি ডাউনলোড ফিরিয়ে আনা হয়েছে</translation> <translation id="8364299278605033898">জনপ্রিয় ওয়েবসাইট দেখুন</translation> <translation id="8368027906805972958">অপরিচিত বা কাজ করে না এমন ডিভাইস (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> ভাষা ডাউনলোড হয়ে গেছে।</translation> @@ -1124,6 +1137,7 @@ <translation id="9148126808321036104">আবার সাইন-ইন করুন</translation> <translation id="9155898266292537608">এছাড়াও কোনও শব্দের উপরে ট্যাপ করেও খুঁজতে পারেন</translation> <translation id="9169507124922466868">নেভিগেশনের ইতিহাস অর্ধেক খোলা রয়েছে</translation> +<translation id="9191031968346938109">এতে যোগ করুন…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{১ মিনিট আগে চেক করা হয়েছে}one{# মিনিট আগে চেক করা হয়েছে}other{# মিনিট আগে চেক করা হয়েছে}}</translation> <translation id="9204836675896933765">১টি ফাইল বাকি</translation> <translation id="9206873250291191720">আ</translation> @@ -1136,6 +1150,7 @@ <translation id="938850635132480979">ত্রুটি: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">পাসফ্রেজ প্রবেশ করান</translation> <translation id="95817756606698420">Chrome, চীনে সার্চের জন্য <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> কে ব্যবহার করতে পারে। আপনি <ph name="BEGIN_LINK" />সেটিংস<ph name="END_LINK" /> থেকে এটি পরিবর্তন করতে পারেন।</translation> +<translation id="962979164594783469">এই অ্যাপ ইনস্টল করুন</translation> <translation id="968900484120156207">আপনি যে পৃষ্ঠাগুলিতে যান সেগুলি এখানে দেখানো হয়</translation> <translation id="970715775301869095"><ph name="MINUTES" /> মিনিট বাকি আছে</translation> <translation id="974555521953189084">সিঙ্ক শুরু করার জন্য আপনার পাসফ্রেজ লিখুন</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_de.xtb index 8bb4065..7dbe39f 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
@@ -450,7 +450,7 @@ <translation id="4405224443901389797">Verschieben nach…</translation> <translation id="4411535500181276704">Lite-Modus</translation> <translation id="4415276339145661267">Google-Konto verwalten</translation> -<translation id="4427306783828095590">Erweiterter Schutz vor Phishing und Malware</translation> +<translation id="4427306783828095590">Besserer Schutz vor Phishing und Malware durch erweitertes Safe Browsing</translation> <translation id="4440958355523780886">Lite-Modus-Seite von Google bereitgestellt. Zum Laden der Originalseite tippen.</translation> <translation id="4452411734226507615">Tab "<ph name="TAB_TITLE" />" schließen</translation> <translation id="4452548195519783679">Als Lesezeichen in "<ph name="FOLDER_NAME" />" gespeichert</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb index 49b34634..b9985e37 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es-419.xtb
@@ -300,6 +300,7 @@ <translation id="3211426585530211793">Se borró <ph name="ITEM_TITLE" /></translation> <translation id="3211503082155944789"><ph name="READING_LIST_COUNT" /> páginas no leídas</translation> <translation id="321773570071367578">Si olvidaste la frase de contraseña o quieres cambiar esta configuración, <ph name="BEGIN_LINK" />restablece la contraseña<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">Google Chrome como llave de seguridad</translation> <translation id="3232754137068452469">Aplicación web</translation> <translation id="3236059992281584593">1 minuto restante</translation> <translation id="3244271242291266297">MM</translation> @@ -551,7 +552,7 @@ <translation id="5039804452771397117">Permitir</translation> <translation id="5040262127954254034">Privacidad</translation> <translation id="5087580092889165836">Agregar tarjeta</translation> -<translation id="5091249083535528968">Datos de uso extendido</translation> +<translation id="5091249083535528968">Datos de uso extendidos</translation> <translation id="509429900233858213">Se ha producido un error.</translation> <translation id="510275257476243843">1 hora restante</translation> <translation id="5123685120097942451">Pestaña de incógnito</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 b73a6b6..b6972cb 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
@@ -261,7 +261,7 @@ <translation id="2893180576842394309">Baliteke Google-k historia erabiltzea Bilaketa eta beste Google-ren zerbitzu batzuk pertsonalizatzeko</translation> <translation id="2898264748040935573">Editatu gordetako pasahitza</translation> <translation id="2900528713135656174">Sortu gertaera</translation> -<translation id="2901411048554510387">Produktu honekin erlazionatutako iradokizunak daude ikusgai: <ph name="WEBSITE_TITLE" /></translation> +<translation id="2901411048554510387">Webgune honekin erlazionatutako iradokizunak daude ikusgai: <ph name="WEBSITE_TITLE" /></translation> <translation id="2904414404539560095">Fitxa partekatzeko hautatutako gailuen zerrenda irekita dago, eta altuera osoa hartzen du.</translation> <translation id="2905036901251765993">Ingurukoekin partekatu nahi izanez gero, eska iezaiezu QR kode hau eskaneatzeko</translation> <translation id="2909615210195135082">Google-ren jakinarazpenen plataforma</translation> @@ -300,6 +300,7 @@ <translation id="3211426585530211793">Ezabatu da <ph name="ITEM_TITLE" /></translation> <translation id="3211503082155944789">Irakurri gabeko <ph name="READING_LIST_COUNT" /> orri</translation> <translation id="321773570071367578">Pasaesaldia ahaztu bazaizu edo ezarpena aldatu nahi baduzu, <ph name="BEGIN_LINK" />berrezarri sinkronizazioa<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">Erabili Google Chrome segurtasun-giltza gisa</translation> <translation id="3232754137068452469">Sareko aplikazioa</translation> <translation id="3236059992281584593">Minutu bat gelditzen da</translation> <translation id="3244271242291266297">HH</translation> @@ -450,7 +451,7 @@ <translation id="4405224443901389797">Eraman hona…</translation> <translation id="4411535500181276704">Oinarrizko modua</translation> <translation id="4415276339145661267">Kudeatu Google-ko kontua</translation> -<translation id="4427306783828095590">Babes handiagoa eskaintzen du phishing-aren eta malwarearen aurka</translation> +<translation id="4427306783828095590">Babes handiagoa eskaintzen du phishingaren eta malwarearen aurka</translation> <translation id="4440958355523780886">Google-k hornitutako oinarrizko orria. Sakatu jatorrizkoa kargatzeko.</translation> <translation id="4452411734226507615">Itxi <ph name="TAB_TITLE" /> fitxa</translation> <translation id="4452548195519783679"><ph name="FOLDER_NAME" /> karpetan gehitu da laster-marka</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb index 462a0a2..9ea8a2d3 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fa.xtb
@@ -300,6 +300,7 @@ <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> حذف شد</translation> <translation id="3211503082155944789"><ph name="READING_LIST_COUNT" /> صفحه خواندهنشده</translation> <translation id="321773570071367578">اگر عبارت عبورتان را فراموش کردید یا میخواهید این تنظیم را تغییر دهید، <ph name="BEGIN_LINK" />همگامسازی را بازنشانی کنید<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">Google Chrome بهعنوان «کلید امنیتی»</translation> <translation id="3232754137068452469">برنامه وب</translation> <translation id="3236059992281584593">۱ دقیقه باقیمانده است</translation> <translation id="3244271242291266297">ماه</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 dd6f3996..c99c4ba 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
@@ -300,6 +300,7 @@ <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> poistettiin.</translation> <translation id="3211503082155944789"><ph name="READING_LIST_COUNT" /> sivua lukematta</translation> <translation id="321773570071367578">Jos unohdat tunnuslauseesi tai haluat muokata tätä asetusta, <ph name="BEGIN_LINK" />nollaa synkronointi<ph name="END_LINK" />.</translation> +<translation id="3227557059438308877">Google Chrome suojausavaimena</translation> <translation id="3232754137068452469">Verkkosovellus</translation> <translation id="3236059992281584593">1 minuutti jäljellä</translation> <translation id="3244271242291266297">KK</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 4b1c6f7..0deef1d 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
@@ -300,6 +300,7 @@ <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> a été supprimé</translation> <translation id="3211503082155944789"><ph name="READING_LIST_COUNT" /> pages non lues</translation> <translation id="321773570071367578">Si vous avez oublié votre phrase de passe ou souhaitez modifier ce paramètre, veuillez <ph name="BEGIN_LINK" />réinitialiser la synchronisation<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">Google Chrome comme clé de sécurité</translation> <translation id="3232754137068452469">Application Web</translation> <translation id="3236059992281584593">Il reste 1 min</translation> <translation id="3244271242291266297">MM</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 80c800e0..cd76dda 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
@@ -300,6 +300,7 @@ <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> törölve</translation> <translation id="3211503082155944789"><ph name="READING_LIST_COUNT" /> olvasatlan oldal</translation> <translation id="321773570071367578">Ha elfelejtette összetett jelszavát, vagy módosítani szeretné ezt a beállítást, <ph name="BEGIN_LINK" />állítsa alaphelyzetbe a szinkronizálást<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">A Google Chrome mint biztonsági kulcs</translation> <translation id="3232754137068452469">Internetes alkalmazás</translation> <translation id="3236059992281584593">1 perc van hátra</translation> <translation id="3244271242291266297">HH</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 003e199..73c98b3 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
@@ -300,6 +300,7 @@ <translation id="3211426585530211793">Տարրը (<ph name="ITEM_TITLE" />) ջնջվեց</translation> <translation id="3211503082155944789"><ph name="READING_LIST_COUNT" /> չկարդացված էջ</translation> <translation id="321773570071367578">Եթե մոռացել եք ձեր անցաբառը կամ ուզում եք փոխել այս կարգավորումը, <ph name="BEGIN_LINK" />վերակայեք համաժամացումը<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">Google Chrome-ը որպես անվտանգության բանալի</translation> <translation id="3232754137068452469">Վեբ ծրագիր</translation> <translation id="3236059992281584593">Մնացել է 1 րոպե</translation> <translation id="3244271242291266297">ամիս</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb index c2c2e58..8add3ce3 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_it.xtb
@@ -261,7 +261,7 @@ <translation id="2893180576842394309">Google può utilizzare la tua cronologia per personalizzare la Ricerca e altri servizi Google</translation> <translation id="2898264748040935573">Modifica la password memorizzata</translation> <translation id="2900528713135656174">Crea evento</translation> -<translation id="2901411048554510387">Visualizzazione dei suggerimenti per <ph name="WEBSITE_TITLE" />…</translation> +<translation id="2901411048554510387">Visualizzazione dei suggerimenti per <ph name="WEBSITE_TITLE" /></translation> <translation id="2904414404539560095">Elenco di dispositivi con cui condividere una scheda aperto a schermo intero.</translation> <translation id="2905036901251765993">Per condividere i contenuti con le persone qui vicino, fa' scansionare loro questo codice QR</translation> <translation id="2909615210195135082">Piattaforma per le notifiche Google</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 8aed9266..af12f8df 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
@@ -37,7 +37,7 @@ <translation id="1227058898775614466">היסטוריית ניווט</translation> <translation id="1229399675748764149">הגדרת הדף הזה כדף הבית</translation> <translation id="1231733316453485619">להפעיל סנכרון?</translation> -<translation id="123724288017357924">טען מחדש את הדף הנוכחי, תוך התעלמות מתוכן שמאוחסן בקובץ השמור</translation> +<translation id="123724288017357924">טעינה מחדש של הדף הנוכחי, תוך התעלמות מתוכן שמאוחסן בקובץ השמור</translation> <translation id="124678866338384709">סגור את הכרטיסייה הנוכחית</translation> <translation id="1258753120186372309">דודל של Google: <ph name="DOODLE_DESCRIPTION" /></translation> <translation id="1263231323834454256">רשימת קריאה</translation> @@ -201,7 +201,7 @@ כדי לחפש מילה, לוחצים עליה לחיצה ארוכה. כדי להתאים את החיפוש, אפשר לבחור יותר מילים או פחות מילים. כדי לערוך את החיפוש, פותחים את החלונית, מקישים על הסמל כדי לפתוח את האפליקציה בכרטיסייה חדשה ומבצעים את השינויים בתיבת החיפוש.</translation> <translation id="246532703174860178">שיתוף</translation> -<translation id="2478076885740497414">התקן את היישום</translation> +<translation id="2478076885740497414">התקנת האפליקציה</translation> <translation id="2479148705183875116">למעבר אל ההגדרות</translation> <translation id="2482878487686419369">התראות</translation> <translation id="2494974097748878569">Google Assistant ב-Chrome</translation> @@ -300,6 +300,7 @@ <translation id="3211426585530211793">מועד המחיקה: <ph name="ITEM_TITLE" /></translation> <translation id="3211503082155944789"><ph name="READING_LIST_COUNT" /> דפים שלא נקראו</translation> <translation id="321773570071367578">אם שכחת את ביטוי הסיסמה או אם ברצונך לשנות את ההגדרה הזו, <ph name="BEGIN_LINK" />אפס את הסינכרון<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">Google Chrome כמפתח אבטחה</translation> <translation id="3232754137068452469">אפליקציית אינטרנט</translation> <translation id="3236059992281584593">נותרה דקה אחת</translation> <translation id="3244271242291266297">MM</translation> @@ -377,7 +378,7 @@ <translation id="3773856050682458546">נתונים בסיסיים בנוסף למידע על האתרים שביקרת בהם והאפליקציות שהשתמשת בהן</translation> <translation id="3775705724665058594">שליחה אל המכשירים שלך</translation> <translation id="3778956594442850293">נוסף למסך דף הבית</translation> -<translation id="3789841737615482174">התקן</translation> +<translation id="3789841737615482174">התקנה</translation> <translation id="3810838688059735925">וידאו</translation> <translation id="3810973564298564668">נהל</translation> <translation id="3819178904835489326"><ph name="NUMBER_OF_DOWNLOADS" /> הורדות נמחקו</translation> @@ -422,7 +423,7 @@ <translation id="4135200667068010335">רשימת המכשירים שאפשר לשתף איתם כרטיסייה נסגרה.</translation> <translation id="4141536112466364990">הדרכות לשימוש ב-Chrome</translation> <translation id="4149994727733219643">תצוגה פשוטה של דפי אינטרנט</translation> -<translation id="4170011742729630528">השירות אינו זמין. נסה שוב מאוחר יותר.</translation> +<translation id="4170011742729630528">השירות אינו זמין. יש לנסות שוב מאוחר יותר.</translation> <translation id="4179980317383591987">נעשה שימוש ב-<ph name="AMOUNT" /></translation> <translation id="4181841719683918333">שפות</translation> <translation id="4183868528246477015">חיפוש בעזרת Google Lens <ph name="BEGIN_NEW" />חדש<ph name="END_NEW" /></translation> @@ -492,7 +493,7 @@ <translation id="4696983787092045100">שליחת הטקסט למכשירים שלך</translation> <translation id="4698034686595694889">הצגה לא מקוונת ב-<ph name="APP_NAME" /></translation> <translation id="4699172675775169585">תמונות וקבצים במטמון</translation> -<translation id="4714588616299687897">חסוך עד 60% בשימוש בנתונים</translation> +<translation id="4714588616299687897">חיסכון של עד 60% בשימוש בחבילת הגלישה</translation> <translation id="4719927025381752090">הצגת הצעות לתרגום</translation> <translation id="4720023427747327413">פתח ב-<ph name="PRODUCT_NAME" /></translation> <translation id="4720982865791209136">נשמח לקבל עזרה בשיפור Chrome. <ph name="BEGIN_LINK" />למילוי הסקר<ph name="END_LINK" /></translation> @@ -607,13 +608,13 @@ <translation id="5515439363601853141">ביטול הנעילה יציג את הסיסמה</translation> <translation id="5517095782334947753">יש לך סימניות, היסטוריה, סיסמאות והגדרות נוספות מ-<ph name="FROM_ACCOUNT" />.</translation> <translation id="5524843473235508879">הפניה לכתובת אתר אחרת נחסמה.</translation> -<translation id="5527082711130173040">כדי לבצע סריקה לאיתור מכשירים, Chrome זקוק לגישה לנתוני מיקום. <ph name="BEGIN_LINK1" />עדכן את ההרשאות<ph name="END_LINK1" />. כמו כן, הגישה למיקום <ph name="BEGIN_LINK2" />כבויה במכשיר הזה<ph name="END_LINK2" />.</translation> +<translation id="5527082711130173040">כדי לבצע סריקה לאיתור מכשירים, Chrome זקוק לגישה לנתוני מיקום. <ph name="BEGIN_LINK1" />עדכון ההרשאות<ph name="END_LINK1" />. כמו כן, הגישה למיקום <ph name="BEGIN_LINK2" />כבויה במכשיר הזה<ph name="END_LINK2" />.</translation> <translation id="5530766185686772672">סגור כרטיסיות גלישה בסתר</translation> <translation id="5534640966246046842">האתר הועתק</translation> <translation id="5556459405103347317">ניסיון טעינה נוסף</translation> <translation id="5561549206367097665">ממתין לרשת…</translation> <translation id="55737423895878184">יש הרשאה לגישה אל המיקום ולהצגת הודעות</translation> -<translation id="5578795271662203820">חפש את התמונה הזו ב-<ph name="SEARCH_ENGINE" /></translation> +<translation id="5578795271662203820">חיפוש התמונה הזו ב-<ph name="SEARCH_ENGINE" /></translation> <translation id="5581519193887989363">אפשר לבחור מה לסנכרן בכל שלב דרך <ph name="BEGIN_LINK1" />ההגדרות<ph name="END_LINK1" />.</translation> <translation id="5595485650161345191">עריכת כתובת</translation> <translation id="5599455543593328020">מצב גלישה בסתר</translation> @@ -772,7 +773,7 @@ <translation id="6539092367496845964">משהו השתבש. יש לנסות שוב מאוחר יותר.</translation> <translation id="6541983376925655882">{NUM_HOURS,plural, =1{התבצעה בדיקה לפני שעה אחת}two{התבצעה בדיקה לפני שעתיים}many{התבצעה בדיקה לפני # שעות}other{התבצעה בדיקה לפני # שעות}}</translation> <translation id="6545017243486555795">נקה את כל הנתונים</translation> -<translation id="6560414384669816528">השתמש ב-Sogou לחיפוש</translation> +<translation id="6560414384669816528">שימוש ב-Sogou לחיפוש</translation> <translation id="656065428026159829">אפשרויות נוספות</translation> <translation id="6566259936974865419">Chrome חסך לך <ph name="GIGABYTES" /> GB</translation> <translation id="6573096386450695060">אני רוצה לאפשר תמיד</translation> @@ -793,7 +794,7 @@ <translation id="6643649862576733715">מיון לפי כמות הנתונים שנחסכו</translation> <translation id="6648977384226967773">{CONTACT,plural, =1{<ph name="CONTACT_PREVIEW" />\u2026 ו-<ph name="NUMBER_OF_ADDITIONAL_CONTACTS" /> נוסף}two{<ph name="CONTACT_PREVIEW" />\u2026 ו-<ph name="NUMBER_OF_ADDITIONAL_CONTACTS" /> נוספים}many{<ph name="CONTACT_PREVIEW" />\u2026 ו-<ph name="NUMBER_OF_ADDITIONAL_CONTACTS" /> נוספים}other{<ph name="CONTACT_PREVIEW" />\u2026 ו-<ph name="NUMBER_OF_ADDITIONAL_CONTACTS" /> נוספים}}</translation> <translation id="6649642165559792194">הצגת התמונה בתצוגה מקדימה <ph name="BEGIN_NEW" />חדש<ph name="END_NEW" /></translation> -<translation id="6656545060687952787">כדי לבצע סריקה לאיתור מכשירים ב-Chrome, יש צורך בגישה לנתוני מיקום. <ph name="BEGIN_LINK" />עדכן הרשאות<ph name="END_LINK" /></translation> +<translation id="6656545060687952787">כדי לבצע סריקה לאיתור מכשירים ב-Chrome, יש צורך בגישה לנתוני מיקום. <ph name="BEGIN_LINK" />עדכון הרשאות<ph name="END_LINK" /></translation> <translation id="6657585470893396449">סיסמה</translation> <translation id="6659594942844771486">כרטיסייה</translation> <translation id="6663079968236414793">קישור לטקסט</translation> @@ -933,11 +934,11 @@ <translation id="7648422057306047504">הצפנת סיסמאות באמצעות פרטי הכניסה שלך ל-Google</translation> <translation id="7658239707568436148">ביטול</translation> <translation id="7665369617277396874">חשבון חדש</translation> -<translation id="766587987807204883">כאן יוצגו מאמרים, ואפשר לקרוא אותם גם במצב לא מקוון</translation> +<translation id="766587987807204883">כאן יוצגו מאמרים, ואפשר לקרוא אותם גם במצב אונליין</translation> <translation id="7682724950699840886">אפשר לנסות את הטיפים הבאים: צריך לוודא שיש מספיק מקום פנוי במכשיר ואז לנסות לייצא שוב.</translation> <translation id="7698359219371678927">צור הודעת אימייל ב-<ph name="APP_NAME" /></translation> <translation id="7704317875155739195">השלמה אוטומטית של חיפושים וכתובות אתרים</translation> -<translation id="7707922173985738739">השתמש בחבילת גלישה</translation> +<translation id="7707922173985738739">שימוש בחבילת הגלישה</translation> <translation id="7725024127233776428">הדפים שהוספת לסימניות מופיעים כאן</translation> <translation id="7735637452482172701">ביטול נעילה באמצעות נעילת מסך</translation> <translation id="7746457520633464754">כדי לזהות אפליקציות ואתרים מסוכנים, Chrome שולח אל Google כתובות URL של חלק מהדפים שאליהם נכנסת, מידע מוגבל לגבי המערכת וחלק מתוכן הדפים</translation> @@ -1006,7 +1007,7 @@ <translation id="8168435359814927499">תוכן</translation> <translation id="8186512483418048923">נותרו עוד <ph name="FILES" /> קבצים</translation> <translation id="8190358571722158785">נותר יום אחד</translation> -<translation id="8200772114523450471">חדש</translation> +<translation id="8200772114523450471">חידוש</translation> <translation id="8209050860603202033">פתח את התמונה</translation> <translation id="8216351761227087153">צפה</translation> <translation id="8218052821161047641">דף מהיר</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb index e47953e..53722f84 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ja.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">画面キャプチャ</translation> <translation id="1111673857033749125">他のデバイスに保存されているブックマークがここに表示されます。</translation> <translation id="1113597929977215864">簡易表示する</translation> +<translation id="1123070903960493543">Chrome の操作履歴、選択した設定、Chrome のクラッシュの詳細</translation> <translation id="1126809382673880764">危険なウェブサイト、ダウンロード、拡張機能から保護されていません。セーフ ブラウジングによる保護は、Gmail や Google 検索など他の Google サービスで利用可能な場合は、引き続き有効です。</translation> <translation id="1129510026454351943">詳細: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 件のダウンロードが保留中です。}other{# 件のダウンロードが保留中です。}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> を共有できません</translation> <translation id="1477626028522505441">サーバーで問題が発生したため、<ph name="FILE_NAME" /> をダウンロードできませんでした。</translation> <translation id="1506061864768559482">検索エンジン</translation> +<translation id="151267239139452619">ダウンロードに追加</translation> <translation id="1513352483775369820">ブックマークとウェブ履歴</translation> <translation id="1513858653616922153">パスワードを削除</translation> <translation id="1521774566618522728">最終同期: 今日</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> 削減しました</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> を閉じました</translation> <translation id="2139186145475833000">ホーム画面に追加</translation> +<translation id="214888715418183969">Chrome と共有してもよいものを選択してください。ご提供いただいた指標は、Chrome の機能、パフォーマンス、安定性の向上に利用させていただきます。</translation> <translation id="2154484045852737596">カードを編集</translation> <translation id="2154710561487035718">URL をコピー</translation> <translation id="2156074688469523661">その他のサイト(<ph name="NUMBER_OF_SITES" /> 件)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR コード</translation> <translation id="218608176142494674">共有</translation> <translation id="2195339740518523951">Chrome の最高水準のセキュリティで保護する</translation> +<translation id="2200113223741723867">使用状況データの共有の管理</translation> <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> として続行</translation> <translation id="2234876718134438132">同期と Google サービス</translation> <translation id="2239812875700136898">Discover ボタンのオプションから記事を管理できます</translation> @@ -296,6 +300,7 @@ <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> を削除しました</translation> <translation id="3211503082155944789">未読のページ <ph name="READING_LIST_COUNT" /> 件</translation> <translation id="321773570071367578">パスフレーズを忘れた場合や、この設定を変更する場合は、<ph name="BEGIN_LINK" />同期をリセット<ph name="END_LINK" />します</translation> +<translation id="3227557059438308877">Google Chrome をセキュリティ キーとして使用</translation> <translation id="3232754137068452469">ウェブアプリ</translation> <translation id="3236059992281584593">残り 1 分</translation> <translation id="3244271242291266297">MM</translation> @@ -370,6 +375,7 @@ <translation id="3771290962915251154">保護者による使用制限が有効なため、この設定は無効になっています</translation> <translation id="3771694256347217732">Google 利用規約</translation> <translation id="3773755127849930740">ペア設定するには <ph name="BEGIN_LINK" />Bluetooth をオン<ph name="END_LINK" />にしてください</translation> +<translation id="3773856050682458546">基本データに加えて、アクセスしたウェブサイト、使用したアプリに関する情報</translation> <translation id="3775705724665058594">お使いのデバイスに送信</translation> <translation id="3778956594442850293">ホーム画面に追加されました</translation> <translation id="3789841737615482174">インストール</translation> @@ -403,7 +409,9 @@ <translation id="3988466920954086464">このパネルにインスタント検索の結果が表示されます</translation> <translation id="4000212216660919741">オフライン ホーム</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# 時間}other{# 時間}}</translation> +<translation id="4045764304651014138">使用状況データ</translation> <translation id="4056223980640387499">セピア</translation> +<translation id="4057643060762047384">追加先:</translation> <translation id="4060598801229743805">画面の上部にあるオプション</translation> <translation id="4062305924942672200">法的情報</translation> <translation id="4084682180776658562">ブックマーク</translation> @@ -544,6 +552,7 @@ <translation id="5039804452771397117">許可</translation> <translation id="5040262127954254034">プライバシー</translation> <translation id="5087580092889165836">カードを追加</translation> +<translation id="5091249083535528968">詳細な使用状況データ</translation> <translation id="509429900233858213">エラーが発生しました。</translation> <translation id="510275257476243843">残り 1 時間</translation> <translation id="5123685120097942451">シークレット タブ</translation> @@ -650,6 +659,7 @@ <translation id="5833984609253377421">リンクを共有</translation> <translation id="5836192821815272682">Chrome のアップデートをダウンロードしています…</translation> <translation id="5853623416121554550">一時停止中</translation> +<translation id="5854512288214985237">統計情報と障害レポートは Google に送信されません</translation> <translation id="5854790677617711513">30 日以上経過</translation> <translation id="5855546874025048181">絞り込み: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome から Bluetooth アダプタをオンにできません</translation> @@ -722,6 +732,7 @@ <translation id="6303969859164067831">ログアウトして同期をオフにする</translation> <translation id="6312687380483398334">ウェブアプリ(サイレント)</translation> <translation id="6316139424528454185">Android のバージョンはサポートされていません</translation> +<translation id="6321526113093607004">ブックマークに追加</translation> <translation id="6324034347079777476">Android システムの同期が無効です</translation> <translation id="6333140779060797560"><ph name="APPLICATION" /> で共有します</translation> <translation id="6337234675334993532">暗号化</translation> @@ -739,6 +750,7 @@ <translation id="6402652558933147609"><ph name="ERROR_CODE" />(<ph name="VIOLATED_URL" />)</translation> <translation id="6404511346730675251">ブックマークを編集</translation> <translation id="6406506848690869874">同期</translation> +<translation id="6410404864818553978">基本的な使用状況データ</translation> <translation id="6410883413783534063">タブを開くと、さまざまなページに同時にアクセスできます</translation> <translation id="6412673304250309937">Chrome に保存されている安全でないサイトのリストと URL を照合します。サイトがパスワードを不正に取得しようとしている場合や、ユーザーが安全でないファイルをダウンロードしようとした場合は、URL とページ コンテンツの一部をセーフ ブラウジングに送信することがあります。</translation> <translation id="641643625718530986">印刷...</translation> @@ -832,6 +844,7 @@ <translation id="7015203776128479407">最初の同期設定が終了していません。同期は無効です。</translation> <translation id="7022756207310403729">ブラウザで開く</translation> <translation id="702463548815491781">TalkBack またはスイッチ アクセスを有効にしている場合におすすめです</translation> +<translation id="7027549951530753705"><ph name="ITEM_TITLE" /> を復元しました</translation> <translation id="7029809446516969842">パスワード</translation> <translation id="703523980599857277">ホームページを変更</translation> <translation id="7054588988317389591">画像の説明文を取得しますか?</translation> @@ -1014,6 +1027,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> とその他のサイト</translation> <translation id="8327155640814342956">快適にご利用いただけるよう、Chrome を開いて更新することをおすすめします</translation> <translation id="8349013245300336738">データ使用量で並べ替え</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> 件のダウンロードが復元されました</translation> <translation id="8364299278605033898">人気のウェブサイトを表示します</translation> <translation id="8368027906805972958">不明またはサポートされていないデバイス(<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> を使用できるようになりました。</translation> @@ -1122,6 +1136,7 @@ <translation id="9148126808321036104">もう一度ログインする</translation> <translation id="9155898266292537608">単語をタップするだけでも検索できます</translation> <translation id="9169507124922466868">ナビゲーション履歴が半分開いています</translation> +<translation id="9191031968346938109">追加先…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{前回の確認: 1 分前}other{前回の確認: # 分前}}</translation> <translation id="9204836675896933765">残り 1 ファイル</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1149,7 @@ <translation id="938850635132480979">エラー: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">パスフレーズを入力</translation> <translation id="95817756606698420">中国のユーザーは Chrome での検索に <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> を使用できます。この設定は [<ph name="BEGIN_LINK" />設定<ph name="END_LINK" />] で変更可能です。</translation> +<translation id="962979164594783469">このアプリをインストール</translation> <translation id="968900484120156207">アクセスしたページがここに表示されます</translation> <translation id="970715775301869095">残り <ph name="MINUTES" /> 分</translation> <translation id="974555521953189084">同期を開始するにはパスワードを入力します</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb index 2cf3fb3..98f536f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kn.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">ಪರದೆ ಕ್ಯಾಪ್ಚರ್</translation> <translation id="1111673857033749125">ನಿಮ್ಮ ಇತರ ಸಾಧನಗಳಲ್ಲಿ ಉಳಿಸಲಾದ ಬುಕ್ಮಾರ್ಕ್ಗಳು ಇಲ್ಲಿ ಗೋಚರಿಸುತ್ತವೆ.</translation> <translation id="1113597929977215864">ಸರಳೀಕೃತ ವೀಕ್ಷಣೆಯನ್ನು ತೋರಿಸಿ</translation> +<translation id="1123070903960493543">ನೀವು Chrome ಜೊತೆಗೆ ಹೇಗೆ ಸಂವಹನ ನಡೆಸುತ್ತೀರಿ, ನೀವು ಆಯ್ಕೆಮಾಡಿರುವ ಸೆಟ್ಟಿಂಗ್ಗಳು, Chrome ಕ್ರ್ಯಾಶ್ಗಳ ಕುರಿತು ವಿವರಗಳು</translation> <translation id="1126809382673880764">ಅಪಾಯಕಾರಿ ವೆಬ್ಸೈಟ್ಗಳು, ಡೌನ್ಲೋಡ್ಗಳು ಮತ್ತು ವಿಸ್ತರಣೆಗಳ ವಿರುದ್ಧ ನಿಮಗೆ ರಕ್ಷಣೆ ನೀಡುವುದಿಲ್ಲ. Gmail ಮತ್ತು Search ನಂತಹ ಲಭ್ಯವಿರುವ ಇತರ Google ಸೇವೆಗಳಲ್ಲಿ, ನೀವು ಈಗಲೂ ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ ರಕ್ಷಣೆಯನ್ನು ಪಡೆಯುತ್ತೀರಿ.</translation> <translation id="1129510026454351943">ವಿವರಗಳು: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 ಡೌನ್ಲೋಡ್ ಬಾಕಿ ಇದೆ.}one{# ಡೌನ್ಲೋಡ್ಗಳು ಬಾಕಿ ಇವೆ.}other{# ಡೌನ್ಲೋಡ್ಗಳು ಬಾಕಿ ಇವೆ.}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080"><ph name="CONTENT_TYPE" />ವನ್ನು ಹಂಚಿಕೊಳ್ಳಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ</translation> <translation id="1477626028522505441">ಸರ್ವರ್ ಸಮಸ್ಯೆಗಳ ಕಾರಣದಿಂದಾಗಿ <ph name="FILE_NAME" /> ಡೌನ್ಲೋಡ್ ವಿಫಲವಾಗಿದೆ.</translation> <translation id="1506061864768559482">ಹುಡುಕಾಟ ಇಂಜಿನ್</translation> +<translation id="151267239139452619">ಡೌನ್ಲೋಡ್ಗಳಿಗೆ ಸೇರಿಸಿ</translation> <translation id="1513352483775369820">ಬುಕ್ಮಾರ್ಕ್ಗಳು ಮತ್ತು ವೆಬ್ ಇತಿಹಾಸ</translation> <translation id="1513858653616922153">ಪಾಸ್ವರ್ಡ್ ಅಳಿಸಿ</translation> <translation id="1521774566618522728">ಇಂದು ಸಕ್ರಿಯ</translation> @@ -158,6 +160,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> ಉಳಿತಾಯ ಮಾಡಲಾಗಿದೆ</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> ಮುಚ್ಚಲಾಗಿದೆ</translation> <translation id="2139186145475833000">ಹೋಮ್ ಪರದೆಗೆ ಸೇರಿಸಿ</translation> +<translation id="214888715418183969">ನೀವು Chrome ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲು ಬಯಸುವುದನ್ನು ಆರಿಸಿ. ನೀವು ಹಂಚಿಕೊಳ್ಳುವ ಮೆಟ್ರಿಕ್ಗಳನ್ನು Chrome ನ ವೈಶಿಷ್ಟ್ಯಗಳು, ಕಾರ್ಯಕ್ಷಮತೆ ಮತ್ತು ಸ್ಥಿರತೆಯನ್ನು ಸುಧಾರಿಸಲು ಸಹಾಯ ಮಾಡುತ್ತದೆ.</translation> <translation id="2154484045852737596">ಕಾರ್ಡ್ ಎಡಿಟ್ ಮಾಡಿ</translation> <translation id="2154710561487035718">URL ನಕಲಿಸಿ</translation> <translation id="2156074688469523661">ಉಳಿದ ಸೈಟ್ಗಳು (<ph name="NUMBER_OF_SITES" />)</translation> @@ -167,6 +170,7 @@ <translation id="2175927920773552910">QR ಕೋಡ್</translation> <translation id="218608176142494674">ಹಂಚಿಕೆ</translation> <translation id="2195339740518523951">Chrome ನ ಪ್ರಬಲ ಭದ್ರತೆಯನ್ನು ಪಡೆಯಿರಿ</translation> +<translation id="2200113223741723867">ಬಳಕೆಯ ಡೇಟಾ ಹಂಚಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ನಿರ್ವಹಿಸಿ</translation> <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> ನಂತೆ ಮುಂದುವರಿಸಿ</translation> <translation id="2234876718134438132">ಸಿಂಕ್ ಮತ್ತು Google ಸೇವೆಗಳು</translation> <translation id="2239812875700136898">ಡಿಸ್ಕವರ್ಗಾಗಿ ಆಯ್ಕೆಗಳ ಬಟನ್ನಿಂದ ನಿಮ್ಮ ಕಥೆಗಳನ್ನು ನಿಯಂತ್ರಿಸಿ</translation> @@ -371,6 +375,7 @@ <translation id="3771290962915251154">ಪೋಷಕರ ನಿಯಂತ್ರಣಗಳು ಆನ್ ಆಗಿರುವ ಕಾರಣ, ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation> <translation id="3771694256347217732">Google ಸೇವಾ ನಿಯಮಗಳು</translation> <translation id="3773755127849930740">ಜೋಡಿಸುವಿಕೆ ಅನುಮತಿಸಲು <ph name="BEGIN_LINK" />ಬ್ಲೂಟೂತ್ ಆನ್ ಮಾಡಿ<ph name="END_LINK" /></translation> +<translation id="3773856050682458546">ನೀವು ಭೇಟಿ ನೀಡುವ ವೆಬ್ಸೈಟ್ಗಳು ಮತ್ತು ನೀವು ಬಳಸುವ ಆ್ಯಪ್ಗಳ ಕುರಿತು ಮೂಲ ಡೇಟಾ ಹಾಗೂ ಮಾಹಿತಿ</translation> <translation id="3775705724665058594">ನಿಮ್ಮ ಸಾಧನಗಳಿಗೆ ಕಳುಹಿಸಿ</translation> <translation id="3778956594442850293">ಹೋಮ್ನ ಪರದೆಗೆ ಸೇರಿಸಲಾಗಿದೆ</translation> <translation id="3789841737615482174">ಇನ್ಸ್ಟಾಲ್</translation> @@ -404,7 +409,9 @@ <translation id="3988466920954086464">ಈ ಫಲಕದಲ್ಲಿ ತತ್ಕ್ಷಣ ಹುಡುಕಾಟ ಫಲಿತಾಂಶಗಳನ್ನು ನೋಡಿ</translation> <translation id="4000212216660919741">ಆಫ್ಲೈನ್ ಹೋಮ್</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# ಗಂಟೆ}one{# ಗಂಟೆಗಳು}other{# ಗಂಟೆಗಳು}}</translation> +<translation id="4045764304651014138">ಬಳಕೆಯ ಡೇಟಾ</translation> <translation id="4056223980640387499">ಸೆಪಿಯಾ</translation> +<translation id="4057643060762047384">ಇದಕ್ಕೆ ಸೇರಿಸಿ:</translation> <translation id="4060598801229743805">ಪರದೆಯ ಮೇಲಿನ ಭಾಗದಲ್ಲಿ ಲಭ್ಯವಿರುವ ಆಯ್ಕೆಗಳು</translation> <translation id="4062305924942672200">ಕಾನೂನು ಮಾಹಿತಿ</translation> <translation id="4084682180776658562">ಬುಕ್ಮಾರ್ಕ್</translation> @@ -544,6 +551,7 @@ <translation id="5039804452771397117">ಅನುಮತಿಸಿ</translation> <translation id="5040262127954254034">ಗೌಪ್ಯತೆ</translation> <translation id="5087580092889165836">ಕಾರ್ಡ್ ಸೇರಿಸಿ</translation> +<translation id="5091249083535528968">ಬಳಕೆಯ ಡೇಟಾವನ್ನು ವಿಸ್ತರಿಸಲಾಗಿದೆ</translation> <translation id="509429900233858213">ದೋಷವೊಂದು ಕಾಣಿಸಿಕೊಂಡಿದೆ.</translation> <translation id="510275257476243843">1 ಗಂಟೆ ಉಳಿದಿದೆ</translation> <translation id="5123685120097942451">ಅದೃಶ್ಯ ಟ್ಯಾಬ್</translation> @@ -650,6 +658,7 @@ <translation id="5833984609253377421">ಲಿಂಕ್ ಹಂಚಿಕೊಳ್ಳಿ</translation> <translation id="5836192821815272682">Chrome ಅಪ್ಡೇಟ್ ಡೌನ್ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ…</translation> <translation id="5853623416121554550">ವಿರಾಮಗೊಳಿಸಲಾಗಿದೆ</translation> +<translation id="5854512288214985237">ಯಾವುದೇ ಅಂಕಿಅಂಶಗಳು ಅಥವಾ ಕ್ರ್ಯಾಶ್ ವರದಿಗಳನ್ನು Google ಗೆ ಕಳುಹಿಸುವುದಿಲ್ಲ</translation> <translation id="5854790677617711513">30 ದಿನಗಳಿಗಿಂತ ಹಳೆಯದು</translation> <translation id="5855546874025048181">ಪರಿಷ್ಕರಿಸಿ: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">ಬ್ಲೂಟೂತ್ ಅಡಾಪ್ಟರ್ ಆನ್ ಮಾಡಲು Chrome ಗೆ ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation> @@ -722,6 +731,7 @@ <translation id="6303969859164067831">ಸೈನ್ ಔಟ್ ಮಾಡಿ ಮತ್ತು ಸಿಂಕ್ ಆಫ್ ಮಾಡಿ</translation> <translation id="6312687380483398334">ವೆಬ್ ಆ್ಯಪ್ಗಳು (ನಿಶ್ಶಬ್ದ)</translation> <translation id="6316139424528454185">Android ಆವೃತ್ತಿಗೆ ಬೆಂಬಲವಿಲ್ಲ</translation> +<translation id="6321526113093607004">ಬುಕ್ಮಾರ್ಕ್ಗಳಿಗೆ ಸೇರಿಸಿ</translation> <translation id="6324034347079777476">Android ಸಿಸ್ಟಂ ಸಿಂಕ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ</translation> <translation id="6333140779060797560"><ph name="APPLICATION" /> ಮೂಲಕ ಹಂಚು</translation> <translation id="6337234675334993532">ಎನ್ಕ್ರಿಪ್ಶನ್</translation> @@ -739,6 +749,7 @@ <translation id="6402652558933147609"><ph name="VIOLATED_URL" /> ನಲ್ಲಿ <ph name="ERROR_CODE" /></translation> <translation id="6404511346730675251">ಬುಕ್ಮಾರ್ಕ್ಗಳನ್ನು ಎಡಿಟ್ ಮಾಡಿ</translation> <translation id="6406506848690869874">ಸಿಂಕ್</translation> +<translation id="6410404864818553978">ಮೂಲ ಬಳಕೆಯ ಡೇಟಾ</translation> <translation id="6410883413783534063">ಒಂದೇ ಸಮಯದಲ್ಲಿ ಬೇರೆಬೇರೆ ಪುಟಗಳಿಗೆ ಭೇಟಿ ನೀಡಲು ಟ್ಯಾಬ್ಗಳನ್ನು ತೆರೆಯಿರಿ</translation> <translation id="6412673304250309937">Chrome ನಲ್ಲಿ ಸಂಗ್ರಹಣೆ ಮಾಡಲಾಗಿರುವ ಅಸುರಕ್ಷಿತ ಸೈಟ್ಗಳ ಪಟ್ಟಿಯನ್ನು ಬಳಸಿ, URL ಗಳನ್ನು ಪರಿಶೀಲಿಸುತ್ತದೆ. ಯಾವುದಾದರೂ ಸೈಟ್, ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಕದಿಯಲು ಪ್ರಯತ್ನಿಸಿದರೆ ಅಥವಾ ನೀವು ಹಾನಿಕಾರಕ ಫೈಲ್ ಅನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿದಾಗ, ಪುಟದ ಕಂಟೆಂಟ್ನ ತುಣುಕುಗಳನ್ನು ಒಳಗೊಂಡ URL ಗಳನ್ನು ಸಹ Chrome, ಸುರಕ್ಷಿತ ಬ್ರೌಸಿಂಗ್ಗೆ ಕಳುಹಿಸಬಹುದು.</translation> <translation id="641643625718530986">ಮುದ್ರಿಸು...</translation> @@ -832,6 +843,7 @@ <translation id="7015203776128479407">ಪ್ರಾರಂಭಿಕ ಸಿಂಕ್ ಸೆಟಪ್ ಮುಗಿದಿಲ್ಲ. ಸಿಂಕ್ ಆಫ್ ಆಗಿದೆ.</translation> <translation id="7022756207310403729">ಬ್ರೌಸರ್ನಲ್ಲಿ ತೆರೆಯಿರಿ</translation> <translation id="702463548815491781">TalkBack ಅಥವಾ ಪ್ರವೇಶ ಬದಲಾಯಿಸಿ ಆನ್ ಆಗಿದ್ದಾಗ ಶಿಫಾರಸು ಮಾಡಲಾಗಿದೆ</translation> +<translation id="7027549951530753705"><ph name="ITEM_TITLE" /> ಅನ್ನು ಮರುಸ್ಥಾಪಿಸಲಾಗಿದೆ</translation> <translation id="7029809446516969842">ಪಾಸ್ವರ್ಡ್ಗಳು</translation> <translation id="703523980599857277">ಮುಖಪುಟವನ್ನು ಬದಲಾಯಿಸಿ</translation> <translation id="7054588988317389591">ಚಿತ್ರದ ವಿವರಣೆ ಪಡೆಯಬೇಕೇ?</translation> @@ -1014,6 +1026,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> ಮತ್ತು ಹೆಚ್ಚಿನ ಸೈಟ್ಗಳು</translation> <translation id="8327155640814342956">ಉತ್ತಮ ಬ್ರೌಸಿಂಗ್ ಅನುಭವಕ್ಕಾಗಿ, Chrome ಅನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಲು ತೆರೆಯಿರಿ</translation> <translation id="8349013245300336738">ಬಳಸಿದ ಡೇಟಾ ಪ್ರಮಾಣದ ಪ್ರಕಾರ ವಿಂಗಡಿಸಿ</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> ಡೌನ್ಲೋಡ್ಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಲಾಗಿದೆ</translation> <translation id="8364299278605033898">ಜನಪ್ರಿಯ ವೆಬ್ಸೈಟ್ಗಳನ್ನು ನೋಡಿ</translation> <translation id="8368027906805972958">ಅಪರಿಚಿತ ಅಥವಾ ಬೆಂಬಲಿತವಲ್ಲದ ಸಾಧನ (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> ಸಿದ್ಧವಾಗಿದೆ.</translation> @@ -1122,6 +1135,7 @@ <translation id="9148126808321036104">ಪುನಃ ಸೈನ್ ಇನ್ ಆಗಿ</translation> <translation id="9155898266292537608">ನೀವು ಪದವನ್ನು ಕ್ಷಿಪ್ರವಾಗಿ ಟ್ಯಾಪ್ ಮಾಡುವ ಮೂಲಕವೂ ಹುಡುಕಬಹುದು</translation> <translation id="9169507124922466868">ನ್ಯಾವಿಗೇಷನ್ ಇತಿಹಾಸವು ಅರ್ಧ-ತೆರೆದಿದೆ</translation> +<translation id="9191031968346938109">ಇದಕ್ಕೆ ಸೇರಿಸಿ…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{1 ನಿಮಿಷದ ಹಿಂದೆ ಪರಿಶೀಲಿಸಲಾಗಿದೆ}one{# ನಿಮಿಷಗಳ ಹಿಂದೆ ಪರಿಶೀಲಿಸಲಾಗಿದೆ}other{# ನಿಮಿಷಗಳ ಹಿಂದೆ ಪರಿಶೀಲಿಸಲಾಗಿದೆ}}</translation> <translation id="9204836675896933765">1 ಫೈಲ್ ಬಾಕಿ ಉಳಿದಿದೆ</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1148,7 @@ <translation id="938850635132480979">ದೋಷ: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">ಪಾಸ್ಫ್ರೇಸ್ ಅನ್ನು ನಮೂದಿಸಿ</translation> <translation id="95817756606698420">Chrome ಚೀನಾದಲ್ಲಿ ಹುಡುಕಲು <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> ಬಳಸಬಹುದು. ನೀವು ಇದನ್ನು <ph name="BEGIN_LINK" />ಸೆಟ್ಟಿಂಗ್ಗಳು<ph name="END_LINK" /> ನಲ್ಲಿ ಬದಲಾಯಿಸಬಹುದು.</translation> +<translation id="962979164594783469">ಈ ಆ್ಯಪ್ ಅನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿ</translation> <translation id="968900484120156207">ನೀವು ಭೇಟಿ ನೀಡುವ ಪುಟಗಳು ಇಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ</translation> <translation id="970715775301869095"><ph name="MINUTES" /> ನಿಮಿಷಗಳು ಉಳಿದಿವೆ</translation> <translation id="974555521953189084">ಸಿಂಕ್ ಪ್ರಾರಂಭಿಸಲು ನಿಮ್ಮ ಪಾಸ್ಫ್ರೇಸ್ ನಮೂದಿಸಿ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb index 368e027c..229dc04 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ko.xtb
@@ -552,7 +552,7 @@ <translation id="5039804452771397117">허용</translation> <translation id="5040262127954254034">개인정보 보호</translation> <translation id="5087580092889165836">카드 추가</translation> -<translation id="5091249083535528968">확장 사용 데이터</translation> +<translation id="5091249083535528968">확장된 사용 데이터</translation> <translation id="509429900233858213">오류가 발생했습니다.</translation> <translation id="510275257476243843">1시간 남음</translation> <translation id="5123685120097942451">시크릿 탭</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb index f61ae89..e95ad242 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mk.xtb
@@ -451,7 +451,7 @@ <translation id="4405224443901389797">Премести во…</translation> <translation id="4411535500181276704">Лесен режим</translation> <translation id="4415276339145661267">Управувајте со сметката на Google</translation> -<translation id="4427306783828095590">„Подобрената заштита“ помага при блокирање кражби на идентитетот и злонамерени софтвери</translation> +<translation id="4427306783828095590">„Подобрената заштита“ помага при блокирање кражби на идентитетот и злонамерен софтвер</translation> <translation id="4440958355523780886">Lite-страница овозможена од Google. Допрете за да се вчита оригиналот.</translation> <translation id="4452411734226507615">Затвори ја картичката <ph name="TAB_TITLE" /></translation> <translation id="4452548195519783679">Додаден е обележувач во <ph name="FOLDER_NAME" /></translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb index 2b73c01d..e620b45 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ml.xtb
@@ -300,6 +300,7 @@ <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> ഇല്ലാതാക്കി</translation> <translation id="3211503082155944789">വായിക്കാത്ത <ph name="READING_LIST_COUNT" /> പേജുകൾ</translation> <translation id="321773570071367578">നിങ്ങൾ പാസ്ഫ്രെയ്സ് മറന്നുപോയെങ്കിലോ ഈ ക്രമീകരണം മാറ്റണമെങ്കിലോ, <ph name="BEGIN_LINK" />സമന്വയം റീസെറ്റ് ചെയ്യുക<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">സുരക്ഷാ കീ ആയി Google Chrome</translation> <translation id="3232754137068452469">വെബ് ആപ്പ്</translation> <translation id="3236059992281584593">ഒരു മിനിറ്റ് ശേഷിക്കുന്നു</translation> <translation id="3244271242291266297">MM</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 129c655..424d702 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
@@ -82,7 +82,7 @@ <translation id="1549000191223877751">अन्य विंडोवर हलवा</translation> <translation id="1553358976309200471">Chrome अपडेट करा</translation> <translation id="1569387923882100876">कनेक्ट केलेले डिव्हाइस</translation> -<translation id="1571304935088121812">वापरकर्तानाव कॉपी करा</translation> +<translation id="1571304935088121812">वापरकर्ता नाव कॉपी करा</translation> <translation id="1592864538817356322">साधारण संरक्षण:</translation> <translation id="1612196535745283361">डिव्हाइस स्कॅन करण्यासाठी Chrome ला स्थान ॲक्सेसची आवश्यकता असते. स्थान ॲक्सेस <ph name="BEGIN_LINK" />या डिव्हाइसाठी बंद केला आहे<ph name="END_LINK" />.</translation> <translation id="1628019612362412531">{NUM_SELECTED,plural, =1{1 निवडलेला आयटम काढून टाका}other{# निवडलेले आयटम काढून टाका}}</translation> @@ -94,7 +94,7 @@ <translation id="1672586136351118594">पुन्हा दाखवू नका</translation> <translation id="1680919990519905526">Google Lens ने इमेज खरेदी करा <ph name="BEGIN_NEW" />नवीन<ph name="END_NEW" /></translation> <translation id="1682195225331129001">आता करून पाहा</translation> -<translation id="1692118695553449118">संकालन सुरू आहे</translation> +<translation id="1692118695553449118">सिंक सुरू आहे</translation> <translation id="1718835860248848330">शेवटच्या तासामधील</translation> <translation id="1736419249208073774">एक्सप्लोर करा</translation> <translation id="1749561566933687563">तुमचे बुकमार्क सिंक करा</translation> @@ -252,7 +252,7 @@ <translation id="2827278682606527653">फीड कार्ड मेनू अर्ध्या उंचीवर आहे</translation> <translation id="2841216154655874070">{NUM_DAYS,plural, =1{एका दिवसापूर्वी तपासले}other{# दिवसांपूर्वी तपासले}}</translation> <translation id="2842985007712546952">मुख्य फोल्डर</translation> -<translation id="2860954141821109167">या डिव्हाइसवर फोन ॲप सुरू केले असल्याची खात्री करा</translation> +<translation id="2860954141821109167">या डिव्हाइसवर फोन अॅप सुरू केले असल्याची खात्री करा</translation> <translation id="2870560284913253234">साइट</translation> <translation id="2876369937070532032">तुमची सुरक्षा धोक्यात असते तेव्हा, तुम्ही भेट दिलेल्या काही पेजचे URL Google ला पाठवते</translation> <translation id="2888126860611144412">Chrome बद्दल</translation> @@ -300,7 +300,7 @@ <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> हटवले</translation> <translation id="3211503082155944789"><ph name="READING_LIST_COUNT" /> न वाचलेली पेज</translation> <translation id="321773570071367578">तुमचा सांकेतिक पासफ्रेझ विसरल्यास किंवा हे सेटिंग बदलू इच्छित असल्यास, <ph name="BEGIN_LINK" />सिंक रीसेट करा<ph name="END_LINK" /></translation> -<translation id="3232754137068452469">वेब ॲप</translation> +<translation id="3232754137068452469">वेब अॅप</translation> <translation id="3236059992281584593">1 मिनिट शिल्लक</translation> <translation id="3244271242291266297">MM</translation> <translation id="3254409185687681395">या पृष्ठास बुकमार्क करा</translation> @@ -322,7 +322,7 @@ <translation id="3350687908700087792">सर्व गुप्त टॅब बंद करा</translation> <translation id="3353615205017136254">Google द्वारे पुरवलेले लाइट पेज. मूळ पेज लोड करण्यासाठी मूळ लोड करा बटणावर टॅप करा.</translation> <translation id="3359667936385849800">तुमचा सध्याचा सेवा पुरवठादार वापरा</translation> -<translation id="3367813778245106622">संकालन प्रारंभ करण्यासाठी पुन्हा साइन इन करा</translation> +<translation id="3367813778245106622">सिंक प्रारंभ करण्यासाठी पुन्हा साइन इन करा</translation> <translation id="337236281855091893">शोधण्यासाठी, शब्दावर टॅप करण्याऐवजी त्याला स्पर्श करा आणि धरून ठेवा</translation> <translation id="3373979091428520308">हे पेज दुसर्या डिव्हाइसवर शेअर करण्यासाठी, दुसर्या डिव्हाइसवर Chrome सेटिंग्जमध्ये सिंक सुरू करा</translation> <translation id="3374023511497244703">तुमचे बुकमार्क, इतिहास, पासवर्ड आणि इतर Chrome डेटा आता तुमच्या Google खात्यामध्ये सिंक केला जाणार नाही</translation> @@ -555,7 +555,7 @@ <translation id="509429900233858213">एक एरर आली आहे.</translation> <translation id="510275257476243843">1 तास शिल्लक</translation> <translation id="5123685120097942451">गुप्त टॅब</translation> -<translation id="5127805178023152808">संकालन बंद आहे</translation> +<translation id="5127805178023152808">सिंक बंद आहे</translation> <translation id="5132942445612118989">सर्व डिव्हाइसवर तुमचे पासवर्ड, इतिहास आणि बरेच काही सिंक करा</translation> <translation id="5136035049889637840">सारखी उत्पादने खरेदी करा <ph name="BEGIN_NEW" />नवीन<ph name="END_NEW" /></translation> <translation id="5139940364318403933">Google ड्राइव्ह कसे वापरावे ते जाणून घ्या</translation> @@ -590,7 +590,7 @@ <translation id="5423934151118863508">तुमची सर्वाधिक भेट दिलेली पेज येथे दिसतील</translation> <translation id="5424588387303617268"><ph name="GIGABYTES" /> GB उपलब्ध आहे</translation> <translation id="543338862236136125">पासवर्ड संपादित करा</translation> -<translation id="5433691172869980887">वापरकर्तानाव कॉपी केले</translation> +<translation id="5433691172869980887">वापरकर्ता नाव कॉपी केले</translation> <translation id="543509235395288790">(<ph name="MEGABYTES" />) च्या <ph name="COUNT" /> फाइल डाउनलोड करत आहे.</translation> <translation id="5441466871879044658">या भाषेमध्ये भाषांतर करा</translation> <translation id="5441522332038954058">अॅड्रेस बारवर जा</translation> @@ -732,7 +732,7 @@ <translation id="6312687380483398334">वेब अॅप्स (शांत)</translation> <translation id="6316139424528454185">Android आवृत्तीला सपोर्ट नाही</translation> <translation id="6321526113093607004">बुकमार्क मध्ये जोडा</translation> -<translation id="6324034347079777476">Android सिस्टीम संकालन अक्षम केले</translation> +<translation id="6324034347079777476">Android सिस्टीम सिंक अक्षम केले</translation> <translation id="6333140779060797560"><ph name="APPLICATION" /> द्वारे शेअर करा</translation> <translation id="6337234675334993532">एंक्रिप्शन</translation> <translation id="6341580099087024258">फाइल कुठे सेव्ह करायच्या ते विचारा</translation> @@ -826,7 +826,7 @@ <translation id="6891726759199484455">तुमचा पासवर्ड कॉपी करण्यासाठी अनलॉक करा</translation> <translation id="6896758677409633944">कॉपी करा</translation> <translation id="6900532703269623216">वर्धित संरक्षण</translation> -<translation id="6903907808598579934">संकालन सुरू करा</translation> +<translation id="6903907808598579934">सिंक सुरू करा</translation> <translation id="6929699136511445623">Android सिस्टमचे सिंक सुरू करा</translation> <translation id="6941901516114974832">गुप्त टॅबमध्ये, तुमची अॅक्टिव्हिटी तरीही तुम्ही भेट देत असलेल्या वेबसाइट, तुमचा नियोक्ता किंवा शाळा आणि तुमचा इंटरनेट सेवा पुरवठादार यांना <ph name="BEGIN_BOLD1" />दृश्यमान असू शकते<ph name="END_BOLD1" />. @@ -921,7 +921,7 @@ <translation id="7588219262685291874">तुमच्या डिव्हाइसचे बॅटरी सेव्हर सुरू असेल तेव्हा गडद थीम सुरू करा</translation> <translation id="7593557518625677601">Chrome सिंक सुरू करण्यासाठी Android सेटिंग्ज उघडा आणि Android सिस्टम सिंक पुन्हा सक्षम करा</translation> <translation id="7596558890252710462">ऑपरेटिंग सिस्टम</translation> -<translation id="7605594153474022051">संकालन कार्य करत नाही</translation> +<translation id="7605594153474022051">सिंक कार्य करत नाही</translation> <translation id="7606077192958116810">लाइट मोड सुरू आहे. ते सेटिंग्जमध्ये व्यवस्थापित करा.</translation> <translation id="7612619742409846846">Google मध्ये हे म्हणून साइन इन केले</translation> <translation id="7619072057915878432">नेटवर्क बिघाडामुळे <ph name="FILE_NAME" /> डाउनलोड अयशस्वी झाले.</translation> @@ -1048,7 +1048,7 @@ <translation id="8493948351860045254">जागा मोकळी करा</translation> <translation id="8497726226069778601">अद्याप… येथे पाहण्यासाठी काहीही नाही</translation> <translation id="8503559462189395349">Chrome पासवर्ड</translation> -<translation id="8503813439785031346">वापरकर्तानाव</translation> +<translation id="8503813439785031346">वापरकर्ता नाव</translation> <translation id="8514477925623180633">Chrome सह स्टोअर केलेला पासवर्ड पाठवा</translation> <translation id="8514577642972634246">गुप्त मोडमध्ये प्रवेश करा</translation> <translation id="8516012719330875537">इमेज संपादक</translation> @@ -1067,8 +1067,8 @@ <translation id="860043288473659153">कार्डधारकाचे नाव</translation> <translation id="8616006591992756292">तुमच्या Google खात्यात <ph name="BEGIN_LINK" />myactivity.google.com<ph name="END_LINK" /> वर ब्राउझिंग इतिहासाची अन्य स्वरूपे असू शकतात.</translation> <translation id="8617240290563765734">डाउनलोड केलेल्या आशयमध्ये नमूद केलेली सुचविलेली URL उघडायची?</translation> -<translation id="8636825310635137004">आपल्या इतर डिव्हाइसेस मधून तुमचे टॅब प्राप्त करण्यासाठी, संकालन सुरू करा</translation> -<translation id="8641930654639604085">प्रौढ सामग्री असलेल्या साइटना अवरोधित करण्याचा प्रयत्न करा</translation> +<translation id="8636825310635137004">आपल्या इतर डिव्हाइसेस मधून तुमचे टॅब प्राप्त करण्यासाठी, सिंक सुरू करा</translation> +<translation id="8641930654639604085">प्रौढ आशय असलेल्या साइटना अवरोधित करण्याचा प्रयत्न करा</translation> <translation id="8655129584991699539">तुम्ही Chrome सेटिंग्जमध्ये डेटा साफ करू शकता</translation> <translation id="8656747343598256512">तुमच्या Google खाते सह या साइट आणि Chrome वर साइन इन करा. तुम्ही सिंक करणे नंतर सुरू करू शकता.</translation> <translation id="8659579665266920523">Chrome सह कसे शोधावे</translation> @@ -1080,7 +1080,7 @@ <translation id="8699120352855309748">या भाषांचे भाषांतर करणे ऑफर करू नका</translation> <translation id="8712637175834984815">समजले</translation> <translation id="8725066075913043281">पुन्हा प्रयत्न करा</translation> -<translation id="8748850008226585750">सामग्री लपविली</translation> +<translation id="8748850008226585750">आशय लपविली</translation> <translation id="8788265440806329501">नेव्हिगेशन इतिहास बंद आहे</translation> <translation id="8788968922598763114">अखेरीस बंद केलेला टॅब पुन्हा उघडा</translation> <translation id="8798449543960971550">वाचलेले</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb index d7e731b..4864fac 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ne.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">स्क्रिन क्याप्चर</translation> <translation id="1111673857033749125">तपाईँका अन्य यन्त्रहरूमा सुरक्षित गरिएका पुस्तक चिन्हहरू यहाँ देखिनेछन्।</translation> <translation id="1113597929977215864">सरलीकृत दृश्य देखाउनुहोस्</translation> +<translation id="1123070903960493543">यसअन्तर्गत तपाईंले Chrome प्रयोग गर्ने तरिका, तपाईंले चयन गर्नुभएका सेटिङ, Chrome क्र्यास भएका घटनाका विवरण समावेश हुन्छन्</translation> <translation id="1126809382673880764">तपाईंलाई जोखिमपूर्ण वेबसाइट, डाउनलोड वा एक्स्टेन्सनहरूविरुद्ध सुरक्षा प्रदान गर्दैन। उपलब्ध भएसम्म तपाईं अझै पनि Gmail र खोज जस्ता Google का अन्य सेवाहरूमा सुरक्षित ब्राउजिङको सुरक्षा प्राप्त गर्नु हुने छ।</translation> <translation id="1129510026454351943">विवरणहरू: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{१ डाउनलोड विचारधीन छ।}other{# डाउनलोडहरू विचारधीन छन्।}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> आदान प्रदान गर्न सकिएन</translation> <translation id="1477626028522505441"><ph name="FILE_NAME" /> डाउनलोड सर्भरको समस्याको कारण असफल भयो।</translation> <translation id="1506061864768559482">सर्च इन्जिन</translation> +<translation id="151267239139452619">'डाउनलोडहरू' मा हाल्नुहोस्</translation> <translation id="1513352483775369820">बुकमार्कहरू र वेब इतिहास</translation> <translation id="1513858653616922153">पासवर्ड मेट्नुहोस्</translation> <translation id="1521774566618522728">आज सक्रिय गरिएको समय</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> बचत गरियो</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> बन्द भयो</translation> <translation id="2139186145475833000">गृह स्क्रिनमा थप्नुहोस्</translation> +<translation id="214888715418183969">तपाईं Chrome सँग कुन कुन जानकारी सेयर गर्न चाहनुहुन्छ भन्ने कुरा छनौट गर्नुहोस्। तपाईंले सेयर गर्ने मेट्रिकहरू Chrome का सुविधा, कार्यसम्पादन र स्थिरता सुधार गर्न प्रयोग गरिने छ।</translation> <translation id="2154484045852737596">कार्ड सम्पादन गर्नुहोस्</translation> <translation id="2154710561487035718">URL प्रतिलिपि गर्नुहोस्</translation> <translation id="2156074688469523661">बाँकी साइटहरू (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR कोड</translation> <translation id="218608176142494674">आदान प्रदान गर्दै</translation> <translation id="2195339740518523951">Chrome को सबैभन्दा बलियो सुरक्षा विकल्प चयन गर्नुहोस्</translation> +<translation id="2200113223741723867">प्रयोगसम्बन्धी डेटा सेयर गर्ने सेटिङ व्यवस्थापन गर्नुहोस्</translation> <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> का रूपमा जारी राख्नुहोस्</translation> <translation id="2234876718134438132">सिंक तथा Google सेवाहरू</translation> <translation id="2239812875700136898">Discover का विकल्पहरू नामक बटन प्रयोग गरी आफ्नो समाचार फिडमा देखिने सामग्री नियन्त्रण गर्नुहोस्</translation> @@ -370,6 +374,7 @@ <translation id="3771290962915251154">अभिभावकीय नियन्त्रणहरू सक्रिय गरिएका हुनाले यो सेटिङ असक्षम छ</translation> <translation id="3771694256347217732">Google का सेवाका सर्तहरू</translation> <translation id="3773755127849930740">जोडा बनाउने प्रक्रियालाई अनुमति दिन <ph name="BEGIN_LINK" />ब्लुटुथ<ph name="END_LINK" /> लाई सक्रिय गर्नुहोस्</translation> +<translation id="3773856050682458546">यसअन्तर्गत आधारभूत डेटाका साथै तपाईं जाने वेबसाइट र तपाईंले चलाउने एपसम्बन्धी जानकारी समावेश हुन्छन्</translation> <translation id="3775705724665058594">आफ्ना यन्त्रहरूमा पठाउनुहोस्</translation> <translation id="3778956594442850293">गृह स्क्रिनमा थपियो</translation> <translation id="3789841737615482174">स्थापना गर्नुहोस्</translation> @@ -403,7 +408,9 @@ <translation id="3988466920954086464">यस प्यानलमा खोजका तात्कालिक परिणामहरू हेर्नुहोस्</translation> <translation id="4000212216660919741">अफलाइन गृहपृष्ठ</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# घन्टा}other{# घन्टा}}</translation> +<translation id="4045764304651014138">प्रयोगसम्बन्धी डेटा</translation> <translation id="4056223980640387499">सेपिया</translation> +<translation id="4057643060762047384">यहाँ हाल्नुहोस्:</translation> <translation id="4060598801229743805">स्क्रिनको शीर्ष भाग नजिकै विकल्पहरू उपलब्ध छन्</translation> <translation id="4062305924942672200">कानूनी जानकारी</translation> <translation id="4084682180776658562">बुकमार्क</translation> @@ -543,6 +550,7 @@ <translation id="5039804452771397117">अनुमति दिनुहोस्</translation> <translation id="5040262127954254034">गोपनीयता</translation> <translation id="5087580092889165836">कार्ड थप्नुहोस्</translation> +<translation id="5091249083535528968">प्रयोगसम्बन्धी थप डेटा</translation> <translation id="509429900233858213">त्रुटि भयो।</translation> <translation id="510275257476243843">१ घन्टा बाँकी छ</translation> <translation id="5123685120097942451">इन्कोग्निटो ट्याब</translation> @@ -649,6 +657,7 @@ <translation id="5833984609253377421">लिंक सेयर गर्नुहोस्</translation> <translation id="5836192821815272682">Chrome को अद्यावधिक डाउनलोड गर्दै…</translation> <translation id="5853623416121554550">पज गरियो</translation> +<translation id="5854512288214985237">तथ्याङ्क वा क्र्यास रिपोर्टहरू Google मा पठाइँदैन</translation> <translation id="5854790677617711513">३० दिनभन्दा पुरानो</translation> <translation id="5855546874025048181">यसअनुसार परिष्कृत गर्नुहोस्: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome ले ब्लुटुथ एडाप्टरलाई सक्रिय गर्न सकेन</translation> @@ -721,6 +730,7 @@ <translation id="6303969859164067831">साइन आउट गरी सिंक प्रक्रिया निष्क्रिय पार्नुहोस्</translation> <translation id="6312687380483398334">वेब एपहरू (मौन)</translation> <translation id="6316139424528454185">Android को संस्करण समर्थित छैन</translation> +<translation id="6321526113093607004">'बुकमार्कहरू' मा हाल्नुहोस्</translation> <translation id="6324034347079777476">Android प्रणालीको सिंकलाई असक्षम गरियो</translation> <translation id="6333140779060797560"><ph name="APPLICATION" /> मार्फत साझा गर्नुहोस्</translation> <translation id="6337234675334993532">इन्क्रिप्सन</translation> @@ -738,6 +748,7 @@ <translation id="6402652558933147609"><ph name="VIOLATED_URL" /> मा <ph name="ERROR_CODE" /></translation> <translation id="6404511346730675251">बुकमार्क सम्पादन गर्नुहोस्</translation> <translation id="6406506848690869874">समक्रमण</translation> +<translation id="6410404864818553978">प्रयोगसम्बन्धी आधारभूत डेटा</translation> <translation id="6410883413783534063">एकै पटक विभिन्न पृष्ठहरूमा जान बेग्लाबेग्लै ट्याबहरू खोल्नुहोस्</translation> <translation id="6412673304250309937">Chrome मा भण्डारण गरिएका असुरक्षित साइटको सूची जाँच गरी URL हरू सुरक्षित छन् वा छैनन् भन्ने कुरा यकिन गर्छ। कुनै साइटले तपाईंको पासवर्ड चोरी गर्न खोज्दा वा तपाईंले कुनै हानिकारक फाइल डाउनलोड गर्दा Chrome ले पृष्ठका केही सामग्रीसहित URL हरूलाई सुरक्षित ब्राउजिङमा पठाउन पनि सक्छ।</translation> <translation id="641643625718530986">प्रिन्ट गर्नुहोस्...</translation> @@ -831,6 +842,7 @@ <translation id="7015203776128479407">सिंकसम्बन्धी प्रारम्भिक सेटअप पूरा भएन। सिंक सुविधा निष्क्रिय छ</translation> <translation id="7022756207310403729">ब्राउजरमा खाेल्नुहाेस्</translation> <translation id="702463548815491781">TalkBack वा पहुँच स्विच गर्नुहोस् नामक सुविधा सक्रिय हुँदा मात्र सिफारिस गरिन्छ</translation> +<translation id="7027549951530753705"><ph name="ITEM_TITLE" /> रिस्टोर गरियो</translation> <translation id="7029809446516969842">पासवर्डहरू</translation> <translation id="703523980599857277">गृहपृष्ठ परिवर्तन गर्नुहोस्</translation> <translation id="7054588988317389591">फोटोका विवरणहरू प्राप्त गर्न चाहनुहुन्छ?</translation> @@ -1013,6 +1025,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> र थप साइटहरू</translation> <translation id="8327155640814342956">सर्वोत्तम ब्राउजिङ अनुभव प्राप्त गर्न Chrome खोलेर अपडेट गर्नुहोस्</translation> <translation id="8349013245300336738">प्रयोग गरिएको डेटाको मात्राद्वारा क्रमबद्ध गर्नुहोस्</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> वटा डाउनलोड रिस्टोर गरिए</translation> <translation id="8364299278605033898">लोकप्रिय वेबसाइटहरू हेर्नुहोस्</translation> <translation id="8368027906805972958">अज्ञात वा प्रयोग गर्न नमिल्ने यन्त्र (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> भाषा प्याक तयार छ।</translation> @@ -1121,6 +1134,7 @@ <translation id="9148126808321036104">पुन: साइन इन गर्नुहोस्</translation> <translation id="9155898266292537608">कुनै शब्दमा द्रुत ट्याप गरेर पनि तपाईं खोज्न सक्नुहुन्छ</translation> <translation id="9169507124922466868">नेभिगेसनको इतिहास आधा खुला छ</translation> +<translation id="9191031968346938109">यहाँ हाल्नुहोस्…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{१ मिनेटअघि जाँच गरिएको}other{# मिनेटअघि जाँच गरिएको}}</translation> <translation id="9204836675896933765">१ फाइल बाँकी</translation> <translation id="9206873250291191720">क</translation> @@ -1133,6 +1147,7 @@ <translation id="938850635132480979">त्रुटि: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">पासफ्रेज प्रविष्टि गर्नुहोस्</translation> <translation id="95817756606698420">Chrome ले चीनमा खोज गर्नका लागि <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> को प्रयोग गर्न सक्छ। तपाईं <ph name="BEGIN_LINK" />सेटिङहरू<ph name="END_LINK" />मा गई यसलाई बदल्न सक्नुहुन्छ।</translation> +<translation id="962979164594783469">यो एप इन्स्टल गर्नुहोस्</translation> <translation id="968900484120156207">तपाईंले हेर्नुभएका पृष्ठहरू यहाँ देखिन्छन्</translation> <translation id="970715775301869095"><ph name="MINUTES" /> मिनेट बाँकी छ</translation> <translation id="974555521953189084">सिंक सुरु गर्न आफ्नो पासफ्रेज प्रविष्टि गर्नुहोस्</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb index cd2e0eab..7065fac 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pa.xtb
@@ -16,6 +16,7 @@ <translation id="1105960400813249514">ਸਕ੍ਰੀਨ ਕੈਪਚਰ</translation> <translation id="1111673857033749125">ਤੁਹਾਡੀਆਂ ਹੋਰ ਡੀਵਾਈਸ 'ਤੇ ਰੱਖਿਅਤ ਕੀਤੇ ਬੁੱਕਮਾਰਕ ਇੱਥੇ ਵਿਖਾਈ ਦੇਣਗੇ।</translation> <translation id="1113597929977215864">ਸਰਲੀਕਿਰਤ ਦ੍ਰਿਸ਼ ਦਿਖਾਓ</translation> +<translation id="1123070903960493543">ਤੁਹਾਡਾ Chrome ਨਾਲ ਅੰਤਰਕਿਰਿਆ ਕਰਨ ਦਾ ਤਰੀਕਾ, ਤੁਹਾਡੀਆਂ ਚੁਣੀਆਂ ਹੋਈਆਂ ਸੈਟਿੰਗਾਂ, Chrome ਕ੍ਰੈਸ਼ ਸੰਬੰਧੀ ਵੇਰਵੇ</translation> <translation id="1126809382673880764">ਤੁਹਾਨੂੰ ਖਤਰਨਾਕ ਵੈੱਬਸਾਈਟਾਂ, ਡਾਊਨਲੋਡਾਂ ਅਤੇ ਐਕਸਟੈਂਸ਼ਨਾਂ ਤੋਂ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਰੱਖਿਆ ਜਾਂਦਾ। ਹੋਰ Google ਸੇਵਾਵਾਂ ਜਿਵੇਂ ਕਿ Gmail ਅਤੇ Search ਵਿੱਚ ਜਿੱਥੇ ਵੀ ਉਪਲਬਧ ਹੋਵੇ ਤੁਹਾਨੂੰ ਫਿਰ ਵੀ ਸੁਰੱਖਿਅਤ ਬ੍ਰਾਊਜ਼ਿੰਗ ਸੁਰੱਖਿਆ ਪ੍ਰਾਪਤ ਹੋਵੇਗੀ।</translation> <translation id="1129510026454351943">ਵੇਰਵੇ: <ph name="ERROR_DESCRIPTION" /></translation> <translation id="1141800923049248244">{FILE_COUNT,plural, =1{1 ਡਾਊਨਲੋਡ ਬਾਕੀ ਹੈ।}one{# ਡਾਊਨਲੋਡ ਬਾਕੀ ਹੈ।}other{# ਡਾਊਨਲੋਡ ਬਾਕੀ ਹਨ।}}</translation> @@ -72,6 +73,7 @@ <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> ਨੂੰ ਸਾਂਝਾ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ</translation> <translation id="1477626028522505441">ਸਰਵਰ ਸਮੱਸਿਆਵਾਂ ਦੇ ਕਾਰਨ <ph name="FILE_NAME" /> ਡਾਊਨਲੋਡ ਅਸਫ਼ਲ ਰਿਹਾ।</translation> <translation id="1506061864768559482">ਖੋਜ ਇੰਜਣ</translation> +<translation id="151267239139452619">ਡਾਊਨਲੋਡਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ</translation> <translation id="1513352483775369820">ਬੁੱਕਮਾਰਕ ਅਤੇ ਵੈੱਬ ਇਤਿਹਾਸ</translation> <translation id="1513858653616922153">ਪਾਸਵਰਡ ਮਿਟਾਓ</translation> <translation id="1521774566618522728">ਅੱਜ ਕਿਰਿਆਸ਼ੀਲ</translation> @@ -157,6 +159,7 @@ <translation id="2131665479022868825"><ph name="DATA" /> ਦੀ ਬਚਤ ਕੀਤੀ ਗਈ</translation> <translation id="213279576345780926"><ph name="TAB_TITLE" /> ਬੰਦ ਕੀਤਾ</translation> <translation id="2139186145475833000">ਹੋਮ ਸਕ੍ਰੀਨ 'ਤੇ ਸ਼ਾਮਲ ਕਰੋ</translation> +<translation id="214888715418183969">ਚੁਣੋ ਕਿ ਜਿਸ ਨਾਲ ਤੁਸੀਂ Chrome ਨਾਲ ਜਾਣਕਾਰੀ ਸਾਂਝੀ ਕਰਨ ਵਿੱਚ ਸਹਿਜ ਹੋ। ਤੁਹਾਡੇ ਦੁਆਰਾ ਸਾਂਝੀ ਕੀਤੀ ਗਈ ਮੈਟਰਿਕਸ Chrome ਦੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ, ਪ੍ਰਦਰਸ਼ਨ ਅਤੇ ਸਥਿਰਤਾ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਵਿੱਚ ਸਹਾਇਤਾ ਲਈ ਵਰਤੀ ਜਾਵੇਗੀ।</translation> <translation id="2154484045852737596">ਕਾਰਡ ਦਾ ਸੰਪਾਦਨ ਕਰੋ</translation> <translation id="2154710561487035718">URL ਕਾਪੀ ਕਰੋ</translation> <translation id="2156074688469523661">ਬਾਕੀ ਸਾਈਟਾਂ (<ph name="NUMBER_OF_SITES" />)</translation> @@ -166,6 +169,7 @@ <translation id="2175927920773552910">QR ਕੋਡ</translation> <translation id="218608176142494674">ਸਾਂਝਾਕਰਨ</translation> <translation id="2195339740518523951">Chrome ਦੀ ਸਭ ਤੋਂ ਮਜਬੂਤ ਸੁਰੱਖਿਆ ਪ੍ਰਾਪਤ ਕਰੋ</translation> +<translation id="2200113223741723867">ਵਰਤੋਂ ਡਾਟੇ ਸੰਬੰਧੀ ਸਾਂਝੇਕਰਨ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ</translation> <translation id="2227444325776770048"><ph name="USER_FULL_NAME" /> ਵਜੋਂ ਜਾਰੀ ਰੱਖੋ</translation> <translation id="2234876718134438132">ਸਮਕਾਲੀਕਰਨ ਅਤੇ Google ਸੇਵਾਵਾਂ</translation> <translation id="2239812875700136898">'ਡਿਸਕਵਰ' ਬਟਨ ਲਈ 'ਵਿਕਲਪ' ਤੋਂ ਆਪਣੀਆਂ ਕਹਾਣੀਆਂ ਨੂੰ ਕੰਟਰੋਲ ਕਰੋ</translation> @@ -370,6 +374,7 @@ <translation id="3771290962915251154">ਮਾਪਿਆਂ ਦੇ ਕੰਟਰੋਲ ਚਾਲੂ ਹੋਣ ਕਰਕੇ ਇਹ ਸੈਟਿੰਗ ਬੰਦ ਹੈ</translation> <translation id="3771694256347217732">Google ਸੇਵਾ ਦੇ ਨਿਯਮ</translation> <translation id="3773755127849930740">ਜੋੜਾਬੱਧ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦੇਣ ਲਈ <ph name="BEGIN_LINK" />ਬਲੂਟੁੱਥ ਚਾਲੂ ਕਰੋ<ph name="END_LINK" /></translation> +<translation id="3773856050682458546">ਮੁੱਢਲੇ ਡਾਟੇ ਤੋਂ ਇਲਾਵਾ ਤੁਹਾਡੇ ਵੱਲੋਂ ਦੇਖੀਆਂ ਜਾਣ ਵਾਲੀਆਂ ਵੈੱਬਸਾਈਟਾਂ ਅਤੇ ਵਰਤੀਆਂ ਜਾਣ ਵਾਲੀਆਂ ਐਪਾਂ ਬਾਰੇ ਜਾਣਕਾਰੀ</translation> <translation id="3775705724665058594">ਆਪਣੇ ਡੀਵਾਈਸਾਂ 'ਤੇ ਭੇਜੋ</translation> <translation id="3778956594442850293">ਹੋਮ ਸਕ੍ਰੀਨ 'ਤੇ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ</translation> <translation id="3789841737615482174">ਸਥਾਪਤ ਕਰੋ</translation> @@ -403,7 +408,9 @@ <translation id="3988466920954086464">ਇਸ ਪੈਨਲ ਵਿੱਚ ਤਤਕਾਲ ਖੋਜ ਨਤੀਜੇ ਦੇਖੋ</translation> <translation id="4000212216660919741">ਆਫ਼ਲਾਈਨ ਹੋਮ</translation> <translation id="4034817413553209278">{HOURS,plural, =1{# ਘੰਟਾ}one{# ਘੰਟਾ}other{# ਘੰਟੇ}}</translation> +<translation id="4045764304651014138">ਵਰਤੋਂ ਡਾਟਾ</translation> <translation id="4056223980640387499">Sepia</translation> +<translation id="4057643060762047384">ਇਸ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ:</translation> <translation id="4060598801229743805">ਵਿਕਲਪ ਸਕ੍ਰੀਨ ਦੇ ਉੱਪਰਲੇ ਪਾਸੇ ਕੋਲ ਉਪਲਬਧ ਹਨ</translation> <translation id="4062305924942672200">ਕਨੂੰਨੀ ਜਾਣਕਾਰੀ</translation> <translation id="4084682180776658562">ਬੁੱਕਮਾਰਕ</translation> @@ -544,6 +551,7 @@ <translation id="5039804452771397117">ਆਗਿਆ ਦਿਓ</translation> <translation id="5040262127954254034">ਪ੍ਰਾਈਵੇਸੀ</translation> <translation id="5087580092889165836">ਕਾਰਡ ਸ਼ਾਮਲ ਕਰੋ</translation> +<translation id="5091249083535528968">ਵਿਸਤ੍ਰਿਤ ਵਰਤੋਂ ਡਾਟਾ</translation> <translation id="509429900233858213">ਇੱਕ ਗੜਬੜ ਹੋਈ</translation> <translation id="510275257476243843">1 ਘੰਟਾ ਬਾਕੀ</translation> <translation id="5123685120097942451">ਇਨਕੋਗਨਿਟੋ ਟੈਬ</translation> @@ -650,6 +658,7 @@ <translation id="5833984609253377421">ਲਿੰਕ ਸਾਂਝਾ ਕਰੋ</translation> <translation id="5836192821815272682">Chrome ਅੱਪਡੇਟ ਡਾਊਨਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…</translation> <translation id="5853623416121554550">ਰੋਕਿਆ ਗਿਆ</translation> +<translation id="5854512288214985237">ਕੋਈ ਅੰਕੜੇ ਜਾਂ ਕ੍ਰੈਸ਼ ਰਿਪੋਰਟਾਂ Google ਨੂੰ ਨਹੀਂ ਭੇਜੀਆਂ ਗਈਆਂ</translation> <translation id="5854790677617711513">30 ਦਿਨਾਂ ਤੋਂ ਜ਼ਿਆਦਾ ਪੁਰਾਣਾ</translation> <translation id="5855546874025048181">ਸੋਧੋ: <ph name="REFINE_TEXT" /></translation> <translation id="5858741533101922242">Chrome ਬਲੂਟੁੱਥ ਅਡਾਪਟਰ ਨੂੰ ਚਾਲੂ ਕਰਨ ਵਿੱਚ ਅਸਮਰੱਥ ਹੈ।</translation> @@ -722,6 +731,7 @@ <translation id="6303969859164067831">ਸਾਈਨ-ਆਊਟ ਕਰਕੇ ਸਮਕਾਲੀਕਰਨ ਬੰਦ ਕਰੋ</translation> <translation id="6312687380483398334">ਵੈੱਬ ਐਪਾਂ (ਸ਼ਾਂਤ)</translation> <translation id="6316139424528454185">Android ਵਰਜਨ ਸਮਰਥਿਤ ਨਹੀਂ ਹੈ</translation> +<translation id="6321526113093607004">ਬੁੱਕਮਾਰਕਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ</translation> <translation id="6324034347079777476">Android ਸਿਸਟਮ ਸਮਕਾਲੀਕਰਨ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ</translation> <translation id="6333140779060797560"><ph name="APPLICATION" /> ਰਾਹੀਂ ਸ਼ੇਅਰ ਕਰੋ</translation> <translation id="6337234675334993532">ਇਨਕ੍ਰਿਪਸ਼ਨ</translation> @@ -739,6 +749,7 @@ <translation id="6402652558933147609"><ph name="VIOLATED_URL" /> 'ਤੇ <ph name="ERROR_CODE" /></translation> <translation id="6404511346730675251">ਬੁੱਕਮਾਰਕ ਸੰਪਾਦਿਤ ਕਰੋ</translation> <translation id="6406506848690869874">ਸਿੰਕ ਕਰੋ</translation> +<translation id="6410404864818553978">ਮੁੁੱਢਲਾ ਵਰਤੋਂ ਡਾਟਾ</translation> <translation id="6410883413783534063">ਇੱਕੋ ਵੇਲੇ ਵੱਖ-ਵੱਖ ਪੰਨਿਆਂ 'ਤੇ ਜਾਣ ਲਈ ਟੈਬਾਂ ਖੋਲ੍ਹੋ</translation> <translation id="6412673304250309937">Chrome ਵਿੱਚ ਸਟੋਰ ਕੀਤੀਆਂ ਅਸੁਰੱਖਿਅਤ ਸਾਈਟਾਂ ਦੀ ਸੂਚੀ ਦੇ ਨਾਲ URL ਦੀ ਜਾਂਚ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਜੇ ਕੋਈ ਸਾਈਟ ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਨੂੰ ਚੋਰੀ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦੀ ਹੈ ਜਾਂ ਜਦੋਂ ਤੁਸੀਂ ਕੋਈ ਨੁਕਸਾਨਦੇਹ ਫ਼ਾਈਲ ਡਾਊਨਲੋਡ ਕਰਦੇ ਹੋ, ਤਾਂ Chrome ਸੁਰੱਖਿਅਤ ਬ੍ਰਾਊਜ਼ਿੰਗ ਨੂੰ ਪੰਨੇ ਦੀ ਥੋੜ੍ਹੀ ਸਮੱਗਰੀ ਸਮੇਤ URL ਵੀ ਭੇਜ ਸਕਦਾ ਹੈ।</translation> <translation id="641643625718530986">ਪ੍ਰਿੰਟ…</translation> @@ -832,6 +843,7 @@ <translation id="7015203776128479407">ਮੁੱਢਲਾ ਸਮਕਾਲੀਕਰਨ ਸੈੱਟਅੱਪ ਪੂਰਾ ਨਹੀਂ ਹੋਇਆ। ਸਮਕਾਲੀਕਰਨ ਬੰਦ ਹੈ।</translation> <translation id="7022756207310403729">ਬ੍ਰਾਊਜ਼ਰ ਵਿੱਚ ਖੋਲ੍ਹੋ</translation> <translation id="702463548815491781">TalkBack ਜਾਂ 'ਸਵਿੱਚ ਪਹੁੰਚ' ਦੇ ਚਾਲੂ ਹੋਣ 'ਤੇ ਸਿਫ਼ਾਰਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ</translation> +<translation id="7027549951530753705"><ph name="ITEM_TITLE" /> ਨੂੰ ਮੁੜ-ਬਹਾਲ ਕੀਤਾ ਗਿਆ</translation> <translation id="7029809446516969842">ਪਾਸਵਰਡ</translation> <translation id="703523980599857277">ਹੋਮਪੇਜ ਬਦਲੋ</translation> <translation id="7054588988317389591">ਕੀ ਚਿੱਤਰ ਵਰਣਨ ਪ੍ਰਾਪਤ ਕਰਨੇ ਹਨ?</translation> @@ -1014,6 +1026,7 @@ <translation id="8316092324682955408"><ph name="DOMAIN_NAME" /> ਅਤੇ ਹੋਰ ਸਾਈਟਾਂ</translation> <translation id="8327155640814342956">ਬਿਹਤਰੀਨ ਬ੍ਰਾਊਜ਼ਿੰਗ ਅਨੁਭਵ ਲਈ, Chrome ਨੂੰ ਅੱਪਡੇਟ ਕਰਨ ਵਾਸਤੇ ਖੋਲ੍ਹੋ</translation> <translation id="8349013245300336738">ਵਰਤੇ ਗਏ ਡਾਟੇ ਦੀ ਮਾਤਰਾ ਮੁਤਾਬਕ ਕ੍ਰਮ-ਬੱਧ ਕਰੋ</translation> +<translation id="835847953965672673"><ph name="NUMBER_OF_DOWNLOADS" /> ਡਾਊਨਲੋਡਾਂ ਨੂੰ ਮੁੜ-ਬਹਾਲ ਕੀਤਾ ਗਿਆ</translation> <translation id="8364299278605033898">ਪ੍ਰਸਿੱਧ ਵੈੱਬਸਾਈਟਾਂ ਦੇਖੋ</translation> <translation id="8368027906805972958">ਅਗਿਆਤ ਜਾਂ ਅਸਮਰਥਿਤ ਡੀਵਾਈਸ (<ph name="DEVICE_ID" />)</translation> <translation id="8372925856448695381"><ph name="LANG" /> ਤਿਆਰ ਹੈ।</translation> @@ -1122,6 +1135,7 @@ <translation id="9148126808321036104">ਦੁਬਾਰਾ ਸਾਈਨ-ਇਨ ਕਰੋ</translation> <translation id="9155898266292537608">ਤੁਸੀਂ ਕਿਸੇ ਸ਼ਬਦ 'ਤੇ ਤੁਰੰਤ ਟੈਪ ਨਾਲ ਵੀ ਖੋਜ ਕਰ ਸਕਦੇ ਹੋ</translation> <translation id="9169507124922466868">ਨੈਵੀਗੇਸ਼ਨ ਇਤਿਹਾਸ ਵਾਲੀ ਸ਼ੀਟ ਅੱਧੀ ਖੁੱਲ੍ਹੀ ਹੋਈ ਹੈ</translation> +<translation id="9191031968346938109">ਇਸ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ…</translation> <translation id="9199368092038462496">{NUM_MINS,plural, =1{1 ਮਿੰਟ ਪਹਿਲਾਂ ਜਾਂਚ ਕੀਤੀ ਗਈ}one{# ਮਿੰਟ ਪਹਿਲਾਂ ਜਾਂਚ ਕੀਤੀ ਗਈ}other{# ਮਿੰਟ ਪਹਿਲਾਂ ਜਾਂਚ ਕੀਤੀ ਗਈ}}</translation> <translation id="9204836675896933765">1 ਫ਼ਾਈਲ ਬਾਕੀ</translation> <translation id="9206873250291191720">A</translation> @@ -1134,6 +1148,7 @@ <translation id="938850635132480979">ਗੜਬੜ: <ph name="ERROR_CODE" /></translation> <translation id="939598580284253335">ਪਾਸਫਰੇਜ਼ ਦਾਖਲ ਕਰੋ</translation> <translation id="95817756606698420">Chrome ਚੀਨ ਵਿੱਚ ਖੋਜ ਲਈ <ph name="BEGIN_BOLD" />Sogou<ph name="END_BOLD" /> ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦਾ ਹੈ। ਤੁਸੀਂ ਇਸ ਨੂੰ <ph name="BEGIN_LINK" />ਸੈਟਿੰਗਾਂ<ph name="END_LINK" /> ਵਿੱਚੋਂ ਬਦਲ ਸਕਦੇ ਹੋ।</translation> +<translation id="962979164594783469">ਇਹ ਐਪ ਸਥਾਪਤ ਕਰੋ</translation> <translation id="968900484120156207">ਜਿਨ੍ਹਾਂ ਪੰਨਿਆਂ 'ਤੇ ਤੁਸੀਂ ਜਾਂਦੇ ਹੋ ਉਹ ਇੱਥੇ ਦਿਖਾਈ ਦਿੰਦੇ ਹਨ</translation> <translation id="970715775301869095"><ph name="MINUTES" /> ਮਿੰਟ ਬਾਕੀ</translation> <translation id="974555521953189084">ਸਮਕਾਲੀਕਰਨ ਚਾਲੂ ਕਰਨ ਲਈ ਆਪਣਾ ਪਾਸਫਰੇਜ਼ ਦਾਖਲ ਕਰੋ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ru.xtb index 890a57f..dc261bc 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
@@ -300,6 +300,7 @@ <translation id="3211426585530211793">Удалено: <ph name="ITEM_TITLE" /></translation> <translation id="3211503082155944789">Непрочитанных страниц: <ph name="READING_LIST_COUNT" /></translation> <translation id="321773570071367578">Если вы забыли кодовую фразу или хотите изменить эту настройку, <ph name="BEGIN_LINK" />сбросьте параметры синхронизации<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">Google Chrome в качестве электронного ключа</translation> <translation id="3232754137068452469">Веб-приложение</translation> <translation id="3236059992281584593">Осталась 1 мин.</translation> <translation id="3244271242291266297">ММ</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 fa4c127..8a9f52efd 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
@@ -300,6 +300,7 @@ <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> මකන ලදි</translation> <translation id="3211503082155944789">නොකියවූ පිටු <ph name="READING_LIST_COUNT" /></translation> <translation id="321773570071367578">ඔබට ඔබේ මුර-වැකිකඩ අමතක වී ඇත්නම් හෝ මෙම සැකසීම් වෙනස් කිරීමට අවශ්ය නම්, <ph name="BEGIN_LINK" />සමමුහුර්ත කිරීම නැවත සකසන්න<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">ආරක්ෂක යතුරක් ලෙස Google Chrome</translation> <translation id="3232754137068452469">වෙබ් යෙදුම</translation> <translation id="3236059992281584593">මිනිත්තු 1ක් ඉතිරියි</translation> <translation id="3244271242291266297">MM</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb index 4009a1d9..a7a748f1 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sk.xtb
@@ -300,6 +300,7 @@ <translation id="3211426585530211793">Záložka <ph name="ITEM_TITLE" /> bola odstránená</translation> <translation id="3211503082155944789">Počet neprečítaných strán: <ph name="READING_LIST_COUNT" /></translation> <translation id="321773570071367578">Ak ste zabudli prístupovú frázu alebo chcete toto nastavenie zmeniť, <ph name="BEGIN_LINK" />resetujte synchronizáciu<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">Google Chrome ako bezpečnostný kľúč</translation> <translation id="3232754137068452469">Webová aplikácia</translation> <translation id="3236059992281584593">Zostáva: 1 min</translation> <translation id="3244271242291266297">MM</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 db5f2bc..e47832e 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
@@ -300,6 +300,7 @@ <translation id="3211426585530211793">Izbrisano: <ph name="ITEM_TITLE" /></translation> <translation id="3211503082155944789">Št. neprebranih strani: <ph name="READING_LIST_COUNT" /></translation> <translation id="321773570071367578">Če ste pozabili geslo ali želite spremeniti to nastavitev, <ph name="BEGIN_LINK" />ponastavite sinhronizacijo<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">Google Chrome kot varnostni ključ</translation> <translation id="3232754137068452469">Spletna aplikacija</translation> <translation id="3236059992281584593">Še 1 min</translation> <translation id="3244271242291266297">MM</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 8f9ea50e..0adce1d 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
@@ -300,6 +300,7 @@ <translation id="3211426585530211793">Umefuta <ph name="ITEM_TITLE" /></translation> <translation id="3211503082155944789">Kurasa <ph name="READING_LIST_COUNT" /> ambazo hujasoma</translation> <translation id="321773570071367578">Ikiwa umesahau kauli yako ya siri au ungependa kubadilisha mipangilio hii, <ph name="BEGIN_LINK" />fanya usawazishaji upya<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">Google Chrome kama Ufunguo wa Usalama</translation> <translation id="3232754137068452469">Programu ya Wavuti</translation> <translation id="3236059992281584593">Imesalia dakika 1</translation> <translation id="3244271242291266297">MW</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb index 2c21503..06115e60 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ta.xtb
@@ -300,6 +300,7 @@ <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> நீக்கப்பட்டது</translation> <translation id="3211503082155944789">படிக்காத பக்கங்கள்: <ph name="READING_LIST_COUNT" /></translation> <translation id="321773570071367578">கடவுச்சொற்றொடரை மறந்துவிட்டால் அல்லது இந்த அமைப்பை மாற்ற விரும்பினால், <ph name="BEGIN_LINK" />ஒத்திசைவை மீட்டமைக்கவும்<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">Google Chromeமைப் பாதுகாப்பு விசையாகப் பயன்படுத்தும் வசதி</translation> <translation id="3232754137068452469">இணைய ஆப்ஸ்</translation> <translation id="3236059992281584593">1 நிமிடம் மீதமுள்ளது</translation> <translation id="3244271242291266297">MM</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 5b59049..bfdffca 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
@@ -300,6 +300,7 @@ <translation id="3211426585530211793"><ph name="ITEM_TITLE" /> silindi</translation> <translation id="3211503082155944789"><ph name="READING_LIST_COUNT" /> okunmamış sayfa</translation> <translation id="321773570071367578">Parolanızı unuttuysanız veya bu ayarı değiştirmek istiyorsanız <ph name="BEGIN_LINK" />senkronizasyonu sıfırlayın<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">Güvenlik Anahtarı olarak Google Chrome</translation> <translation id="3232754137068452469">Web Uygulaması</translation> <translation id="3236059992281584593">1 dk. kaldı</translation> <translation id="3244271242291266297">AA</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb index 3daa0470..9b48a07c 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_vi.xtb
@@ -300,6 +300,7 @@ <translation id="3211426585530211793">Đã xóa <ph name="ITEM_TITLE" /></translation> <translation id="3211503082155944789"><ph name="READING_LIST_COUNT" /> trang chưa đọc</translation> <translation id="321773570071367578">Nếu bạn quên cụm mật khẩu hoặc muốn thay đổi cài đặt này, hãy <ph name="BEGIN_LINK" />đặt lại đồng bộ hóa<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">Dùng Google Chrome làm khóa bảo mật</translation> <translation id="3232754137068452469">Ứng dụng web</translation> <translation id="3236059992281584593">Còn 1 phút</translation> <translation id="3244271242291266297">MM</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb index 5d42260..b2a8ebe 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-CN.xtb
@@ -300,6 +300,7 @@ <translation id="3211426585530211793">已删除“<ph name="ITEM_TITLE" />”</translation> <translation id="3211503082155944789"><ph name="READING_LIST_COUNT" /> 个未读页面</translation> <translation id="321773570071367578">如果您忘记了密码或想更改此设置,请<ph name="BEGIN_LINK" />重置同步设置<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">使用 Google Chrome 作为安全密钥</translation> <translation id="3232754137068452469">网络应用</translation> <translation id="3236059992281584593">还剩 1 分钟</translation> <translation id="3244271242291266297">MM</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 6dcc75d..2b3cd7b2 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
@@ -261,7 +261,7 @@ <translation id="2893180576842394309">Google 可能會使用你的歷史記錄,為你提供個人化的搜尋服務和其他各項 Google 服務</translation> <translation id="2898264748040935573">編輯已儲存的密碼</translation> <translation id="2900528713135656174">建立活動</translation> -<translation id="2901411048554510387">顯示「<ph name="WEBSITE_TITLE" />」的建議項目</translation> +<translation id="2901411048554510387">此處顯示的是與「<ph name="WEBSITE_TITLE" />」相關的建議</translation> <translation id="2904414404539560095">要共用分頁的裝置清單已開啟,顯示於整個畫面。</translation> <translation id="2905036901251765993">如要與附近的使用者分享,請讓對方掃描這個 QR 圖碼</translation> <translation id="2909615210195135082">Google 通知平台</translation> @@ -300,6 +300,7 @@ <translation id="3211426585530211793">已刪除「<ph name="ITEM_TITLE" />」</translation> <translation id="3211503082155944789"><ph name="READING_LIST_COUNT" /> 個未讀網頁</translation> <translation id="321773570071367578">如果您忘記通關密語,或是想變更這項設定,請<ph name="BEGIN_LINK" />重設同步功能<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">使用 Google Chrome 做為安全金鑰</translation> <translation id="3232754137068452469">網頁應用程式</translation> <translation id="3236059992281584593">還剩 1 分鐘</translation> <translation id="3244271242291266297">月</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb index de62a39..4d33550 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zu.xtb
@@ -300,6 +300,7 @@ <translation id="3211426585530211793">Kususwe i-<ph name="ITEM_TITLE" /></translation> <translation id="3211503082155944789">amakhasi angafundiwe angu-<ph name="READING_LIST_COUNT" /></translation> <translation id="321773570071367578">Uma ukhohlwa umushwana wakho wokungena noma ufuna ukushintsha lesi silungiselelo, <ph name="BEGIN_LINK" />setha kabusha ukuvumelanisa<ph name="END_LINK" /></translation> +<translation id="3227557059438308877">I-Google Chrome Njengokhiye Wokuqinisekisa Ubunikazi</translation> <translation id="3232754137068452469">Uhlelo lokusebenza lwewebhu</translation> <translation id="3236059992281584593">1 iminithi elisele</translation> <translation id="3244271242291266297">MM</translation>
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 d4549d87..918e342 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
@@ -24,8 +24,6 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/app_context_menu_delegate.h" #include "chrome/browser/ui/app_list/app_list_controller_delegate.h" -#include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" -#include "chrome/browser/ui/app_list/arc/arc_app_utils.h" #include "chrome/browser/ui/app_list/extension_app_utils.h" #include "chrome/browser/ui/chrome_pages.h" #include "chrome/browser/ui/webui/settings/chromeos/app_management/app_management_uma.h" @@ -171,7 +169,7 @@ if (command_id >= ash::LAUNCH_APP_SHORTCUT_FIRST && command_id <= ash::LAUNCH_APP_SHORTCUT_LAST) { - ExecuteArcShortcutCommand(command_id); + ExecutePublisherContextMenuCommand(command_id); return; } @@ -274,7 +272,6 @@ static_cast<ash::CommandId>(menu_items->items[i]->command_id), menu_items->items[i]->string_id); } else { - DCHECK_EQ(apps::mojom::AppType::kArc, app_type_); apps::PopulateItemFromMojoMenuItems(std::move(menu_items->items[i]), menu_model.get(), app_shortcut_items_.get()); @@ -354,14 +351,17 @@ } } -void AppServiceContextMenu::ExecuteArcShortcutCommand(int command_id) { +void AppServiceContextMenu::ExecutePublisherContextMenuCommand(int command_id) { DCHECK(command_id >= ash::LAUNCH_APP_SHORTCUT_FIRST && command_id <= ash::LAUNCH_APP_SHORTCUT_LAST); const size_t index = command_id - ash::LAUNCH_APP_SHORTCUT_FIRST; DCHECK(app_shortcut_items_); DCHECK_LT(index, app_shortcut_items_->size()); - arc::ExecuteArcShortcutCommand(profile(), app_id(), - app_shortcut_items_->at(index).shortcut_id, - controller()->GetAppListDisplayId()); + apps::AppServiceProxy* proxy = + apps::AppServiceProxyFactory::GetForProfile(profile()); + + proxy->ExecuteContextMenuCommand(app_id(), command_id, + app_shortcut_items_->at(index).shortcut_id, + controller()->GetAppListDisplayId()); }
diff --git a/chrome/browser/ui/app_list/app_service/app_service_context_menu.h b/chrome/browser/ui/app_list/app_service/app_service_context_menu.h index ff44ffa..a746579 100644 --- a/chrome/browser/ui/app_list/app_service/app_service_context_menu.h +++ b/chrome/browser/ui/app_list/app_service/app_service_context_menu.h
@@ -50,7 +50,7 @@ void SetLaunchType(int command_id); - void ExecuteArcShortcutCommand(int command_id); + void ExecutePublisherContextMenuCommand(int command_id); apps::mojom::AppType app_type_; @@ -60,6 +60,8 @@ std::unique_ptr<extensions::ContextMenuMatcher> extension_menu_items_; // Caches the app shortcut items. + // TODO(crbug.com/1140356): Extract arc::ArcAppShortcutItems class as public + // apps::AppShortcutItems. std::unique_ptr<arc::ArcAppShortcutItems> app_shortcut_items_; base::WeakPtrFactory<AppServiceContextMenu> weak_ptr_factory_{this};
diff --git a/chrome/browser/ui/ash/launcher/app_service/app_service_shelf_context_menu.cc b/chrome/browser/ui/ash/launcher/app_service/app_service_shelf_context_menu.cc index d787524..f79c4ac 100644 --- a/chrome/browser/ui/ash/launcher/app_service/app_service_shelf_context_menu.cc +++ b/chrome/browser/ui/ash/launcher/app_service/app_service_shelf_context_menu.cc
@@ -31,7 +31,6 @@ #include "chrome/browser/ui/app_list/app_context_menu_delegate.h" #include "chrome/browser/ui/app_list/app_list_controller_delegate.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" -#include "chrome/browser/ui/app_list/arc/arc_app_utils.h" #include "chrome/browser/ui/app_list/extension_app_utils.h" #include "chrome/browser/ui/ash/launcher/arc_app_shelf_id.h" #include "chrome/browser/ui/ash/launcher/browser_shortcut_launcher_item_controller.h" @@ -202,7 +201,7 @@ if (command_id >= ash::LAUNCH_APP_SHORTCUT_FIRST && command_id <= ash::LAUNCH_APP_SHORTCUT_LAST) { - ExecuteArcShortcutCommand(command_id); + ExecutePublisherContextMenuCommand(command_id); return; } @@ -293,7 +292,7 @@ if (ShouldAddPinMenu()) AddPinMenu(menu_model.get()); - size_t arc_shortcut_index = menu_items->items.size(); + size_t shortcut_index = menu_items->items.size(); for (size_t i = index; i < menu_items->items.size(); i++) { // For Chrome browser, add the close item before the app info item. if (item().id.app_id == extension_misc::kChromeAppId && @@ -307,17 +306,23 @@ static_cast<ash::CommandId>(menu_items->items[i]->command_id), menu_items->items[i]->string_id); } else { - // All ARC shortcut menu items are appended at the end, so break out - // of the loop and continue processing ARC shortcut menu items in - // BuildArcAppShortcutsMenu. - arc_shortcut_index = i; + // All shortcut menu items are appended at the end, so break out + // of the loop and continue processing shortcut menu items in + // BuildAppShortcutsMenu and BuildArcAppShortcutsMenu. + shortcut_index = i; break; } } if (app_type_ == apps::mojom::AppType::kArc) { BuildArcAppShortcutsMenu(std::move(menu_items), std::move(menu_model), - std::move(callback), arc_shortcut_index); + std::move(callback), shortcut_index); + return; + } + + if (app_type_ == apps::mojom::AppType::kWeb) { + BuildAppShortcutsMenu(std::move(menu_items), std::move(menu_model), + std::move(callback), shortcut_index); return; } @@ -349,6 +354,20 @@ item().id.app_id, menu_model, menu_model->GetItemCount() - index, index); } +void AppServiceShelfContextMenu::BuildAppShortcutsMenu( + apps::mojom::MenuItemsPtr menu_items, + std::unique_ptr<ui::SimpleMenuModel> menu_model, + GetMenuModelCallback callback, + size_t shortcut_index) { + app_shortcut_items_ = std::make_unique<arc::ArcAppShortcutItems>(); + for (size_t i = shortcut_index; i < menu_items->items.size(); i++) { + apps::PopulateItemFromMojoMenuItems(std::move(menu_items->items[i]), + menu_model.get(), + app_shortcut_items_.get()); + } + std::move(callback).Run(std::move(menu_model)); +} + void AppServiceShelfContextMenu::BuildArcAppShortcutsMenu( apps::mojom::MenuItemsPtr menu_items, std::unique_ptr<ui::SimpleMenuModel> menu_model, @@ -383,13 +402,8 @@ } } - app_shortcut_items_ = std::make_unique<arc::ArcAppShortcutItems>(); - for (size_t i = arc_shortcut_index; i < menu_items->items.size(); i++) { - apps::PopulateItemFromMojoMenuItems(std::move(menu_items->items[i]), - menu_model.get(), - app_shortcut_items_.get()); - } - std::move(callback).Run(std::move(menu_model)); + BuildAppShortcutsMenu(std::move(menu_items), std::move(menu_model), + std::move(callback), arc_shortcut_index); } void AppServiceShelfContextMenu::BuildCrostiniAppMenu( @@ -546,14 +560,18 @@ } } -void AppServiceShelfContextMenu::ExecuteArcShortcutCommand(int command_id) { +void AppServiceShelfContextMenu::ExecutePublisherContextMenuCommand( + int command_id) { DCHECK(command_id >= ash::LAUNCH_APP_SHORTCUT_FIRST && command_id <= ash::LAUNCH_APP_SHORTCUT_LAST); size_t index = command_id - ash::LAUNCH_APP_SHORTCUT_FIRST; DCHECK(app_shortcut_items_); DCHECK_LT(index, app_shortcut_items_->size()); - arc::ExecuteArcShortcutCommand(controller()->profile(), item().id.app_id, - app_shortcut_items_->at(index).shortcut_id, - display_id()); + apps::AppServiceProxy* proxy = + apps::AppServiceProxyFactory::GetForProfile(controller()->profile()); + + proxy->ExecuteContextMenuCommand(item().id.app_id, command_id, + app_shortcut_items_->at(index).shortcut_id, + display_id()); }
diff --git a/chrome/browser/ui/ash/launcher/app_service/app_service_shelf_context_menu.h b/chrome/browser/ui/ash/launcher/app_service/app_service_shelf_context_menu.h index 5c37e07..a9817f7 100644 --- a/chrome/browser/ui/ash/launcher/app_service/app_service_shelf_context_menu.h +++ b/chrome/browser/ui/ash/launcher/app_service/app_service_shelf_context_menu.h
@@ -45,8 +45,13 @@ // Build additional extension app menu items. void BuildExtensionAppShortcutsMenu(ui::SimpleMenuModel* menu_model); - // Build additional ARC app shortcuts menu items. - // TODO(crbug.com/1038487): consider merging into AppService. + // Build additional app shortcuts menu items. + void BuildAppShortcutsMenu(apps::mojom::MenuItemsPtr menu_items, + std::unique_ptr<ui::SimpleMenuModel> menu_model, + GetMenuModelCallback callback, + size_t shortcut_index); + + // Build ARC-specific app shortcuts menu items. void BuildArcAppShortcutsMenu(apps::mojom::MenuItemsPtr menu_items, std::unique_ptr<ui::SimpleMenuModel> menu_model, GetMenuModelCallback callback, @@ -72,7 +77,7 @@ bool ShouldAddPinMenu(); - void ExecuteArcShortcutCommand(int command_id); + void ExecutePublisherContextMenuCommand(int command_id); apps::mojom::AppType app_type_; @@ -80,6 +85,8 @@ std::unique_ptr<ui::SimpleMenuModel> submenu_; // Caches the app shortcut items. + // TODO(crbug.com/1140356): Extract arc::ArcAppShortcutItems class as public + // apps::AppShortcutItems. std::unique_ptr<arc::ArcAppShortcutItems> app_shortcut_items_; std::unique_ptr<extensions::ContextMenuMatcher> extension_menu_items_;
diff --git a/chrome/browser/ui/autofill/payments/save_card_bubble_controller.h b/chrome/browser/ui/autofill/payments/save_card_bubble_controller.h index 6c562087..c21c3339 100644 --- a/chrome/browser/ui/autofill/payments/save_card_bubble_controller.h +++ b/chrome/browser/ui/autofill/payments/save_card_bubble_controller.h
@@ -84,9 +84,9 @@ // Interaction. // OnSyncPromoAccepted is called when the Dice Sign-in promo is clicked. - virtual void OnSyncPromoAccepted(const AccountInfo& account, - signin_metrics::AccessPoint access_point, - bool is_default_promo_account) = 0; + virtual void OnSyncPromoAccepted( + const AccountInfo& account, + signin_metrics::AccessPoint access_point) = 0; // OnSaveButton takes in a struct representing the cardholder name, // expiration date month and expiration date year confirmed/entered by the // user if they were requested, or struct with empty strings otherwise.
diff --git a/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.cc b/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.cc index 0aad1304..eb1d10e 100644 --- a/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.cc +++ b/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.cc
@@ -349,13 +349,12 @@ void SaveCardBubbleControllerImpl::OnSyncPromoAccepted( const AccountInfo& account, - signin_metrics::AccessPoint access_point, - bool is_default_promo_account) { + signin_metrics::AccessPoint access_point) { DCHECK(current_bubble_type_ == BubbleType::SIGN_IN_PROMO || current_bubble_type_ == BubbleType::MANAGE_CARDS); Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); signin_ui_util::EnableSyncFromPromo(browser, account, access_point, - is_default_promo_account); + /*is_default_promo_account=*/true); } void SaveCardBubbleControllerImpl::OnSaveButton(
diff --git a/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.h b/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.h index a792278..36bfb7a 100644 --- a/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.h +++ b/chrome/browser/ui/autofill/payments/save_card_bubble_controller_impl.h
@@ -130,8 +130,7 @@ // TODO(crbug.com/864702): Don't show promo if user is a butter user. bool ShouldShowSignInPromo() const override; void OnSyncPromoAccepted(const AccountInfo& account, - signin_metrics::AccessPoint access_point, - bool is_default_promo_account) override; + signin_metrics::AccessPoint access_point) override; void OnSaveButton(const AutofillClient::UserProvidedCardDetails& user_provided_card_details) override; void OnCancelButton() override;
diff --git a/chrome/browser/ui/bookmarks/bookmark_bubble_sign_in_delegate.cc b/chrome/browser/ui/bookmarks/bookmark_bubble_sign_in_delegate.cc index de28533..48e8fae9 100644 --- a/chrome/browser/ui/bookmarks/bookmark_bubble_sign_in_delegate.cc +++ b/chrome/browser/ui/bookmarks/bookmark_bubble_sign_in_delegate.cc
@@ -26,13 +26,12 @@ BrowserList::RemoveObserver(this); } -void BookmarkBubbleSignInDelegate::OnEnableSync(const AccountInfo& account, - bool is_default_promo_account) { +void BookmarkBubbleSignInDelegate::OnEnableSync(const AccountInfo& account) { EnsureBrowser(); signin_ui_util::EnableSyncFromPromo( browser_, account, signin_metrics::AccessPoint::ACCESS_POINT_BOOKMARK_BUBBLE, - is_default_promo_account); + /*is_default_promo_account=*/true); // TODO(msarda): Close the bookmarks bubble once the enable sync flow has // started.
diff --git a/chrome/browser/ui/bookmarks/bookmark_bubble_sign_in_delegate.h b/chrome/browser/ui/bookmarks/bookmark_bubble_sign_in_delegate.h index 3ae703af..f556694 100644 --- a/chrome/browser/ui/bookmarks/bookmark_bubble_sign_in_delegate.h +++ b/chrome/browser/ui/bookmarks/bookmark_bubble_sign_in_delegate.h
@@ -24,8 +24,7 @@ ~BookmarkBubbleSignInDelegate() override; // BubbleSyncPromoDelegate: - void OnEnableSync(const AccountInfo& account, - bool is_default_promo_account) override; + void OnEnableSync(const AccountInfo& account) override; // BrowserListObserver: void OnBrowserRemoved(Browser* browser) override;
diff --git a/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller.cc b/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller.cc index 91e35dc..84df2a6 100644 --- a/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller.cc +++ b/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller.cc
@@ -25,12 +25,11 @@ } void SignInPromoBubbleController::OnSignInToChromeClicked( - const AccountInfo& account, - bool is_default_promo_account) { + const AccountInfo& account) { // Enabling sync for an existing account and starting a new sign-in are // triggered by the user interacting with the sign-in promo. GetProfile()->GetPrefs()->SetBoolean( password_manager::prefs::kWasSignInPasswordPromoClicked, true); if (delegate_) - delegate_->EnableSync(account, is_default_promo_account); + delegate_->EnableSync(account); }
diff --git a/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller.h b/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller.h index ef54600..0fec814 100644 --- a/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller.h +++ b/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller.h
@@ -22,8 +22,7 @@ // Called by the view when the "Sign in" button or the "Sync to" button in the // promo bubble is clicked. - void OnSignInToChromeClicked(const AccountInfo& account, - bool is_default_promo_account); + void OnSignInToChromeClicked(const AccountInfo& account); private: // A bridge to ManagePasswordsUIController instance.
diff --git a/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller_unittest.cc b/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller_unittest.cc index b7b44ce..bf7fb019 100644 --- a/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller_unittest.cc +++ b/chrome/browser/ui/passwords/bubble_controllers/sign_in_promo_bubble_controller_unittest.cc
@@ -73,10 +73,9 @@ account.account_id = CoreAccountId("foo_account_id"); account.gaia = "foo_gaia_id"; account.email = "foo@bar.com"; - EXPECT_CALL(*delegate(), EnableSync(AccountEq(account), false)); + EXPECT_CALL(*delegate(), EnableSync(AccountEq(account))); - controller()->OnSignInToChromeClicked(account, - false /* is_default_promo_account */); + controller()->OnSignInToChromeClicked(account); EXPECT_TRUE(profile()->GetPrefs()->GetBoolean( password_manager::prefs::kWasSignInPasswordPromoClicked)); }
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc index 825b52d..0cab0ba 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.cc
@@ -623,13 +623,12 @@ password_manager::LogPasswordCheckReferrer(referrer); } -void ManagePasswordsUIController::EnableSync(const AccountInfo& account, - bool is_default_promo_account) { +void ManagePasswordsUIController::EnableSync(const AccountInfo& account) { Browser* browser = chrome::FindBrowserWithWebContents(web_contents()); signin_ui_util::EnableSyncFromPromo( browser, account, signin_metrics::AccessPoint::ACCESS_POINT_PASSWORD_BUBBLE, - is_default_promo_account); + /*is_default_promo_account=*/true); } void ManagePasswordsUIController::OnDialogHidden() {
diff --git a/chrome/browser/ui/passwords/manage_passwords_ui_controller.h b/chrome/browser/ui/passwords/manage_passwords_ui_controller.h index 9736282..35774c44 100644 --- a/chrome/browser/ui/passwords/manage_passwords_ui_controller.h +++ b/chrome/browser/ui/passwords/manage_passwords_ui_controller.h
@@ -158,8 +158,7 @@ password_manager::ManagePasswordsReferrer referrer) override; void NavigateToPasswordManagerSettingsPage( password_manager::ManagePasswordsReferrer referrer) override; - void EnableSync(const AccountInfo& account, - bool is_default_promo_account) override; + void EnableSync(const AccountInfo& account) override; void OnDialogHidden() override; bool AuthenticateUser() override; void AuthenticateUserForAccountStoreOptInAndSavePassword(
diff --git a/chrome/browser/ui/passwords/passwords_model_delegate.h b/chrome/browser/ui/passwords/passwords_model_delegate.h index 8be215f..1af6aad6 100644 --- a/chrome/browser/ui/passwords/passwords_model_delegate.h +++ b/chrome/browser/ui/passwords/passwords_model_delegate.h
@@ -145,8 +145,7 @@ password_manager::PasswordCheckReferrer referrer) = 0; // Called by the view when the "Sign in to Chrome" button or the "Sync to" // button in the promo bubble are clicked. - virtual void EnableSync(const AccountInfo& account, - bool is_default_promo_account) = 0; + virtual void EnableSync(const AccountInfo& account) = 0; // Called from the dialog controller when the dialog is hidden. virtual void OnDialogHidden() = 0;
diff --git a/chrome/browser/ui/passwords/passwords_model_delegate_mock.h b/chrome/browser/ui/passwords/passwords_model_delegate_mock.h index 247e05a..fec611ef 100644 --- a/chrome/browser/ui/passwords/passwords_model_delegate_mock.h +++ b/chrome/browser/ui/passwords/passwords_model_delegate_mock.h
@@ -89,10 +89,7 @@ NavigateToPasswordCheckup, (password_manager::PasswordCheckReferrer), (override)); - MOCK_METHOD(void, - EnableSync, - (const AccountInfo& account, bool is_default_promo_account), - (override)); + MOCK_METHOD(void, EnableSync, (const AccountInfo& account), (override)); MOCK_METHOD(void, OnDialogHidden, (), (override)); MOCK_METHOD(bool, AuthenticateUser, (), (override)); MOCK_METHOD(void,
diff --git a/chrome/browser/ui/passwords/settings/password_manager_presenter.cc b/chrome/browser/ui/passwords/settings/password_manager_presenter.cc index 1f4bb8c2..0252a134 100644 --- a/chrome/browser/ui/passwords/settings/password_manager_presenter.cc +++ b/chrome/browser/ui/passwords/settings/password_manager_presenter.cc
@@ -377,7 +377,7 @@ } void PasswordManagerPresenter::MovePasswordToAccountStore( - const std::string& sort_key, + const std::vector<std::string>& sort_keys, password_manager::PasswordManagerClient* client) { if (!client->GetPasswordFeatureManager()->IsOptedInForAccountStorage() || ProfileSyncServiceFactory::GetForProfile(password_view_->GetProfile()) @@ -385,25 +385,27 @@ return; } - auto it = password_map_.find(sort_key); - if (it == password_map_.end()) - return; + for (const std::string& sort_key : sort_keys) { + auto it = password_map_.find(sort_key); + if (it == password_map_.end()) + continue; - // MovePasswordToAccountStoreHelper takes care of moving the entire - // equivalence class, so passing the first element is fine. - const password_manager::PasswordForm& form = *(it->second[0]); + // MovePasswordToAccountStoreHelper takes care of moving the entire + // equivalence class, so passing the first element is fine. + const password_manager::PasswordForm& form = *(it->second[0]); - // Insert nullptr first to obtain the iterator passed to the callback. - MovePasswordToAccountStoreHelperList::iterator helper_it = - move_to_account_helpers_.insert(move_to_account_helpers_.begin(), - nullptr); - // The presenter outlives the helper so it's safe to use base::Unretained. - *helper_it = std::make_unique< - PasswordManagerPresenter::MovePasswordToAccountStoreHelper>( - form, client, - base::BindOnce( - &PasswordManagerPresenter::OnMovePasswordToAccountCompleted, - base::Unretained(this), helper_it)); + // Insert nullptr first to obtain the iterator passed to the callback. + MovePasswordToAccountStoreHelperList::iterator helper_it = + move_to_account_helpers_.insert(move_to_account_helpers_.begin(), + nullptr); + // The presenter outlives the helper so it's safe to use base::Unretained. + *helper_it = std::make_unique< + PasswordManagerPresenter::MovePasswordToAccountStoreHelper>( + form, client, + base::BindOnce( + &PasswordManagerPresenter::OnMovePasswordToAccountCompleted, + base::Unretained(this), helper_it)); + } } void PasswordManagerPresenter::OnMovePasswordToAccountCompleted(
diff --git a/chrome/browser/ui/passwords/settings/password_manager_presenter.h b/chrome/browser/ui/passwords/settings/password_manager_presenter.h index ee7d1801..449017c 100644 --- a/chrome/browser/ui/passwords/settings/password_manager_presenter.h +++ b/chrome/browser/ui/passwords/settings/password_manager_presenter.h
@@ -95,12 +95,13 @@ // Undoes the last saved password or exception removal. void UndoRemoveSavedPasswordOrException(); - // Moves a password stored in the profile store to the account store. Results - // in a no-op if any of these is true: |sort_key| is invalid, |sort_key| - // corresponds to a password already in the account store, or the user is not - // using the account-scoped password storage. + // Moves a list of passwords stored in the profile store to the account store. + // For each password to move, the result is a no-op if any of these is true: + // |sort_key| is invalid, |sort_key| corresponds to a password already in the + // account store, or the user is not using the account-scoped password + // storage. void MovePasswordToAccountStore( - const std::string& sort_key, + const std::vector<std::string>& sort_keys, password_manager::PasswordManagerClient* client); #if !defined(OS_ANDROID)
diff --git a/chrome/browser/ui/passwords/settings/password_manager_presenter_unittest.cc b/chrome/browser/ui/passwords/settings/password_manager_presenter_unittest.cc index a92d7aa9..29ff484 100644 --- a/chrome/browser/ui/passwords/settings/password_manager_presenter_unittest.cc +++ b/chrome/browser/ui/passwords/settings/password_manager_presenter_unittest.cc
@@ -503,20 +503,24 @@ TestMovePasswordToAccountStore) { base::HistogramTester histogram_tester; - // Fill the profile store with two entries in the same equivalence class. + // Fill the profile store with 3 entries of which 2 are in the same + // equivalence class. password_manager::PasswordForm password = AddPasswordEntry(GURL(kExampleCom), kUsername, kPassword); AddPasswordEntry(GURL(kExampleCom).Resolve("someOtherPath"), kUsername, kPassword); + password_manager::PasswordForm password2 = + AddPasswordEntry(GURL(kExampleCom), kUsername2, kPassword); // Since there are 2 stores, SetPasswordList() and SetPasswordExceptionList() // are called twice. EXPECT_CALL(GetUIController(), SetPasswordList).Times(2); EXPECT_CALL(GetUIController(), SetPasswordExceptionList).Times(2); UpdatePasswordLists(); - ASSERT_THAT( - GetUsernamesAndPasswords( - GetPasswordsInStoreForRealm(*profile_store(), kExampleCom)), - ElementsAre(Pair(kUsername, kPassword), Pair(kUsername, kPassword))); + ASSERT_THAT(GetUsernamesAndPasswords( + GetPasswordsInStoreForRealm(*profile_store(), kExampleCom)), + UnorderedElementsAre(Pair(kUsername, kPassword), + Pair(kUsername, kPassword), + Pair(kUsername2, kPassword))); ASSERT_THAT(GetUsernamesAndPasswords( GetPasswordsInStoreForRealm(*account_store(), kExampleCom)), IsEmpty()); @@ -524,26 +528,29 @@ // Move |password| to account and wait for stores to be updated. GetUIController().GetPasswordManagerPresenter()->MovePasswordToAccountStore( - password_manager::CreateSortKey(password), client()); + {password_manager::CreateSortKey(password), + password_manager::CreateSortKey(password2)}, + client()); PasswordStoreWaiter profile_store_waiter(profile_store()); PasswordStoreWaiter account_store_waiter(account_store()); - // Both passwords should have moved. + // All passwords should have moved. EXPECT_CALL(GetUIController(), SetPasswordList).Times(2); EXPECT_CALL(GetUIController(), SetPasswordExceptionList).Times(2); UpdatePasswordLists(); EXPECT_THAT(GetPasswordsInStoreForRealm(*profile_store(), kExampleCom), IsEmpty()); - EXPECT_THAT( - GetUsernamesAndPasswords( - GetPasswordsInStoreForRealm(*account_store(), kExampleCom)), - ElementsAre(Pair(kUsername, kPassword), Pair(kUsername, kPassword))); + EXPECT_THAT(GetUsernamesAndPasswords( + GetPasswordsInStoreForRealm(*account_store(), kExampleCom)), + UnorderedElementsAre(Pair(kUsername, kPassword), + Pair(kUsername, kPassword), + Pair(kUsername2, kPassword))); histogram_tester.ExpectUniqueSample( "PasswordManager.AccountStorage.MoveToAccountStoreFlowAccepted", password_manager::metrics_util::MoveToAccountStoreTrigger:: kExplicitlyTriggeredInSettings, - 1); + 2); } } // namespace
diff --git a/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle.cc b/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle.cc index 9b53f32..d73c50d 100644 --- a/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle.cc +++ b/chrome/browser/ui/passwords/well_known_change_password_navigation_throttle.cc
@@ -144,7 +144,7 @@ // redirects. network::ResourceRequest::TrustedParams trusted_params; trusted_params.isolation_info = net::IsolationInfo::CreatePartial( - net::IsolationInfo::RedirectMode::kUpdateNothing, + net::IsolationInfo::RequestType::kOther, navigation_handle()->GetIsolationInfo().network_isolation_key()); well_known_change_password_state_.FetchNonExistingResource( url_loader_factory.get(), request_url_,
diff --git a/chrome/browser/ui/sync/bubble_sync_promo_delegate.h b/chrome/browser/ui/sync/bubble_sync_promo_delegate.h index 1586890..44ba85e4 100644 --- a/chrome/browser/ui/sync/bubble_sync_promo_delegate.h +++ b/chrome/browser/ui/sync/bubble_sync_promo_delegate.h
@@ -16,8 +16,7 @@ // the browser sign-in page if |account| is empty. // |is_default_promo_account| is true if |account| corresponds to the default // account in the promo. It is ignored if |account| is empty. - virtual void OnEnableSync(const AccountInfo& account, - bool is_default_promo_account) = 0; + virtual void OnEnableSync(const AccountInfo& account) = 0; }; #endif // CHROME_BROWSER_UI_SYNC_BUBBLE_SYNC_PROMO_DELEGATE_H_
diff --git a/chrome/browser/ui/views/accessibility/caret_browsing_dialog_delegate.cc b/chrome/browser/ui/views/accessibility/caret_browsing_dialog_delegate.cc index 22ae9f5..770273e 100644 --- a/chrome/browser/ui/views/accessibility/caret_browsing_dialog_delegate.cc +++ b/chrome/browser/ui/views/accessibility/caret_browsing_dialog_delegate.cc
@@ -81,10 +81,17 @@ base::UserMetricsAction("Accessibility.CaretBrowsing.CancelDialog")); }; SetCancelCallback(base::BindOnce(on_cancel)); - - SetModalType(ui::MODAL_TYPE_WINDOW); - set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( - views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH)); } -CaretBrowsingDialogDelegate::~CaretBrowsingDialogDelegate() = default; +CaretBrowsingDialogDelegate::~CaretBrowsingDialogDelegate() {} + +ui::ModalType CaretBrowsingDialogDelegate::GetModalType() const { + return ui::MODAL_TYPE_WINDOW; +} + +gfx::Size CaretBrowsingDialogDelegate::CalculatePreferredSize() const { + const int width = ChromeLayoutProvider::Get()->GetDistanceMetric( + views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH) - + margins().width(); + return gfx::Size(width, GetHeightForWidth(width)); +}
diff --git a/chrome/browser/ui/views/accessibility/caret_browsing_dialog_delegate.h b/chrome/browser/ui/views/accessibility/caret_browsing_dialog_delegate.h index 7f9c8d4..a0a07a42 100644 --- a/chrome/browser/ui/views/accessibility/caret_browsing_dialog_delegate.h +++ b/chrome/browser/ui/views/accessibility/caret_browsing_dialog_delegate.h
@@ -26,7 +26,11 @@ delete; ~CaretBrowsingDialogDelegate() override; - PrefService* const pref_service_; + // DialogDelegateView. + ui::ModalType GetModalType() const override; + gfx::Size CalculatePreferredSize() const override; + + PrefService* pref_service_; // Checkbox where the user can say they don't want to be asked when they // toggle caret browsing next time.
diff --git a/chrome/browser/ui/views/arc_app_dialog_view.cc b/chrome/browser/ui/views/arc_app_dialog_view.cc index a250fd72..81e5a86 100644 --- a/chrome/browser/ui/views/arc_app_dialog_view.cc +++ b/chrome/browser/ui/views/arc_app_dialog_view.cc
@@ -56,6 +56,14 @@ void ConfirmOrCancelForTest(bool confirm); private: + // views::WidgetDelegate: + base::string16 GetWindowTitle() const override; + ui::ModalType GetModalType() const override; + bool ShouldShowCloseButton() const override; + + // views::View: + gfx::Size CalculatePreferredSize() const override; + // AppIconLoaderDelegate: void OnAppImageUpdated(const std::string& app_id, const gfx::ImageSkia& image) override; @@ -72,6 +80,7 @@ Profile* const profile_; const std::string app_id_; + const base::string16 window_title_; ArcAppConfirmCallback confirm_callback_; DISALLOW_COPY_AND_ASSIGN(ArcAppDialogView); @@ -91,8 +100,8 @@ ArcAppConfirmCallback confirm_callback) : profile_(profile), app_id_(app_id), + window_title_(window_title), confirm_callback_(std::move(confirm_callback)) { - SetTitle(window_title); SetButtonLabel(ui::DIALOG_BUTTON_OK, confirm_button_text); SetButtonLabel(ui::DIALOG_BUTTON_CANCEL, cancel_button_text); SetAcceptCallback(base::BindOnce(&ArcAppDialogView::OnDialogAccepted, @@ -107,11 +116,6 @@ provider->GetDialogInsetsForContentType(views::TEXT, views::TEXT), provider->GetDistanceMetric(views::DISTANCE_RELATED_CONTROL_HORIZONTAL))); - SetModalType(ui::MODAL_TYPE_WINDOW); - SetShowCloseButton(false); - set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( - views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH)); - auto icon_view = std::make_unique<views::ImageView>(); icon_view->SetPreferredSize(gfx::Size(kArcAppIconSize, kArcAppIconSize)); icon_view_ = AddChildView(std::move(icon_view)); @@ -166,6 +170,18 @@ } } +base::string16 ArcAppDialogView::GetWindowTitle() const { + return window_title_; +} + +ui::ModalType ArcAppDialogView::GetModalType() const { + return ui::MODAL_TYPE_WINDOW; +} + +bool ArcAppDialogView::ShouldShowCloseButton() const { + return false; +} + void ArcAppDialogView::OnDialogAccepted() { // The dialog can either be accepted or cancelled, but never both. DCHECK(confirm_callback_); @@ -178,6 +194,12 @@ std::move(confirm_callback_).Run(false); } +gfx::Size ArcAppDialogView::CalculatePreferredSize() const { + const int default_width = views::LayoutProvider::Get()->GetDistanceMetric( + views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH); + return gfx::Size(default_width, GetHeightForWidth(default_width)); +} + void ArcAppDialogView::OnAppImageUpdated(const std::string& app_id, const gfx::ImageSkia& image) { DCHECK_EQ(app_id, app_id_);
diff --git a/chrome/browser/ui/views/arc_data_removal_dialog_view.cc b/chrome/browser/ui/views/arc_data_removal_dialog_view.cc index 5a5d54c..68c0b6e 100644 --- a/chrome/browser/ui/views/arc_data_removal_dialog_view.cc +++ b/chrome/browser/ui/views/arc_data_removal_dialog_view.cc
@@ -46,6 +46,13 @@ DataRemovalConfirmationCallback confirm_data_removal); ~DataRemovalConfirmationDialog() override; + // views::WidgetDelegate: + base::string16 GetWindowTitle() const override; + ui::ModalType GetModalType() const override; + + // views::View: + gfx::Size CalculatePreferredSize() const override; + // AppIconLoaderDelegate: void OnAppImageUpdated(const std::string& app_id, const gfx::ImageSkia& image) override; @@ -72,7 +79,6 @@ Profile* profile, DataRemovalConfirmationCallback confirm_callback) : profile_(profile), confirm_callback_(std::move(confirm_callback)) { - SetTitle(l10n_util::GetStringUTF16(IDS_ARC_DATA_REMOVAL_CONFIRMATION_TITLE)); SetButtonLabel( ui::DIALOG_BUTTON_OK, l10n_util::GetStringUTF16(IDS_ARC_DATA_REMOVAL_CONFIRMATION_OK_BUTTON)); @@ -84,10 +90,6 @@ SetCancelCallback( base::BindOnce(run_callback, base::Unretained(this), false)); - SetModalType(ui::MODAL_TYPE_WINDOW); - set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( - views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH)); - ChromeLayoutProvider* provider = ChromeLayoutProvider::Get(); std::unique_ptr<views::BoxLayout> layout = std::make_unique<views::BoxLayout>( @@ -128,6 +130,20 @@ g_current_data_removal_confirmation = nullptr; } +base::string16 DataRemovalConfirmationDialog::GetWindowTitle() const { + return l10n_util::GetStringUTF16(IDS_ARC_DATA_REMOVAL_CONFIRMATION_TITLE); +} + +ui::ModalType DataRemovalConfirmationDialog::GetModalType() const { + return ui::MODAL_TYPE_WINDOW; +} + +gfx::Size DataRemovalConfirmationDialog::CalculatePreferredSize() const { + const int default_width = views::LayoutProvider::Get()->GetDistanceMetric( + views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH); + return gfx::Size(default_width, GetHeightForWidth(default_width)); +} + void DataRemovalConfirmationDialog::OnAppImageUpdated( const std::string& app_id, const gfx::ImageSkia& image) {
diff --git a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.cc b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.cc index d2278f5..ba2d258 100644 --- a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.cc +++ b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.cc
@@ -43,10 +43,8 @@ } void SaveCardBubbleViews::SyncPromoDelegate::OnEnableSync( - const AccountInfo& account, - bool is_default_promo_account) { - controller_->OnSyncPromoAccepted(account, access_point_, - is_default_promo_account); + const AccountInfo& account) { + controller_->OnSyncPromoAccepted(account, access_point_); } SaveCardBubbleViews::SaveCardBubbleViews(views::View* anchor_view,
diff --git a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.h b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.h index 1fcf7fc..e8c349e 100644 --- a/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.h +++ b/chrome/browser/ui/views/autofill/payments/save_card_bubble_views.h
@@ -64,8 +64,7 @@ signin_metrics::AccessPoint access_point); // BubbleSyncPromoDelegate: - void OnEnableSync(const AccountInfo& account, - bool is_default_promo_account) override; + void OnEnableSync(const AccountInfo& account) override; private: SaveCardBubbleController* controller_;
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bubble_sign_in_delegate_browsertest.cc b/chrome/browser/ui/views/bookmarks/bookmark_bubble_sign_in_delegate_browsertest.cc index f81a557..91d8b107 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bubble_sign_in_delegate_browsertest.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bubble_sign_in_delegate_browsertest.cc
@@ -63,7 +63,7 @@ void BookmarkBubbleSignInDelegateTest::SignInBrowser(Browser* browser) { std::unique_ptr<BubbleSyncPromoDelegate> delegate; delegate.reset(new BookmarkBubbleSignInDelegate(browser)); - delegate->OnEnableSync(AccountInfo(), false /* is_default_promo_account */); + delegate->OnEnableSync(AccountInfo()); } IN_PROC_BROWSER_TEST_F(BookmarkBubbleSignInDelegateTest, OnSignInLinkClicked) { @@ -141,7 +141,7 @@ browser()->tab_strip_model()->CloseAllTabs(); content::RunAllPendingInMessageLoop(); - delegate->OnEnableSync(AccountInfo(), false /* is_default_promo_account */); + delegate->OnEnableSync(AccountInfo()); int tab_count = extra_browser->tab_strip_model()->count(); // A new tab should have been opened in the extra browser, which should be
diff --git a/chrome/browser/ui/views/chrome_cleaner_dialog_win.cc b/chrome/browser/ui/views/chrome_cleaner_dialog_win.cc index 7de20673..2568129 100644 --- a/chrome/browser/ui/views/chrome_cleaner_dialog_win.cc +++ b/chrome/browser/ui/views/chrome_cleaner_dialog_win.cc
@@ -58,7 +58,6 @@ DCHECK(dialog_controller_); DCHECK(cleaner_controller_); - SetTitle(IDS_CHROME_CLEANUP_PROMPT_TITLE); SetButtonLabel( ui::DIALOG_BUTTON_OK, l10n_util::GetStringUTF16(IDS_CHROME_CLEANUP_PROMPT_REMOVE_BUTTON_LABEL)); @@ -78,11 +77,6 @@ base::Unretained(this), DialogInteractionResult::kClose)); - SetModalType(ui::MODAL_TYPE_WINDOW); - SetShowCloseButton(false); - set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( - views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH)); - ChromeLayoutProvider* layout_provider = ChromeLayoutProvider::Get(); set_margins( layout_provider->GetDialogInsetsForContentType(views::TEXT, views::TEXT)); @@ -123,6 +117,7 @@ DCHECK(browser); DCHECK(!browser_); DCHECK(dialog_controller_); + DCHECK(cleaner_controller_); DCHECK_EQ(safe_browsing::ChromeCleanerController::State::kInfected, cleaner_controller_->state()); @@ -138,6 +133,17 @@ cleaner_controller_->AddObserver(this); } +// WidgetDelegate overrides. + +ui::ModalType ChromeCleanerDialog::GetModalType() const { + return ui::MODAL_TYPE_WINDOW; +} + +base::string16 ChromeCleanerDialog::GetWindowTitle() const { + DCHECK(dialog_controller_); + return l10n_util::GetStringUTF16(IDS_CHROME_CLEANUP_PROMPT_TITLE); +} + views::View* ChromeCleanerDialog::GetInitiallyFocusedView() { // Set focus away from the Remove/OK button to prevent accidental prompt // acceptance if the user is typing as the dialog appears. @@ -145,6 +151,21 @@ return details_button_; } +bool ChromeCleanerDialog::ShouldShowCloseButton() const { + return false; +} + +// View overrides. + +gfx::Size ChromeCleanerDialog::CalculatePreferredSize() const { + const int dialog_width = ChromeLayoutProvider::Get()->GetDistanceMetric( + views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH) - + margins().width(); + return gfx::Size(dialog_width, GetHeightForWidth(dialog_width)); +} + +// safe_browsing::ChromeCleanerController::Observer overrides + void ChromeCleanerDialog::OnIdle( safe_browsing::ChromeCleanerController::IdleReason idle_reason) { Abort();
diff --git a/chrome/browser/ui/views/chrome_cleaner_dialog_win.h b/chrome/browser/ui/views/chrome_cleaner_dialog_win.h index f132d4f..85f5831e 100644 --- a/chrome/browser/ui/views/chrome_cleaner_dialog_win.h +++ b/chrome/browser/ui/views/chrome_cleaner_dialog_win.h
@@ -46,10 +46,16 @@ void Show(Browser* browser); - // views::DialogDelegateView: + // views::WidgetDelegate overrides. + ui::ModalType GetModalType() const override; + base::string16 GetWindowTitle() const override; views::View* GetInitiallyFocusedView() override; + bool ShouldShowCloseButton() const override; - // safe_browsing::ChromeCleanerController::Observer: + // views::View overrides. + gfx::Size CalculatePreferredSize() const override; + + // safe_browsing::ChromeCleanerController::Observer overrides. void OnIdle( safe_browsing::ChromeCleanerController::IdleReason idle_reason) override; void OnScanning() override; @@ -71,7 +77,7 @@ // The pointer will be set to nullptr once the controller has been notified of // user interaction since the controller can delete itself after that point. safe_browsing::ChromeCleanerDialogController* dialog_controller_ = nullptr; - safe_browsing::ChromeCleanerController* const cleaner_controller_; + safe_browsing::ChromeCleanerController* cleaner_controller_ = nullptr; views::LabelButton* details_button_ = nullptr; views::Checkbox* logs_permission_checkbox_ = nullptr;
diff --git a/chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc b/chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc index 757b9d5..8ecc982a 100644 --- a/chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc +++ b/chrome/browser/ui/views/extensions/extension_installed_bubble_view.cc
@@ -135,8 +135,7 @@ void Init() override; // BubbleSyncPromoDelegate: - void OnEnableSync(const AccountInfo& account_info, - bool is_default_promo_account) override; + void OnEnableSync(const AccountInfo& account_info) override; void LinkClicked(); @@ -254,12 +253,11 @@ } } -void ExtensionInstalledBubbleView::OnEnableSync(const AccountInfo& account, - bool is_default_promo_account) { +void ExtensionInstalledBubbleView::OnEnableSync(const AccountInfo& account) { signin_ui_util::EnableSyncFromPromo( browser_, account, signin_metrics::AccessPoint::ACCESS_POINT_EXTENSION_INSTALL_BUBBLE, - is_default_promo_account); + /*is_default_promo_account=*/true); GetWidget()->Close(); }
diff --git a/chrome/browser/ui/views/folder_upload_confirmation_view.cc b/chrome/browser/ui/views/folder_upload_confirmation_view.cc index ce5a4927..fcc2153c 100644 --- a/chrome/browser/ui/views/folder_upload_confirmation_view.cc +++ b/chrome/browser/ui/views/folder_upload_confirmation_view.cc
@@ -22,10 +22,6 @@ std::vector<ui::SelectedFileInfo> selected_files) : callback_(std::move(callback)), selected_files_(std::move(selected_files)) { - SetTitle(l10n_util::GetPluralStringFUTF16( - IDS_CONFIRM_FILE_UPLOAD_TITLE, - base::saturated_cast<int>(selected_files_.size()))); - SetButtonLabel(ui::DIALOG_BUTTON_OK, l10n_util::GetStringUTF16(IDS_CONFIRM_FILE_UPLOAD_OK_BUTTON)); @@ -45,11 +41,6 @@ }, base::Unretained(this))); - SetModalType(ui::MODAL_TYPE_CHILD); - SetShowCloseButton(false); - set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( - views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH)); - SetLayoutManager(std::make_unique<views::FillLayout>()); auto label = std::make_unique<views::Label>( l10n_util::GetStringFUTF16(IDS_CONFIRM_FILE_UPLOAD_TEXT, @@ -80,10 +71,31 @@ web_contents); } +base::string16 FolderUploadConfirmationView::GetWindowTitle() const { + return l10n_util::GetPluralStringFUTF16( + IDS_CONFIRM_FILE_UPLOAD_TITLE, + base::saturated_cast<int>(selected_files_.size())); +} + views::View* FolderUploadConfirmationView::GetInitiallyFocusedView() { return GetCancelButton(); } +bool FolderUploadConfirmationView::ShouldShowCloseButton() const { + return false; +} + +gfx::Size FolderUploadConfirmationView::CalculatePreferredSize() const { + const int width = ChromeLayoutProvider::Get()->GetDistanceMetric( + views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH) - + margins().width(); + return gfx::Size(width, GetHeightForWidth(width)); +} + +ui::ModalType FolderUploadConfirmationView::GetModalType() const { + return ui::MODAL_TYPE_CHILD; +} + void ShowFolderUploadConfirmationDialog( const base::FilePath& path, base::OnceCallback<void(const std::vector<ui::SelectedFileInfo>&)> callback,
diff --git a/chrome/browser/ui/views/folder_upload_confirmation_view.h b/chrome/browser/ui/views/folder_upload_confirmation_view.h index 8c7f6f7..54c2abe 100644 --- a/chrome/browser/ui/views/folder_upload_confirmation_view.h +++ b/chrome/browser/ui/views/folder_upload_confirmation_view.h
@@ -44,11 +44,20 @@ std::vector<ui::SelectedFileInfo> selected_files, content::WebContents* web_contents); + // views::DialogDelegateView: + base::string16 GetWindowTitle() const override; + // It's really important that this dialog *does not* accept by default / // when a user presses enter without looking as we're looking for explicit // approval to share this many files with the site. views::View* GetInitiallyFocusedView() override; + bool ShouldShowCloseButton() const override; + + gfx::Size CalculatePreferredSize() const override; + + ui::ModalType GetModalType() const override; + private: base::OnceCallback<void(const std::vector<ui::SelectedFileInfo>&)> callback_; std::vector<ui::SelectedFileInfo> selected_files_;
diff --git a/chrome/browser/ui/views/passwords/password_sign_in_promo_view.cc b/chrome/browser/ui/views/passwords/password_sign_in_promo_view.cc index 0926452..d2ab8c0f 100644 --- a/chrome/browser/ui/views/passwords/password_sign_in_promo_view.cc +++ b/chrome/browser/ui/views/passwords/password_sign_in_promo_view.cc
@@ -31,9 +31,8 @@ default; void PasswordSignInPromoView::DiceSyncPromoDelegate::OnEnableSync( - const AccountInfo& account, - bool is_default_promo_account) { - controller_->OnSignInToChromeClicked(account, is_default_promo_account); + const AccountInfo& account) { + controller_->OnSignInToChromeClicked(account); } PasswordSignInPromoView::PasswordSignInPromoView(
diff --git a/chrome/browser/ui/views/passwords/password_sign_in_promo_view.h b/chrome/browser/ui/views/passwords/password_sign_in_promo_view.h index 9ea2a343..202e612 100644 --- a/chrome/browser/ui/views/passwords/password_sign_in_promo_view.h +++ b/chrome/browser/ui/views/passwords/password_sign_in_promo_view.h
@@ -31,8 +31,7 @@ ~DiceSyncPromoDelegate() override; // BubbleSyncPromoDelegate: - void OnEnableSync(const AccountInfo& account, - bool is_default_promo_account) override; + void OnEnableSync(const AccountInfo& account) override; private: SignInPromoBubbleController* controller_;
diff --git a/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc b/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc index 0647ffae..5ea0bc0e 100644 --- a/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc +++ b/chrome/browser/ui/views/profiles/profile_menu_view_browsertest.cc
@@ -45,6 +45,7 @@ #include "chrome/common/chrome_switches.h" #include "chrome/common/pref_names.h" #include "chrome/common/webui_url_constants.h" +#include "chrome/test/base/testing_profile.h" #include "chrome/test/base/ui_test_utils.h" #include "components/autofill/core/common/autofill_payments_features.h" #include "components/prefs/pref_service.h" @@ -796,30 +797,6 @@ // List of actionable items in the correct order as they appear in the menu. // If a new button is added to the menu, it should also be added to this list. -constexpr ProfileMenuViewBase::ActionableItem kActionableItems_GuestProfile[] = - {ProfileMenuViewBase::ActionableItem::kExitProfileButton, - ProfileMenuViewBase::ActionableItem::kManageProfilesButton, - ProfileMenuViewBase::ActionableItem::kOtherProfileButton, - ProfileMenuViewBase::ActionableItem::kAddNewProfileButton, - // The first button is added again to finish the cycle and test that - // there are no other buttons at the end. - ProfileMenuViewBase::ActionableItem::kExitProfileButton}; - -PROFILE_MENU_CLICK_TEST(kActionableItems_GuestProfile, - ProfileMenuClickTest_GuestProfile) { - profiles::SwitchToGuestProfile(ProfileManager::CreateCallback()); - ui_test_utils::WaitForBrowserToOpen(); - Profile* guest = g_browser_process->profile_manager()->GetProfileByPath( - ProfileManager::GetGuestProfilePath()); - ASSERT_TRUE(guest); - // Open a second guest browser window, so the ExitProfileButton is shown. - SetTargetBrowser(CreateIncognitoBrowser(guest)); - - RunTest(); -} - -// List of actionable items in the correct order as they appear in the menu. -// If a new button is added to the menu, it should also be added to this list. constexpr ProfileMenuViewBase::ActionableItem kActionableItems_IncognitoProfile[] = { ProfileMenuViewBase::ActionableItem::kExitProfileButton, @@ -834,6 +811,105 @@ RunTest(); } +// List of actionable items in the correct order as they appear in the menu. +// If a new button is added to the menu, it should also be added to this list. +constexpr ProfileMenuViewBase::ActionableItem kActionableItems_GuestProfile[] = + {ProfileMenuViewBase::ActionableItem::kExitProfileButton, + ProfileMenuViewBase::ActionableItem::kManageProfilesButton, + ProfileMenuViewBase::ActionableItem::kOtherProfileButton, + ProfileMenuViewBase::ActionableItem::kAddNewProfileButton, + // The first button is added again to finish the cycle and test that + // there are no other buttons at the end. + // Note that the test does not rely on the specific order of running test + // instances, but considers the relative order of the actionable items in + // this array. So for the last item, it does N+1 steps through the menu (N + // being the number of items in the menu) and checks if the last item in + // this array triggers the same action as the first one. + ProfileMenuViewBase::ActionableItem::kExitProfileButton}; + +// TODO(https://crbug.com/1125474): Revert to using PROFILE_MENU_CLICK_TEST when +// non-ephemeral Guest profiles are removed. +class GuestProfileMenuClickTest : public ProfileMenuClickTest { + public: + GuestProfileMenuClickTest() { + TestingProfile::SetScopedFeatureListForEphemeralGuestProfiles( + scoped_feature_list_, false); + } + + ProfileMenuViewBase::ActionableItem GetExpectedActionableItemAtIndex( + size_t index) override { + return kActionableItems_GuestProfile[index]; + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; + + DISALLOW_COPY_AND_ASSIGN(GuestProfileMenuClickTest); +}; + +IN_PROC_BROWSER_TEST_P(GuestProfileMenuClickTest, + ProfileMenuClickTest_GuestProfile) { + Browser* browser = CreateGuestBrowser(); + ASSERT_TRUE(browser); + + // Open a second guest browser window, so the ExitProfileButton is shown. + SetTargetBrowser(CreateGuestBrowser()); + + RunTest(); +} + +INSTANTIATE_TEST_SUITE_P( + All, + GuestProfileMenuClickTest, + ::testing::Range(size_t(0), base::size(kActionableItems_GuestProfile))); + +// TODO(https://crbug.com/1125474): Remove OS_CHROMEOS and enable for Lacros +// when supported. +#if defined(OS_WIN) || defined(OS_MAC) || \ + (defined(OS_LINUX) && !defined(OS_CHROMEOS)) +// List of actionable items in the correct order as they appear in the menu. +// If a new button is added to the menu, it should also be added to this list. +constexpr ProfileMenuViewBase::ActionableItem + kActionableItems_EphemeralGuestProfile[] = { + ProfileMenuViewBase::ActionableItem::kExitProfileButton}; + +class EphemeralGuestProfileMenuClickTest : public ProfileMenuClickTest { + public: + EphemeralGuestProfileMenuClickTest() { + EXPECT_TRUE(TestingProfile::SetScopedFeatureListForEphemeralGuestProfiles( + scoped_feature_list_, true)); + } + + ProfileMenuViewBase::ActionableItem GetExpectedActionableItemAtIndex( + size_t index) override { + return kActionableItems_EphemeralGuestProfile[index]; + } + + private: + base::test::ScopedFeatureList scoped_feature_list_; + + DISALLOW_COPY_AND_ASSIGN(EphemeralGuestProfileMenuClickTest); +}; + +IN_PROC_BROWSER_TEST_P(EphemeralGuestProfileMenuClickTest, + ProfileMenuClickTest_GuestProfile) { + Browser* browser = CreateGuestBrowser(); + ASSERT_TRUE(browser); + + // Open a second guest browser window, so the ExitProfileButton is shown. + SetTargetBrowser(CreateGuestBrowser()); + + RunTest(); +} + +INSTANTIATE_TEST_SUITE_P( + All, + EphemeralGuestProfileMenuClickTest, + ::testing::Range(size_t(0), + base::size(kActionableItems_EphemeralGuestProfile))); +#endif // defined(OS_WIN) || defined(OS_MAC) || (defined(OS_LINUX) && + // !defined(OS_CHROMEOS)) + class ProfileMenuClickKeyAcceleratorTest : public ProfileMenuClickTestBase { public: ProfileMenuClickKeyAcceleratorTest() = default;
diff --git a/chrome/browser/ui/views/settings_reset_prompt_dialog.cc b/chrome/browser/ui/views/settings_reset_prompt_dialog.cc index 75278747..7051231d 100644 --- a/chrome/browser/ui/views/settings_reset_prompt_dialog.cc +++ b/chrome/browser/ui/views/settings_reset_prompt_dialog.cc
@@ -28,20 +28,17 @@ void ShowSettingsResetPrompt( Browser* browser, safe_browsing::SettingsResetPromptController* controller) { - SettingsResetPromptDialog* dialog = - new SettingsResetPromptDialog(browser, controller); + SettingsResetPromptDialog* dialog = new SettingsResetPromptDialog(controller); // The dialog will delete itself, as implemented in // |DialogDelegateView::DeleteDelegate()|, when its widget is closed. - dialog->Show(); + dialog->Show(browser); } } // namespace chrome SettingsResetPromptDialog::SettingsResetPromptDialog( - Browser* browser, safe_browsing::SettingsResetPromptController* controller) - : browser_(browser), controller_(controller) { - DCHECK(browser_); + : browser_(nullptr), controller_(controller) { DCHECK(controller_); SetShowIcon(false); @@ -67,16 +64,11 @@ }, base::Unretained(this))); - SetModalType(ui::MODAL_TYPE_WINDOW); - SetShowCloseButton(false); - set_fixed_width(views::LayoutProvider::Get()->GetDistanceMetric( - views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH)); - set_margins(ChromeLayoutProvider::Get()->GetDialogInsetsForContentType( views::TEXT, views::TEXT)); SetLayoutManager(std::make_unique<views::FillLayout>()); - views::StyledLabel* const dialog_label = + views::StyledLabel* dialog_label = AddChildView(std::make_unique<views::StyledLabel>()); dialog_label->SetText(controller_->GetMainText()); dialog_label->SetTextContext(views::style::CONTEXT_DIALOG_BODY_TEXT); @@ -93,16 +85,37 @@ controller_->Close(); } -void SettingsResetPromptDialog::Show() { +void SettingsResetPromptDialog::Show(Browser* browser) { + DCHECK(browser); DCHECK(controller_); - BrowserView* const browser_view = - BrowserView::GetBrowserViewForBrowser(browser_); + + browser_ = browser; + BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser); constrained_window::CreateBrowserModalDialogViews( this, browser_view->GetNativeWindow()) ->Show(); controller_->DialogShown(); } +// WidgetDelegate overrides. + +ui::ModalType SettingsResetPromptDialog::GetModalType() const { + return ui::MODAL_TYPE_WINDOW; +} + +bool SettingsResetPromptDialog::ShouldShowCloseButton() const { + return false; +} + base::string16 SettingsResetPromptDialog::GetWindowTitle() const { return controller_ ? controller_->GetWindowTitle() : base::string16(); } + +// View overrides. + +gfx::Size SettingsResetPromptDialog::CalculatePreferredSize() const { + const int width = ChromeLayoutProvider::Get()->GetDistanceMetric( + views::DISTANCE_MODAL_DIALOG_PREFERRED_WIDTH) - + margins().width(); + return gfx::Size(width, GetHeightForWidth(width)); +}
diff --git a/chrome/browser/ui/views/settings_reset_prompt_dialog.h b/chrome/browser/ui/views/settings_reset_prompt_dialog.h index b439fd55..8ef7ba3 100644 --- a/chrome/browser/ui/views/settings_reset_prompt_dialog.h +++ b/chrome/browser/ui/views/settings_reset_prompt_dialog.h
@@ -17,6 +17,10 @@ class SettingsResetPromptController; } +namespace views { +class View; +} + // A dialog intended for prompting users to reset some of their settings to // their original default values. The dialog has two sections: // 1. Main section with an explanation text @@ -24,18 +28,22 @@ // operation. class SettingsResetPromptDialog : public views::DialogDelegateView { public: - SettingsResetPromptDialog( - Browser* browser, + explicit SettingsResetPromptDialog( safe_browsing::SettingsResetPromptController* controller); ~SettingsResetPromptDialog() override; - void Show(); + void Show(Browser* browser); - // views::DialogDelegateView: + // views::WidgetDelegate overrides. + ui::ModalType GetModalType() const override; base::string16 GetWindowTitle() const override; + bool ShouldShowCloseButton() const override; + + // views::View overrides. + gfx::Size CalculatePreferredSize() const override; private: - Browser* const browser_; + Browser* browser_; safe_browsing::SettingsResetPromptController* controller_; DISALLOW_COPY_AND_ASSIGN(SettingsResetPromptDialog);
diff --git a/chrome/browser/ui/views/settings_reset_prompt_dialog_browsertest.cc b/chrome/browser/ui/views/settings_reset_prompt_dialog_browsertest.cc index e390b61..2a907d8 100644 --- a/chrome/browser/ui/views/settings_reset_prompt_dialog_browsertest.cc +++ b/chrome/browser/ui/views/settings_reset_prompt_dialog_browsertest.cc
@@ -180,10 +180,9 @@ ModelParams{SettingType::DEFAULT_SEARCH_ENGINE, 0}); dialog_ = new SettingsResetPromptDialog( - browser(), new safe_browsing::SettingsResetPromptController( std::move(model), std::make_unique<BrandcodedDefaultSettings>())); - dialog_->Show(); + dialog_->Show(browser()); } void DismissUi() override { dialog_->Close(); }
diff --git a/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.cc b/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.cc index b47ce95..25d9967b 100644 --- a/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.cc +++ b/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.cc
@@ -55,10 +55,8 @@ } views::Button::PressedCallback callback = base::BindRepeating( - [](DiceBubbleSyncPromoView* promo) { - promo->EnableSync(true, promo->signin_button_view_->account()); - }, - base::Unretained(this)); + &DiceBubbleSyncPromoView::EnableSync, base::Unretained(this)); + if (account.IsEmpty()) { signin_button_view_ = AddChildView(std::make_unique<DiceSigninButtonView>( std::move(callback), signin_button_prominent)); @@ -83,11 +81,9 @@ return signin_button_view_ ? signin_button_view_->signin_button() : nullptr; } -void DiceBubbleSyncPromoView::EnableSync( - bool is_default_promo_account, - const base::Optional<AccountInfo>& account) { - delegate_->OnEnableSync(account.value_or(AccountInfo()), - is_default_promo_account); +void DiceBubbleSyncPromoView::EnableSync() { + base::Optional<AccountInfo> account = signin_button_view_->account(); + delegate_->OnEnableSync(account.value_or(AccountInfo())); } const char* DiceBubbleSyncPromoView::GetClassName() const {
diff --git a/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.h b/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.h index 7f2cbb7..075ca5c 100644 --- a/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.h +++ b/chrome/browser/ui/views/sync/dice_bubble_sync_promo_view.h
@@ -50,8 +50,7 @@ private: // Used to enable sync in the DiceAccountsMenu and when |signin_button_| is // pressed. - void EnableSync(bool is_default_promo_account, - const base::Optional<AccountInfo>& account); + void EnableSync(); // views::View: const char* GetClassName() const override;
diff --git a/chrome/browser/ui/web_applications/system_web_app_ui_utils.cc b/chrome/browser/ui/web_applications/system_web_app_ui_utils.cc index 21037b4..67de663 100644 --- a/chrome/browser/ui/web_applications/system_web_app_ui_utils.cc +++ b/chrome/browser/ui/web_applications/system_web_app_ui_utils.cc
@@ -25,7 +25,6 @@ #include "chrome/browser/ui/browser_navigator.h" #include "chrome/browser/ui/browser_navigator_params.h" #include "chrome/browser/ui/browser_window.h" -#include "chrome/browser/ui/extensions/application_launch.h" #include "chrome/browser/ui/web_applications/app_browser_controller.h" #include "chrome/browser/ui/web_applications/web_app_launch_manager.h" #include "chrome/browser/web_applications/components/app_registrar.h"
diff --git a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc index 807a019..fb367ef 100644 --- a/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc +++ b/chrome/browser/ui/webui/chromeos/login/oobe_ui.cc
@@ -72,7 +72,6 @@ #include "chrome/browser/ui/webui/chromeos/login/network_state_informer.h" #include "chrome/browser/ui/webui/chromeos/login/oobe_display_chooser.h" #include "chrome/browser/ui/webui/chromeos/login/packaged_license_screen_handler.h" -#include "chrome/browser/ui/webui/chromeos/login/parental_handoff_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/recommend_apps_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/reset_screen_handler.h" #include "chrome/browser/ui/webui/chromeos/login/signin_fatal_error_screen_handler.h" @@ -184,7 +183,7 @@ source->AddResourcePath(kArcPlaystoreCSSPath, IDR_ARC_SUPPORT_PLAYSTORE_CSS); source->AddResourcePath(kArcPlaystoreJSPath, IDR_ARC_SUPPORT_PLAYSTORE_JS); source->AddResourcePath(kArcPlaystoreLogoPath, - IDR_ARC_SUPPORT_PLAYSTORE_LOGO); + IDR_ARC_SUPPORT_PLAYSTORE_LOGO); source->AddResourcePath(kRecommendAppListViewJSPath, IDR_ARC_SUPPORT_RECOMMEND_APP_LIST_VIEW_JS); @@ -520,9 +519,6 @@ AddScreenHandler( std::make_unique<TpmErrorScreenHandler>(js_calls_container_.get())); - AddScreenHandler(std::make_unique<ParentalHandoffScreenHandler>( - js_calls_container_.get())); - Profile* profile = Profile::FromWebUI(web_ui()); // Set up the chrome://theme/ source, for Chrome logo. content::URLDataSource::Add(profile, std::make_unique<ThemeSource>(profile));
diff --git a/chrome/browser/ui/webui/chromeos/login/parental_handoff_screen_handler.cc b/chrome/browser/ui/webui/chromeos/login/parental_handoff_screen_handler.cc deleted file mode 100644 index e57488b8..0000000 --- a/chrome/browser/ui/webui/chromeos/login/parental_handoff_screen_handler.cc +++ /dev/null
@@ -1,64 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/ui/webui/chromeos/login/parental_handoff_screen_handler.h" - -#include "chrome/browser/chromeos/login/screens/parental_handoff_screen.h" -#include "chrome/browser/ui/webui/chromeos/login/js_calls_container.h" -#include "chrome/grit/chromium_strings.h" -#include "chrome/grit/generated_resources.h" -#include "components/login/localized_values_builder.h" -#include "ui/base/l10n/l10n_util.h" - -namespace chromeos { - -namespace { - -constexpr char kTitle[] = "title"; -constexpr char kSubTitle[] = "subtitle"; - -} // namespace - -// static -constexpr StaticOobeScreenId ParentalHandoffScreenView::kScreenId; - -ParentalHandoffScreenHandler::ParentalHandoffScreenHandler( - JSCallsContainer* js_calls_container) - : BaseScreenHandler(kScreenId, js_calls_container) { - set_user_acted_method_path("login.ParentalHandoffScreen.userActed"); -} - -ParentalHandoffScreenHandler::~ParentalHandoffScreenHandler() { - if (screen_) - screen_->OnViewDestroyed(this); -} - -void ParentalHandoffScreenHandler::DeclareLocalizedValues( - ::login::LocalizedValuesBuilder* builder) { - builder->Add("parentalHandoffDialogNextButton", - IDS_LOGIN_PARENTAL_HANDOFF_SCREEN_NEXT_BUTTON); -} - -void ParentalHandoffScreenHandler::Initialize() {} - -void ParentalHandoffScreenHandler::Show(const base::string16& title, - const base::string16& subtitle) { - base::DictionaryValue data; - data.SetString(kTitle, title); - data.SetString(kSubTitle, subtitle); - - ShowScreenWithData(kScreenId, &data); -} - -void ParentalHandoffScreenHandler::Bind(ParentalHandoffScreen* screen) { - screen_ = screen; - BaseScreenHandler::SetBaseScreen(screen_); -} - -void ParentalHandoffScreenHandler::Unbind() { - screen_ = nullptr; - BaseScreenHandler::SetBaseScreen(nullptr); -} - -} // namespace chromeos
diff --git a/chrome/browser/ui/webui/chromeos/login/parental_handoff_screen_handler.h b/chrome/browser/ui/webui/chromeos/login/parental_handoff_screen_handler.h deleted file mode 100644 index 91fbdee..0000000 --- a/chrome/browser/ui/webui/chromeos/login/parental_handoff_screen_handler.h +++ /dev/null
@@ -1,67 +0,0 @@ -// Copyright 2020 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_PARENTAL_HANDOFF_SCREEN_HANDLER_H_ -#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_PARENTAL_HANDOFF_SCREEN_HANDLER_H_ - -#include "base/strings/string16.h" -#include "chrome/browser/ui/webui/chromeos/login/base_screen_handler.h" - -namespace login { -class LocalizedValuesBuilder; -} // namespace login - -namespace chromeos { - -class ParentalHandoffScreen; -class JSCallsContainer; - -// Interface for dependency injection between ParentalHandoffScreen and its -// WebUI representation. -class ParentalHandoffScreenView { - public: - constexpr static StaticOobeScreenId kScreenId{"parental-handoff"}; - - virtual ~ParentalHandoffScreenView() = default; - - // Shows the contents of the screen. - virtual void Show(const base::string16& title, - const base::string16& subtitle) = 0; - - // Binds |screen| to the view. - virtual void Bind(ParentalHandoffScreen* screen) = 0; - - // Unbinds the screen from the view. - virtual void Unbind() = 0; -}; - -class ParentalHandoffScreenHandler : public BaseScreenHandler, - public ParentalHandoffScreenView { - public: - using TView = ParentalHandoffScreenView; - - explicit ParentalHandoffScreenHandler(JSCallsContainer* js_calls_container); - ParentalHandoffScreenHandler(const ParentalHandoffScreenHandler&) = delete; - ParentalHandoffScreenHandler& operator=(const ParentalHandoffScreenHandler&) = - delete; - ~ParentalHandoffScreenHandler() override; - - private: - // BaseScreenHandler: - void DeclareLocalizedValues( - ::login::LocalizedValuesBuilder* builder) override; - void Initialize() override; - - // Shows the contents of the screen. - void Show(const base::string16& title, - const base::string16& subtitle) override; - void Bind(ParentalHandoffScreen* screen) override; - void Unbind() override; - - ParentalHandoffScreen* screen_ = nullptr; -}; - -} // namespace chromeos - -#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_LOGIN_PARENTAL_HANDOFF_SCREEN_HANDLER_H_
diff --git a/chrome/browser/ui/webui/internals/web_app/web_app_internals_page_handler_impl.cc b/chrome/browser/ui/webui/internals/web_app/web_app_internals_page_handler_impl.cc index 6bdd35d..8fe88ca 100644 --- a/chrome/browser/ui/webui/internals/web_app/web_app_internals_page_handler_impl.cc +++ b/chrome/browser/ui/webui/internals/web_app/web_app_internals_page_handler_impl.cc
@@ -51,7 +51,7 @@ } std::vector<mojom::web_app_internals::WebAppPtr> result; - for (const web_app::WebApp& web_app : registrar->AllApps()) { + for (const web_app::WebApp& web_app : registrar->GetAppsIncludingStubs()) { mojom::web_app_internals::WebAppPtr info( mojom::web_app_internals::WebApp::New()); info->name = web_app.name();
diff --git a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc index 68b5d93d..ab07783 100644 --- a/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc +++ b/chrome/browser/ui/webui/settings/settings_localized_strings_provider.cc
@@ -190,7 +190,7 @@ user_manager::UserManager::Get()->IsLoggedInAsGuest() || user_manager::UserManager::Get()->IsLoggedInAsPublicAccount()); #else - profile->IsOffTheRecord()); + profile->IsGuestSession() || profile->IsEphemeralGuestProfile()); #endif html_source->AddBoolean("isSupervised", profile->IsSupervised()); @@ -2103,6 +2103,22 @@ IDS_SETTINGS_SITE_SETTINGS_INSECURE_CONTENT_ALLOWED_EXCEPTIONS}, {"siteSettingsInsecureContentBlockedExceptions", IDS_SETTINGS_SITE_SETTINGS_INSECURE_CONTENT_BLOCKED_EXCEPTIONS}, + {"siteSettingsNotificationsDescription", + IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_DESCRIPTION}, + {"siteSettingsNotificationsAllowed", + IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_ALLOWED}, + {"siteSettingsNotificationsPartial", + IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_PARTIAL}, + {"siteSettingsNotificationsPartialSubLabel", + IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_PARTIAL_SUB_LABEL}, + {"siteSettingsNotificationsBlocked", + IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_BLOCKED}, + {"siteSettingsNotificationsBlockedSubLabel", + IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_BLOCKED_SUB_LABEL}, + {"siteSettingsNotificationsAllowedExceptions", + IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_ALLOWED_EXCEPTIONS}, + {"siteSettingsNotificationsBlockedExceptions", + IDS_SETTINGS_SITE_SETTINGS_NOTIFICATIONS_BLOCKED_EXCEPTIONS}, {"siteSettingsPaymentHandlersDescription", IDS_SETTINGS_SITE_SETTINGS_PAYMENT_HANDLERS_DESCRIPTION}, {"siteSettingsPaymentHandlersAllowed",
diff --git a/chrome/browser/ui/webui/settings/settings_ui.cc b/chrome/browser/ui/webui/settings/settings_ui.cc index c266e474..77392861 100644 --- a/chrome/browser/ui/webui/settings/settings_ui.cc +++ b/chrome/browser/ui/webui/settings/settings_ui.cc
@@ -281,6 +281,9 @@ "enableContentSettingsRedesign", base::FeatureList::IsEnabled(features::kContentSettingsRedesign)); + html_source->AddBoolean("isEphemeralGuestProfile", + profile->IsEphemeralGuestProfile()); + #if defined(OS_WIN) html_source->AddBoolean( "safetyCheckChromeCleanerChildEnabled",
diff --git a/chrome/browser/web_applications/web_app_install_manager_unittest.cc b/chrome/browser/web_applications/web_app_install_manager_unittest.cc index f6d56a6..70e8ad2 100644 --- a/chrome/browser/web_applications/web_app_install_manager_unittest.cc +++ b/chrome/browser/web_applications/web_app_install_manager_unittest.cc
@@ -9,6 +9,7 @@ #include "base/bind.h" #include "base/callback.h" +#include "base/compiler_specific.h" #include "base/containers/flat_set.h" #include "base/run_loop.h" #include "base/strings/string_number_conversions.h" @@ -386,10 +387,12 @@ int GetNumFullyInstalledApps() const { int num_apps = 0; - for (const WebApp& app : test_registry_controller_->registrar().AllApps()) { - if (!app.is_in_sync_install()) - ++num_apps; + + for (const WebApp& app : test_registry_controller_->registrar().GetApps()) { + ALLOW_UNUSED_LOCAL(app); + ++num_apps; } + return num_apps; }
diff --git a/chrome/browser/web_applications/web_app_registrar.cc b/chrome/browser/web_applications/web_app_registrar.cc index 19240d8..12535d06 100644 --- a/chrome/browser/web_applications/web_app_registrar.cc +++ b/chrome/browser/web_applications/web_app_registrar.cc
@@ -58,7 +58,7 @@ int WebAppRegistrar::CountUserInstalledApps() const { int num_user_installed = 0; - for (const WebApp& app : AllApps()) { + for (const WebApp& app : GetAppsIncludingStubs()) { if (app.is_locally_installed() && app.WasInstalledByUser()) ++num_user_installed; } @@ -203,7 +203,7 @@ if (profile() != profile_to_be_deleted) return; - for (const auto& app : AllApps()) { + for (const auto& app : GetAppsIncludingStubs()) { NotifyWebAppProfileWillBeDeleted(app.app_id()); WebAppProviderBase::GetProviderBase(profile()) ->os_integration_manager() @@ -251,7 +251,7 @@ registrar_->registry_.end(), filter_); } -const WebAppRegistrar::AppSet WebAppRegistrar::AllApps() const { +const WebAppRegistrar::AppSet WebAppRegistrar::GetAppsIncludingStubs() const { return AppSet(this, nullptr); } @@ -294,7 +294,7 @@ return AppSet(this, filter); } -WebAppRegistrar::AppSet WebAppRegistrarMutable::AllAppsMutable() { +WebAppRegistrar::AppSet WebAppRegistrarMutable::GetAppsIncludingStubsMutable() { return AppSet(this, nullptr); }
diff --git a/chrome/browser/web_applications/web_app_registrar.h b/chrome/browser/web_applications/web_app_registrar.h index f0459f2..2c913fa 100644 --- a/chrome/browser/web_applications/web_app_registrar.h +++ b/chrome/browser/web_applications/web_app_registrar.h
@@ -149,11 +149,10 @@ }; // Returns all apps in the registry (a superset) including stubs. - // TODO(loyso): Rename this method to GetAppsIncludingStubs(). - const AppSet AllApps() const; + const AppSet GetAppsIncludingStubs() const; // Returns all apps excluding stubs for apps in sync install. Apps in sync // install are being installed and should be hidden for most subsystems. This - // is a subset of AllApps(). + // is a subset of GetAppsIncludingStubs(). const AppSet GetApps() const; protected: @@ -185,8 +184,7 @@ AppSet FilterAppsMutable(Filter filter); - // TODO(loyso): Rename this method to GetAppsIncludingStubsMutable(). - AppSet AllAppsMutable(); + AppSet GetAppsIncludingStubsMutable(); AppSet GetAppsMutable(); using WebAppRegistrar::CountMutation;
diff --git a/chrome/browser/web_applications/web_app_registrar_unittest.cc b/chrome/browser/web_applications/web_app_registrar_unittest.cc index c60e843..0c8f4fe 100644 --- a/chrome/browser/web_applications/web_app_registrar_unittest.cc +++ b/chrome/browser/web_applications/web_app_registrar_unittest.cc
@@ -267,7 +267,7 @@ TEST_F(WebAppRegistrarTest, InitRegistrarAndDoForEachApp) { std::set<AppId> ids = InitRegistrarWithApps("https://example.com/path", 100); - for (const WebApp& web_app : registrar().AllApps()) { + for (const WebApp& web_app : registrar().GetAppsIncludingStubs()) { const size_t num_removed = ids.erase(web_app.app_id()); EXPECT_EQ(1U, num_removed); } @@ -275,10 +275,10 @@ EXPECT_TRUE(ids.empty()); } -TEST_F(WebAppRegistrarTest, AllAppsMutable) { +TEST_F(WebAppRegistrarTest, GetAppsIncludingStubsMutable) { std::set<AppId> ids = InitRegistrarWithApps("https://example.com/path", 10); - for (WebApp& web_app : mutable_registrar().AllAppsMutable()) { + for (WebApp& web_app : mutable_registrar().GetAppsIncludingStubsMutable()) { web_app.SetDisplayMode(DisplayMode::kStandalone); const size_t num_removed = ids.erase(web_app.app_id()); EXPECT_EQ(1U, num_removed); @@ -294,7 +294,7 @@ auto ids = RegisterAppsForTesting(std::move(registry)); EXPECT_EQ(100UL, ids.size()); - for (const WebApp& web_app : registrar().AllApps()) { + for (const WebApp& web_app : registrar().GetAppsIncludingStubs()) { const size_t num_removed = ids.erase(web_app.app_id()); EXPECT_EQ(1U, num_removed); } @@ -346,7 +346,7 @@ RegisterApp(std::move(web_app_in_sync2)); int all_apps_count = 0; - for (const WebApp& web_app : registrar().AllApps()) { + for (const WebApp& web_app : registrar().GetAppsIncludingStubs()) { ALLOW_UNUSED_LOCAL(web_app); ++all_apps_count; } @@ -830,10 +830,10 @@ for (const AppId& app_id : ids) EXPECT_NE(app_id, web_app_in_sync_install_id); - // Tests that AllApps() returns a web app which is either in GetAppIds() set - // or it is the web app in sync install: + // Tests that GetAppsIncludingStubs() returns a web app which is either in + // GetAppIds() set or it is the web app in sync install: bool web_app_in_sync_install_found = false; - for (const WebApp& web_app : registrar().AllApps()) { + for (const WebApp& web_app : registrar().GetAppsIncludingStubs()) { if (web_app.app_id() == web_app_in_sync_install_id) web_app_in_sync_install_found = true; else
diff --git a/chrome/browser/web_applications/web_app_sync_bridge.cc b/chrome/browser/web_applications/web_app_sync_bridge.cc index 68d8d27..3d82dea7 100644 --- a/chrome/browser/web_applications/web_app_sync_bridge.cc +++ b/chrome/browser/web_applications/web_app_sync_bridge.cc
@@ -437,7 +437,7 @@ // Sort only once. base::flat_set<AppId> sync_server_apps(std::move(storage_keys)); - for (const WebApp& app : registrar_->AllApps()) { + for (const WebApp& app : registrar_->GetAppsIncludingStubs()) { if (!app.IsSynced()) continue; @@ -621,7 +621,7 @@ void WebAppSyncBridge::GetAllDataForDebugging(DataCallback callback) { auto data_batch = std::make_unique<syncer::MutableDataBatch>(); - for (const WebApp& app : registrar_->AllApps()) { + for (const WebApp& app : registrar_->GetAppsIncludingStubs()) { if (app.IsSynced()) data_batch->Put(app.app_id(), CreateSyncEntityData(app)); } @@ -648,7 +648,7 @@ void WebAppSyncBridge::MaybeInstallAppsInSyncInstall() { std::vector<WebApp*> apps_in_sync_install; - for (WebApp& app : registrar_->AllAppsMutable()) { + for (WebApp& app : registrar_->GetAppsIncludingStubsMutable()) { if (app.is_in_sync_install()) apps_in_sync_install.push_back(&app); }
diff --git a/chrome/browser/webshare/win/fake_iasync_operation_with_progress.h b/chrome/browser/webshare/win/fake_iasync_operation_with_progress.h new file mode 100644 index 0000000..10f6c1f --- /dev/null +++ b/chrome/browser/webshare/win/fake_iasync_operation_with_progress.h
@@ -0,0 +1,168 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_WEBSHARE_WIN_FAKE_IASYNC_OPERATION_WITH_PROGRESS_H_ +#define CHROME_BROWSER_WEBSHARE_WIN_FAKE_IASYNC_OPERATION_WITH_PROGRESS_H_ + +#include <wrl/client.h> + +#include "base/notreached.h" +#include "base/win/winrt_foundation_helpers.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace webshare { + +namespace internal { + +// Templates used to allow easy reference to the correct types. +// See base/win/winrt_foundation_helpers.h for explanation. +template <typename TResult, typename TProgress> +using AsyncOperationWithProgressComplex = typename ABI::Windows::Foundation:: + IAsyncOperationWithProgress<TResult, TProgress>::TResult_complex; + +template <typename TResult, typename TProgress> +using AsyncOperationWithProgressAbi = base::win::internal::AbiType< + AsyncOperationWithProgressComplex<TResult, TProgress>>; + +template <typename TResult, typename TProgress> +using AsyncOperationWithProgressOptionalStorage = + base::win::internal::OptionalStorageType< + AsyncOperationWithProgressComplex<TResult, TProgress>>; + +template <typename TResult, typename TProgress> +using AsyncOperationWithProgressStorage = base::win::internal::StorageType< + AsyncOperationWithProgressComplex<TResult, TProgress>>; + +} // namespace internal + +// Provides an implementation of IAsyncOperationWithProgress for use in GTests. +template <typename TResult, typename TProgress> +class FakeIAsyncOperationWithProgress final + : public Microsoft::WRL::RuntimeClass< + Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::WinRtClassicComMix>, + ABI::Windows::Foundation::IAsyncOperationWithProgress<TResult, + TProgress>, + ABI::Windows::Foundation::IAsyncInfo> { + public: + FakeIAsyncOperationWithProgress() = default; + FakeIAsyncOperationWithProgress(const FakeIAsyncOperationWithProgress&) = + delete; + FakeIAsyncOperationWithProgress& operator=( + const FakeIAsyncOperationWithProgress&) = delete; + + // ABI::Windows::Foundation::IAsyncOperationWithProgress: + IFACEMETHODIMP put_Progress( + ABI::Windows::Foundation::IAsyncOperationProgressHandler<TResult, + TProgress>* + handler) final { + NOTREACHED(); + return E_NOTIMPL; + } + IFACEMETHODIMP get_Progress( + ABI::Windows::Foundation::IAsyncOperationProgressHandler<TResult, + TProgress>** + handler) final { + NOTREACHED(); + return E_NOTIMPL; + } + IFACEMETHODIMP put_Completed( + ABI::Windows::Foundation::IAsyncOperationWithProgressCompletedHandler< + TResult, + TProgress>* handler) final { + EXPECT_EQ(nullptr, handler_) + << "put_Completed called on IAsyncOperation with a CompletedHandler " + "already defined."; + handler_ = handler; + return S_OK; + } + IFACEMETHODIMP get_Completed( + ABI::Windows::Foundation::IAsyncOperationWithProgressCompletedHandler< + TResult, + TProgress>** handler) final { + NOTREACHED(); + return E_NOTIMPL; + } + IFACEMETHODIMP GetResults( + internal::AsyncOperationWithProgressAbi<TResult, TProgress>* results) + final { + if (!is_complete_) { + ADD_FAILURE() + << "GetResults called on incomplete IAsyncOperationWithProgress."; + return E_PENDING; + } + if (status_ != AsyncStatus::Completed) + return E_UNEXPECTED; + return base::win::internal::CopyTo(results_, results); + } + + // ABI::Windows::Foundation::IAsyncInfo: + IFACEMETHODIMP get_Id(uint32_t* id) final { + NOTREACHED(); + return E_NOTIMPL; + } + IFACEMETHODIMP get_Status(AsyncStatus* status) final { + *status = status_; + return S_OK; + } + IFACEMETHODIMP get_ErrorCode(HRESULT* error_code) final { + *error_code = error_code_; + return S_OK; + } + IFACEMETHODIMP Cancel() final { + NOTREACHED(); + return E_NOTIMPL; + } + IFACEMETHODIMP Close() final { + NOTREACHED(); + return E_NOTIMPL; + } + + // Completes the operation with |error_code|. + // + // The get_ErrorCode API will be set to return |error_code|, the remainder of + // the APIs will be set to represent an error state, and the CompletedHandler + // (if defined) will be run. + void CompleteWithError(HRESULT error_code) { + error_code_ = error_code; + status_ = AsyncStatus::Error; + InvokeCompletedHandler(); + } + + // Completes the operation with |results|. + // + // The GetResults API will be set to return |results|, the remainder of the + // APIs will be set to represent a successfully completed state, and the + // CompletedHandler (if defined) will be run. + void CompleteWithResults( + internal::AsyncOperationWithProgressStorage<TResult, TProgress> results) { + error_code_ = S_OK; + results_ = std::move(results); + status_ = AsyncStatus::Completed; + InvokeCompletedHandler(); + } + + private: + void InvokeCompletedHandler() { + ASSERT_FALSE(is_complete_) + << "Attempted to invoke completion on an already " + "completed IAsyncOperationWithProgress."; + is_complete_ = true; + if (handler_) + handler_->Invoke(this, status_); + } + + HRESULT error_code_ = S_OK; + Microsoft::WRL::ComPtr< + ABI::Windows::Foundation:: + IAsyncOperationWithProgressCompletedHandler<TResult, TProgress>> + handler_; + bool is_complete_ = false; + internal::AsyncOperationWithProgressOptionalStorage<TResult, TProgress> + results_; + AsyncStatus status_ = AsyncStatus::Started; +}; + +} // namespace webshare + +#endif // CHROME_BROWSER_WEBSHARE_WIN_FAKE_IASYNC_OPERATION_WITH_PROGRESS_H_
diff --git a/chrome/browser/webshare/win/fake_random_access_stream.cc b/chrome/browser/webshare/win/fake_random_access_stream.cc new file mode 100644 index 0000000..ebdc746 --- /dev/null +++ b/chrome/browser/webshare/win/fake_random_access_stream.cc
@@ -0,0 +1,448 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/webshare/win/fake_random_access_stream.h" + +#include <robuffer.h> +#include <vector> + +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "base/memory/weak_ptr.h" +#include "base/test/bind_test_util.h" +#include "base/test/fake_iasync_operation_win.h" +#include "base/threading/thread_task_runner_handle.h" +#include "chrome/browser/webshare/win/fake_iasync_operation_with_progress.h" +#include "testing/gtest/include/gtest/gtest.h" + +using ABI::Windows::Foundation::IAsyncOperation; +using ABI::Windows::Foundation::IAsyncOperationWithProgress; +using ABI::Windows::Storage::Streams::IBuffer; +using ABI::Windows::Storage::Streams::IInputStream; +using ABI::Windows::Storage::Streams::InputStreamOptions; +using ABI::Windows::Storage::Streams::IOutputStream; +using ABI::Windows::Storage::Streams::IRandomAccessStream; +using Microsoft::WRL::ComPtr; +using Microsoft::WRL::Make; +using Windows::Storage::Streams::IBufferByteAccess; + +namespace ABI { +namespace Windows { +namespace Foundation { + +// Define template specializations for the types used. These uuids were randomly +// generated. +template <> +struct __declspec(uuid("99159E96-2AAD-4F4C-91AD-DBD5A92ACF12")) + IAsyncOperation<unsigned char> : IAsyncOperation_impl<unsigned char> {}; + +template <> +struct __declspec(uuid("9AF0D4FD-CD18-492E-A17E-27056D4F6481")) + IAsyncOperationCompletedHandler<unsigned char> + : IAsyncOperationCompletedHandler_impl<unsigned char> {}; + +} // namespace Foundation +} // namespace Windows +} // namespace ABI + +namespace webshare { +class StreamData final : public base::RefCountedThreadSafe<StreamData> { + public: + StreamData() = default; + StreamData(const StreamData& other) = delete; + StreamData& operator=(const StreamData&) = delete; + + public: + HRESULT get_Size(UINT64* value) { + *value = data_.size(); + return S_OK; + } + + HRESULT put_Size(UINT64 value) { + if (flush_async_in_progress_) { + ADD_FAILURE() + << "put_Size called while a flush operation is in progress."; + return E_ILLEGAL_METHOD_CALL; + } + if (read_async_in_progress_) { + ADD_FAILURE() << "put_Size called while a read operation is in progress."; + return E_ILLEGAL_METHOD_CALL; + } + if (write_async_in_progress_) { + ADD_FAILURE() + << "put_Size called while a write operation is in progress."; + return E_ILLEGAL_METHOD_CALL; + } + + data_.resize(value); + return S_OK; + } + + HRESULT ReadAsync(scoped_refptr<base::RefCountedData<UINT64>> position, + IBuffer* buffer, + UINT32 count, + InputStreamOptions options, + IAsyncOperationWithProgress<IBuffer*, UINT32>** operation) { + if (flush_async_in_progress_) { + ADD_FAILURE() + << "ReadAsync called while a flush operation is in progress."; + return E_ILLEGAL_METHOD_CALL; + } + if (read_async_in_progress_) { + ADD_FAILURE() + << "ReadAsync called while a read operation is in progress."; + return E_ILLEGAL_METHOD_CALL; + } + if (write_async_in_progress_) { + ADD_FAILURE() + << "ReadAsync called while a write operation is in progress."; + return E_ILLEGAL_METHOD_CALL; + } + + ComPtr<IBuffer> captured_buffer = buffer; + auto fake_iasync_operation = + Make<FakeIAsyncOperationWithProgress<IBuffer*, UINT32>>(); + + HRESULT hr = fake_iasync_operation->QueryInterface(IID_PPV_ARGS(operation)); + if (FAILED(hr)) { + EXPECT_HRESULT_SUCCEEDED(hr); + return hr; + } + + bool success = base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, + base::BindOnce(&StreamData::OnReadAsync, weak_factory_.GetWeakPtr(), + position, fake_iasync_operation, captured_buffer, + count)); + if (!success) { + EXPECT_TRUE(success); + return E_ASYNC_OPERATION_NOT_STARTED; + } + + read_async_in_progress_ = true; + return S_OK; + } + + HRESULT + WriteAsync(scoped_refptr<base::RefCountedData<UINT64>> position, + IBuffer* buffer, + IAsyncOperationWithProgress<UINT32, UINT32>** operation) { + if (flush_async_in_progress_) { + ADD_FAILURE() + << "WriteAsync called while a flush operation is in progress."; + return E_ILLEGAL_METHOD_CALL; + } + if (read_async_in_progress_) { + ADD_FAILURE() + << "WriteAsync called while a read operation is in progress."; + return E_ILLEGAL_METHOD_CALL; + } + if (write_async_in_progress_) { + ADD_FAILURE() + << "WriteAsync called while a write operation is in progress."; + return E_ILLEGAL_METHOD_CALL; + } + + ComPtr<IBuffer> captured_buffer = buffer; + auto fake_iasync_operation = + Make<FakeIAsyncOperationWithProgress<UINT32, UINT32>>(); + + HRESULT hr = fake_iasync_operation->QueryInterface(IID_PPV_ARGS(operation)); + if (FAILED(hr)) { + EXPECT_HRESULT_SUCCEEDED(hr); + return hr; + } + + bool success = base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, + base::BindOnce(&StreamData::OnWriteAsync, weak_factory_.GetWeakPtr(), + position, fake_iasync_operation, captured_buffer)); + if (!success) { + EXPECT_TRUE(success); + return E_ASYNC_OPERATION_NOT_STARTED; + } + + write_async_in_progress_ = true; + return S_OK; + } + + HRESULT + FlushAsync(IAsyncOperation<bool>** operation) { + if (flush_async_in_progress_) { + ADD_FAILURE() + << "FlushAsync called while a flush operation is in progress."; + return E_ILLEGAL_METHOD_CALL; + } + if (read_async_in_progress_) { + ADD_FAILURE() + << "FlushAsync called while a read operation is in progress."; + return E_ILLEGAL_METHOD_CALL; + } + if (write_async_in_progress_) { + ADD_FAILURE() + << "FlushAsync called while a write operation is in progress."; + return E_ILLEGAL_METHOD_CALL; + } + + auto fake_iasync_operation = Make<base::win::FakeIAsyncOperation<bool>>(); + + HRESULT hr = fake_iasync_operation->QueryInterface(IID_PPV_ARGS(operation)); + if (FAILED(hr)) { + EXPECT_HRESULT_SUCCEEDED(hr); + return hr; + } + + bool success = base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, + base::BindOnce(&StreamData::OnFlushAsync, weak_factory_.GetWeakPtr(), + fake_iasync_operation)); + if (!success) { + EXPECT_TRUE(success); + return E_ASYNC_OPERATION_NOT_STARTED; + } + + flush_async_in_progress_ = true; + return S_OK; + } + + private: + friend class base::RefCountedThreadSafe<StreamData>; + + virtual ~StreamData() = default; + + void OnFlushAsync( + ComPtr<base::win::FakeIAsyncOperation<bool>> fake_iasync_operation) { + ASSERT_TRUE(flush_async_in_progress_); + flush_async_in_progress_ = false; + + fake_iasync_operation->CompleteWithResults(true); + } + + void OnReadAsync(scoped_refptr<base::RefCountedData<UINT64>> position, + ComPtr<FakeIAsyncOperationWithProgress<IBuffer*, UINT32>> + fake_iasync_operation, + ComPtr<IBuffer> buffer, + UINT32 count) { + ASSERT_TRUE(read_async_in_progress_); + read_async_in_progress_ = false; + + // If reading |count| bytes would attempt to read past the end of our inner + // |data_|, reduce it to only read to the end of our |data_|. + if (position->data + count > data_.size()) + count = data_.size() - position->data; + + // Fetch the raw buffer to write to. + ComPtr<IBufferByteAccess> buffer_byte_access; + EXPECT_HRESULT_SUCCEEDED(buffer.As(&buffer_byte_access)); + byte* raw_buffer; + EXPECT_HRESULT_SUCCEEDED(buffer_byte_access->Buffer(&raw_buffer)); + + // Write the data to the buffer, updating the position and the buffer's + // length + EXPECT_HRESULT_SUCCEEDED(buffer->put_Length(count)); + for (UINT32 i = 0; i < count; i++) { + raw_buffer[i] = data_[position->data + i]; + } + position->data += count; + + fake_iasync_operation->CompleteWithResults(buffer.Get()); + } + + void OnWriteAsync(scoped_refptr<base::RefCountedData<UINT64>> position, + ComPtr<FakeIAsyncOperationWithProgress<UINT32, UINT32>> + fake_iasync_operation, + ComPtr<IBuffer> buffer) { + ASSERT_TRUE(write_async_in_progress_); + write_async_in_progress_ = false; + + UINT32 length; + ASSERT_HRESULT_SUCCEEDED(buffer->get_Length(&length)); + + // Fetch the raw buffer to read from. + ComPtr<IBufferByteAccess> buffer_byte_access; + EXPECT_HRESULT_SUCCEEDED(buffer.As(&buffer_byte_access)); + byte* raw_buffer; + EXPECT_HRESULT_SUCCEEDED(buffer_byte_access->Buffer(&raw_buffer)); + + // If reading the full buffer would take more room than is currently in our + // inner |data_|, resize it to fit. + if (position->data + length > data_.size()) + data_.resize(position->data + length); + + // Write the buffer to our inner |data_| and update the position. + for (UINT32 i = 0; i < length; i++) { + data_[position->data + i] = raw_buffer[i]; + } + position->data += length; + + fake_iasync_operation->CompleteWithResults(length); + } + + std::vector<unsigned char> data_; + bool flush_async_in_progress_ = false; + bool read_async_in_progress_ = false; + bool write_async_in_progress_ = false; + base::WeakPtrFactory<StreamData> weak_factory_{this}; +}; + +FakeRandomAccessStream::FakeRandomAccessStream() { + position_ = base::MakeRefCounted<base::RefCountedData<UINT64>>(); + shared_data_ = base::MakeRefCounted<StreamData>(); +} +FakeRandomAccessStream::~FakeRandomAccessStream() = default; + +IFACEMETHODIMP FakeRandomAccessStream::get_Size(UINT64* value) { + if (is_closed_) { + ADD_FAILURE() << "get_Size called on closed FakeRandomAccessStream."; + return RO_E_CLOSED; + } + return shared_data_->get_Size(value); +} + +IFACEMETHODIMP FakeRandomAccessStream::put_Size(UINT64 value) { + if (is_closed_) { + ADD_FAILURE() << "put_Size called on closed FakeRandomAccessStream."; + return RO_E_CLOSED; + } + return shared_data_->put_Size(value); +} + +IFACEMETHODIMP +FakeRandomAccessStream::GetInputStreamAt(UINT64 position, + IInputStream** stream) { + if (is_closed_) { + ADD_FAILURE() + << "GetInputStreamAt called on closed FakeRandomAccessStream."; + return RO_E_CLOSED; + } + auto copy = Make<FakeRandomAccessStream>(); + copy->position_->data = position; + copy->shared_data_ = shared_data_; + EXPECT_HRESULT_SUCCEEDED(copy->QueryInterface(IID_PPV_ARGS(stream))); + return S_OK; +} + +IFACEMETHODIMP +FakeRandomAccessStream::GetOutputStreamAt(UINT64 position, + IOutputStream** stream) { + if (is_closed_) { + ADD_FAILURE() + << "GetOutputStreamAt called on closed FakeRandomAccessStream."; + return RO_E_CLOSED; + } + auto copy = Make<FakeRandomAccessStream>(); + copy->position_->data = position; + copy->shared_data_ = shared_data_; + EXPECT_HRESULT_SUCCEEDED(copy->QueryInterface(IID_PPV_ARGS(stream))); + return S_OK; +} + +IFACEMETHODIMP FakeRandomAccessStream::get_Position(UINT64* value) { + if (is_closed_) { + ADD_FAILURE() << "get_Position called on closed FakeRandomAccessStream."; + return RO_E_CLOSED; + } + *value = position_->data; + return S_OK; +} + +IFACEMETHODIMP FakeRandomAccessStream::Seek(UINT64 position) { + if (is_closed_) { + ADD_FAILURE() << "Seek called on closed FakeRandomAccessStream."; + return RO_E_CLOSED; + } + UINT64 size; + HRESULT hr = shared_data_->get_Size(&size); + if (FAILED(hr)) + return hr; + + if (position > size) { + // Though it is technically legal to call Seek with an invalid |position| + // value, there is no good reason to do so, so presumably points to a coding + // error. + // https://docs.microsoft.com/en-us/uwp/api/windows.storage.streams.irandomaccessstream.seek#remarks + ADD_FAILURE() << "Seek called with position outside the known valid range."; + return E_BOUNDS; + } + + position_->data = position; + return S_OK; +} + +IFACEMETHODIMP +FakeRandomAccessStream::CloneStream(IRandomAccessStream** stream) { + NOTREACHED(); + return E_NOTIMPL; +} + +IFACEMETHODIMP FakeRandomAccessStream::get_CanRead(boolean* value) { + if (is_closed_) { + ADD_FAILURE() << "get_CanRead called on closed FakeRandomAccessStream."; + return RO_E_CLOSED; + } + *value = TRUE; + return S_OK; +} + +IFACEMETHODIMP FakeRandomAccessStream::get_CanWrite(boolean* value) { + if (is_closed_) { + ADD_FAILURE() << "get_CanWrite called on closed FakeRandomAccessStream."; + return RO_E_CLOSED; + } + *value = TRUE; + return S_OK; +} + +IFACEMETHODIMP FakeRandomAccessStream::Close() { + if (is_closed_) { + ADD_FAILURE() << "Close called on closed FakeRandomAccessStream."; + return RO_E_CLOSED; + } + is_closed_ = true; + if (on_close_) + std::move(on_close_).Run(); + return S_OK; +} + +IFACEMETHODIMP FakeRandomAccessStream::ReadAsync( + IBuffer* buffer, + UINT32 count, + InputStreamOptions options, + IAsyncOperationWithProgress<IBuffer*, UINT32>** operation) { + if (is_closed_) { + ADD_FAILURE() << "ReadAsync called on closed FakeRandomAccessStream."; + return RO_E_CLOSED; + } + return shared_data_->ReadAsync(position_, buffer, count, options, operation); +} + +IFACEMETHODIMP +FakeRandomAccessStream::WriteAsync( + IBuffer* buffer, + IAsyncOperationWithProgress<UINT32, UINT32>** operation) { + if (is_closed_) { + ADD_FAILURE() << "WriteAsync called on closed FakeRandomAccessStream."; + return RO_E_CLOSED; + } + return shared_data_->WriteAsync(position_, buffer, operation); +} + +IFACEMETHODIMP +FakeRandomAccessStream::FlushAsync(IAsyncOperation<bool>** operation) { + if (is_closed_) { + ADD_FAILURE() << "FlushAsync called on closed FakeRandomAccessStream."; + return RO_E_CLOSED; + } + return shared_data_->FlushAsync(operation); +} + +void FakeRandomAccessStream::OnClose(base::OnceClosure on_close) { + ASSERT_FALSE(is_closed_) + << "OnClose called on closed FakeRandomAccessStream."; + ASSERT_FALSE(on_close_) << "OnClose called on FakeRandomAccessStream that " + "already has an OnClose handler defined."; + on_close_ = std::move(on_close); +} + +} // namespace webshare
diff --git a/chrome/browser/webshare/win/fake_random_access_stream.h b/chrome/browser/webshare/win/fake_random_access_stream.h new file mode 100644 index 0000000..8513490 --- /dev/null +++ b/chrome/browser/webshare/win/fake_random_access_stream.h
@@ -0,0 +1,84 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_WEBSHARE_WIN_FAKE_RANDOM_ACCESS_STREAM_H_ +#define CHROME_BROWSER_WEBSHARE_WIN_FAKE_RANDOM_ACCESS_STREAM_H_ + +#include <windows.foundation.h> +#include <windows.storage.streams.h> +#include <wrl/implements.h> + +#include "base/callback.h" +#include "base/memory/scoped_refptr.h" + +namespace webshare { + +class StreamData; + +// Provides an implementation of IRandomAccessStream for use in GTests. +class __declspec(uuid("66DAD26A-BEDE-4A54-8316-088838CC65A0")) + FakeRandomAccessStream + : public Microsoft::WRL::RuntimeClass< + Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::WinRtClassicComMix>, + ABI::Windows::Storage::Streams::IRandomAccessStream, + ABI::Windows::Foundation::IClosable, + ABI::Windows::Storage::Streams::IInputStream, + ABI::Windows::Storage::Streams::IOutputStream> { + public: + FakeRandomAccessStream(); + FakeRandomAccessStream(const FakeRandomAccessStream& other) = delete; + FakeRandomAccessStream& operator=(const FakeRandomAccessStream&) = delete; + ~FakeRandomAccessStream() final; + + // ABI::Windows::Storage::Streams::IRandomAccessStream: + IFACEMETHODIMP get_Size(UINT64* value) final; + IFACEMETHODIMP put_Size(UINT64 value) final; + IFACEMETHODIMP + GetInputStreamAt(UINT64 position, + ABI::Windows::Storage::Streams::IInputStream** stream) final; + IFACEMETHODIMP + GetOutputStreamAt( + UINT64 position, + ABI::Windows::Storage::Streams::IOutputStream** stream) final; + IFACEMETHODIMP get_Position(UINT64* value) final; + IFACEMETHODIMP Seek(UINT64 position) final; + IFACEMETHODIMP + CloneStream(IRandomAccessStream** stream) final; + IFACEMETHODIMP get_CanRead(boolean* value) final; + IFACEMETHODIMP get_CanWrite(boolean* value) final; + + // ABI::Windows::Foundation::IClosable: + IFACEMETHODIMP Close() final; + + // ABI::Windows::Storage::Streams::IInputStream: + IFACEMETHODIMP ReadAsync( + ABI::Windows::Storage::Streams::IBuffer* buffer, + UINT32 count, + ABI::Windows::Storage::Streams::InputStreamOptions options, + ABI::Windows::Foundation::IAsyncOperationWithProgress< + ABI::Windows::Storage::Streams::IBuffer*, + UINT32>** operation) final; + + // ABI::Windows::Storage::Streams::IOutputStream: + IFACEMETHODIMP + WriteAsync( + ABI::Windows::Storage::Streams::IBuffer* buffer, + ABI::Windows::Foundation::IAsyncOperationWithProgress<UINT32, UINT32>** + operation) final; + IFACEMETHODIMP + FlushAsync(ABI::Windows::Foundation::IAsyncOperation<bool>** operation) final; + + // Sets a callback to be invoked when |Close| is called. + void OnClose(base::OnceClosure on_close); + + private: + scoped_refptr<StreamData> shared_data_; + scoped_refptr<base::RefCountedData<UINT64>> position_; + bool is_closed_ = false; + base::OnceClosure on_close_; +}; + +} // namespace webshare + +#endif // CHROME_BROWSER_WEBSHARE_WIN_FAKE_RANDOM_ACCESS_STREAM_H_
diff --git a/chrome/browser/webshare/win/fake_random_access_stream_unittest.cc b/chrome/browser/webshare/win/fake_random_access_stream_unittest.cc new file mode 100644 index 0000000..68ea433 --- /dev/null +++ b/chrome/browser/webshare/win/fake_random_access_stream_unittest.cc
@@ -0,0 +1,343 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/webshare/win/fake_random_access_stream.h" + +#include <wrl/event.h> +#include <wrl/implements.h> + +#include "base/bind_helpers.h" +#include "base/run_loop.h" +#include "base/test/task_environment.h" +#include "chrome/browser/webshare/win/fake_buffer.h" +#include "testing/gtest/include/gtest/gtest-spi.h" +#include "testing/gtest/include/gtest/gtest.h" + +using ABI::Windows::Foundation::IAsyncOperation; +using ABI::Windows::Foundation::IAsyncOperationCompletedHandler; +using ABI::Windows::Foundation::IAsyncOperationWithProgress; +using ABI::Windows::Foundation::IAsyncOperationWithProgressCompletedHandler; +using ABI::Windows::Storage::Streams::IBuffer; +using ABI::Windows::Storage::Streams::IInputStream; +using ABI::Windows::Storage::Streams::InputStreamOptions; +using ABI::Windows::Storage::Streams::IOutputStream; +using Microsoft::WRL::Callback; +using Microsoft::WRL::ComPtr; +using Microsoft::WRL::Make; + +namespace webshare { + +TEST(FakeRandomAccessStreamTest, InvalidSeek) { + auto stream = Make<FakeRandomAccessStream>(); + ASSERT_HRESULT_SUCCEEDED(stream->Seek(0)); + EXPECT_NONFATAL_FAILURE(ASSERT_HRESULT_FAILED(stream->Seek(1)), "Seek"); +} + +TEST(FakeRandomAccessStreamTest, UsageAfterClose) { + base::test::SingleThreadTaskEnvironment task_environment; + + auto stream = Make<FakeRandomAccessStream>(); + ASSERT_HRESULT_SUCCEEDED(stream->Close()); + + // IRandomAccessStream APIs + UINT64 size; + EXPECT_NONFATAL_FAILURE(ASSERT_HRESULT_FAILED(stream->get_Size(&size)), + "closed"); + EXPECT_NONFATAL_FAILURE(ASSERT_HRESULT_FAILED(stream->put_Size(7)), "closed"); + ComPtr<IInputStream> input_stream; + EXPECT_NONFATAL_FAILURE( + ASSERT_HRESULT_FAILED(stream->GetInputStreamAt(0, &input_stream)), + "closed"); + ComPtr<IOutputStream> output_stream; + EXPECT_NONFATAL_FAILURE( + ASSERT_HRESULT_FAILED(stream->GetOutputStreamAt(0, &output_stream)), + "closed"); + UINT64 position; + EXPECT_NONFATAL_FAILURE( + ASSERT_HRESULT_FAILED(stream->get_Position(&position)), "closed"); + EXPECT_NONFATAL_FAILURE(ASSERT_HRESULT_FAILED(stream->Seek(0)), "closed"); + boolean can_read; + EXPECT_NONFATAL_FAILURE(ASSERT_HRESULT_FAILED(stream->get_CanRead(&can_read)), + "closed"); + boolean can_write; + EXPECT_NONFATAL_FAILURE( + ASSERT_HRESULT_FAILED(stream->get_CanRead(&can_write)), "closed"); + + // IClosable APIs + EXPECT_NONFATAL_FAILURE(ASSERT_HRESULT_FAILED(stream->Close()), "closed"); + + // IInputStream APIs + auto buffer = Make<FakeBuffer>(4); + ComPtr<IAsyncOperationWithProgress<IBuffer*, UINT32>> read_operation; + EXPECT_NONFATAL_FAILURE( + ASSERT_HRESULT_FAILED(stream->ReadAsync( + buffer.Get(), 4, InputStreamOptions::InputStreamOptions_None, + &read_operation)), + "closed"); + + // IOutputStream APIs + ComPtr<IAsyncOperationWithProgress<UINT32, UINT32>> write_operation; + EXPECT_NONFATAL_FAILURE( + ASSERT_HRESULT_FAILED(stream->WriteAsync(buffer.Get(), &write_operation)), + "closed"); + ComPtr<IAsyncOperation<bool>> flush_operation; + EXPECT_NONFATAL_FAILURE( + ASSERT_HRESULT_FAILED(stream->FlushAsync(&flush_operation)), "closed"); + + // Test APIs + // EXPECT_FATAL_FAILURE() can only reference globals and statics. + static ComPtr<FakeRandomAccessStream>& static_stream = stream; + EXPECT_FATAL_FAILURE(static_stream->OnClose(base::DoNothing()), "closed"); +} + +TEST(FakeRandomAccessStreamTest, CompetingAsyncCalls) { + base::test::SingleThreadTaskEnvironment task_environment; + + auto stream = Make<FakeRandomAccessStream>(); + + ComPtr<IAsyncOperation<bool>> flush_operation; + ComPtr<IAsyncOperationWithProgress<IBuffer*, UINT32>> read_operation; + ComPtr<IAsyncOperationWithProgress<UINT32, UINT32>> write_operation; + auto buffer = Make<FakeBuffer>(4); + + { + base::RunLoop run_loop; + ASSERT_HRESULT_SUCCEEDED( + stream->WriteAsync(buffer.Get(), &write_operation)); + ASSERT_HRESULT_SUCCEEDED(write_operation->put_Completed( + Callback<IAsyncOperationWithProgressCompletedHandler<UINT32, UINT32>>( + [&run_loop]( + IAsyncOperationWithProgress<UINT32, UINT32>* async_operation, + AsyncStatus async_status) { + run_loop.Quit(); + return S_OK; + }) + .Get())); + + EXPECT_NONFATAL_FAILURE( + ASSERT_HRESULT_FAILED(stream->FlushAsync(&flush_operation)), + "in progress"); + EXPECT_NONFATAL_FAILURE( + ASSERT_HRESULT_FAILED(stream->ReadAsync( + buffer.Get(), 4, InputStreamOptions::InputStreamOptions_None, + &read_operation)), + "in progress"); + EXPECT_NONFATAL_FAILURE(ASSERT_HRESULT_FAILED(stream->WriteAsync( + buffer.Get(), &write_operation)), + "in progress"); + run_loop.Run(); + } + + { + base::RunLoop run_loop; + ASSERT_HRESULT_SUCCEEDED(stream->ReadAsync( + buffer.Get(), 4, InputStreamOptions::InputStreamOptions_None, + &read_operation)); + ASSERT_HRESULT_SUCCEEDED(read_operation->put_Completed( + Callback<IAsyncOperationWithProgressCompletedHandler<IBuffer*, UINT32>>( + [&run_loop]( + IAsyncOperationWithProgress<IBuffer*, UINT32>* async_operation, + AsyncStatus async_status) { + run_loop.Quit(); + return S_OK; + }) + .Get())); + + EXPECT_NONFATAL_FAILURE( + ASSERT_HRESULT_FAILED(stream->FlushAsync(&flush_operation)), + "in progress"); + EXPECT_NONFATAL_FAILURE( + ASSERT_HRESULT_FAILED(stream->ReadAsync( + buffer.Get(), 4, InputStreamOptions::InputStreamOptions_None, + &read_operation)), + "in progress"); + EXPECT_NONFATAL_FAILURE(ASSERT_HRESULT_FAILED(stream->WriteAsync( + buffer.Get(), &write_operation)), + "in progress"); + run_loop.Run(); + } + + { + base::RunLoop run_loop; + ASSERT_HRESULT_SUCCEEDED(stream->FlushAsync(&flush_operation)); + ASSERT_HRESULT_SUCCEEDED(flush_operation->put_Completed( + Callback<IAsyncOperationCompletedHandler<bool>>( + [&run_loop](IAsyncOperation<bool>* async_operation, + AsyncStatus async_status) { + run_loop.Quit(); + return S_OK; + }) + .Get())); + + EXPECT_NONFATAL_FAILURE( + ASSERT_HRESULT_FAILED(stream->FlushAsync(&flush_operation)), + "in progress"); + EXPECT_NONFATAL_FAILURE( + ASSERT_HRESULT_FAILED(stream->ReadAsync( + buffer.Get(), 4, InputStreamOptions::InputStreamOptions_None, + &read_operation)), + "in progress"); + EXPECT_NONFATAL_FAILURE(ASSERT_HRESULT_FAILED(stream->WriteAsync( + buffer.Get(), &write_operation)), + "in progress"); + run_loop.Run(); + } +} + +TEST(FakeRandomAccessStreamTest, BasicReadWrite) { + base::test::SingleThreadTaskEnvironment task_environment; + + // Initialize an input and output stream based on the same stream + ComPtr<IInputStream> input_stream; + ComPtr<IOutputStream> output_stream; + { + auto stream = Make<FakeRandomAccessStream>(); + UINT64 position; + ASSERT_HRESULT_SUCCEEDED(stream->get_Position(&position)); + ASSERT_EQ(position, 0u); + + ASSERT_HRESULT_SUCCEEDED(stream->GetInputStreamAt(0, &input_stream)); + ASSERT_HRESULT_SUCCEEDED(stream->GetOutputStreamAt(0, &output_stream)); + } + + // Create a filled buffer that reads "abcd" + auto buffer = Make<FakeBuffer>(4); + ASSERT_HRESULT_SUCCEEDED(buffer->put_Length(4)); + byte* raw_buffer; + ASSERT_HRESULT_SUCCEEDED(buffer->Buffer(&raw_buffer)); + raw_buffer[0] = 'a'; + raw_buffer[1] = 'b'; + raw_buffer[2] = 'c'; + raw_buffer[3] = 'd'; + + // Write the buffer to the output stream + { + base::RunLoop run_loop; + ComPtr<IAsyncOperationWithProgress<UINT32, UINT32>> write_operation; + ASSERT_HRESULT_SUCCEEDED( + output_stream->WriteAsync(buffer.Get(), &write_operation)); + ASSERT_HRESULT_SUCCEEDED(write_operation->put_Completed( + Callback<IAsyncOperationWithProgressCompletedHandler<UINT32, UINT32>>( + [&run_loop]( + IAsyncOperationWithProgress<UINT32, UINT32>* async_operation, + AsyncStatus async_status) { + EXPECT_EQ(async_status, AsyncStatus::Completed); + UINT32 results; + EXPECT_HRESULT_SUCCEEDED(async_operation->GetResults(&results)); + EXPECT_EQ(results, 4u); + run_loop.Quit(); + return S_OK; + }) + .Get())); + run_loop.Run(); + } + + // Update the same buffer to now read "ef" + raw_buffer[0] = 'e'; + raw_buffer[1] = 'f'; + ASSERT_HRESULT_SUCCEEDED(buffer->put_Length(2)); + + // Write the buffer to the output stream + { + base::RunLoop run_loop; + ComPtr<IAsyncOperationWithProgress<UINT32, UINT32>> write_operation; + ASSERT_HRESULT_SUCCEEDED( + output_stream->WriteAsync(buffer.Get(), &write_operation)); + ASSERT_HRESULT_SUCCEEDED(write_operation->put_Completed( + Callback<IAsyncOperationWithProgressCompletedHandler<UINT32, UINT32>>( + [&run_loop]( + IAsyncOperationWithProgress<UINT32, UINT32>* async_operation, + AsyncStatus async_status) { + EXPECT_EQ(async_status, AsyncStatus::Completed); + UINT32 results; + EXPECT_HRESULT_SUCCEEDED(async_operation->GetResults(&results)); + EXPECT_EQ(results, 2u); + run_loop.Quit(); + return S_OK; + }) + .Get())); + run_loop.Run(); + } + + // Flush the output stream + { + base::RunLoop run_loop; + ComPtr<IAsyncOperation<bool>> flush_operation; + ASSERT_HRESULT_SUCCEEDED(output_stream->FlushAsync(&flush_operation)); + ASSERT_HRESULT_SUCCEEDED(flush_operation->put_Completed( + Callback<IAsyncOperationCompletedHandler<bool>>( + [&run_loop](IAsyncOperation<bool>* async_operation, + AsyncStatus async_status) { + EXPECT_EQ(async_status, AsyncStatus::Completed); + boolean results; + EXPECT_HRESULT_SUCCEEDED(async_operation->GetResults(&results)); + EXPECT_EQ(results, TRUE); + run_loop.Quit(); + return S_OK; + }) + .Get())); + run_loop.Run(); + } + + // Read the input stream to the buffer + { + base::RunLoop run_loop; + ComPtr<IAsyncOperationWithProgress<IBuffer*, UINT32>> read_operation; + ASSERT_HRESULT_SUCCEEDED(input_stream->ReadAsync( + buffer.Get(), 4, InputStreamOptions::InputStreamOptions_None, + &read_operation)); + ASSERT_HRESULT_SUCCEEDED(read_operation->put_Completed( + Callback<IAsyncOperationWithProgressCompletedHandler<IBuffer*, UINT32>>( + [&run_loop, &buffer]( + IAsyncOperationWithProgress<IBuffer*, UINT32>* async_operation, + AsyncStatus async_status) { + EXPECT_EQ(async_status, AsyncStatus::Completed); + ComPtr<IBuffer> results; + EXPECT_HRESULT_SUCCEEDED(async_operation->GetResults(&results)); + EXPECT_EQ(results, buffer); + run_loop.Quit(); + return S_OK; + }) + .Get())); + run_loop.Run(); + } + + UINT32 length; + ASSERT_HRESULT_SUCCEEDED(buffer->get_Length(&length)); + ASSERT_EQ(length, 4u); + ASSERT_EQ(raw_buffer[0], 'a'); + ASSERT_EQ(raw_buffer[1], 'b'); + ASSERT_EQ(raw_buffer[2], 'c'); + ASSERT_EQ(raw_buffer[3], 'd'); + + // Read the remaining input stream to the buffer + { + base::RunLoop run_loop; + ComPtr<IAsyncOperationWithProgress<IBuffer*, UINT32>> read_operation; + ASSERT_HRESULT_SUCCEEDED(input_stream->ReadAsync( + buffer.Get(), 2, InputStreamOptions::InputStreamOptions_None, + &read_operation)); + ASSERT_HRESULT_SUCCEEDED(read_operation->put_Completed( + Callback<IAsyncOperationWithProgressCompletedHandler<IBuffer*, UINT32>>( + [&run_loop, &buffer]( + IAsyncOperationWithProgress<IBuffer*, UINT32>* async_operation, + AsyncStatus async_status) { + EXPECT_EQ(async_status, AsyncStatus::Completed); + ComPtr<IBuffer> results; + EXPECT_HRESULT_SUCCEEDED(async_operation->GetResults(&results)); + EXPECT_EQ(results, buffer); + run_loop.Quit(); + return S_OK; + }) + .Get())); + run_loop.Run(); + } + + ASSERT_HRESULT_SUCCEEDED(buffer->get_Length(&length)); + ASSERT_EQ(length, 2u); + ASSERT_EQ(raw_buffer[0], 'e'); + ASSERT_EQ(raw_buffer[1], 'f'); +} + +} // namespace webshare
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index 2f96eb7..0c55698 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-master-1603238376-41278602b445da41d1916a61de8117b0857ab174.profdata +chrome-linux-master-1603281470-f96bc0fcebd9344c6ef9fb677ad5905993ab5142.profdata
diff --git a/chrome/common/extensions/api/browsing_data.json b/chrome/common/extensions/api/browsing_data.json index 1bb6f132..08b065cd 100644 --- a/chrome/common/extensions/api/browsing_data.json +++ b/chrome/common/extensions/api/browsing_data.json
@@ -122,6 +122,7 @@ "pluginData": { "type": "boolean", "optional": true, + "deprecated": "Support for Flash has been removed. This data type will be ignored.", "description": "Plugins' data." }, "serviceWorkers": { @@ -374,6 +375,7 @@ { "name": "removePluginData", "description": "Clears plugins' data.", + "deprecated": "Support for Flash has been removed. This function has no effect.", "type": "function", "parameters": [ {
diff --git a/chrome/common/extensions/api/file_manager_private.idl b/chrome/common/extensions/api/file_manager_private.idl index 6bdede8..bed4bd8 100644 --- a/chrome/common/extensions/api/file_manager_private.idl +++ b/chrome/common/extensions/api/file_manager_private.idl
@@ -912,8 +912,8 @@ // |result| String representing the detected coding system. callback DetectCharacterEncodingCallback = void(DOMString result); -// |thumbnailDataUrl| A data URL for the thumbnail as a PNG; |thumbnailDataUrl| -// is empty if no thumbnail was available. +// |thumbnailDataUrl| A data URL for the thumbnail; |thumbnailDataUrl| is empty +// if no thumbnail was available. callback GetThumbnailCallback = void(DOMString thumbnailDataUrl); // |apps| List of Android picker apps. @@ -1322,6 +1322,19 @@ long height, GetThumbnailCallback callback); + // Retrieves a thumbnail of an ARC DocumentsProvider file, closely matching + // the hinted size specified by |widthHint| and |heightHint|, but not + // necessarily the exact size. |callback| is called with thumbnail data + // encoded as a data URL. If the document does not support thumbnails, + // |callback| is called with an empty string. + // Note: The thumbnail data may originate from third-party application code, + // and is untrustworthy (Security). + [nocompile] + static void getArcDocumentsProviderThumbnail([instanceof=FileEntry] object entry, + long widthHint, + long heightHint, + GetThumbnailCallback callback); + // Returns a guessed character encoding of a hex-encoded string. Every 2 // characters of |bytes| represent one byte by 2-digit hexadecimal number. // The result is preferred MIME name of the detected character encoding
diff --git a/chrome/common/extensions/api/file_manager_private_internal.idl b/chrome/common/extensions/api/file_manager_private_internal.idl index 8c03a07..01e0f4a 100644 --- a/chrome/common/extensions/api/file_manager_private_internal.idl +++ b/chrome/common/extensions/api/file_manager_private_internal.idl
@@ -123,6 +123,10 @@ long width, long height, GetThumbnailCallback callback); + static void getArcDocumentsProviderThumbnail(DOMString url, + long widthHint, + long heightHint, + GetThumbnailCallback callback); static void sharesheetHasTargets(DOMString[] urls, BooleanCallback callback); static void invokeSharesheet(DOMString[] urls, SimpleCallback callback); static void toggleAddedToHoldingSpace(DOMString[] urls, boolean add,
diff --git a/chrome/common/extensions/api/input_method_private.json b/chrome/common/extensions/api/input_method_private.json index 328d3319b..6ea5642 100644 --- a/chrome/common/extensions/api/input_method_private.json +++ b/chrome/common/extensions/api/input_method_private.json
@@ -599,7 +599,7 @@ "type": "integer" }, "end": { - "description": "The ending index of the composing range, in bytes.", + "description": "The ending index of the composing range, in bytes. The order of the start and end index does not matter.", "type": "integer" }, "segments": {
diff --git a/chrome/common/extensions/docs/templates/intros/browsingData.html b/chrome/common/extensions/docs/templates/intros/browsingData.html index 0489daa..6d013e0 100644 --- a/chrome/common/extensions/docs/templates/intros/browsingData.html +++ b/chrome/common/extensions/docs/templates/intros/browsingData.html
@@ -51,7 +51,6 @@ "history": true, "indexedDB": true, "localStorage": true, - "pluginData": true, "passwords": true, "serviceWorkers": true, "webSQL": true @@ -98,7 +97,7 @@ deletion, you can use the <code>RemovalOptions.origins</code> and <code>RemovalOptions.excludeOrigins</code> parameters. They can only be applied to cookies, cache, and storage (CacheStorage, FileSystems, IndexedDB, -LocalStorage, PluginData, ServiceWorkers, and WebSQL). +LocalStorage, ServiceWorkers, and WebSQL). </p> <pre>chrome.browsingData.remove({ @@ -109,7 +108,6 @@ "fileSystems": true, "indexedDB": true, "localStorage": true, - "pluginData": true, "serviceWorkers": true, "webSQL": true }, callback);</pre> @@ -178,8 +176,6 @@ "history": true, "indexedDB": true, "localStorage": true, - "serverBoundCertificates": true, - "pluginData": true, "passwords": true, "serviceWorkers": true, "webSQL": true
diff --git a/chrome/credential_provider/gaiacp/strings/gaia_resources_de.xtb b/chrome/credential_provider/gaiacp/strings/gaia_resources_de.xtb index 649691b1..e19c9504a 100644 --- a/chrome/credential_provider/gaiacp/strings/gaia_resources_de.xtb +++ b/chrome/credential_provider/gaiacp/strings/gaia_resources_de.xtb
@@ -5,7 +5,7 @@ <translation id="1383286653814676580">Wird für die Anmeldeseite des Google-Anmeldeinformationsanbieters genutzt.</translation> <translation id="2048923169632968961">Beim Synchronisieren des Passworts Ihres Arbeitskontos mit Ihrem Windows-Profil ist ein Problem aufgetreten. Bitte wenden Sie sich an Ihren Administrator.</translation> <translation id="2515346402363002066">Ihre Sitzung ist abgelaufen. Melden Sie sich mit Ihrem Arbeitskonto an.</translation> -<translation id="2549902055700841962">Anmeldung in Ihrem Arbeitskonto nicht möglich. Bitte wenden Sie sich an Ihren Administrator.</translation> +<translation id="2549902055700841962">Anmeldung im Arbeitskonto nicht möglich. Bitte an den Administrator wenden.</translation> <translation id="2566603360883977759">Mit dieser E-Mail-Adresse ist eine Anmeldung nicht möglich. Bitte mit dem Arbeits- oder Schulkonto noch einmal versuchen. Wenn die Anmeldung dann immer noch nicht möglich ist, bitte den Administrator kontaktieren.</translation> <translation id="2844349213149998955">Die Anmeldung mit einem privaten Konto ist auf diesem Gerät nicht zulässig. Melden Sie sich bitte mit einem Arbeitskonto an.</translation> <translation id="3217145568844727893">Wenn Sie fortfahren, ohne Ihr aktuelles Windows-Passwort einzugeben, gehen möglicherweise Daten auf Ihrem Gerät verloren, die nicht wiederhergestellt werden können.</translation>
diff --git a/chrome/renderer/resources/extensions/file_manager_private_custom_bindings.js b/chrome/renderer/resources/extensions/file_manager_private_custom_bindings.js index 1d3b60c..eb7e60e 100644 --- a/chrome/renderer/resources/extensions/file_manager_private_custom_bindings.js +++ b/chrome/renderer/resources/extensions/file_manager_private_custom_bindings.js
@@ -308,6 +308,13 @@ fileManagerPrivateInternal.getPdfThumbnail(url, width, height, callback); }); + apiFunctions.setHandleRequest('getArcDocumentsProviderThumbnail', function( + entry, widthHint, heightHint, callback) { + var url = getEntryURL(entry); + fileManagerPrivateInternal.getArcDocumentsProviderThumbnail( + url, widthHint, heightHint, callback); + }); + apiFunctions.setCustomCallback('searchFiles', function(name, request, callback, response) { if (response && !response.error && response.entries) {
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index cde60cbe..7eb948d 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -327,6 +327,9 @@ "../browser/webshare/win/fake_data_transfer_manager.h", "../browser/webshare/win/fake_data_transfer_manager_interop.cc", "../browser/webshare/win/fake_data_transfer_manager_interop.h", + "../browser/webshare/win/fake_iasync_operation_with_progress.h", + "../browser/webshare/win/fake_random_access_stream.cc", + "../browser/webshare/win/fake_random_access_stream.h", "../browser/webshare/win/scoped_fake_data_transfer_manager_interop.cc", "../browser/webshare/win/scoped_fake_data_transfer_manager_interop.h", "//chrome/app/chrome_crash_reporter_client_win.cc", @@ -2508,7 +2511,6 @@ "../browser/chromeos/login/screens/multidevice_setup_screen_browsertest.cc", "../browser/chromeos/login/screens/network_screen_browsertest.cc", "../browser/chromeos/login/screens/packaged_license_screen_browsertest.cc", - "../browser/chromeos/login/screens/parental_handoff_screen_browsertest.cc", "../browser/chromeos/login/screens/recommend_apps/scoped_test_recommend_apps_fetcher_factory.cc", "../browser/chromeos/login/screens/recommend_apps/scoped_test_recommend_apps_fetcher_factory.h", "../browser/chromeos/login/screens/recommend_apps_screen_browsertest.cc", @@ -5815,6 +5817,7 @@ "../browser/webshare/win/fake_buffer_unittest.cc", "../browser/webshare/win/fake_data_transfer_manager_interop_unittest.cc", "../browser/webshare/win/fake_data_transfer_manager_unittest.cc", + "../browser/webshare/win/fake_random_access_stream_unittest.cc", "../browser/webshare/win/show_share_ui_for_window_operation_unittest.cc", ] deps += [
diff --git a/chrome/test/data/webui/chromeos/crostini_installer_app_test.js b/chrome/test/data/webui/chromeos/crostini_installer_app_test.js index aafa899..617eea1 100644 --- a/chrome/test/data/webui/chromeos/crostini_installer_app_test.js +++ b/chrome/test/data/webui/chromeos/crostini_installer_app_test.js
@@ -21,7 +21,7 @@ /** @override */ install(diskSize, username) { - this.methodCalled('install', [Number(diskSize), username]); + this.methodCalled('install', [diskSize, username]); } /** @override */ @@ -236,7 +236,7 @@ await clickInstall(); await fakeBrowserProxy.handler.whenCalled('install').then( ([diskSize, username]) => { - assertEquals(Number(diskSize), diskTicks[defaultIndex].value); + assertEquals(diskSize, diskTicks[defaultIndex].value); }); expectEquals(fakeBrowserProxy.handler.getCallCount('install'), 1); }); @@ -261,7 +261,7 @@ await clickInstall(); await fakeBrowserProxy.handler.whenCalled('install').then( ([diskSize, username]) => { - assertEquals(Number(diskSize), diskTicks[1].value); + assertEquals(diskSize, diskTicks[1].value); }); expectEquals(fakeBrowserProxy.handler.getCallCount('install'), 1); });
diff --git a/chrome/test/data/webui/nearby_share/nearby_confirmation_page_test.js b/chrome/test/data/webui/nearby_share/nearby_confirmation_page_test.js index db3bea3..cfa2596e 100644 --- a/chrome/test/data/webui/nearby_share/nearby_confirmation_page_test.js +++ b/chrome/test/data/webui/nearby_share/nearby_confirmation_page_test.js
@@ -89,7 +89,7 @@ test('renders share target name', function() { const name = 'Device Name'; confirmationPageElement.shareTarget = { - id: {high: BigInt(0), low: BigInt(0)}, + id: {high: 0, low: 0}, name, type: nearbyShare.mojom.ShareTargetType.kPhone, };
diff --git a/chrome/test/data/webui/nearby_share/nearby_discovery_page_test.js b/chrome/test/data/webui/nearby_share/nearby_discovery_page_test.js index 678ae62c..f6b9a5e 100644 --- a/chrome/test/data/webui/nearby_share/nearby_discovery_page_test.js +++ b/chrome/test/data/webui/nearby_share/nearby_discovery_page_test.js
@@ -85,7 +85,7 @@ */ function createShareTarget(name) { return { - id: {high: BigInt(0), low: BigInt(nextId++)}, + id: {high: 0, low: nextId++}, name, type: nearbyShare.mojom.ShareTargetType.kPhone, };
diff --git a/chrome/test/data/webui/new_tab_page/most_visited_test.js b/chrome/test/data/webui/new_tab_page/most_visited_test.js index 54c2d03..bb2a760 100644 --- a/chrome/test/data/webui/new_tab_page/most_visited_test.js +++ b/chrome/test/data/webui/new_tab_page/most_visited_test.js
@@ -61,7 +61,7 @@ source: i, titleSource: i, isQueryTile: false, - dataGenerationTime: {internalValue: BigInt(0)}, + dataGenerationTime: {internalValue: 0}, }; }); const tilesRendered = eventToPromise('dom-change', mostVisited.$.tiles); @@ -734,7 +734,7 @@ source: 0, titleSource: 0, isQueryTile: false, - dataGenerationTime: {internalValue: BigInt(0)}, + dataGenerationTime: {internalValue: 0}, }], visible: true, }); @@ -756,7 +756,7 @@ source: 0, titleSource: 0, isQueryTile: false, - dataGenerationTime: {internalValue: BigInt(0)}, + dataGenerationTime: {internalValue: 0}, }], visible: true, }); @@ -828,7 +828,7 @@ source: 0, titleSource: 0, isQueryTile: false, - dataGenerationTime: {internalValue: BigInt(0)}, + dataGenerationTime: {internalValue: 0}, }); assertDeepEquals(tiles[1], { title: 'b', @@ -837,7 +837,7 @@ source: 1, titleSource: 1, isQueryTile: false, - dataGenerationTime: {internalValue: BigInt(0)}, + dataGenerationTime: {internalValue: 0}, }); }); @@ -862,7 +862,7 @@ source: 0, titleSource: 0, isQueryTile: false, - dataGenerationTime: {internalValue: BigInt(0)}, + dataGenerationTime: {internalValue: 0}, }); });
diff --git a/chrome/test/data/webui/settings/chromeos/os_privacy_page_test.js b/chrome/test/data/webui/settings/chromeos/os_privacy_page_test.js index e1098509..bce57e7 100644 --- a/chrome/test/data/webui/settings/chromeos/os_privacy_page_test.js +++ b/chrome/test/data/webui/settings/chromeos/os_privacy_page_test.js
@@ -35,6 +35,9 @@ suggestedContentToggleEnabled: false, }); + privacyPage = document.createElement('os-settings-privacy-page'); + document.body.appendChild(privacyPage); + Polymer.dom.flush(); assertEquals(null, privacyPage.$$('#suggested-content')); @@ -131,4 +134,4 @@ deepLinkElement, getDeepActiveElement(), 'Send usage stats toggle should be focused for settingId=1103.'); }); -}); \ No newline at end of file +});
diff --git a/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js b/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js index b7ada82..effc43c0 100644 --- a/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js +++ b/chrome/test/data/webui/settings/cr_settings_v3_browsertest.js
@@ -500,6 +500,7 @@ ['SearchPage', 'search_page_test.js'], ['Search', 'search_settings_test.js'], ['SecurityKeysSubpage', 'security_keys_subpage_test.js'], + ['SecurityPage', 'security_page_test.js'], ['SecureDns', 'secure_dns_test.js'], // Copied from P2 test: Disabled for flakiness, see https://crbug.com/1061249 ['SiteData', 'site_data_test.js', 'DISABLED_All'], @@ -529,8 +530,6 @@ GEN('#if !defined(OS_MAC)'); [['EditDictionaryPage', 'edit_dictionary_page_test.js'], - // TODO(https://crbug.com/1081908): Flaky on Mac. Fix and re-enable. - ['SecurityPage', 'security_page_test.js'], ].forEach(test => registerTest(...test)); GEN('#endif //!defined(OS_MAC)');
diff --git a/chrome/test/data/webui/settings/privacy_page_test.js b/chrome/test/data/webui/settings/privacy_page_test.js index 1f92b56..16b365e3 100644 --- a/chrome/test/data/webui/settings/privacy_page_test.js +++ b/chrome/test/data/webui/settings/privacy_page_test.js
@@ -6,11 +6,11 @@ import {webUIListenerCallback} from 'chrome://resources/js/cr.m.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; -import {ClearBrowsingDataBrowserProxyImpl, CookieControlsMode, SafeBrowsingSetting, SiteSettingsPrefsBrowserProxyImpl} from 'chrome://settings/lazy_load.js'; +import {ClearBrowsingDataBrowserProxyImpl, ContentSettingsTypes, CookieControlsMode, SafeBrowsingSetting, SiteSettingsPrefsBrowserProxyImpl} from 'chrome://settings/lazy_load.js'; import {HatsBrowserProxyImpl, MetricsBrowserProxyImpl, PrivacyElementInteractions, PrivacyPageBrowserProxyImpl, Route, Router, routes, SecureDnsMode, SyncBrowserProxyImpl} from 'chrome://settings/settings.js'; import {assertEquals, assertFalse, assertTrue} from '../chai_assert.js'; -import {flushTasks} from '../test_util.m.js'; +import {flushTasks, isChildVisible, isVisible} from '../test_util.m.js'; import {TestClearBrowsingDataBrowserProxy} from './test_clear_browsing_data_browser_proxy.js'; import {TestHatsBrowserProxy} from './test_hats_browser_proxy.js'; @@ -35,6 +35,7 @@ routes.SITE_SETTINGS_LOCATION, routes.SITE_SETTINGS_MICROPHONE, routes.SITE_SETTINGS_MIDI_DEVICES, + routes.SITE_SETTINGS_NOTIFICATIONS, routes.SITE_SETTINGS_POPUPS, routes.SITE_SETTINGS_SENSORS, routes.SITE_SETTINGS_SERIAL_PORTS, @@ -54,7 +55,6 @@ /** @type {!Array<!Route>} */ const notRedesignedPages = [ - routes.SITE_SETTINGS_NOTIFICATIONS, routes.SITE_SETTINGS_HID_DEVICES, // Content settings that depend on flags being enabled. @@ -143,6 +143,7 @@ // Ensure pages are visited so that HTML components are stamped. redesignedPages.forEach(route => Router.getInstance().navigateTo(route)); notRedesignedPages.forEach(route => Router.getInstance().navigateTo(route)); + await flushTasks(); assertFalse(loadTimeData.getBoolean('enableContentSettingsRedesign')); assertEquals( @@ -152,6 +153,7 @@ page.root.querySelectorAll('settings-category-default-radio-group') .length, 0); + assertFalse(isChildVisible(page, '#notficationRadioGroup')); }); }); @@ -183,15 +185,32 @@ // Ensure pages are visited so that HTML components are stamped. redesignedPages.forEach(route => Router.getInstance().navigateTo(route)); notRedesignedPages.forEach(route => Router.getInstance().navigateTo(route)); + await flushTasks(); assertTrue(loadTimeData.getBoolean('enableContentSettingsRedesign')); assertEquals( page.root.querySelectorAll('category-default-setting').length, notRedesignedPages.length); + // All redesigned pages, except notifications, will use a + // settings-category-default-radio-group. assertEquals( page.root.querySelectorAll('settings-category-default-radio-group') .length, - redesignedPages.length); + redesignedPages.length - 1); + }); + + test('NotificationPageRedesign', async function() { + Router.getInstance().navigateTo(routes.SITE_SETTINGS_NOTIFICATIONS); + await flushTasks(); + + assertTrue(isChildVisible(page, '#notificationRadioGroup')); + const categorySettingExceptions = + /** @type {!CategorySettingExceptionsElement} */ + (page.$$('category-setting-exceptions')); + assertTrue(isVisible(categorySettingExceptions)); + assertEquals( + ContentSettingsTypes.NOTIFICATIONS, categorySettingExceptions.category); + assertFalse(isChildVisible(page, 'category-default-setting')); }); });
diff --git a/chromeos/components/camera_app_ui/resources/js/mojo/chrome_helper.js b/chromeos/components/camera_app_ui/resources/js/mojo/chrome_helper.js index 5357641..937a2c05 100644 --- a/chromeos/components/camera_app_ui/resources/js/mojo/chrome_helper.js +++ b/chromeos/components/camera_app_ui/resources/js/mojo/chrome_helper.js
@@ -204,12 +204,8 @@ }); const idleManager = blink.mojom.IdleManager.getRemote(); - // Set a large threshold since we don't care about user idle. Note that - // ESLint does not yet seem to know about BigInt, so it complains about an - // uppercase "function" being used as something other than a constructor, - // and about BigInt not existing. - // eslint-disable-next-line new-cap, no-undef - const threshold = {microseconds: BigInt(86400000000)}; + // Set a large threshold since we don't care about user idle. + const threshold = {microseconds: 86400000000}; const {state} = await idleManager.addMonitor( threshold, monitorCallbackRouter.$.bindNewPipeAndPassRemote()); callback(state.screen === blink.mojom.ScreenIdleState.kLocked);
diff --git a/chromeos/components/camera_app_ui/resources/strings/camera_strings_it.xtb b/chromeos/components/camera_app_ui/resources/strings/camera_strings_it.xtb index cd6d289..bc808df 100644 --- a/chromeos/components/camera_app_ui/resources/strings/camera_strings_it.xtb +++ b/chromeos/components/camera_app_ui/resources/strings/camera_strings_it.xtb
@@ -3,7 +3,7 @@ <translationbundle lang="it"> <translation id="1276998909102132017">Immagini della galleria</translation> <translation id="1430915738399379752">Stampa</translation> -<translation id="1473110567575736769">Timer 3 secondi</translation> +<translation id="1473110567575736769">Timer di 3 secondi</translation> <translation id="1620510694547887537">Videocamera</translation> <translation id="1627744224761163218">4 x 4</translation> <translation id="1664224225747386870">Nessun dato registrato</translation> @@ -64,7 +64,7 @@ <translation id="6965382102122355670">OK</translation> <translation id="698156982839284926">3 secondi</translation> <translation id="712848772518857951">Vuoi rimuovere <ph name="COUNT" /> elementi?</translation> -<translation id="7134221860976209830">Timer 10 secondi</translation> +<translation id="7134221860976209830">Timer di 10 secondi</translation> <translation id="7243947652761655814">Risoluzione video</translation> <translation id="7337660886763914220">Errori del file system.</translation> <translation id="7557677699350329807">Passa alla fotocamera successiva</translation>
diff --git a/chromeos/components/quick_answers/BUILD.gn b/chromeos/components/quick_answers/BUILD.gn index 8567886..fd41b46 100644 --- a/chromeos/components/quick_answers/BUILD.gn +++ b/chromeos/components/quick_answers/BUILD.gn
@@ -72,6 +72,7 @@ "search_result_parsers/unit_conversion_result_parser_unittest.cc", "test/test_helpers.cc", "test/test_helpers.h", + "translation_result_loader_unittest.cc", "understanding/intent_generator_unittest.cc", ]
diff --git a/chromeos/components/quick_answers/search_result_loader_unittest.cc b/chromeos/components/quick_answers/search_result_loader_unittest.cc index e2f29bf..373065f 100644 --- a/chromeos/components/quick_answers/search_result_loader_unittest.cc +++ b/chromeos/components/quick_answers/search_result_loader_unittest.cc
@@ -62,9 +62,9 @@ void TearDown() override { loader_.reset(); } protected: + base::test::SingleThreadTaskEnvironment task_environment_; std::unique_ptr<SearchResultLoader> loader_; std::unique_ptr<MockResultLoaderDelegate> mock_delegate_; - base::test::SingleThreadTaskEnvironment task_environment_; data_decoder::test::InProcessDataDecoder in_process_data_decoder_; network::TestURLLoaderFactory test_url_loader_factory_; }; @@ -77,7 +77,7 @@ kValidResponse); EXPECT_CALL( *mock_delegate_, - OnQuickAnswerReceived(QuickAnswerEqual(&(*expected_quick_answer)))); + OnQuickAnswerReceived(QuickAnswerEqual(expected_quick_answer.get()))); EXPECT_CALL(*mock_delegate_, OnNetworkError()).Times(0); loader_->Fetch(PreprocessRequest(IntentInfo("23cm", IntentType::kUnknown))); base::RunLoop().RunUntilIdle();
diff --git a/chromeos/components/quick_answers/translation_result_loader_unittest.cc b/chromeos/components/quick_answers/translation_result_loader_unittest.cc new file mode 100644 index 0000000..b58bc23 --- /dev/null +++ b/chromeos/components/quick_answers/translation_result_loader_unittest.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 "chromeos/components/quick_answers/translation_result_loader.h" + +#include <memory> +#include <string> + +#include "ash/public/cpp/quick_answers/controller/quick_answers_browser_client.h" +#include "base/test/task_environment.h" +#include "chromeos/components/quick_answers/quick_answers_model.h" +#include "chromeos/components/quick_answers/test/test_helpers.h" +#include "chromeos/components/quick_answers/utils/quick_answers_utils.h" +#include "chromeos/services/assistant/public/shared/constants.h" +#include "services/data_decoder/public/cpp/test_support/in_process_data_decoder.h" +#include "services/network/test/test_url_loader_factory.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace chromeos { +namespace quick_answers { +namespace { + +constexpr char kCloudTranslationApiRequest[] = + "https://translation.googleapis.com/language/translate/v2"; + +constexpr char kValidResponse[] = R"( + { + "data": { + "translations": [ + { + "translatedText": "prueba" + } + ] + } + } +)"; + +constexpr char kTestTranslationResult[] = "prueba"; + +const auto kTestTranslationIntent = + IntentInfo("test", IntentType::kTranslation, "en", "es"); + +class FakeQuickAnswersBrowserClient : public ash::QuickAnswersBrowserClient { + public: + FakeQuickAnswersBrowserClient() = default; + ~FakeQuickAnswersBrowserClient() override = default; + + // ash::QuickAnswersBrowserClient: + void RequestAccessToken(GetAccessTokenCallback callback) override { + std::move(callback).Run(std::string()); + } +}; + +} // namespace + +class TranslationResultLoaderTest : public testing::Test { + public: + TranslationResultLoaderTest() = default; + + TranslationResultLoaderTest(const TranslationResultLoaderTest&) = delete; + TranslationResultLoaderTest& operator=(const TranslationResultLoaderTest&) = + delete; + + // testing::Test: + void SetUp() override { + quick_answers_browser_client_ = + std::make_unique<FakeQuickAnswersBrowserClient>(); + mock_delegate_ = std::make_unique<MockResultLoaderDelegate>(); + loader_ = std::make_unique<TranslationResultLoader>( + &test_url_loader_factory_, mock_delegate_.get()); + } + + void TearDown() override { loader_.reset(); } + + protected: + base::test::SingleThreadTaskEnvironment task_environment_; + std::unique_ptr<FakeQuickAnswersBrowserClient> quick_answers_browser_client_; + std::unique_ptr<TranslationResultLoader> loader_; + std::unique_ptr<MockResultLoaderDelegate> mock_delegate_; + data_decoder::test::InProcessDataDecoder in_process_data_decoder_; + network::TestURLLoaderFactory test_url_loader_factory_; +}; + +TEST_F(TranslationResultLoaderTest, Success) { + std::unique_ptr<QuickAnswer> expected_quick_answer = + std::make_unique<QuickAnswer>(); + expected_quick_answer->primary_answer = kTestTranslationResult; + test_url_loader_factory_.AddResponse(kCloudTranslationApiRequest, + kValidResponse); + EXPECT_CALL( + *mock_delegate_, + OnQuickAnswerReceived(QuickAnswerEqual(expected_quick_answer.get()))); + EXPECT_CALL(*mock_delegate_, OnNetworkError()).Times(0); + loader_->Fetch(PreprocessRequest(kTestTranslationIntent)); + base::RunLoop().RunUntilIdle(); +} + +TEST_F(TranslationResultLoaderTest, NetworkError) { + test_url_loader_factory_.AddResponse( + GURL(kCloudTranslationApiRequest), network::mojom::URLResponseHead::New(), + std::string(), network::URLLoaderCompletionStatus(net::HTTP_NOT_FOUND)); + EXPECT_CALL(*mock_delegate_, OnNetworkError()); + EXPECT_CALL(*mock_delegate_, OnQuickAnswerReceived(testing::_)).Times(0); + loader_->Fetch(PreprocessRequest(kTestTranslationIntent)); + base::RunLoop().RunUntilIdle(); +} + +TEST_F(TranslationResultLoaderTest, EmptyResponse) { + test_url_loader_factory_.AddResponse(kCloudTranslationApiRequest, + std::string()); + EXPECT_CALL(*mock_delegate_, OnQuickAnswerReceived(testing::Eq(nullptr))); + EXPECT_CALL(*mock_delegate_, OnNetworkError()).Times(0); + loader_->Fetch(PreprocessRequest(kTestTranslationIntent)); + base::RunLoop().RunUntilIdle(); +} + +} // namespace quick_answers +} // namespace chromeos
diff --git a/chromeos/components/telemetry_extension_ui/resources/trusted.js b/chromeos/components/telemetry_extension_ui/resources/trusted.js index 0e532d2..e801301 100644 --- a/chromeos/components/telemetry_extension_ui/resources/trusted.js +++ b/chromeos/components/telemetry_extension_ui/resources/trusted.js
@@ -562,7 +562,7 @@ (message); this.assertNumberIsPositive(request.lengthSeconds); return await getOrCreateDiagnosticsService().runPrimeSearchRoutine( - request.lengthSeconds, BigInt(request.maximumNumber)); + request.lengthSeconds, request.maximumNumber); }; /** @@ -813,10 +813,9 @@ // At this point, closure compiler knows that the input is {!Object}. // Rule #2: convert objects like { value: X } to X, where X is either a - // number, a bigint, or a boolean. + // number or a boolean. if (Object.entries(input).length === 1 && (typeof input['value'] === 'number' || - typeof input['value'] === typeof BigInt(0) || typeof input['value'] === 'boolean')) { return input['value']; }
diff --git a/chromeos/components/telemetry_extension_ui/test/BUILD.gn b/chromeos/components/telemetry_extension_ui/test/BUILD.gn index 56b424c46..37ff224 100644 --- a/chromeos/components/telemetry_extension_ui/test/BUILD.gn +++ b/chromeos/components/telemetry_extension_ui/test/BUILD.gn
@@ -85,8 +85,6 @@ "untrusted_test_handlers.js", ] deps = [ "//chromeos/components/telemetry_extension_ui/resources:untrusted" ] - externs_list = [ - "$externs_path/pending.js", - "//chromeos/components/web_applications/js2gtest_support.externs.js", - ] + externs_list = + [ "//chromeos/components/web_applications/js2gtest_support.externs.js" ] }
diff --git a/chromeos/components/telemetry_extension_ui/test/untrusted_browsertest.js b/chromeos/components/telemetry_extension_ui/test/untrusted_browsertest.js index 783283ce..94a8e02 100644 --- a/chromeos/components/telemetry_extension_ui/test/untrusted_browsertest.js +++ b/chromeos/components/telemetry_extension_ui/test/untrusted_browsertest.js
@@ -548,13 +548,13 @@ ]); // Rounded down to the nearest 100MiB due to privacy requirement. - const availableSpace = BigInt( - Math.floor(1125899906842624 / (100 * 1024 * 1024)) * (100 * 1024 * 1024)); + const availableSpace = + Math.floor(1125899906842624 / (100 * 1024 * 1024)) * (100 * 1024 * 1024); assertDeepEquals(response, { batteryResult: { batteryInfo: { - cycleCount: BigInt(100000000000000), + cycleCount: 100000000000000, voltageNow: 1234567890.123456, vendor: 'Google', serialNumber: 'abcdef', @@ -567,23 +567,23 @@ technology: 'Li-ion', status: 'Charging', manufactureDate: '2020-07-30', - temperature: BigInt(7777777777777777), + temperature: 7777777777777777, } }, blockDeviceResult: { blockDeviceInfo: [{ path: '/dev/device1', - size: BigInt(5555555555555555), + size: 5555555555555555, type: 'NVMe', manufacturerId: 200, name: 'goog', serial: '4287654321', - bytesReadSinceLastBoot: BigInt(9000000000000000), - bytesWrittenSinceLastBoot: BigInt(8000000000000000), - readTimeSecondsSinceLastBoot: BigInt(7000000000000000), - writeTimeSecondsSinceLastBoot: BigInt(6666666666666666), - ioTimeSecondsSinceLastBoot: BigInt(1111111111111), - discardTimeSecondsSinceLastBoot: BigInt(77777777777777) + bytesReadSinceLastBoot: 9000000000000000, + bytesWrittenSinceLastBoot: 8000000000000000, + readTimeSecondsSinceLastBoot: 7000000000000000, + writeTimeSecondsSinceLastBoot: 6666666666666666, + ioTimeSecondsSinceLastBoot: 1111111111111, + discardTimeSecondsSinceLastBoot: 77777777777777 }] }, vpdResult: {vpdInfo: {skuNumber: 'sku-18'}}, @@ -599,23 +599,17 @@ maxClockSpeedKhz: 2147494759, scalingMaxFrequencyKhz: 1073764046, scalingCurrentFrequencyKhz: 536904245, - idleTimeMs: BigInt(0), + idleTimeMs: 0, cStates: [ - { - name: 'C1', - timeInStateSinceLastBootUs: BigInt(1125899906875957) - }, - { - name: 'C2', - timeInStateSinceLastBootUs: BigInt(1125899906877777) - } + {name: 'C1', timeInStateSinceLastBootUs: 1125899906875957}, + {name: 'C2', timeInStateSinceLastBootUs: 1125899906877777} ] }, { maxClockSpeedKhz: 1147494759, scalingMaxFrequencyKhz: 1063764046, scalingCurrentFrequencyKhz: 936904246, - idleTimeMs: BigInt(0), + idleTimeMs: 0, cStates: [] } ] @@ -635,7 +629,7 @@ totalMemoryKib: 2147483648, freeMemoryKib: 2147573648, availableMemoryKib: 2147571148, - pageFaultsSinceLastBoot: BigInt(2199971148), + pageFaultsSinceLastBoot: 2199971148 } }, backlightResult: { @@ -653,7 +647,7 @@ statefulPartitionResult: { partitionInfo: { availableSpace: availableSpace, - totalSpace: BigInt(1125900006842624), + totalSpace: 1125900006842624, } }, bluetoothResult: {
diff --git a/chromeos/constants/chromeos_features.cc b/chromeos/constants/chromeos_features.cc index 7fac3108..6ff38bca 100644 --- a/chromeos/constants/chromeos_features.cc +++ b/chromeos/constants/chromeos_features.cc
@@ -592,7 +592,7 @@ // Enables a settings UI toggle that controls Suggested Content status. Also // enables a corresponding notice in the Launcher about Suggested Content. const base::Feature kSuggestedContentToggle{"SuggestedContentToggle", - base::FEATURE_DISABLED_BY_DEFAULT}; + base::FEATURE_ENABLED_BY_DEFAULT}; // Enables or disables using the system input engine for physical typing in // languages based on latin script.
diff --git a/chromeos/services/tts/tts_service.cc b/chromeos/services/tts/tts_service.cc index 3143563..043597f 100644 --- a/chromeos/services/tts/tts_service.cc +++ b/chromeos/services/tts/tts_service.cc
@@ -205,8 +205,10 @@ return; output_device_->Pause(); - if (clear_buffers) + if (clear_buffers) { buffers_.clear(); + libchrometts_.GoogleTtsFinalizeBuffered(); + } is_playing_ = false; }
diff --git a/chromeos/strings/chromeos_strings_as.xtb b/chromeos/strings/chromeos_strings_as.xtb index fbbe21c..ebe95f720 100644 --- a/chromeos/strings/chromeos_strings_as.xtb +++ b/chromeos/strings/chromeos_strings_as.xtb
@@ -3,6 +3,7 @@ <translationbundle lang="as"> <translation id="1018656279737460067">বাতিল কৰা হ’ল</translation> <translation id="1195447618553298278">অজ্ঞাত আসোঁৱাহ।</translation> +<translation id="1330426557709298164">JPG</translation> <translation id="1413240736185167732">বিফল হৈছে - ফিল্টাৰ বিফল হৈছে</translation> <translation id="1468664791493211953">অ'ফাৰসমূহ</translation> <translation id="1478594628797167447">স্কেনাৰ</translation> @@ -46,6 +47,7 @@ <translation id="4227825898293920515">পাছৱর্ডৰ ম্যাদ উকলাৰ সময় <ph name="TIME" /></translation> <translation id="4238516577297848345">কোনো প্ৰিণ্টৰ কাম চলি থকা নাই</translation> <translation id="4297501883039923494">বন্ধ হৈছে - অজ্ঞাত আসোঁৱাহ</translation> +<translation id="4382484599443659549">PDF</translation> <translation id="4429881212383817840">Kerberos টিকেটৰ ম্যাদ শীঘ্ৰেই উকলি যাব</translation> <translation id="445059817448385655">পুৰণি পাছৱৰ্ড</translation> <translation id="4627232916386272576"><ph name="TOTAL_PAGE_NUMBER" />ৰ ভিতৰত <ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="PRINTED_PAGE_NUMBER" />। প্ৰিণ্টৰ কাৰ্যটো বাতিল কৰিবলৈ এণ্টাৰ টিপক।</translation> @@ -73,6 +75,7 @@ <translation id="6058625436358447366">সম্পূর্ণ কৰিবলৈ আপোনাৰ পুৰণি আৰু নতুন পাছৱর্ডসমূহ দিয়ক</translation> <translation id="6106186594183574873">সম্পূর্ণ কৰিবলৈ আপোনাৰ পুৰণি পাছৱর্ড দিয়ক</translation> <translation id="6146993107019042706">সম্পূর্ণ কৰিবলৈ আপোনাৰ নতুন পাছৱর্ড দিয়ক</translation> +<translation id="6147514244879357420">PNG</translation> <translation id="636850387210749493">এন্টাৰপ্ৰাইজৰ পঞ্জীয়ন</translation> <translation id="649050271426829538">বন্ধ হৈছে - কাগজ ঠাহ খাই গৈছে</translation> <translation id="6517239166834772319">অন্বেষণ</translation> @@ -82,6 +85,7 @@ <translation id="6747215703636344499">বন্ধ হৈছে - আউটপুট ভৰ্তি হৈ গৈছে</translation> <translation id="7162487448488904999">Gallery</translation> <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation> +<translation id="7359657277149375382">ফাইলৰ প্রকাৰ</translation> <translation id="7561454561030345039">এই কাৰ্যটো আপোনাৰ প্ৰশাসকে পৰিচালনা কৰে</translation> <translation id="7658239707568436148">বাতিল কৰক</translation> <translation id="7690294790491645610">নতুন পাছৱর্ড নিশ্চিত কৰক</translation>
diff --git a/chromeos/strings/chromeos_strings_bn.xtb b/chromeos/strings/chromeos_strings_bn.xtb index fe7d09d1..ba4c934 100644 --- a/chromeos/strings/chromeos_strings_bn.xtb +++ b/chromeos/strings/chromeos_strings_bn.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">পাসওয়ার্ড পরিবর্তন করার সময় পেরিয়ে গেছে</translation> <translation id="2049639323467105390">এই ডিভাইস <ph name="DOMAIN" /> দ্বারা পরিচালিত হয়৷</translation> <translation id="2161394479394250669">প্রিন্ট জবটি বাতিল করা হয়েছে</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">আশেপাশের ডিভাইস খুঁজে পেতে ব্লুটুথ চালু করুন</translation> <translation id="2375079107209812402">আর <ph name="ATTEMPTS_LEFT" /> বার চেষ্টা করতে পারবেন</translation> <translation id="2517472476991765520">স্ক্যান করুন</translation>
diff --git a/chromeos/strings/chromeos_strings_es-419.xtb b/chromeos/strings/chromeos_strings_es-419.xtb index 65b898e..cc8b927a 100644 --- a/chromeos/strings/chromeos_strings_es-419.xtb +++ b/chromeos/strings/chromeos_strings_es-419.xtb
@@ -3,6 +3,7 @@ <translationbundle lang="es-419"> <translation id="1018656279737460067">Cancelado</translation> <translation id="1195447618553298278">Error desconocido.</translation> +<translation id="1330426557709298164">JPG</translation> <translation id="1413240736185167732">Error: Problema en el filtro</translation> <translation id="1468664791493211953">Ofertas</translation> <translation id="1478594628797167447">Escáner</translation> @@ -46,6 +47,7 @@ <translation id="4227825898293920515">La contraseña caduca en <ph name="TIME" /></translation> <translation id="4238516577297848345">No hay trabajos de impresión en curso</translation> <translation id="4297501883039923494">Se detuvo: error desconocido</translation> +<translation id="4382484599443659549">PDF</translation> <translation id="4429881212383817840">El ticket de Kerberos caducará pronto</translation> <translation id="445059817448385655">Contraseña anterior</translation> <translation id="4627232916386272576"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="PRINTED_PAGE_NUMBER" /> de un total de <ph name="TOTAL_PAGE_NUMBER" />. Presiona Intro para cancelar el trabajo de impresión.</translation> @@ -73,6 +75,7 @@ <translation id="6058625436358447366">Para finalizar, ingresa tu contraseña anterior y la nueva</translation> <translation id="6106186594183574873">Para finalizar, ingresa tu contraseña anterior</translation> <translation id="6146993107019042706">Para finalizar, ingresa tu nueva contraseña</translation> +<translation id="6147514244879357420">PNG</translation> <translation id="636850387210749493">Registro de empresa</translation> <translation id="649050271426829538">Se detuvo: se atascó el papel</translation> <translation id="6517239166834772319">Explorar</translation>
diff --git a/chromeos/strings/chromeos_strings_ja.xtb b/chromeos/strings/chromeos_strings_ja.xtb index eb6c543a..30cc9af 100644 --- a/chromeos/strings/chromeos_strings_ja.xtb +++ b/chromeos/strings/chromeos_strings_ja.xtb
@@ -19,6 +19,7 @@ <translation id="1979103255016296513">パスワードの変更期限を過ぎました</translation> <translation id="2049639323467105390">このデバイスは <ph name="DOMAIN" /> によって管理されています。</translation> <translation id="2161394479394250669">印刷ジョブをキャンセル</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">近くのデバイスを検出するには Bluetooth をオンにしてください</translation> <translation id="2375079107209812402">あと <ph name="ATTEMPTS_LEFT" /> 回</translation> <translation id="2517472476991765520">スキャン</translation>
diff --git a/chromeos/strings/chromeos_strings_kn.xtb b/chromeos/strings/chromeos_strings_kn.xtb index 308af5fa..5c5990f 100644 --- a/chromeos/strings/chromeos_strings_kn.xtb +++ b/chromeos/strings/chromeos_strings_kn.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">ಪಾಸ್ವರ್ಡ್ ಬದಲಾವಣೆ ಮಾಡಲು ತೀರಾ ತಡವಾಗಿದೆ</translation> <translation id="2049639323467105390">ಈ ಸಾಧನವು <ph name="DOMAIN" /> ನಿಂದ ನಿರ್ವಹಿಸಲ್ಪಟ್ಟಿದೆ.</translation> <translation id="2161394479394250669">ಮುದ್ರಣ ಕಾರ್ಯವನ್ನು ರದ್ದುಮಾಡಿ</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">ಸಮೀಪದ ಸಾಧನಗಳನ್ನು ಅನ್ವೇಷಿಸಲು ಬ್ಲೂಟೂತ್ ಆನ್ ಮಾಡಿ</translation> <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> ಪ್ರಯತ್ನಗಳು ಬಾಕಿ ಉಳಿದಿವೆ</translation> <translation id="2517472476991765520">ಸ್ಕ್ಯಾನ್</translation>
diff --git a/chromeos/strings/chromeos_strings_ne.xtb b/chromeos/strings/chromeos_strings_ne.xtb index fdae896..6788e48c0 100644 --- a/chromeos/strings/chromeos_strings_ne.xtb +++ b/chromeos/strings/chromeos_strings_ne.xtb
@@ -18,6 +18,7 @@ <translation id="1979103255016296513">पासवर्ड परिवर्तन गर्न ढिला भइसकेको छ</translation> <translation id="2049639323467105390">यो यन्त्र <ph name="DOMAIN" /> द्वारा व्यवस्थित गरिएको छ।</translation> <translation id="2161394479394250669">प्रिन्ट गर्ने कार्य रद्द गर्नुहोस्</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">नजिकैका यन्त्रहरू पत्ता लगाउन ब्लुटुथ सक्रिय गर्नुहोस्</translation> <translation id="2375079107209812402">अब <ph name="ATTEMPTS_LEFT" /> पटक प्रयास गर्न मिल्छ</translation> <translation id="2517472476991765520">स्क्यान गर्नुहोस्</translation>
diff --git a/chromeos/strings/chromeos_strings_or.xtb b/chromeos/strings/chromeos_strings_or.xtb index 7c8b373..3e20fcf9 100644 --- a/chromeos/strings/chromeos_strings_or.xtb +++ b/chromeos/strings/chromeos_strings_or.xtb
@@ -3,6 +3,7 @@ <translationbundle lang="or"> <translation id="1018656279737460067">ବାତିଲ୍ କରାଗଲା</translation> <translation id="1195447618553298278">ଅଜ୍ଞାତ ତୃଟି ।</translation> +<translation id="1330426557709298164">JPG</translation> <translation id="1413240736185167732">ବିଫଳ ହୋଇଛି - ଫିଲ୍ଟର୍ ବିଫଳ ହୋଇଛି</translation> <translation id="1468664791493211953">ଅଫରଗୁଡ଼ିକ</translation> <translation id="1478594628797167447">ସ୍କାନର୍</translation> @@ -46,6 +47,7 @@ <translation id="4227825898293920515"><ph name="TIME" />ରେ ପାସ୍ୱାର୍ଡର ମିଆଦ ଶେଷ ହେଉଛି</translation> <translation id="4238516577297848345">କୌଣସି ପ୍ରିଣ୍ଟ କାର୍ଯ୍ୟ ଚାଲୁ ନାହିଁ</translation> <translation id="4297501883039923494">ବନ୍ଦ ହୋଇଯାଇଛି - ଅଜଣା ତ୍ରୁଟି</translation> +<translation id="4382484599443659549">PDF</translation> <translation id="4429881212383817840">Kerberos ଟିକେଟ୍ର ମିଆଦ ଶୀଘ୍ର ଶେଷ ହୋଇଯିବ</translation> <translation id="445059817448385655">ପୁରୁଣା ପାସ୍ୱାର୍ଡ</translation> <translation id="4627232916386272576"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="TOTAL_PAGE_NUMBER" />ଟି ମଧ୍ୟରୁ <ph name="PRINTED_PAGE_NUMBER" /> ନମ୍ବର ପୃଷ୍ଠା। ପ୍ରିଣ୍ଟ କାର୍ଯ୍ୟ ବାତିଲ୍ କରିବାକୁ Enter ଦବାନ୍ତୁ।</translation> @@ -73,6 +75,7 @@ <translation id="6058625436358447366">ସମ୍ପୂର୍ଣ୍ଣ କରିବା ପାଇଁ, ଆପଣଙ୍କର ପୁରୁଣା ଏବଂ ନୂଆ ପାସ୍ୱାର୍ଡଗୁଡ଼ିକ ଲେଖନ୍ତୁ</translation> <translation id="6106186594183574873">ସମ୍ପୂର୍ଣ୍ଣ କରିବା ପାଇଁ, ଆପଣଙ୍କର ପୁରୁଣା ପାସ୍ୱାର୍ଡ ଲେଖନ୍ତୁ</translation> <translation id="6146993107019042706">ସମ୍ପୂର୍ଣ୍ଣ କରିବା ପାଇଁ, ଆପଣଙ୍କର ନୂଆ ପାସ୍ୱାର୍ଡ ଲେଖନ୍ତୁ</translation> +<translation id="6147514244879357420">PNG</translation> <translation id="636850387210749493">ଏଣ୍ଟର୍ପ୍ରାଇଜ୍ ନାମାଙ୍କନ</translation> <translation id="649050271426829538">ବନ୍ଦ ହୋଇଯାଇଛି - ପେପର୍ ଜାମ୍</translation> <translation id="6517239166834772319">ଏକ୍ସପ୍ଲୋର୍</translation> @@ -82,6 +85,7 @@ <translation id="6747215703636344499">ବନ୍ଦ ହୋଇଯାଇଛି - ଆଉଟପୁଟ୍ ପୂର୍ଣ୍ଣ ହୋଇଯାଇଛି</translation> <translation id="7162487448488904999">ଗ୍ୟାଲେରୀ</translation> <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation> +<translation id="7359657277149375382">ଫାଇଲର ପ୍ରକାର</translation> <translation id="7561454561030345039">ଏହି କାର୍ଯ୍ୟ ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ଦ୍ୱାରା ପରିଚାଳିତ ହୁଏ</translation> <translation id="7658239707568436148">ବାତିଲ୍</translation> <translation id="7690294790491645610">ନୂଆ ପାସ୍ୱାର୍ଡ ସୁନିଶ୍ଚିତ କରନ୍ତୁ</translation>
diff --git a/chromeos/strings/chromeos_strings_pa.xtb b/chromeos/strings/chromeos_strings_pa.xtb index dc608048..3c2d847a 100644 --- a/chromeos/strings/chromeos_strings_pa.xtb +++ b/chromeos/strings/chromeos_strings_pa.xtb
@@ -19,6 +19,7 @@ <translation id="1979103255016296513">ਪਾਸਵਰਡ ਬਦਲਣਾ ਬਾਕੀ ਹੈ</translation> <translation id="2049639323467105390">ਇਹ ਡੀਵਾਈਸ <ph name="DOMAIN" /> ਵੱਲੋਂ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।</translation> <translation id="2161394479394250669">ਪ੍ਰਿੰਟ ਜੌਬ ਰੱਦ ਕਰੋ</translation> +<translation id="2326139988748364651"><ph name="RESOLUTION_VALUE" /> dpi</translation> <translation id="2338501278241028356">ਨੇੜਲੇ ਡਿਵਾਈਸਾਂ ਨੂੰ ਲੱਭਣ ਲਈ ਬਲੂਟੁੱਥ ਚਾਲੂ ਕਰੋ</translation> <translation id="2375079107209812402"><ph name="ATTEMPTS_LEFT" /> ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ</translation> <translation id="2517472476991765520">ਸਕੈਨ ਕਰੋ</translation>
diff --git a/chromeos/strings/chromeos_strings_ta.xtb b/chromeos/strings/chromeos_strings_ta.xtb index 2ad5fc8..21c18d06 100644 --- a/chromeos/strings/chromeos_strings_ta.xtb +++ b/chromeos/strings/chromeos_strings_ta.xtb
@@ -3,6 +3,7 @@ <translationbundle lang="ta"> <translation id="1018656279737460067">ரத்து செய்யப்பட்டது</translation> <translation id="1195447618553298278">தெரியாத பிழை.</translation> +<translation id="1330426557709298164">JPG</translation> <translation id="1413240736185167732">ஃபில்டர் வேலை செய்யாததால் அச்சிட முடியவில்லை</translation> <translation id="1468664791493211953">ஆஃபர்கள்</translation> <translation id="1478594628797167447">ஸ்கேனர்</translation> @@ -46,6 +47,7 @@ <translation id="4227825898293920515">கடவுச்சொல் காலாவதியாக இன்னும் <ph name="TIME" /></translation> <translation id="4238516577297848345">அச்சுப் பணி எதுவும் செயலில் இல்லை</translation> <translation id="4297501883039923494">அறியப்படாத பிழை காரணமாக அச்சிட முடியவில்லை</translation> +<translation id="4382484599443659549">PDF</translation> <translation id="4429881212383817840">Kerberos டிக்கெட் விரைவில் காலாவதியாகும்</translation> <translation id="445059817448385655">தற்போதைய கடவுச்சொல்</translation> <translation id="4627232916386272576"><ph name="DOCUMENT_TITLE" />, <ph name="PRINTER_NAME" />, <ph name="CREATION_TIME" />, <ph name="PRINTED_PAGE_NUMBER" />/<ph name="TOTAL_PAGE_NUMBER" />. அச்சுப் பணியை ரத்துசெய்ய என்ட்டர் விசையை அழுத்தவும்.</translation> @@ -73,6 +75,7 @@ <translation id="6058625436358447366">நிறைவுசெய்ய தற்போதைய கடவுச்சொல்லையும் புதிய கடவுச்சொல்லையும் உள்ளிடவும்</translation> <translation id="6106186594183574873">நிறைவுசெய்ய தற்போதைய கடவுச்சொல்லை உள்ளிடவும்</translation> <translation id="6146993107019042706">நிறைவுசெய்ய புதிய கடவுச்சொல்லை உள்ளிடவும்</translation> +<translation id="6147514244879357420">PNG</translation> <translation id="636850387210749493">நிறுவனப் பதிவு</translation> <translation id="649050271426829538">காகிதம் சிக்கிக் கொண்டதால் அச்சிட முடியவில்லை</translation> <translation id="6517239166834772319">Explore</translation>
diff --git a/chromeos/strings/chromeos_strings_ur.xtb b/chromeos/strings/chromeos_strings_ur.xtb index 6b6c2fcb..f84a842f 100644 --- a/chromeos/strings/chromeos_strings_ur.xtb +++ b/chromeos/strings/chromeos_strings_ur.xtb
@@ -3,6 +3,7 @@ <translationbundle lang="ur"> <translation id="1018656279737460067">منسوخ کردہ</translation> <translation id="1195447618553298278">نامعلوم خرابی۔</translation> +<translation id="1330426557709298164">JPG</translation> <translation id="1413240736185167732">ناکام ہو گیا - فلٹر ناکام ہو گیا</translation> <translation id="1468664791493211953">پیشکشیں</translation> <translation id="1478594628797167447">اسکینر</translation> @@ -46,6 +47,7 @@ <translation id="4227825898293920515">پاس ورڈ کی میعاد <ph name="TIME" /> میں ختم ہونے والی ہے</translation> <translation id="4238516577297848345">کوئی پرنٹ جاب پیشرفت میں نہیں</translation> <translation id="4297501883039923494">رک گیا - نامعلوم خرابی</translation> +<translation id="4382484599443659549">PDF</translation> <translation id="4429881212383817840">Kerberos کی ٹکٹ کی میعاد جلد ہی ختم ہو جائے گی</translation> <translation id="445059817448385655">پرانا پاس ورڈ</translation> <translation id="4627232916386272576"><ph name="DOCUMENT_TITLE" />، <ph name="PRINTER_NAME" />، <ph name="CREATION_TIME" />، <ph name="TOTAL_PAGE_NUMBER" /> میں سے <ph name="PRINTED_PAGE_NUMBER" />۔ براہ کرم پرنٹ جاب منسوخ کرنے کے لیے enter دبائیں۔</translation> @@ -72,6 +74,7 @@ <translation id="6058625436358447366">مکمل کرنے کے لئے اپنے پرانے اور نئے پاس ورڈز درج کریں</translation> <translation id="6106186594183574873">مکمل کرنے کے لئے اپنا پرانا پاس ورڈ درج کریں</translation> <translation id="6146993107019042706">مکمل کرنے کے لئے اپنا نیا پاس ورڈ درج کریں</translation> +<translation id="6147514244879357420">PNG</translation> <translation id="636850387210749493">انٹرپرائز اندراج</translation> <translation id="649050271426829538">رک گیا - پیپر جام</translation> <translation id="6517239166834772319">دریافت</translation> @@ -81,6 +84,7 @@ <translation id="6747215703636344499">رک گیا - آؤٹ پٹ بھر گیا ہے</translation> <translation id="7162487448488904999">گیلری</translation> <translation id="7274587244503383581"><ph name="PRINTED_PAGES_NUMBER" />/<ph name="TOTAL_PAGES_NUMBER" /></translation> +<translation id="7359657277149375382">فائل کی قسم</translation> <translation id="7561454561030345039">یہ کارروائی آپ کے منتظم کے زیر انتظام ہے</translation> <translation id="7658239707568436148">منسوخ کریں</translation> <translation id="7690294790491645610">نئے پاس ورڈ کی توثیق کریں</translation>
diff --git a/components/arc/mojom/file_system.mojom b/components/arc/mojom/file_system.mojom index 79f7525..c3de98c0 100644 --- a/components/arc/mojom/file_system.mojom +++ b/components/arc/mojom/file_system.mojom
@@ -2,12 +2,14 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // -// Next MinVersion: 15 +// Next MinVersion: 16 module arc.mojom; import "components/arc/mojom/bitmap.mojom"; +import "components/arc/mojom/gfx.mojom"; import "components/arc/mojom/intent_common.mojom"; +import "components/arc/mojom/video_common.mojom"; import "url/mojom/url.mojom"; // Represents a document in Android DocumentsProvider. @@ -58,6 +60,10 @@ // Flag indicating that a document can be moved to another location within // the same document provider. [MinVersion=12] bool supports_move; + + // Flag indicating that a document has a thumbnail available that can be + // fetched with OpenThumbnail. + [MinVersion=15] bool supports_thumbnail; }; // Represents a root in Android DocumentsProvider. @@ -285,7 +291,7 @@ (FileSelectorElements elements); }; -// Next method ID: 21 +// Next method ID: 22 interface FileSystemInstance { // Notes about Android Documents Provider: // @@ -402,6 +408,11 @@ // URL. [MinVersion=13] OpenFileToWrite@18(string url) => (handle? fd); + // Asks the ContentResolver to get a FD to read the thumbnail of a + // DocumentsProvider file specified by the URL. The thumbnail should be close + // in size (width and height) but not necessarily the same as |size_hint|. + [MinVersion=15] OpenThumbnail@21(string url, Size size_hint) => (handle? fd); + // Uninstalls a document watcher. // // After this method call returns, OnDocumentChanged() will never be called
diff --git a/components/arc/mojom/gfx.mojom b/components/arc/mojom/gfx.mojom index aaf58a2..3400f69 100644 --- a/components/arc/mojom/gfx.mojom +++ b/components/arc/mojom/gfx.mojom
@@ -26,3 +26,9 @@ // End offset in UTF-16 index. uint32 end; }; + +// The graphics dimension. Both width and height should be non-negative. +struct Size { + int32 width; + int32 height; +};
diff --git a/components/arc/mojom/screen_capture.mojom b/components/arc/mojom/screen_capture.mojom index ca72e91..794b0f5 100644 --- a/components/arc/mojom/screen_capture.mojom +++ b/components/arc/mojom/screen_capture.mojom
@@ -14,7 +14,7 @@ module arc.mojom; -// For gfx::Size. +import "components/arc/mojom/gfx.mojom"; import "components/arc/mojom/video_common.mojom"; // Implemented by Chrome in order to allow requesting of permissions to perform
diff --git a/components/arc/mojom/video_common.mojom b/components/arc/mojom/video_common.mojom index 32078938..bc2df6a 100644 --- a/components/arc/mojom/video_common.mojom +++ b/components/arc/mojom/video_common.mojom
@@ -7,6 +7,8 @@ module arc.mojom; +import "components/arc/mojom/gfx.mojom"; + [Extensible] enum VideoCodecProfile { // The values must match to the values in media::VideoCodecProfile. @@ -88,12 +90,6 @@ int32 stride; }; -// The graphics dimension. Both width and height should be non-negative. -struct Size { - int32 width; - int32 height; -}; - // The information of a plane of a video frame that describes how physical // buffers are allocated. struct ColorPlaneLayout {
diff --git a/components/arc/mojom/video_encode_accelerator.mojom b/components/arc/mojom/video_encode_accelerator.mojom index 3bd387e..dfcb040 100644 --- a/components/arc/mojom/video_encode_accelerator.mojom +++ b/components/arc/mojom/video_encode_accelerator.mojom
@@ -7,6 +7,7 @@ module arc.mojom; +import "components/arc/mojom/gfx.mojom"; import "components/arc/mojom/video_common.mojom"; // Next MinVersion: 5
diff --git a/components/arc/mojom/video_protected_buffer_allocator.mojom b/components/arc/mojom/video_protected_buffer_allocator.mojom index dbb9eda3..b68b453c 100644 --- a/components/arc/mojom/video_protected_buffer_allocator.mojom +++ b/components/arc/mojom/video_protected_buffer_allocator.mojom
@@ -6,6 +6,7 @@ module arc.mojom; +import "components/arc/mojom/gfx.mojom"; import "components/arc/mojom/video_common.mojom"; // Next method ID: 3
diff --git a/components/arc/test/fake_file_system_instance.cc b/components/arc/test/fake_file_system_instance.cc index 860a036..56d9f0a 100644 --- a/components/arc/test/fake_file_system_instance.cc +++ b/components/arc/test/fake_file_system_instance.cc
@@ -37,6 +37,7 @@ document->supports_delete = doc.supports_delete; document->supports_rename = doc.supports_rename; document->dir_supports_create = doc.dir_supports_create; + document->supports_thumbnail = doc.supports_thumbnail; return document; } @@ -64,6 +65,8 @@ constexpr base::FilePath::CharType FakeFileSystemInstance::kFakeAndroidPath[]; +constexpr gfx::Size FakeFileSystemInstance::kDefaultThumbnailSize; + FakeFileSystemInstance::File::File(const std::string& url, const std::string& content, const std::string& mime_type, @@ -91,7 +94,8 @@ last_modified, true, true, - true) {} + true, + false) {} FakeFileSystemInstance::Document::Document( const std::string& authority, @@ -103,7 +107,8 @@ uint64_t last_modified, bool supports_delete, bool supports_rename, - bool dir_supports_create) + bool dir_supports_create, + bool supports_thumbnail) : authority(authority), document_id(document_id), parent_document_id(parent_document_id), @@ -113,7 +118,8 @@ last_modified(last_modified), supports_delete(supports_delete), supports_rename(supports_rename), - dir_supports_create(dir_supports_create) {} + dir_supports_create(dir_supports_create), + supports_thumbnail(supports_thumbnail) {} FakeFileSystemInstance::Document::Document(const Document& that) = default; @@ -375,6 +381,41 @@ base::BindOnce(std::move(callback), std::move(wrapped_handle))); } +void FakeFileSystemInstance::OpenThumbnail(const std::string& url, + const gfx::Size& size_hint, + OpenThumbnailCallback callback) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + auto iter = files_.find(url); + if (iter == files_.end()) { + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), mojo::ScopedHandle())); + return; + } + const File& file = iter->second; + if (file.thumbnail_content.empty()) { + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), mojo::ScopedHandle())); + return; + } + // This validates that size_hint parameter is propagated properly from the + // client, so OpenThumbnail should always be called with same default value in + // tests. + if (size_hint != kDefaultThumbnailSize) { + LOG(ERROR) << "Unexpected thumbnail size hint: " << size_hint.width() << "x" + << size_hint.height(); + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), mojo::ScopedHandle())); + return; + } + base::ScopedFD fd = CreateStreamFileDescriptorToRead(file.thumbnail_content); + mojo::ScopedHandle wrapped_handle = + mojo::WrapPlatformHandle(mojo::PlatformHandle(std::move(fd))); + DCHECK(wrapped_handle.is_valid()); + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, + base::BindOnce(std::move(callback), std::move(wrapped_handle))); +} + void FakeFileSystemInstance::GetDocument(const std::string& authority, const std::string& document_id, GetDocumentCallback callback) {
diff --git a/components/arc/test/fake_file_system_instance.h b/components/arc/test/fake_file_system_instance.h index 0861eb2..af69a86a 100644 --- a/components/arc/test/fake_file_system_instance.h +++ b/components/arc/test/fake_file_system_instance.h
@@ -65,6 +65,9 @@ static constexpr base::FilePath::CharType kFakeAndroidPath[] = FILE_PATH_LITERAL("/android/path"); + // Expected size in OpenThumbnail calls. + static constexpr gfx::Size kDefaultThumbnailSize = gfx::Size(360, 360); + struct File { enum class Seekable { NO, @@ -86,6 +89,9 @@ // Whether this file is seekable or not. Seekable seekable; + // The thumbnail of a file, which can be read by OpenThumbnail(). + std::string thumbnail_content; + File(const std::string& url, const std::string& content, const std::string& mime_type, @@ -130,6 +136,9 @@ // new files within it. bool dir_supports_create; + // Flag indicating that a document supports openDocumentThumbnail() call. + bool supports_thumbnail; + Document(const std::string& authority, const std::string& document_id, const std::string& parent_document_id, @@ -146,7 +155,8 @@ uint64_t last_modified, bool supports_delete, bool supports_rename, - bool dir_supports_create); + bool dir_supports_create, + bool supports_thumbnail); Document(const Document& that); ~Document(); }; @@ -301,6 +311,9 @@ OpenFileToReadCallback callback) override; void OpenFileToWrite(const std::string& url, OpenFileToWriteCallback callback) override; + void OpenThumbnail(const std::string& url, + const gfx::Size& size_hint, + OpenThumbnailCallback callback) override; void RemoveWatcher(int64_t watcher_id, RemoveWatcherCallback callback) override; void RequestMediaScan(const std::vector<std::string>& paths) override;
diff --git a/components/autofill/core/browser/autofill_download_manager_unittest.cc b/components/autofill/core/browser/autofill_download_manager_unittest.cc index 74b0009..6579c267 100644 --- a/components/autofill/core/browser/autofill_download_manager_unittest.cc +++ b/components/autofill/core/browser/autofill_download_manager_unittest.cc
@@ -1341,7 +1341,7 @@ driver_ = std::make_unique<TestAutofillDriver>(); driver_->SetSharedURLLoaderFactory(shared_url_loader_factory_); driver_->SetIsolationInfo(net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, + net::IsolationInfo::RequestType::kOther, url::Origin::Create(GURL("https://abc.com")), url::Origin::Create(GURL("https://xyz.com")), net::SiteForCookies()));
diff --git a/components/autofill/core/browser/form_parsing/address_field_unittest.cc b/components/autofill/core/browser/form_parsing/address_field_unittest.cc index aff4c5bb..5777714 100644 --- a/components/autofill/core/browser/form_parsing/address_field_unittest.cc +++ b/components/autofill/core/browser/form_parsing/address_field_unittest.cc
@@ -14,6 +14,7 @@ #include "base/test/scoped_feature_list.h" #include "components/autofill/core/browser/autofill_field.h" #include "components/autofill/core/browser/form_parsing/autofill_scanner.h" +#include "components/autofill/core/browser/pattern_provider/test_pattern_provider.h" #include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/form_field_data.h" #include "testing/gtest/include/gtest/gtest.h" @@ -24,13 +25,11 @@ class AddressFieldTest : public testing::Test { public: - AddressFieldTest() {} + AddressFieldTest() = default; + AddressFieldTest(const AddressFieldTest&) = delete; + AddressFieldTest& operator=(const AddressFieldTest&) = delete; protected: - std::vector<std::unique_ptr<AutofillField>> list_; - std::unique_ptr<AddressField> field_; - FieldCandidatesMap field_candidates_map_; - // Downcast for tests. static std::unique_ptr<AddressField> Parse(AutofillScanner* scanner) { // An empty page_language means the language is unknown and patterns of all @@ -41,8 +40,12 @@ static_cast<AddressField*>(field.release())); } - private: - DISALLOW_COPY_AND_ASSIGN(AddressFieldTest); + std::vector<std::unique_ptr<AutofillField>> list_; + std::unique_ptr<AddressField> field_; + FieldCandidatesMap field_candidates_map_; + + // RAII object to mock the the PatternProvider. + TestPatternProvider test_pattern_provider_; }; TEST_F(AddressFieldTest, Empty) {
diff --git a/components/autofill/core/browser/form_parsing/credit_card_field_unittest.cc b/components/autofill/core/browser/form_parsing/credit_card_field_unittest.cc index f5e0aab..9d9815c4 100644 --- a/components/autofill/core/browser/form_parsing/credit_card_field_unittest.cc +++ b/components/autofill/core/browser/form_parsing/credit_card_field_unittest.cc
@@ -13,6 +13,7 @@ #include "base/strings/utf_string_conversions.h" #include "components/autofill/core/browser/autofill_field.h" #include "components/autofill/core/browser/form_parsing/autofill_scanner.h" +#include "components/autofill/core/browser/pattern_provider/test_pattern_provider.h" #include "components/autofill/core/common/autofill_clock.h" #include "components/autofill/core/common/form_field_data.h" #include "testing/gtest/include/gtest/gtest.h" @@ -23,14 +24,11 @@ class CreditCardFieldTestBase { public: - CreditCardFieldTestBase() {} - ~CreditCardFieldTestBase() {} + CreditCardFieldTestBase() = default; + CreditCardFieldTestBase(const CreditCardFieldTestBase&) = delete; + CreditCardFieldTestBase& operator=(const CreditCardFieldTestBase&) = delete; protected: - std::vector<std::unique_ptr<AutofillField>> list_; - std::unique_ptr<const CreditCardField> field_; - FieldCandidatesMap field_candidates_map_; - // Parses the contents of |list_| as a form, and stores the result into // |field_|. void Parse() { @@ -67,17 +65,20 @@ return field_->AddClassifications(&field_candidates_map_); } - private: - DISALLOW_COPY_AND_ASSIGN(CreditCardFieldTestBase); + std::vector<std::unique_ptr<AutofillField>> list_; + std::unique_ptr<const CreditCardField> field_; + FieldCandidatesMap field_candidates_map_; + + // RAII object to mock the the PatternProvider. + TestPatternProvider test_pattern_provider_; }; class CreditCardFieldTest : public CreditCardFieldTestBase, public testing::Test { public: - CreditCardFieldTest() {} - - private: - DISALLOW_COPY_AND_ASSIGN(CreditCardFieldTest); + CreditCardFieldTest() = default; + CreditCardFieldTest(const CreditCardFieldTest&) = delete; + CreditCardFieldTest& operator=(const CreditCardFieldTest&) = delete; }; TEST_F(CreditCardFieldTest, Empty) {
diff --git a/components/autofill/core/browser/form_parsing/name_field_unittest.cc b/components/autofill/core/browser/form_parsing/name_field_unittest.cc index 2931c902..33e4bd05 100644 --- a/components/autofill/core/browser/form_parsing/name_field_unittest.cc +++ b/components/autofill/core/browser/form_parsing/name_field_unittest.cc
@@ -13,6 +13,7 @@ #include "base/test/scoped_feature_list.h" #include "components/autofill/core/browser/autofill_field.h" #include "components/autofill/core/browser/form_parsing/autofill_scanner.h" +#include "components/autofill/core/browser/pattern_provider/test_pattern_provider.h" #include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/autofill_regex_constants.h" #include "components/autofill/core/common/autofill_regexes.h" @@ -25,13 +26,11 @@ class NameFieldTest : public testing::Test { public: - NameFieldTest() {} + NameFieldTest() = default; + NameFieldTest(const NameFieldTest&) = delete; + NameFieldTest& operator=(const NameFieldTest&) = delete; protected: - std::vector<std::unique_ptr<AutofillField>> list_; - std::unique_ptr<NameField> field_; - FieldCandidatesMap field_candidates_map_; - // Downcast for tests. static std::unique_ptr<NameField> Parse(AutofillScanner* scanner) { // An empty page_language means the language is unknown and patterns of all @@ -41,8 +40,12 @@ return std::unique_ptr<NameField>(static_cast<NameField*>(field.release())); } - private: - DISALLOW_COPY_AND_ASSIGN(NameFieldTest); + std::vector<std::unique_ptr<AutofillField>> list_; + std::unique_ptr<NameField> field_; + FieldCandidatesMap field_candidates_map_; + + // RAII object to mock the the PatternProvider. + TestPatternProvider test_pattern_provider_; }; TEST_F(NameFieldTest, FirstMiddleLast) {
diff --git a/components/autofill/core/browser/form_parsing/phone_field_unittest.cc b/components/autofill/core/browser/form_parsing/phone_field_unittest.cc index 7246956..71e0cf60 100644 --- a/components/autofill/core/browser/form_parsing/phone_field_unittest.cc +++ b/components/autofill/core/browser/form_parsing/phone_field_unittest.cc
@@ -16,6 +16,7 @@ #include "base/test/scoped_feature_list.h" #include "components/autofill/core/browser/autofill_field.h" #include "components/autofill/core/browser/form_parsing/autofill_scanner.h" +#include "components/autofill/core/browser/pattern_provider/test_pattern_provider.h" #include "components/autofill/core/common/autofill_features.h" #include "components/autofill/core/common/form_field_data.h" #include "testing/gtest/include/gtest/gtest.h" @@ -83,6 +84,9 @@ std::vector<std::unique_ptr<AutofillField>> list_; std::unique_ptr<PhoneField> field_; FieldCandidatesMap field_candidates_map_; + + // RAII object to mock the the PatternProvider. + TestPatternProvider test_pattern_provider_; }; TEST_F(PhoneFieldTest, Empty) {
diff --git a/components/autofill/core/browser/form_parsing/price_field_unittest.cc b/components/autofill/core/browser/form_parsing/price_field_unittest.cc index 9f6110de..464830b 100644 --- a/components/autofill/core/browser/form_parsing/price_field_unittest.cc +++ b/components/autofill/core/browser/form_parsing/price_field_unittest.cc
@@ -13,6 +13,7 @@ #include "base/strings/utf_string_conversions.h" #include "components/autofill/core/browser/autofill_field.h" #include "components/autofill/core/browser/form_parsing/autofill_scanner.h" +#include "components/autofill/core/browser/pattern_provider/test_pattern_provider.h" #include "components/autofill/core/common/form_field_data.h" #include "testing/gtest/include/gtest/gtest.h" @@ -22,13 +23,11 @@ class PriceFieldTest : public testing::Test { public: - PriceFieldTest() {} + PriceFieldTest() = default; + PriceFieldTest(const PriceFieldTest&) = delete; + PriceFieldTest& operator=(const PriceFieldTest&) = delete; protected: - std::vector<std::unique_ptr<AutofillField>> list_; - std::unique_ptr<PriceField> field_; - FieldCandidatesMap field_candidates_map_; - // Downcast for tests. static std::unique_ptr<PriceField> Parse(AutofillScanner* scanner) { // An empty page_language means the language is unknown and patterns of all @@ -39,8 +38,12 @@ static_cast<PriceField*>(field.release())); } - private: - DISALLOW_COPY_AND_ASSIGN(PriceFieldTest); + std::vector<std::unique_ptr<AutofillField>> list_; + std::unique_ptr<PriceField> field_; + FieldCandidatesMap field_candidates_map_; + + // RAII object to mock the the PatternProvider. + TestPatternProvider test_pattern_provider_; }; TEST_F(PriceFieldTest, ParsePrice) {
diff --git a/components/autofill/core/browser/form_parsing/search_field_unittest.cc b/components/autofill/core/browser/form_parsing/search_field_unittest.cc index 09148d5..a6be80cc 100644 --- a/components/autofill/core/browser/form_parsing/search_field_unittest.cc +++ b/components/autofill/core/browser/form_parsing/search_field_unittest.cc
@@ -13,6 +13,7 @@ #include "base/strings/utf_string_conversions.h" #include "components/autofill/core/browser/autofill_field.h" #include "components/autofill/core/browser/form_parsing/autofill_scanner.h" +#include "components/autofill/core/browser/pattern_provider/test_pattern_provider.h" #include "components/autofill/core/common/form_field_data.h" #include "testing/gtest/include/gtest/gtest.h" @@ -22,13 +23,11 @@ class SearchFieldTest : public testing::Test { public: - SearchFieldTest() {} + SearchFieldTest() = default; + SearchFieldTest(const SearchFieldTest&) = delete; + SearchFieldTest& operator=(const SearchFieldTest&) = delete; protected: - std::vector<std::unique_ptr<AutofillField>> list_; - std::unique_ptr<SearchField> field_; - FieldCandidatesMap field_candidates_map_; - // Downcast for tests. static std::unique_ptr<SearchField> Parse(AutofillScanner* scanner) { // An empty page_language means the language is unknown and patterns of all @@ -39,8 +38,12 @@ static_cast<SearchField*>(field.release())); } - private: - DISALLOW_COPY_AND_ASSIGN(SearchFieldTest); + std::vector<std::unique_ptr<AutofillField>> list_; + std::unique_ptr<SearchField> field_; + FieldCandidatesMap field_candidates_map_; + + // RAII object to mock the the PatternProvider. + TestPatternProvider test_pattern_provider_; }; TEST_F(SearchFieldTest, ParseSearchTerm) {
diff --git a/components/autofill/ios/browser/autofill_driver_ios.mm b/components/autofill/ios/browser/autofill_driver_ios.mm index 9948c21..f72958b 100644 --- a/components/autofill/ios/browser/autofill_driver_ios.mm +++ b/components/autofill/ios/browser/autofill_driver_ios.mm
@@ -175,7 +175,7 @@ return net::IsolationInfo(); return net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, + net::IsolationInfo::RequestType::kOther, url::Origin::Create(main_web_frame->GetSecurityOrigin()), url::Origin::Create(web_frame->GetSecurityOrigin()), net::SiteForCookies());
diff --git a/components/autofill_assistant/browser/actions/stopwatch.cc b/components/autofill_assistant/browser/actions/stopwatch.cc index 357d816..1f71eacc 100644 --- a/components/autofill_assistant/browser/actions/stopwatch.cc +++ b/components/autofill_assistant/browser/actions/stopwatch.cc
@@ -1,6 +1,7 @@ // 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/autofill_assistant/browser/actions/stopwatch.h" #include <ostream> @@ -15,21 +16,17 @@ } bool Stopwatch::Start() { - if (!running_) { - running_ = true; - start_time_ = base::TimeTicks::Now(); - return true; + if (running_) { + return false; } - return false; + running_ = true; + start_time_ = base::TimeTicks::Now(); + return true; } -bool Stopwatch::StartAt(base::TimeTicks start_time) { - if (!running_) { - running_ = true; - start_time_ = start_time; - return true; - } - return false; +void Stopwatch::StartAt(base::TimeTicks start_time) { + running_ = true; + start_time_ = start_time; } bool Stopwatch::Stop() {
diff --git a/components/autofill_assistant/browser/actions/stopwatch.h b/components/autofill_assistant/browser/actions/stopwatch.h index 8031560f..ed54700 100644 --- a/components/autofill_assistant/browser/actions/stopwatch.h +++ b/components/autofill_assistant/browser/actions/stopwatch.h
@@ -17,18 +17,25 @@ public: Stopwatch(); // Start measuring the time when the method is called. + // Returns true if the stopwatch was not already running. bool Start(); - // Starts measuring the time from `start_time`. - bool StartAt(base::TimeTicks start_time); - // Stops the stopwatch and, if it was running, adds to the elapsed time. + // Starts measuring the time from `start_time`, if the stopwatch was already + // running, it simply updates the recorded start time of the current run. + void StartAt(base::TimeTicks start_time); + // Stops the stopwatch and, if it was running, adds to the cumulative elapsed + // time. If the stopwatch was not running, it has no effect and returns false. bool Stop(); - // Same as above, but at `stop_time` rather than the current time. + // Stops the stopwatch at `stop_time` and, if it was running, adds to the + // cumulative elapsed time. If the stopwatch was not running, it has no effect + // and returns false. bool StopAt(base::TimeTicks stop_time); // Adds `time` to the cumulative elapsed time held by this stopwatch. void AddTime(base::TimeDelta time); // Remove `time` from the cumulative elapsed time held by this stopwatch. void RemoveTime(base::TimeDelta time); + // Returns the total time accumulated by this stopwatch. base::TimeDelta TotalElapsed() const; + // Whether the stopwatch is running or not. bool IsRunning() const; friend std::ostream& operator<<(std::ostream& out, const Stopwatch& action);
diff --git a/components/autofill_assistant/browser/actions/stopwatch_unittest.cc b/components/autofill_assistant/browser/actions/stopwatch_unittest.cc index c5758495f..ffa8d2c9 100644 --- a/components/autofill_assistant/browser/actions/stopwatch_unittest.cc +++ b/components/autofill_assistant/browser/actions/stopwatch_unittest.cc
@@ -26,7 +26,7 @@ Stopwatch stopwatch_; }; -TEST_F(StopwatchTest, StopwatchSimpleRun) { +TEST_F(StopwatchTest, SimpleRun) { base::subtle::ScopedTimeClockOverrides overrides( nullptr, &TimeTicksOverride::Now, nullptr); EXPECT_TRUE(stopwatch_.Start()); @@ -50,7 +50,7 @@ EXPECT_EQ(base::TimeDelta::FromSeconds(5), stopwatch_.TotalElapsed()); } -TEST_F(StopwatchTest, StopwatchAddTime) { +TEST_F(StopwatchTest, AddTime) { base::subtle::ScopedTimeClockOverrides overrides( nullptr, &TimeTicksOverride::Now, nullptr); stopwatch_.Start(); @@ -60,7 +60,7 @@ EXPECT_EQ(base::TimeDelta::FromSeconds(3), stopwatch_.TotalElapsed()); } -TEST_F(StopwatchTest, StopwatchRemoveTime) { +TEST_F(StopwatchTest, RemoveTime) { base::subtle::ScopedTimeClockOverrides overrides( nullptr, &TimeTicksOverride::Now, nullptr); stopwatch_.Start(); @@ -70,7 +70,7 @@ EXPECT_EQ(base::TimeDelta::FromSeconds(1), stopwatch_.TotalElapsed()); } -TEST_F(StopwatchTest, StopwatchRemoveGreaterThanElapsed) { +TEST_F(StopwatchTest, RemoveGreaterThanElapsed) { base::subtle::ScopedTimeClockOverrides overrides( nullptr, &TimeTicksOverride::Now, nullptr); stopwatch_.Start(); @@ -80,6 +80,10 @@ EXPECT_EQ(base::TimeDelta::FromSeconds(0), stopwatch_.TotalElapsed()); } +// This parameterized test uses 4 parameters: time to start at, time to stop at, +// expected time before the stop is invoked and expected time at the end. +// If start at or stop at times are 0, the regular Start() and Stop() methods +// are used instead of the StartAt(time) or StopAt(time). class StopwatchStartStopTest : public StopwatchTest, public testing::WithParamInterface<std::tuple<long, long, long, long>> {};
diff --git a/components/browser_ui/notifications/android/java/src/org/chromium/components/browser_ui/notifications/channels/ChannelsInitializer.java b/components/browser_ui/notifications/android/java/src/org/chromium/components/browser_ui/notifications/channels/ChannelsInitializer.java index 59345832..50f36bfe 100644 --- a/components/browser_ui/notifications/android/java/src/org/chromium/components/browser_ui/notifications/channels/ChannelsInitializer.java +++ b/components/browser_ui/notifications/android/java/src/org/chromium/components/browser_ui/notifications/channels/ChannelsInitializer.java
@@ -125,7 +125,7 @@ private void ensureInitializedWithEnabledState(String channelId, boolean enabled) { Collection<String> groupIds = Collections.emptyList(); - Collection<String> channelIds = CollectionUtil.newArrayList(channelId); + Collection<String> channelIds = Collections.singletonList(channelId); ensureInitializedWithEnabledState(groupIds, channelIds, enabled); }
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb index 0dd5157..6046687 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_as.xtb
@@ -38,6 +38,7 @@ <translation id="1994173015038366702">ছাইট URL</translation> <translation id="2025115093177348061">পৰিৱৰ্ধিত বাস্তৱিকতা</translation> <translation id="2030769033451695672"><ph name="URL_OF_THE_CURRENT_TAB" />লৈ উভতি যাবলৈ টিপক</translation> +<translation id="2054665754582400095">আপোনাৰ উপস্থিতি</translation> <translation id="2079545284768500474">আনডু কৰক</translation> <translation id="2091887806945687916">শব্দ</translation> <translation id="2107397443965016585">ছাইটসমূহক সুৰক্ষিত সমল প্লে’ কৰাৰ অনুমতি দিয়াৰ আগতে সোধক (আমি চুপাৰিছ কৰোঁ)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb index b4732f991..5f67f20d 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_es-419.xtb
@@ -38,6 +38,7 @@ <translation id="1994173015038366702">URL del sitio</translation> <translation id="2025115093177348061">Realidad aumentada</translation> <translation id="2030769033451695672">Presiona para volver a <ph name="URL_OF_THE_CURRENT_TAB" /></translation> +<translation id="2054665754582400095">Tu presencia</translation> <translation id="2079545284768500474">Deshacer</translation> <translation id="2091887806945687916">Sonido</translation> <translation id="2107397443965016585">Preguntar antes de permitir que los sitios reproduzcan contenido protegido (recomendado)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb index b161475..5d1816d 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_iw.xtb
@@ -100,7 +100,7 @@ <translation id="3763247130972274048">בלחיצה פעמיים על הסרטון בצד ימין או שמאל אפשר לדלג על 10 שניות</translation> <translation id="381841723434055211">מספרי טלפון</translation> <translation id="385051799172605136">חזרה</translation> -<translation id="3859306556332390985">הרץ קדימה</translation> +<translation id="3859306556332390985">הרצה קדימה</translation> <translation id="3955193568934677022">אתרים יוכלו להפעיל תוכן מוגן (מומלץ)</translation> <translation id="3987993985790029246">העתק קישור</translation> <translation id="3991845972263764475"><ph name="BYTES_DOWNLOADED_WITH_UNITS" /> / ?</translation> @@ -258,7 +258,7 @@ <translation id="8116925261070264013">מושתקים</translation> <translation id="8131740175452115882">אישור</translation> <translation id="8197286292360124385">פועלת: <ph name="PERMISSION_1" /></translation> -<translation id="8200772114523450471">חדש</translation> +<translation id="8200772114523450471">חידוש</translation> <translation id="8206354486702514201">הגדרה זו נאכפת על ידי מנהל המערכת שלך.</translation> <translation id="8249310407154411074">העברה לראש הרשימה</translation> <translation id="8261506727792406068">מחיקה</translation> @@ -270,7 +270,7 @@ <translation id="8380167699614421159">באתר הזה מוצגות מודעות מפריעות או מטעות</translation> <translation id="8394832520002899662">כדי לחזור לאתר, יש להקיש כאן</translation> <translation id="8425213833346101688">שנה</translation> -<translation id="8441146129660941386">הרץ לאחור</translation> +<translation id="8441146129660941386">הרצה לאחור</translation> <translation id="8444433999583714703">כדי לאפשר ל-<ph name="APP_NAME" /> לגשת אל המיקום, צריך להפעיל את המיקום גם ב<ph name="BEGIN_LINK" />הגדרות Android<ph name="END_LINK" />.</translation> <translation id="8447861592752582886">שלול הרשאות מכשיר</translation> <translation id="8451050538944905715">{NUM_SELECTED,plural, =1{קובץ cookie אחד נמצא בשימוש}two{# קובצי cookie נמצאים בשימוש}many{# קובצי cookie נמצאים בשימוש}other{# קובצי cookie נמצאים בשימוש}}</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb index 1179cb6..459211b 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_mr.xtb
@@ -95,7 +95,7 @@ <translation id="3594780231884063836">व्हिडिओ म्यूट करा</translation> <translation id="3596414637720633074">तृतीय पक्ष कुकी गुप्त मोडमध्ये ब्लॉक करा</translation> <translation id="3600792891314830896">ध्वनी प्ले करणाऱ्या साइट म्यूट करा</translation> -<translation id="3744111561329211289">पार्श्वभूमी संकालन</translation> +<translation id="3744111561329211289">पार्श्वभूमी सिंक</translation> <translation id="3763247130972274048">१० सेकंद पुढे जाण्यासाठी व्हिडिओवर डावीकडे किंवा उजवीकडे दोनदा टॅप करा</translation> <translation id="381841723434055211">फोन नंबर</translation> <translation id="385051799172605136">मागील</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb index 20469a2..139599f 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_or.xtb
@@ -38,6 +38,7 @@ <translation id="1994173015038366702">ସାଇଟ୍ URL</translation> <translation id="2025115093177348061">ଅଗମେଣ୍ଟେଡ୍ ରିଆଲିଟୀ</translation> <translation id="2030769033451695672"><ph name="URL_OF_THE_CURRENT_TAB" />କୁ ଫେରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ</translation> +<translation id="2054665754582400095">ଆପଣଙ୍କ ଉପସ୍ଥିତି</translation> <translation id="2079545284768500474">ପୂର୍ବବତ୍</translation> <translation id="2091887806945687916">ଧ୍ୱନି</translation> <translation id="2107397443965016585">ସୁରକ୍ଷିତ ବିଷୟବସ୍ତୁକୁ(ସୁପାରିସ୍ କରାଯାଇଥିବା) ଚଲାଇବା ପାଇଁ ସାଇଟ୍ଗୁଡ଼ିକୁ ଅନୁମତି ଦେବା ପୂର୍ବରୁ, ପଚାରନ୍ତୁ</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb index f024ed52..69cb4a8f 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ta.xtb
@@ -38,6 +38,7 @@ <translation id="1994173015038366702">தள URL</translation> <translation id="2025115093177348061">ஆக்மென்ட்டட் ரியாலிட்டி</translation> <translation id="2030769033451695672"><ph name="URL_OF_THE_CURRENT_TAB" />க்குச் செல்ல, தட்டவும்</translation> +<translation id="2054665754582400095">எனது செயல்பாடு</translation> <translation id="2079545284768500474">செயல்தவிர்</translation> <translation id="2091887806945687916">ஒலி</translation> <translation id="2107397443965016585">பாதுகாக்கப்பட்ட உள்ளடக்கத்தை இயக்குவதற்குத் தளங்களை அனுமதிக்கும் முன்பு அனுமதி கோரும் (பரிந்துரைக்கப்படுவது)</translation>
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb index 14873bba..a82703e 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_ur.xtb
@@ -38,6 +38,7 @@ <translation id="1994173015038366702">سائٹ کا URL</translation> <translation id="2025115093177348061">افزودہ حقیقت</translation> <translation id="2030769033451695672"><ph name="URL_OF_THE_CURRENT_TAB" /> پر واپس جانے کے لیے تھپتھپائیں</translation> +<translation id="2054665754582400095">آپ کی موجودگی</translation> <translation id="2079545284768500474">کالعدم کریں</translation> <translation id="2091887806945687916">آواز</translation> <translation id="2107397443965016585">سائٹس کو محفوظ مواد چلانے کی اجازت دینے سے پہلے پوچھیں (تجویز کردہ)</translation>
diff --git a/components/crash/content/browser/error_reporting/javascript_error_report.h b/components/crash/content/browser/error_reporting/javascript_error_report.h index 49f1bed..7b2e507 100644 --- a/components/crash/content/browser/error_reporting/javascript_error_report.h +++ b/components/crash/content/browser/error_reporting/javascript_error_report.h
@@ -44,6 +44,9 @@ // String containing the stack trace for the error. Not sent if not present. base::Optional<std::string> stack_trace; + + // String containing the application locale. Not sent if not present. + base::Optional<std::string> app_locale; }; #endif // COMPONENTS_CRASH_CONTENT_BROWSER_ERROR_REPORTING_JAVASCRIPT_ERROR_REPORT_H_
diff --git a/components/crash/content/browser/error_reporting/send_javascript_error_report.cc b/components/crash/content/browser/error_reporting/send_javascript_error_report.cc index 0f2f42c..abc0436 100644 --- a/components/crash/content/browser/error_reporting/send_javascript_error_report.cc +++ b/components/crash/content/browser/error_reporting/send_javascript_error_report.cc
@@ -283,12 +283,12 @@ params["line"] = base::NumberToString(*error_report->line_number); if (error_report->column_number) params["column"] = base::NumberToString(*error_report->column_number); - // TODO(crbug/1121816): Chrome crashes have "Process uptime" and "Process // type" fields, eventually consider using that for process uptime. params["browser_process_uptime_ms"] = base::NumberToString(browser_process_uptime.InMilliseconds()); - + if (error_report->app_locale) + params["app_locale"] = std::move(*error_report->app_locale); const GURL url(base::StrCat( {crash_endpoint_string, "?", BuildPostRequestQueryString(params)})); std::string body;
diff --git a/components/download/internal/common/download_utils.cc b/components/download/internal/common/download_utils.cc index ecd6e62..f75993e5 100644 --- a/components/download/internal/common/download_utils.cc +++ b/components/download/internal/common/download_utils.cc
@@ -273,7 +273,7 @@ // been visited before. url::Origin origin = url::Origin::Create(params->url()); request->trusted_params->isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, origin, origin, + net::IsolationInfo::RequestType::kMainFrame, origin, origin, net::SiteForCookies::FromOrigin(origin)); request->do_not_prompt_for_login = params->do_not_prompt_for_login();
diff --git a/components/feature_engagement/internal/BUILD.gn b/components/feature_engagement/internal/BUILD.gn index 9894de87..b1320da 100644 --- a/components/feature_engagement/internal/BUILD.gn +++ b/components/feature_engagement/internal/BUILD.gn
@@ -58,8 +58,6 @@ "single_invalid_configuration.h", "stats.cc", "stats.h", - "switches.cc", - "switches.h", "system_time_provider.cc", "system_time_provider.h", "time_provider.h", @@ -80,14 +78,9 @@ sources += [ "android/tracker_impl_android.cc", "android/tracker_impl_android.h", - "android/wrapping_test_tracker.cc", - "android/wrapping_test_tracker.h", ] - deps += [ - ":jni_headers", - "//components/feature_engagement/public:jni_headers", - ] + deps += [ ":jni_headers" ] } }
diff --git a/components/feature_engagement/internal/android/java/src/org/chromium/components/feature_engagement/internal/TrackerImpl.java b/components/feature_engagement/internal/android/java/src/org/chromium/components/feature_engagement/internal/TrackerImpl.java index 934753f1..2b2047a 100644 --- a/components/feature_engagement/internal/android/java/src/org/chromium/components/feature_engagement/internal/TrackerImpl.java +++ b/components/feature_engagement/internal/android/java/src/org/chromium/components/feature_engagement/internal/TrackerImpl.java
@@ -128,12 +128,6 @@ TrackerImplJni.get().addOnInitializedCallback(mNativePtr, TrackerImpl.this, callback); } - @Override - public void injectTracker(Tracker tracker) { - assert mNativePtr != 0; - TrackerImplJni.get().injectTracker(mNativePtr, TrackerImpl.this, tracker); - } - @CalledByNative private void clearNativePtr() { mNativePtr = 0; @@ -161,7 +155,6 @@ boolean isInitialized(long nativeTrackerImplAndroid, TrackerImpl caller); void addOnInitializedCallback( long nativeTrackerImplAndroid, TrackerImpl caller, Callback<Boolean> callback); - void injectTracker(long nativeTrackerImplAndroid, TrackerImpl caller, Tracker tracker); void release(long nativeDisplayLockHandleAndroid); } }
diff --git a/components/feature_engagement/internal/android/tracker_impl_android.cc b/components/feature_engagement/internal/android/tracker_impl_android.cc index bfc159b0..6416a7e 100644 --- a/components/feature_engagement/internal/android/tracker_impl_android.cc +++ b/components/feature_engagement/internal/android/tracker_impl_android.cc
@@ -16,9 +16,7 @@ #include "base/command_line.h" #include "base/feature_list.h" #include "base/memory/ptr_util.h" -#include "components/feature_engagement/internal/android/wrapping_test_tracker.h" #include "components/feature_engagement/internal/jni_headers/TrackerImpl_jni.h" -#include "components/feature_engagement/internal/switches.h" #include "components/feature_engagement/public/feature_list.h" #include "components/feature_engagement/public/tracker.h" @@ -38,13 +36,13 @@ return feature_map; } -TrackerImplAndroid* FromTrackerImpl(Tracker* feature_engagement) { - TrackerImpl* impl = static_cast<TrackerImpl*>(feature_engagement); +TrackerImplAndroid* FromTracker(Tracker* tracker) { TrackerImplAndroid* impl_android = static_cast<TrackerImplAndroid*>( - impl->GetUserData(kTrackerImplAndroidKey)); + tracker->GetUserData(kTrackerImplAndroidKey)); if (!impl_android) { - impl_android = new TrackerImplAndroid(impl, GetAllFeatures()); - impl->SetUserData(kTrackerImplAndroidKey, base::WrapUnique(impl_android)); + impl_android = new TrackerImplAndroid(tracker, GetAllFeatures()); + tracker->SetUserData(kTrackerImplAndroidKey, + base::WrapUnique(impl_android)); } return impl_android; } @@ -64,13 +62,11 @@ // static base::android::ScopedJavaLocalRef<jobject> Tracker::GetJavaObject( Tracker* feature_engagement) { - return FromTrackerImpl(feature_engagement)->GetJavaObject(); + return FromTracker(feature_engagement)->GetJavaObject(); } -TrackerImplAndroid::TrackerImplAndroid(TrackerImpl* tracker_impl, - FeatureVector features) - : features_(CreateMapFromNameToFeature(features)), - tracker_impl_(tracker_impl) { +TrackerImplAndroid::TrackerImplAndroid(Tracker* tracker, FeatureVector features) + : features_(CreateMapFromNameToFeature(features)), tracker_(tracker) { JNIEnv* env = base::android::AttachCurrentThread(); java_obj_.Reset( @@ -92,7 +88,7 @@ const base::android::JavaRef<jobject>& jobj, const base::android::JavaParamRef<jstring>& jevent) { std::string event = ConvertJavaStringToUTF8(env, jevent); - tracker_impl_->NotifyEvent(event); + tracker_->NotifyEvent(event); } bool TrackerImplAndroid::ShouldTriggerHelpUI( @@ -102,7 +98,7 @@ std::string feature = ConvertJavaStringToUTF8(env, jfeature); DCHECK(features_.find(feature) != features_.end()); - return tracker_impl_->ShouldTriggerHelpUI(*features_[feature]); + return tracker_->ShouldTriggerHelpUI(*features_[feature]); } bool TrackerImplAndroid::WouldTriggerHelpUI( @@ -112,7 +108,7 @@ std::string feature = ConvertJavaStringToUTF8(env, jfeature); DCHECK(features_.find(feature) != features_.end()); - return tracker_impl_->WouldTriggerHelpUI(*features_[feature]); + return tracker_->WouldTriggerHelpUI(*features_[feature]); } bool TrackerImplAndroid::HasEverTriggered( @@ -123,7 +119,7 @@ std::string feature = ConvertJavaStringToUTF8(env, jfeature); DCHECK(features_.find(feature) != features_.end()); - return tracker_impl_->HasEverTriggered(*features_[feature], j_from_window); + return tracker_->HasEverTriggered(*features_[feature], j_from_window); } jint TrackerImplAndroid::GetTriggerState( @@ -133,7 +129,7 @@ std::string feature = ConvertJavaStringToUTF8(env, jfeature); DCHECK(features_.find(feature) != features_.end()); - return static_cast<int>(tracker_impl_->GetTriggerState(*features_[feature])); + return static_cast<int>(tracker_->GetTriggerState(*features_[feature])); } void TrackerImplAndroid::Dismissed( @@ -143,7 +139,7 @@ std::string feature = ConvertJavaStringToUTF8(env, jfeature); DCHECK(features_.find(feature) != features_.end()); - tracker_impl_->Dismissed(*features_[feature]); + tracker_->Dismissed(*features_[feature]); } base::android::ScopedJavaLocalRef<jobject> @@ -151,7 +147,7 @@ JNIEnv* env, const base::android::JavaRef<jobject>& jobj) { std::unique_ptr<DisplayLockHandle> lock_handle = - tracker_impl_->AcquireDisplayLock(); + tracker_->AcquireDisplayLock(); if (!lock_handle) return nullptr; @@ -166,32 +162,18 @@ bool TrackerImplAndroid::IsInitialized( JNIEnv* env, const base::android::JavaRef<jobject>& jobj) { - return tracker_impl_->IsInitialized(); + return tracker_->IsInitialized(); } void TrackerImplAndroid::AddOnInitializedCallback( JNIEnv* env, const base::android::JavaRef<jobject>& jobj, const base::android::JavaParamRef<jobject>& j_callback_obj) { - tracker_impl_->AddOnInitializedCallback(base::BindOnce( + tracker_->AddOnInitializedCallback(base::BindOnce( &base::android::RunBooleanCallbackAndroid, base::android::ScopedJavaGlobalRef<jobject>(j_callback_obj))); } -void TrackerImplAndroid::InjectTracker( - JNIEnv* env, - const base::android::JavaRef<jobject>& jobj, - const base::android::JavaRef<jobject>& jtracker) { - base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - if (!command_line->HasSwitch(switches::kUseJavaProxyTracker)) { - NOTREACHED(); - return; - } - WrappingTestTracker* test_tracker_ = - static_cast<WrappingTestTracker*>(tracker_impl_); - test_tracker_->InjectTracker(jtracker); -} - DisplayLockHandleAndroid::DisplayLockHandleAndroid( std::unique_ptr<DisplayLockHandle> display_lock_handle) : display_lock_handle_(std::move(display_lock_handle)) {
diff --git a/components/feature_engagement/internal/android/tracker_impl_android.h b/components/feature_engagement/internal/android/tracker_impl_android.h index 580c13dd..41ad55e 100644 --- a/components/feature_engagement/internal/android/tracker_impl_android.h +++ b/components/feature_engagement/internal/android/tracker_impl_android.h
@@ -61,12 +61,12 @@ JNIEnv* env, const base::android::JavaRef<jobject>& jobj); - TrackerImplAndroid(TrackerImpl* tracker_impl, FeatureVector features); + TrackerImplAndroid(Tracker* tracker, FeatureVector features); ~TrackerImplAndroid() override; base::android::ScopedJavaLocalRef<jobject> GetJavaObject(); - TrackerImpl* tracker_impl() { return tracker_impl_; } + Tracker* tracker() { return tracker_; } // Tracker JNI bridge implementation. virtual void NotifyEvent(JNIEnv* env, @@ -102,22 +102,14 @@ const base::android::JavaRef<jobject>& jobj, const base::android::JavaParamRef<jobject>& j_callback_obj); - /** - * Injects a Java tracker for encapsulation. For further details, see - * WrappingTestTracker::InjectTracker. - */ - void InjectTracker(JNIEnv* env, - const base::android::JavaRef<jobject>& jobj, - const base::android::JavaRef<jobject>& jtracker); - private: // A map from the feature name to the base::Feature, to ensure that the Java // version of the API can use the string name. If base::Feature becomes a Java // class as well, we should remove this mapping. FeatureMap features_; - // The TrackerImpl this is a JNI bridge for. - TrackerImpl* tracker_impl_; + // The Tracker this is a JNI bridge for. + Tracker* tracker_; // The Java-side of this JNI bridge. base::android::ScopedJavaGlobalRef<jobject> java_obj_;
diff --git a/components/feature_engagement/internal/android/wrapping_test_tracker.h b/components/feature_engagement/internal/android/wrapping_test_tracker.h deleted file mode 100644 index f8d8c7a..0000000 --- a/components/feature_engagement/internal/android/wrapping_test_tracker.h +++ /dev/null
@@ -1,73 +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 COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_ANDROID_WRAPPING_TEST_TRACKER_H_ -#define COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_ANDROID_WRAPPING_TEST_TRACKER_H_ - -#include <memory> -#include <string> - -#include "base/callback.h" -#include "base/macros.h" -#include "build/build_config.h" -#include "components/feature_engagement/internal/tracker_impl.h" - -#if defined(OS_ANDROID) -#include "base/android/jni_android.h" -#endif // defined(OS_ANDROID) - -namespace feature_engagement { -class AvailabilityModel; -class Configuration; -class ConditionValidator; -class DisplayLockController; -class EventModel; -class TimeProvider; - -// This class is a thin wrapper around TrackerImpl and has two modes of -// operating. To start with, it does nothing but forward all calls to its base -// class implementation. However, at some point a Java test can inject a -// tracker, at -// which point this class will start to forward the calls to Java. See -// InjectTracker for details. -class WrappingTestTracker : public TrackerImpl { - public: - WrappingTestTracker( - std::unique_ptr<EventModel> event_model, - std::unique_ptr<AvailabilityModel> availability_model, - std::unique_ptr<Configuration> configuration, - std::unique_ptr<DisplayLockController> display_lock_controller, - std::unique_ptr<ConditionValidator> condition_validator, - std::unique_ptr<TimeProvider> time_provider); - ~WrappingTestTracker() override; - - // Injects a tracker from Java to proxy calls to. By default, all functions - // will be forwarded to the base class for processing until this function is - // called, at which point the proxying calls to Java starts. Note that not all - // functions are proxied to Java. Some are still handled by the base class. - // See .cc for details. - void InjectTracker(const base::android::JavaRef<jobject>& jtracker); - - // TrackerImpl: - - void NotifyEvent(const std::string& event) override; - bool ShouldTriggerHelpUI(const base::Feature& feature) override; - bool WouldTriggerHelpUI(const base::Feature& feature) const override; - bool HasEverTriggered(const base::Feature& feature, - bool from_window) const override; - TriggerState GetTriggerState(const base::Feature& feature) const override; - void Dismissed(const base::Feature& feature) override; - std::unique_ptr<DisplayLockHandle> AcquireDisplayLock() override; - bool IsInitialized() const override; - void AddOnInitializedCallback(OnInitializedCallback callback) override; - - private: - base::android::ScopedJavaGlobalRef<jobject> java_tracker_; - - DISALLOW_COPY_AND_ASSIGN(WrappingTestTracker); -}; - -} // namespace feature_engagement - -#endif // COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_ANDROID_WRAPPING_TEST_TRACKER_H_
diff --git a/components/feature_engagement/internal/switches.cc b/components/feature_engagement/internal/switches.cc deleted file mode 100644 index 5904db9..0000000 --- a/components/feature_engagement/internal/switches.cc +++ /dev/null
@@ -1,16 +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 "components/feature_engagement/internal/switches.h" - -namespace feature_engagement { -namespace switches { - -// This switch causes TrackerImpl to be wrapped, so that functions can be -// proxied up into Java land, to facilitate end-to-end Java tests that exercise -// the feature engagement. -const char kUseJavaProxyTracker[] = "use-java-proxy-tracker"; - -} // namespace switches -} // namespace feature_engagement \ No newline at end of file
diff --git a/components/feature_engagement/internal/switches.h b/components/feature_engagement/internal/switches.h deleted file mode 100644 index fe3509c..0000000 --- a/components/feature_engagement/internal/switches.h +++ /dev/null
@@ -1,16 +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 COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_SWITCHES_H_ -#define COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_SWITCHES_H_ - -namespace feature_engagement { -namespace switches { - -extern const char kUseJavaProxyTracker[]; - -} // namespace switches -} // namespace feature_engagement - -#endif // COMPONENTS_FEATURE_ENGAGEMENT_INTERNAL_SWITCHES_H_
diff --git a/components/feature_engagement/internal/tracker_impl.cc b/components/feature_engagement/internal/tracker_impl.cc index 59696fc0..5c383914 100644 --- a/components/feature_engagement/internal/tracker_impl.cc +++ b/components/feature_engagement/internal/tracker_impl.cc
@@ -32,16 +32,11 @@ #include "components/feature_engagement/internal/persistent_event_store.h" #include "components/feature_engagement/internal/proto/availability.pb.h" #include "components/feature_engagement/internal/stats.h" -#include "components/feature_engagement/internal/switches.h" #include "components/feature_engagement/internal/system_time_provider.h" #include "components/feature_engagement/public/feature_constants.h" #include "components/feature_engagement/public/feature_list.h" #include "components/leveldb_proto/public/proto_database_provider.h" -#if defined(OS_ANDROID) -#include "components/feature_engagement/internal/android/wrapping_test_tracker.h" -#endif - namespace feature_engagement { namespace { @@ -140,16 +135,6 @@ auto availability_model = std::make_unique<AvailabilityModelImpl>( std::move(availability_store_loader)); -#if defined(OS_ANDROID) - base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); - if (command_line->HasSwitch(switches::kUseJavaProxyTracker)) { - return new WrappingTestTracker( - std::move(event_model), std::move(availability_model), - std::move(configuration), std::make_unique<DisplayLockControllerImpl>(), - std::move(condition_validator), std::move(time_provider)); - } -#endif - return new TrackerImpl( std::move(event_model), std::move(availability_model), std::move(configuration), std::make_unique<DisplayLockControllerImpl>(),
diff --git a/components/feature_engagement/internal/tracker_impl.h b/components/feature_engagement/internal/tracker_impl.h index 01630186..8321842 100644 --- a/components/feature_engagement/internal/tracker_impl.h +++ b/components/feature_engagement/internal/tracker_impl.h
@@ -12,7 +12,6 @@ #include "base/feature_list.h" #include "base/macros.h" #include "base/memory/weak_ptr.h" -#include "base/supports_user_data.h" #include "components/feature_engagement/public/tracker.h" namespace feature_engagement { @@ -25,7 +24,7 @@ class TimeProvider; // The internal implementation of the Tracker. -class TrackerImpl : public Tracker, public base::SupportsUserData { +class TrackerImpl : public Tracker { public: TrackerImpl(std::unique_ptr<EventModel> event_model, std::unique_ptr<AvailabilityModel> availability_model,
diff --git a/components/feature_engagement/public/BUILD.gn b/components/feature_engagement/public/BUILD.gn index 59b4cc5..1165356 100644 --- a/components/feature_engagement/public/BUILD.gn +++ b/components/feature_engagement/public/BUILD.gn
@@ -28,6 +28,15 @@ "//components/flags_ui", "//components/keyed_service/core", ] + + if (is_android) { + sources += [ + "android/wrapping_test_tracker.cc", + "android/wrapping_test_tracker.h", + ] + + deps += [ "//components/feature_engagement/public:jni_headers" ] + } } source_set("unit_tests") {
diff --git a/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/CppWrappedTestTracker.java b/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/CppWrappedTestTracker.java index 5e26fbf..e79a1e1 100644 --- a/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/CppWrappedTestTracker.java +++ b/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/CppWrappedTestTracker.java
@@ -114,11 +114,6 @@ callback.onResult(true); } - @Override - public final void injectTracker(Tracker tracker) { - assert false : "This should only be called on a production tracker"; - } - private boolean ourFeature(String feature) { return TextUtils.equals(mOurFeature, feature); }
diff --git a/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/Tracker.java b/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/Tracker.java index 6e11417..2af818ee 100644 --- a/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/Tracker.java +++ b/components/feature_engagement/public/android/java/src/org/chromium/components/feature_engagement/Tracker.java
@@ -127,11 +127,4 @@ * ready to receive calls. */ void addOnInitializedCallback(Callback<Boolean> callback); - - /** - * Instructs the tracker in C++ to start proxying calls to Java. See {@link - * CppWrappedTestTracker} for usage and details. - * @param tracker The tracker object that should be receiving the calls. - */ - void injectTracker(Tracker tracker); }
diff --git a/components/feature_engagement/internal/android/wrapping_test_tracker.cc b/components/feature_engagement/public/android/wrapping_test_tracker.cc similarity index 62% rename from components/feature_engagement/internal/android/wrapping_test_tracker.cc rename to components/feature_engagement/public/android/wrapping_test_tracker.cc index 27f5d0e..2ba4bf8d 100644 --- a/components/feature_engagement/internal/android/wrapping_test_tracker.cc +++ b/components/feature_engagement/public/android/wrapping_test_tracker.cc
@@ -2,49 +2,23 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "components/feature_engagement/internal/android/wrapping_test_tracker.h" +#include "components/feature_engagement/public/android/wrapping_test_tracker.h" #include <memory> #include <utility> #include "base/android/jni_string.h" -#include "components/feature_engagement/internal/availability_model_impl.h" -#include "components/feature_engagement/internal/display_lock_controller_impl.h" -#include "components/feature_engagement/internal/editable_configuration.h" -#include "components/feature_engagement/internal/event_model_impl.h" -#include "components/feature_engagement/internal/feature_config_condition_validator.h" -#include "components/feature_engagement/internal/system_time_provider.h" +#include "base/threading/thread_task_runner_handle.h" #include "components/feature_engagement/public/jni_headers/CppWrappedTestTracker_jni.h" namespace feature_engagement { WrappingTestTracker::WrappingTestTracker( - std::unique_ptr<EventModel> event_model, - std::unique_ptr<AvailabilityModel> availability_model, - std::unique_ptr<Configuration> configuration, - std::unique_ptr<DisplayLockController> display_lock_controller, - std::unique_ptr<ConditionValidator> condition_validator, - std::unique_ptr<TimeProvider> time_provider) - : TrackerImpl(std::move(event_model), - std::move(availability_model), - std::move(configuration), - std::make_unique<DisplayLockControllerImpl>(), - std::move(condition_validator), - std::move(time_provider)) {} - + const base::android::JavaRef<jobject>& jtracker) + : java_tracker_(jtracker) {} WrappingTestTracker::~WrappingTestTracker() {} -void WrappingTestTracker::InjectTracker( - const base::android::JavaRef<jobject>& jtracker) { - java_tracker_ = jtracker; -} - void WrappingTestTracker::NotifyEvent(const std::string& event) { - if (!java_tracker_) { - TrackerImpl::NotifyEvent(event); - return; - } - JNIEnv* env = base::android::AttachCurrentThread(); base::android::ScopedJavaLocalRef<jstring> jevent( base::android::ConvertUTF8ToJavaString(env, event.c_str())); @@ -53,9 +27,6 @@ } bool WrappingTestTracker::ShouldTriggerHelpUI(const base::Feature& feature) { - if (!java_tracker_) - return TrackerImpl::ShouldTriggerHelpUI(feature); - JNIEnv* env = base::android::AttachCurrentThread(); base::android::ScopedJavaLocalRef<jstring> jfeature( base::android::ConvertUTF8ToJavaString(env, feature.name)); @@ -65,9 +36,6 @@ bool WrappingTestTracker::WouldTriggerHelpUI( const base::Feature& feature) const { - if (!java_tracker_) - return TrackerImpl::WouldTriggerHelpUI(feature); - JNIEnv* env = base::android::AttachCurrentThread(); base::android::ScopedJavaLocalRef<jstring> jfeature( base::android::ConvertUTF8ToJavaString(env, feature.name)); @@ -77,9 +45,6 @@ bool WrappingTestTracker::HasEverTriggered(const base::Feature& feature, bool from_window) const { - if (!java_tracker_) - return TrackerImpl::HasEverTriggered(feature, from_window); - JNIEnv* env = base::android::AttachCurrentThread(); base::android::ScopedJavaLocalRef<jstring> jfeature( base::android::ConvertUTF8ToJavaString(env, feature.name)); @@ -90,9 +55,6 @@ Tracker::TriggerState WrappingTestTracker::GetTriggerState( const base::Feature& feature) const { - if (!java_tracker_) - return TrackerImpl::GetTriggerState(feature); - JNIEnv* env = base::android::AttachCurrentThread(); base::android::ScopedJavaLocalRef<jstring> jfeature( base::android::ConvertUTF8ToJavaString(env, feature.name)); @@ -102,11 +64,6 @@ } void WrappingTestTracker::Dismissed(const base::Feature& feature) { - if (!java_tracker_) { - TrackerImpl::Dismissed(feature); - return; - } - JNIEnv* env = base::android::AttachCurrentThread(); base::android::ScopedJavaLocalRef<jstring> jfeature( base::android::ConvertUTF8ToJavaString(env, feature.name)); @@ -115,20 +72,18 @@ } std::unique_ptr<DisplayLockHandle> WrappingTestTracker::AcquireDisplayLock() { - return TrackerImpl::AcquireDisplayLock(); + return nullptr; } bool WrappingTestTracker::IsInitialized() const { - if (!java_tracker_) - return TrackerImpl::IsInitialized(); - return Java_CppWrappedTestTracker_isInitialized( base::android::AttachCurrentThread(), java_tracker_); } void WrappingTestTracker::AddOnInitializedCallback( OnInitializedCallback callback) { - TrackerImpl::AddOnInitializedCallback(std::move(callback)); + base::ThreadTaskRunnerHandle::Get()->PostTask( + FROM_HERE, base::BindOnce(std::move(callback), IsInitialized())); } } // namespace feature_engagement
diff --git a/components/feature_engagement/public/android/wrapping_test_tracker.h b/components/feature_engagement/public/android/wrapping_test_tracker.h new file mode 100644 index 0000000..1fb5146 --- /dev/null +++ b/components/feature_engagement/public/android/wrapping_test_tracker.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 COMPONENTS_FEATURE_ENGAGEMENT_PUBLIC_ANDROID_WRAPPING_TEST_TRACKER_H_ +#define COMPONENTS_FEATURE_ENGAGEMENT_PUBLIC_ANDROID_WRAPPING_TEST_TRACKER_H_ + +#include <memory> +#include <string> + +#include "base/android/jni_android.h" +#include "base/callback.h" +#include "base/macros.h" +#include "components/feature_engagement/public/tracker.h" + +namespace feature_engagement { +// This class wraps a Tracker from Java and forwards to it all calls received. +class WrappingTestTracker : public Tracker { + public: + explicit WrappingTestTracker(const base::android::JavaRef<jobject>& jtracker); + ~WrappingTestTracker() override; + + // TrackerImpl: + + void NotifyEvent(const std::string& event) override; + bool ShouldTriggerHelpUI(const base::Feature& feature) override; + bool WouldTriggerHelpUI(const base::Feature& feature) const override; + bool HasEverTriggered(const base::Feature& feature, + bool from_window) const override; + TriggerState GetTriggerState(const base::Feature& feature) const override; + void Dismissed(const base::Feature& feature) override; + std::unique_ptr<DisplayLockHandle> AcquireDisplayLock() override; + bool IsInitialized() const override; + void AddOnInitializedCallback(OnInitializedCallback callback) override; + + private: + base::android::ScopedJavaGlobalRef<jobject> java_tracker_; + + DISALLOW_COPY_AND_ASSIGN(WrappingTestTracker); +}; + +} // namespace feature_engagement + +#endif // COMPONENTS_FEATURE_ENGAGEMENT_PUBLIC_ANDROID_WRAPPING_TEST_TRACKER_H_
diff --git a/components/feature_engagement/public/tracker.h b/components/feature_engagement/public/tracker.h index 83b6c0f..3fa02b8 100644 --- a/components/feature_engagement/public/tracker.h +++ b/components/feature_engagement/public/tracker.h
@@ -15,6 +15,7 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" #include "base/sequenced_task_runner.h" +#include "base/supports_user_data.h" #include "build/build_config.h" #include "components/keyed_service/core/keyed_service.h" @@ -47,7 +48,7 @@ // input about user behavior. Whenever the frontend gives a trigger signal that // IPH could be displayed, the backend will provide an answer to whether it is // appropriate to show it or not. -class Tracker : public KeyedService { +class Tracker : public KeyedService, public base::SupportsUserData { public: // Describes the state of whether in-product helps has already been displayed // enough times or not within the bounds of the configuration for a
diff --git a/components/keyed_service/core/keyed_service.h b/components/keyed_service/core/keyed_service.h index f9fd7ab..2bd32cf 100644 --- a/components/keyed_service/core/keyed_service.h +++ b/components/keyed_service/core/keyed_service.h
@@ -17,6 +17,11 @@ // should *not* request other services from their factories via the relevant // Context object (e.g., Profile), as the association between that Context // object and its keyed services is dropped after the shutdown phase. +// Shutdown of KeyedServices is generally initiated by the embedder's +// destruction of Profile (or analogous object). +// CAVEAT: Not all embedders destroy the Profiles (or Profile analogs) as part +// of embedder shutdown, so it is not guaranteed that the keyed service shutdown +// process will run at shutdown of a given embedder. class KEYED_SERVICE_EXPORT KeyedService { public: KeyedService();
diff --git a/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineContentProvider.java b/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineContentProvider.java index 6a2eb26a..45d5f2c 100644 --- a/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineContentProvider.java +++ b/components/offline_items_collection/core/android/java/src/org/chromium/components/offline_items_collection/OfflineContentProvider.java
@@ -7,6 +7,7 @@ import org.chromium.base.Callback; import java.util.ArrayList; +import java.util.List; /** * This interface is a Java counterpart to the C++ OfflineContentProvider @@ -19,7 +20,7 @@ */ interface Observer { /** See OfflineContentProvider::Observer::OnItemsAdded(...). */ - void onItemsAdded(ArrayList<OfflineItem> items); + void onItemsAdded(List<OfflineItem> items); /** See OfflineContentProvider::Observer::OnItemRemoved(...). */ void onItemRemoved(ContentId id);
diff --git a/components/omnibox/browser/autocomplete_match.cc b/components/omnibox/browser/autocomplete_match.cc index 3500958..5764e1b 100644 --- a/components/omnibox/browser/autocomplete_match.cc +++ b/components/omnibox/browser/autocomplete_match.cc
@@ -85,6 +85,12 @@ SplitAutocompletion::SplitAutocompletion() = default; SplitAutocompletion::SplitAutocompletion(const SplitAutocompletion& copy) = default; +SplitAutocompletion::SplitAutocompletion(SplitAutocompletion&& other) noexcept = + default; +SplitAutocompletion& SplitAutocompletion::operator=( + const SplitAutocompletion&) = default; +SplitAutocompletion& SplitAutocompletion::operator=( + SplitAutocompletion&&) noexcept = default; SplitAutocompletion::~SplitAutocompletion() = default;
diff --git a/components/omnibox/browser/autocomplete_match.h b/components/omnibox/browser/autocomplete_match.h index 50b480f..0f05d0b 100644 --- a/components/omnibox/browser/autocomplete_match.h +++ b/components/omnibox/browser/autocomplete_match.h
@@ -56,6 +56,10 @@ std::vector<gfx::Range> selections); SplitAutocompletion(); SplitAutocompletion(const SplitAutocompletion& copy); + SplitAutocompletion(SplitAutocompletion&&) noexcept; + SplitAutocompletion& operator=(const SplitAutocompletion&); + SplitAutocompletion& operator=(SplitAutocompletion&&) noexcept; + ~SplitAutocompletion(); bool Empty() const;
diff --git a/components/password_manager/core/browser/well_known_change_password_state_unittest.cc b/components/password_manager/core/browser/well_known_change_password_state_unittest.cc index b9e16319..c2622d8 100644 --- a/components/password_manager/core/browser/well_known_change_password_state_unittest.cc +++ b/components/password_manager/core/browser/well_known_change_password_state_unittest.cc
@@ -63,7 +63,7 @@ WellKnownChangePasswordStateTest() { auto origin = url::Origin::Create(GURL(kOrigin)); trusted_params_.isolation_info = net::IsolationInfo::CreatePartial( - net::IsolationInfo::RedirectMode::kUpdateNothing, + net::IsolationInfo::RequestType::kOther, net::NetworkIsolationKey(origin, origin)); state_.FetchNonExistingResource( test_shared_loader_factory_.get(), GURL(kOrigin),
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index 3423a90..d6d58f5 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -7401,7 +7401,7 @@ 'id': 800, 'caption': '''Duration of the notification on smart card removal for <ph name="PRODUCT_OS_NAME">$2<ex>Google Chrome OS</ex></ph>.''', 'tags': [], - 'desc': '''This policy only takes effect when the policy <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_POLICY_NAME">SecurityTokenSessionBehavior</ph> is set to <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK">LOCK</ph> or <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT">LOGOUT</ph>, and a user who authenticates via a smart card remvoes that smart card. Then, this policy specifies for how many seconds a notification which informs the user of the impending action is displayed. This notification is blocking the screen. The action will only happen after this notification expires. The user can prevent the action from happening by re-inserting the smart card before the notification expires. If this policy is set to zero, no notification will be displayed and the action happens immediately.''' + 'desc': '''This policy only takes effect when the policy <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_POLICY_NAME">SecurityTokenSessionBehavior</ph> is set to <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK">LOCK</ph> or <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT">LOGOUT</ph>, and a user who authenticates via a smart card removes that smart card. Then, this policy specifies for how many seconds a notification which informs the user of the impending action is displayed. This notification is blocking the screen. The action will only happen after this notification expires. The user can prevent the action from happening by re-inserting the smart card before the notification expires. If this policy is set to zero, no notification will be displayed and the action happens immediately.''' }, { 'name': 'InstantEnabled',
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb index 6efa17d..b9965ebc 100644 --- a/components/policy/resources/policy_templates_de.xtb +++ b/components/policy/resources/policy_templates_de.xtb
@@ -41,7 +41,7 @@ Diese Richtlinie betrifft nur Nutzer, deren Domain der Geräteanmeldedomain entspricht. Bei allen anderen Nutzern werden die vom IdP gesetzten Cookies nur während der ersten Anmeldung auf dem Gerät an das Nutzerprofil gesendet.</translation> <translation id="1029052664284722254">Bei Nutzerabmeldung Geräteneustart erzwingen</translation> -<translation id="1032533786864478457">Wenn die Richtlinie aktiviert ist, können Nutzer die SMS auf ihren Geräten mit Chromebooks synchronisieren. Diese Funktion muss durch die Nutzer eingerichtet und explizit freigeschaltet werden. Anschließend können sie auf ihren Chromebooks SMS senden und empfangen. +<translation id="1032533786864478457">Wenn die Richtlinie aktiviert ist, können Nutzer ihre SMS mit Chromebooks synchronisieren. Diese Funktion muss durch die Nutzer eingerichtet und explizit freigeschaltet werden. Anschließend können sie auf ihren Chromebooks SMS senden und empfangen. Ist die Richtlinie deaktiviert, kann die Synchronisierung von SMS nicht eingerichtet werden. @@ -624,7 +624,7 @@ Bitte beachten Sie, dass die Richtlinie pro Renderer-Prozess angewendet wird. Dabei wird der letzte Wert der Richtlinie angewendet, wenn ein Renderer-Prozess startet. Wenn Sie sicherstellen möchten, dass alle geladenen Tabs die gleiche Richtlinieneinstellung erhalten, ist ein Neustart des Browsers nötig. Allerdings ist es kein Problem, wenn einzelne Prozesse mit unterschiedlichen Werten für diese Richtlinie laufen.</translation> <translation id="2030905906517501646">Suchbegriff der Standardsuchmaschine</translation> <translation id="203096360153626918">Diese Richtlinie hat keine Auswirkungen auf die Android-Apps. Der Vollbildmodus kann aktiviert werden, auch wenn diese Richtlinie auf <ph name="FALSE" /> gesetzt ist.</translation> -<translation id="2036522553891755455">Wenn die Richtlinie aktiviert ist, verwendet die Freigabeerkennung, also die Funktion zur Netzwerk-Dateifreigabe für <ph name="PRODUCT_NAME" />, das <ph name="NETBIOS_PROTOCOL" />, um Dateifreigaben im Netzwerk zu erkennen. Wenn die Richtlinie deaktiviert ist, kann die Freigabeerkennung dieses Protokoll nicht verwenden, um Freigaben zu erkennen. +<translation id="2036522553891755455">Wenn die Richtlinie aktiviert ist, verwendet die Freigabeerkennung, also die Funktion zur Netzwerkfreigabe für <ph name="PRODUCT_NAME" />, das <ph name="NETBIOS_PROTOCOL" />, um Dateifreigaben im Netzwerk zu erkennen. Wenn die Richtlinie deaktiviert ist, kann die Freigabeerkennung dieses Protokoll nicht verwenden, um Freigaben zu erkennen. Ist sie nicht konfiguriert, wird dieses Verhalten für verwaltete Nutzer standardmäßig deaktiviert und für andere Nutzer hingegen aktiviert.</translation> <translation id="2037214548071298156">Wenn die Richtlinie aktiviert oder nicht konfiguriert ist, werden über registrierte Geräte Hardwarestatistiken wie die CPU/RAM-Nutzung gemeldet. @@ -638,7 +638,7 @@ Wenn diese Einstellung deaktiviert ist, können keine Dateien übertragen werden. Ist die Einstellung aktiviert oder nicht konfiguriert, ist eine Dateiübertragung möglich.</translation> <translation id="2057317273526988987">Zugriff auf eine Liste mit URLs erlauben</translation> <translation id="2061810934846663491">Erforderliche Domainnamen für Remotezugriff-Hosts konfigurieren</translation> -<translation id="2069350366303315077">Wenn die Richtlinie aktiviert ist, erzwingt <ph name="PRODUCT_NAME" /> Gastsitzungen und verhindert die Anmeldung über Nutzerprofile. Gastsitzungen basieren auf <ph name="PRODUCT_NAME" />-Profilen, bei denen die Programmfenster im Inkognitomodus ausgeführt werden. +<translation id="2069350366303315077">Wenn die Richtlinie aktiviert ist, erzwingt <ph name="PRODUCT_NAME" /> Gastsitzungen und verhindert die Anmeldung über Nutzerprofile. Gastsitzungen sind <ph name="PRODUCT_NAME" />-Profile, bei denen die Fenster im Inkognitomodus ausgeführt werden. Wenn die Richtlinie deaktiviert oder nicht konfiguriert ist bzw. der Gastmodus des Browsers durch <ph name="BROWSER_GUEST_MODE_ENABLED_POLICY_NAME" /> deaktiviert ist, können sowohl neue als auch vorhandene Profile verwendet werden.</translation> <translation id="2073552873076775140">Anmeldung in <ph name="PRODUCT_NAME" /> erlauben</translation> @@ -976,7 +976,7 @@ <translation id="2482676533225429905">Natives Messaging</translation> <translation id="2483146640187052324">Netzwerkaktionen über alle Netzwerkverbindungen vervollständigen</translation> <translation id="2498238926436517902">Ablage immer automatisch ausblenden</translation> -<translation id="250022556568924228">Wenn die Richtlinie aktiviert ist, lädt <ph name="PRODUCT_OS_NAME" /> Nutzungsbedingungen herunter und zeigt sie jedes Mal an, wenn eine Sitzung mit einem lokalen Gerätekonto gestartet wird. Die Nutzer können sich erst in der Sitzung anmelden, nachdem sie die Nutzungsbedingungen akzeptiert haben. +<translation id="250022556568924228">Wenn die Richtlinie aktiviert ist, lädt <ph name="PRODUCT_OS_NAME" /> die Nutzungsbedingungen herunter und zeigt sie jedes Mal an, wenn eine Sitzung mit einem lokalen Gerätekonto gestartet wird. Die Nutzer können sich erst in der Sitzung anmelden, nachdem sie die Nutzungsbedingungen akzeptiert haben. Wenn die Richtlinie nicht konfiguriert ist, werden keine Nutzungsbedingungen angezeigt. @@ -1047,7 +1047,7 @@ Diese Richtlinie wird nur beachtet, wenn die Richtlinie "DefaultSearchProviderEnabled" aktiviert ist.</translation> <translation id="2567227673131796227">Diese Richtlinie wurde eingestellt. Bitte verwenden Sie stattdessen <ph name="NATIVE_MESSAGING_BLOCKLIST_POLICY_NAME" />. - Wenn diese Richtlinie konfiguriert ist, wird festgelegt, welche nativen Nachrichtenhosts nicht geladen werden dürfen. Der Wert <ph name="WILDCARD_VALUE" /> der Liste der blockierten nativen Hosts gibt an, dass alle nativen Nachrichtenhosts gesperrt sind, sofern sie nicht ausdrücklich zugelassen wurden. + Wenn diese Richtlinie konfiguriert ist, wird festgelegt, welche nativen Nachrichtenhosts nicht geladen werden dürfen. Der Wert <ph name="WILDCARD_VALUE" /> in der Liste der blockierten nativen Hosts gibt an, dass alle nativen Nachrichtenhosts gesperrt sind, sofern sie nicht ausdrücklich zugelassen wurden. Wenn die Richtlinie nicht konfiguriert ist, werden alle installierten nativen Nachrichtenhosts von <ph name="PRODUCT_NAME" /> geladen.</translation> <translation id="2571066091915960923">Aktiviert oder deaktiviert den Proxy für die Datenkomprimierung und verhindert, dass die Nutzer diese Einstellung ändern können. @@ -1167,7 +1167,7 @@ <translation id="2759224876420453487">Nutzerverhalten in Mehrfachprofil-Sitzung steuern</translation> <translation id="2759426227259007018">Mit der Konfiguration der Richtlinie werden die Apps festgelegt, die Nutzer als Notizen-App auf dem Sperrbildschirm von <ph name="PRODUCT_OS_NAME" /> aktivieren können. - Wenn die bevorzugte App für den Sperrbildschirm konfiguriert ist, erscheint ein UI-Element zum Starten der bevorzugten Notizen-App auf dem Bildschirm. Nach dem Starten der App wird über dem Sperrbildschirm ein Fenster eingeblendet, in das Notizen eingegeben werden können. Sie können einstellen, dass die App nach dem Entsperren Notizen in die Hauptsitzung importiert. Nur <ph name="PRODUCT_NAME" />-Notizen-Apps werden auf dem Sperrbildschirm unterstützt. + Wenn die bevorzugte App für den Sperrbildschirm konfiguriert ist, erscheint ein UI-Element zum Starten der bevorzugten Notizen-App auf dem Bildschirm. Nach dem Starten der App wird über dem Sperrbildschirm ein Fenster eingeblendet, in das Notizen eingegeben werden können. Die App kann nach dem Entsperren Notizen in die Hauptsitzung importieren. Nur <ph name="PRODUCT_NAME" />-Notizen-Apps werden auf dem Sperrbildschirm unterstützt. Wenn die Richtlinie aktiviert und die Erweiterungs-ID einer App in der entsprechenden Liste aufgeführt ist, können Nutzer diese App auf dem Sperrbildschirm starten. Die Vorgabe einer leeren Liste führt demnach dazu, dass auf dem Sperrbildschirm keine Notizen erstellt werden können. Die Konfiguration der Richtlinie mit einer App-ID bedeutet jedoch nicht unbedingt, dass Nutzer die jeweilige App als Notizen-App auf dem Sperrbildschirm aktivieren können. Bei <ph name="PRODUCT_NAME" /> 61 ist beispielsweise auch durch die Plattform festgelegt, welche Apps verfügbar sind. @@ -1461,7 +1461,7 @@ Der Wert für die Richtlinie muss in Millisekunden angegeben werden.</translation> <translation id="3205825995289802549">Erstes Browserfenster bei der ersten Ausführung maximieren</translation> -<translation id="3210408472559816322">Wenn diese Richtlinie konfiguriert ist, wird festgelegt, welche nativen Nachrichtenhosts nicht geladen werden dürfen. Der Wert <ph name="WILDCARD_VALUE" /> der Liste der blockierten nativen Hosts gibt an, dass alle nativen Nachrichtenhosts gesperrt sind, sofern sie nicht ausdrücklich zugelassen wurden. +<translation id="3210408472559816322">Wenn diese Richtlinie konfiguriert ist, wird festgelegt, welche nativen Nachrichtenhosts nicht geladen werden dürfen. Der Wert <ph name="WILDCARD_VALUE" /> in der Liste der blockierten nativen Hosts gibt an, dass alle nativen Nachrichtenhosts gesperrt sind, sofern sie nicht ausdrücklich zugelassen wurden. Wenn die Richtlinie nicht konfiguriert ist, werden alle installierten nativen Nachrichtenhosts von <ph name="PRODUCT_NAME" /> geladen.</translation> <translation id="3211426942294667684">Einstellungen für die Anmeldung im Browser</translation> @@ -2392,7 +2392,7 @@ Wenn die Richtlinie nicht konfiguriert ist, können gespeicherte Authentifizierungsdaten bis zu 73 Stunden lang wiederverwendet werden. - Hinweis: Durch einen Neustart des Geräts wird der Cache geleert. Auch für vorübergehende Nutzer werden Bereichsdaten im Cache gespeichert. Schalten Sie den Cache aus, um zu verhindern, dass Bereichsdaten von vorübergehenden Nutzern gespeichert werden.</translation> + Hinweis: Durch einen Neustart des Geräts wird der Cache geleert. Auch für Nutzer im flüchtigen Modus werden Bereichsdaten im Cache gespeichert. Schalten Sie den Cache aus, um zu verhindern, dass Bereichsdaten von Nutzern im flüchtigen Modus gespeichert werden.</translation> <translation id="4591366717022345234">Nutzern einen Quick-Fix-Build bereitstellen</translation> <translation id="4592246263545654202">Gibt an, ob der Nutzer Seiten in <ph name="PRODUCT_NAME" /> im Inkognitomodus öffnen kann. @@ -2501,7 +2501,7 @@ <ph name="PAGE_SIZE_NAME" /> sollte eines der aufgelisteten Formate oder "custom" enthalten, wenn sich die erforderliche Papiergröße nicht in der Liste befindet. Wenn der Wert "custom" angegeben wird, sollte die Property "<ph name="PAGE_SIZE_CUSTOM_SIZE" />" festgelegt werden. Sie beschreibt die gewünschte Höhe und Breite in Mikrometern. In anderen Fällen sollte die Property "<ph name="PAGE_SIZE_CUSTOM_SIZE" />" nicht verwendet werden. Richtlinien, die gegen diese Regeln verstoßen, werden ignoriert. Wenn die Seitengröße auf dem vom Nutzer gewählten Drucker nicht verfügbar ist, wird diese Richtlinie ignoriert.</translation> -<translation id="4790588245699320140">Google Assistant darf auf den Bildschirmkontext zugreifen</translation> +<translation id="4790588245699320140">Google Assistant erlauben, auf den Bildschirmkontext zuzugreifen</translation> <translation id="4802744647065138872">Begrenzt die Anzahl der Snapshots von Nutzerdaten, die für den Fall eines Notfall-Rollbacks aufbewahrt werden.</translation> <translation id="4802905909524200151">Updateverhalten von <ph name="TPM_FIRMWARE_UPDATE_TPM" />-Firmware konfigurieren</translation> <translation id="4804828344300125154">Nach Nutzerabmeldung immer neu starten.</translation> @@ -2770,7 +2770,7 @@ Ist die Richtlinie deaktiviert, können Nutzer keine neuen Passwörter speichern lassen. Zuvor gespeicherte Passwörter funktionieren aber weiterhin. - Ist die Richtlinie festgelegt, können Nutzer die Datenleckprüfung nicht in <ph name="PRODUCT_NAME" /> ändern. Wenn die Richtlinie nicht konfiguriert ist, können Nutzer das Speichern von Passwörtern deaktivieren.</translation> + Ist die Richtlinie festgelegt, können Nutzer sie in <ph name="PRODUCT_NAME" /> nicht ändern. Wenn die Richtlinie nicht konfiguriert ist, können Nutzer das Speichern von Passwörtern deaktivieren.</translation> <translation id="5239333626804545932">Wenn die Richtlinie aktiviert oder nicht konfiguriert ist, scannt das Chrome Cleanup Tool das System regelmäßig nach unerwünschter Software und fragt gegebenenfalls den Nutzer, ob diese entfernt werden soll. Das Chrome Cleanup Tool kann auch manuell über chrome://settings gestartet werden. Ist die Richtlinie deaktiviert, werden keine regelmäßigen Scans durchgeführt und auch die Option zum manuellen Starten ist deaktiviert. @@ -3255,9 +3255,9 @@ <translation id="5832274826894536455">Veraltete Richtlinien</translation> <translation id="5835253272509953988">Wenn die Richtlinie aktiviert ist, können Nutzer von <ph name="PRODUCT_NAME" /> prüfen lassen, ob die eingegebenen Nutzernamen und Passwörter Teil eines Datenlecks sind. - Ist die Richtlinie festgelegt, können Nutzer die Datenleckprüfung nicht in <ph name="PRODUCT_NAME" /> ändern. Sollte sie nicht festgelegt sein, ist die Datenleckprüfung zulässig, kann jedoch vom Nutzer deaktiviert werden. + Ist die Richtlinie festgelegt, können Nutzer sie in <ph name="PRODUCT_NAME" /> nicht ändern. Sollte sie nicht festgelegt sein, ist die Datenleckprüfung zulässig, kann jedoch vom Nutzer deaktiviert werden. - Dieses Verhalten wird nicht ausgelöst, wenn SafeBrowsing durch eine Richtlinie oder den Nutzer deaktiviert wurde. Wenn Sie die Aktivierung von SafeBrowsing erzwingen möchten, verwenden Sie die Richtlinie „<ph name="SAFE_BROWSING_ENABLED_POLICY_NAME" />“ oder „<ph name="SAFE_BROWSING_PROTETION_LEVEL_POLICY_NAME" />“.</translation> + Dieses Verhalten wird nicht ausgelöst, wenn Safe Browsing durch eine Richtlinie oder den Nutzer deaktiviert wurde. Wenn Sie die Aktivierung von Safe Browsing erzwingen möchten, verwenden Sie die Richtlinie „<ph name="SAFE_BROWSING_ENABLED_POLICY_NAME" />“ oder „<ph name="SAFE_BROWSING_PROTETION_LEVEL_POLICY_NAME" />“.</translation> <translation id="5836064773277134605">Vom Host für den Remotezugriff verwendeten UDP-Portbereich einschränken</translation> <translation id="5845686745936515940">Hiermit kann für alle Cookies das alte "<ph name="ATTRIBUTE_SAMESITE_NAME" />"-Verhalten wiederhergestellt werden. Wird es wiederhergestellt, werden Cookies, für die kein "<ph name="ATTRIBUTE_SAMESITE_NAME" />"-Attribut angegeben ist, so behandelt, als würden sie "<ph name="ATTRIBUTE_VALUE_SAMESITE_NONE" />" enthalten. Außerdem wird nicht mehr vorausgesetzt, dass Cookies mit dem Attribut "<ph name="ATTRIBUTE_VALUE_SAMESITE_NONE" />" auch das Attribut "<ph name="ATTRIBUTE_SECURE_NAME" />" enthalten müssen, und bei der Auswertung, ob zwei Websites identisch sind, werden die Schemata nicht verglichen. Eine vollständige Beschreibung steht unter https://www.chromium.org/administrators/policy-list-3/cookie-legacy-samesite-policies zur Verfügung. @@ -3566,7 +3566,7 @@ 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, wurde aber erst in Version 84 entfernt.</translation> -<translation id="6279722058145292462">Wenn die Richtlinie konfiguriert ist, wird in Tagen angegeben, wie häufig ein Client das Computerpasswort ändert. Das Passwort wird vom Client zufällig generiert und ist für den Nutzer nicht sichtbar. Eine Deaktivierung dieser Richtlinie oder die Auswahl einer hohen Anzahl von Tagen kann sich negativ auf die Sicherheit auswirken, da potenzielle Angreifer so mehr Zeit haben, das Computerpasswort herauszufinden und zu missbrauchen. +<translation id="6279722058145292462">Wenn die Richtlinie konfiguriert ist, wird in Tagen angegeben, wie häufig ein Client das Computerpasswort ändert. Das Passwort wird vom Client zufällig generiert und ist für den Nutzer nicht sichtbar. Eine Deaktivierung dieser Richtlinie oder die Auswahl einer hohen Anzahl von Tagen kann sich negativ auf die Sicherheit auswirken, da potenzielle Angreifer so mehr Zeit haben, das Computerpasswort herauszufinden und missbräuchlich zu verwenden. Wenn die Richtlinie nicht konfiguriert ist, wird das Computerpasswort alle 30 Tage geändert. @@ -3711,11 +3711,11 @@ Mit der Konfiguration der Richtlinie werden die Apps festgelegt, die Nutzer als Notizen-App auf dem Sperrbildschirm von <ph name="PRODUCT_OS_NAME" /> aktivieren können. - Wenn die bevorzugte App für den Sperrbildschirm konfiguriert ist, erscheint ein UI-Element zum Starten der bevorzugten Notizen-App auf dem Bildschirm. Nach dem Starten der App wird über dem Sperrbildschirm ein Fenster eingeblendet, in das Notizen eingegeben werden können. Sie können einstellen, dass die App nach dem Entsperren Notizen in die Hauptsitzung importiert. Nur <ph name="PRODUCT_NAME" />-Notizen-Apps werden auf dem Sperrbildschirm unterstützt. + Wenn die bevorzugte App für den Sperrbildschirm konfiguriert ist, erscheint ein UI-Element zum Starten der bevorzugten Notizen-App auf dem Bildschirm. Nach dem Starten der App wird über dem Sperrbildschirm ein Fenster eingeblendet, in das Notizen eingegeben werden können. Die App kann nach dem Entsperren Notizen in die Hauptsitzung importieren. Nur <ph name="PRODUCT_NAME" />-Notizen-Apps werden auf dem Sperrbildschirm unterstützt. Wenn die Richtlinie aktiviert und die Erweiterungs-ID einer App in der entsprechenden Liste aufgeführt ist, können Nutzer diese App auf dem Sperrbildschirm starten. Die Vorgabe einer leeren Liste führt demnach dazu, dass auf dem Sperrbildschirm keine Notizen erstellt werden können. Die Konfiguration der Richtlinie mit einer App-ID bedeutet jedoch nicht unbedingt, dass Nutzer die jeweilige App als Notizen-App auf dem Sperrbildschirm aktivieren können. Bei <ph name="PRODUCT_NAME" /> 61 ist beispielsweise auch durch die Plattform festgelegt, welche Apps verfügbar sind. - Wenn die Richtlinie nicht konfiguriert ist, werden dadurch die Apps, die Nutzer auf dem Sperrbildschirm aktivieren können, nicht eingeschränkt.</translation> + Wenn die Richtlinie nicht konfiguriert ist, werden dadurch die Apps, die Nutzer auf dem Sperrbildschirm aktivieren können, nicht durch die Richtlinie eingeschränkt.</translation> <translation id="6506486086262398387">Wenn die Richtlinie aktiviert ist, verwendet die Funktion zur Netzwerkfreigabe für <ph name="PRODUCT_OS_NAME" /> bei Bedarf NTLM zur Authentifizierung gegenüber SMB-Freigaben. Ist die Richtlinie deaktiviert, wird die NTLM-Authentifizierung gegenüber SMB-Freigaben ausgeschaltet. Ist sie nicht konfiguriert, wird dieses Verhalten für verwaltete Nutzer standardmäßig deaktiviert und für andere Nutzer hingegen aktiviert.</translation> @@ -3747,7 +3747,7 @@ Genaue Informationen zu gültigen URL-Mustern finden Sie unter https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="6553143066970470539">Displayhelligkeit in %</translation> <translation id="6559057113164934677">Keine Website darf auf meine Kamera oder mein Mikrofon zugreifen</translation> -<translation id="6559475864956112261">Diese Richtlinie wurde eingestellt. Bitte verwenden Sie stattdessen die Richtlinie <ph name="PROXY_SETTINGS_POLICY_NAME" />. +<translation id="6559475864956112261">Diese Richtlinie wurde eingestellt. Bitte verwenden Sie stattdessen die Richtlinie „<ph name="PROXY_SETTINGS_POLICY_NAME" />“. Durch Aktivieren der Richtlinie können Sie angeben, welcher Proxyserver von Chrome verwendet werden soll, und verhindern, dass Nutzer die Proxyeinstellungen ändern. Alle Proxyoptionen, die über die Befehlszeile eingegeben werden, werden von Chrome- und ARC-Apps ignoriert. Die Richtlinie ist nur wirksam, wenn die Richtlinie „<ph name="PROXY_SETTINGS_POLICY_NAME" />“ nicht konfiguriert wurde. @@ -5162,7 +5162,7 @@ <translation id="8417305981081876834">Maximale Länge der Sperrbildschirm-PIN festlegen</translation> <translation id="841853753509411428">Diese Richtlinie wurde eingestellt. Bitte verwenden Sie stattdessen <ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" />. - Wenn diese Richtlinie konfiguriert ist, wird festgelegt, dass native Nachrichtenhosts der Liste der blockierten nativen Hosts nicht unterliegen. Der Wert <ph name="WILDCARD_VALUE" /> der Liste der blockierten nativen Hosts gibt an, dass alle nativen Nachrichtenhosts gesperrt sind, sofern sie nicht ausdrücklich zugelassen wurden. + Wenn diese Richtlinie konfiguriert ist, wird festgelegt, welche nativen Nachrichtenhosts nicht der Liste der blockierten nativen Hosts unterliegen. Der Wert <ph name="WILDCARD_VALUE" /> in der Liste der blockierten nativen Hosts gibt an, dass alle nativen Nachrichtenhosts gesperrt sind, sofern sie nicht ausdrücklich zugelassen wurden. Standardmäßig sind alle nativen Nachrichtenhosts zulässig. Wurden jedoch alle nativen Nachrichtenhosts durch eine Richtlinie gesperrt, kann der Administrator diese Richtlinie mithilfe der Zulassungsliste ändern.</translation> <translation id="841977920223099909">Auslöser für Passwortschutzwarnung</translation> @@ -5381,7 +5381,7 @@ <translation id="8767743923206070405">Wenn die Richtlinie aktiviert ist, wird die Startbildschirmtaste in der Symbolleiste von <ph name="PRODUCT_NAME" /> angezeigt. Ist die Richtlinie deaktiviert, erscheint die Startbildschirmtaste nicht. Wenn Sie diese Richtlinie konfigurieren, kann sie von Nutzern in <ph name="PRODUCT_NAME" /> nicht geändert werden. Wenn die Richtlinie nicht konfiguriert ist, können Nutzer selbst entscheiden, ob die Startbildschirmtaste angezeigt werden soll.</translation> -<translation id="8768528324886802059">Wenn diese Richtlinie konfiguriert ist, wird festgelegt, dass native Nachrichtenhosts der Liste der blockierten nativen Hosts nicht unterliegen. Der Wert <ph name="WILDCARD_VALUE" /> der Liste der blockierten nativen Hosts gibt an, dass alle nativen Nachrichtenhosts gesperrt sind, sofern sie nicht ausdrücklich zugelassen wurden. +<translation id="8768528324886802059">Wenn diese Richtlinie konfiguriert ist, wird festgelegt, welche nativen Nachrichtenhosts nicht der Liste der blockierten nativen Hosts unterliegen. Der Wert <ph name="WILDCARD_VALUE" /> in der Liste der blockierten nativen Hosts gibt an, dass alle nativen Nachrichtenhosts gesperrt sind, sofern sie nicht ausdrücklich zugelassen wurden. Standardmäßig sind alle nativen Nachrichtenhosts zulässig. Wurden jedoch alle nativen Nachrichtenhosts durch eine Richtlinie gesperrt, kann der Administrator diese Richtlinie mithilfe der Zulassungsliste ändern.</translation> <translation id="877185520360032968">Wenn die Richtlinie konfiguriert ist, wird das Standardverzeichnis festgelegt, das Chrome zum Herunterladen von Dateien verwendet. Nutzer können das Verzeichnis jedoch ändern.
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb index 606c0067..258d46c 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -107,11 +107,11 @@ Si estableces la política en los siguientes valores: - * Todo, se permitirán los tipos de encriptación AES aes256-cts-hmac-sha1-96 y aes128-cts-hmac-sha1-96, además del tipo de encriptación RC4 rc4-hmac. AES tendrá prioridad si el servidor es compatible con los tipos de encriptación AES y RC4. + * Todo: se permitirán los tipos de encriptación AES aes256-cts-hmac-sha1-96 y aes128-cts-hmac-sha1-96, además del tipo de encriptación RC4 rc4-hmac. AES tendrá prioridad si el servidor admite los tipos de encriptación AES y RC4. - * Seguro o no la estableces, solo se permitirán los tipos AES. + * Seguro o sin establecer: solo se permitirán los tipos AES. - * Heredado, solo se permitirán los tipos RC4. Estos no son seguros y solo son necesarios en circunstancias muy específicas. En lo posible, reconfigura el server para que sea compatible con la encriptación AES. + * Heredado: solo se permitirán los tipos RC4. Estos no son seguros y solo son necesarios en circunstancias muy específicas. En lo posible, reconfigura el servidor para que admita la encriptación AES. También consulta https://wiki.samba.org/index.php/Samba_4.6_Features_added/changed#Kerberos_client_encryption_types.</translation> <translation id="1177567780207290133">Si estableces la política, esta controlará el filtro de URL de SafeSites, el cual utiliza la API de Google Safe Search para clasificar las URL como pornográficas o no. @@ -644,7 +644,7 @@ sin efectos adversos.</translation> <translation id="2030905906517501646">Palabra clave del proveedor de búsqueda predeterminado</translation> <translation id="203096360153626918">Esta política no tiene efecto en las apps de Android. Podrán implementar el modo de pantalla completa, incluso si esta política se establece como <ph name="FALSE" />.</translation> -<translation id="2036522553891755455">Si habilitas la política, los elementos compartidos descubiertos (conforme a la función Network File Shares para <ph name="PRODUCT_NAME" />) usarán el protocolo <ph name="NETBIOS_PROTOCOL" /> para descubrir archivos compartidos en la red. Si la inhabilitas, los elementos compartidos descubiertos no utilizarán este protocolo para descubrir archivos compartidos. +<translation id="2036522553891755455">Si habilitas la política, la detección de elementos compartidos (la función Network File Shares para <ph name="PRODUCT_NAME" />) usará el protocolo <ph name="NETBIOS_PROTOCOL" /> para detectar archivos compartidos en la red. Si la inhabilitas, la detección de elementos compartidos no utilizará este protocolo para detectar archivos compartidos. Si no la estableces, de forma predeterminada se desactivará para los usuarios administrados y se activará para los demás usuarios.</translation> <translation id="2037214548071298156">Si habilitas la política o no la estableces, los dispositivos inscritos informarán sobre las estadísticas de hardware, como el uso de CPU/RAM. @@ -797,9 +797,9 @@ Si estableces la política como verdadera o no la estableces, se fijará la notificación de advertencia de privacidad de la sesión de invitado administrada con inicio automático hasta que el usuario la descarte.</translation> <translation id="228665601367357543">Te permite establecer una lista de patrones de URL que indiquen los sitios a los cuales se les otorga permiso automáticamente para acceder a un dispositivo USB con los ID del producto y del proveedor especificados. Para que la política sea válida, cada elemento de la lista debe tener los campos "devices" y "urls". Cada elemento del campo "devices" puede tener los campos "vendor_id" y "product_id". Si omites el campo "vendor_id", se creará una política que funcione con cualquier dispositivo. Si omites el campo "product_id", se creará una política que funcione con cualquier dispositivo que tenga el ID de proveedor especificado. Las políticas que tengan el campo "product_id", pero que no tengan el campo "vendor_id" no serán válidas. - El modelo de permiso de USB utiliza la URL de solicitud y la URL de incorporación (del sitio de marco de nivel superior) para permitir que la URL de solicitud acceda al dispositivo USB. Es posible que la URL de solicitud difiera de la URL de incorporación cuando el sitio que solicita el permiso se carga en un iframe. Así, el campo "urls" puede incluir hasta 2 strings separadas por coma para especificar ambas URL. Si solo especificas una, se otorgará acceso a los dispositivos USB correspondientes cuando la URL del sitio que solicita el permiso coincida con la URL especificada, independientemente del estado de incorporación. Las URL incluidas en el campo "urls" deben ser válidas; de lo contrario se ignorará la política. + El modelo de permiso de USB utiliza la URL de solicitud y la URL de incorporación (del sitio de marco de nivel superior) para permitir que la URL de solicitud acceda al dispositivo USB. Es posible que la URL de solicitud difiera de la URL de incorporación cuando el sitio que solicita el permiso se carga en un iframe. Así, el campo "urls" puede incluir hasta 2 strings separadas por coma para especificar ambas URL. Si solo especificas una, se otorgará acceso a los dispositivos USB correspondientes cuando la URL del sitio que solicita el permiso coincida con la URL especificada, independientemente del estado de incorporación. Las URL incluidas en el campo "urls" deben ser válidas; de lo contrario, se ignorará la política. - Si no estableces la política, se aplicará <ph name="DEFAULT_WEB_USB_GUARD_SETTING_POLICY_NAME" /> (si se establece). De lo contrario se aplicará la configuración personal del usuario. + Si no estableces la política, se aplicará <ph name="DEFAULT_WEB_USB_GUARD_SETTING_POLICY_NAME" /> (si se establece). De lo contrario, se aplicará la configuración personal del usuario. Los patrones de URL que se especifiquen en esta política no deben entrar en conflicto con los que se configuren a través de <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" />. Si ese es el caso, prevalecerá esta política por sobre <ph name="WEB_USB_BLOCKED_FOR_URLS_POLICY_NAME" /> y <ph name="WEB_USB_ASK_FOR_URLS_POLICY_NAME" />.</translation> <translation id="2289265947759479962">Esta política controla el envío de los datos sobre la versión, como la arquitectura, la plataforma y la versión del SO, así como la versión de <ph name="PRODUCT_NAME" /> y el canal de <ph name="PRODUCT_NAME" />. @@ -1000,7 +1000,7 @@ Si no estableces la política, no se mostrarán las Condiciones del Servicio. - La política debe establecerse en una URL de la cual <ph name="PRODUCT_OS_NAME" /> pueda descargar las Condiciones del Servicio. Estas deberán estar en texto sin formato y ofrecerse como texto sin formato tipo MIME. No puede incluir lenguaje de marcado.</translation> + La política debe establecerse en una URL de la cual <ph name="PRODUCT_OS_NAME" /> pueda descargar las Condiciones del Servicio. Estas deberán estar en texto sin formato y ofrecerse como texto sin formato tipo MIME. No se puede incluir lenguaje de marcado.</translation> <translation id="2502467045153796624">Comportamiento del cambio a una versión inferior del canal</translation> <translation id="250670737672448119">Habilita la función de accesibilidad de resaltar el signo de intercalación. @@ -1065,11 +1065,11 @@ La URL de los resultados al instante de Google se puede especificar como: <ph name="GOOGLE_INSTANT_SEARCH_URL" />. Esta política se aplica solo si la política "DefaultSearchProviderEnabled" está habilitada.</translation> -<translation id="2567227673131796227">Esta política no está disponible; usa "<ph name="NATIVE_MESSAGING_BLOCKLIST_POLICY_NAME" />" en su lugar. +<translation id="2567227673131796227">Esta política dejó de estar disponible. Usa la política "<ph name="NATIVE_MESSAGING_BLOCKLIST_POLICY_NAME" />" en su lugar. - Si estableces la política, se especificarán los hosts de mensajería nativa que no se deben cargar. Un valor de <ph name="WILDCARD_VALUE" /> en una lista de elementos bloqueados significa que todos los hosts de mensajería nativa están bloqueados, a menos que se permitan de forma explícita. + Si estableces la política, se especificarán los hosts de mensajería nativa que no se deben cargar. Un valor de <ph name="WILDCARD_VALUE" /> en una lista de bloqueo significa que todos los hosts de mensajería nativa están bloqueados, a menos que se permitan de forma explícita. - Si no estableces la política, <ph name="PRODUCT_NAME" /> cargará todos los hosts instalados de mensajería nativa.</translation> + Si no estableces la política, <ph name="PRODUCT_NAME" /> cargará todos los hosts de mensajería nativa instalados.</translation> <translation id="2571066091915960923">Habilita o inhabilita el proxy de compresión de datos y evita que los usuarios cambien esta opción. Si habilitas o inhabilitas esta opción, los usuarios no podrán cambiarla o anularla. @@ -1112,6 +1112,7 @@ Si no estableces la política, no se agregarán sitios web a la lista. Nota: Se pueden agregar elementos a esta lista mediante las políticas <ph name="USE_IE_SITELIST_POLICY_NAME" /> y <ph name="EXTERNAL_SITELIST_URL_POLICY_NAME" />.</translation> +<translation id="2640898752536996430">El usuario sale de la cuenta</translation> <translation id="264093234299818170">Se muestran todas las impresoras, excepto las de la lista de elementos bloqueados.</translation> <translation id="264252574246191885">No listado</translation> <translation id="2647069081229792812">Habilitar o inhabilitar la edición de favoritos</translation> @@ -1170,9 +1171,9 @@ Si esta configuración está inhabilitada, las páginas web no podrán usar JavaScript y el usuario no podrá cambiar esa configuración. Si esta configuración está habilitada o no está establecida, las páginas web podrán usar JavaScript pero el usuario podrá cambiar esa configuración.</translation> -<translation id="2752046642026416564">Si habilitas la política o no la estableces, <ph name="PRODUCT_NAME" /> podrá usar los hosts instalados de mensajería nativa a nivel del usuario. +<translation id="2752046642026416564">Si habilitas la política o no la estableces, <ph name="PRODUCT_NAME" /> podrá usar los hosts de mensajería nativa instalados a nivel del usuario. - Si inhabilitas la política, <ph name="PRODUCT_NAME" /> solo podrá usar estos hosts cuando están instalados a nivel del sistema.</translation> + Si inhabilitas la política, <ph name="PRODUCT_NAME" /> solo podrá usar estos hosts cuando estén instalados a nivel del sistema.</translation> <translation id="2753637905605932878">Restringir el intervalo de puertos UDP locales que usa WebRTC</translation> <translation id="2757054304033424106">Tipos de extensiones o aplicaciones que se pueden instalar</translation> <translation id="2758689548159678032">Si habilitas la política, la función de <ph name="PRODUCT_NAME" /> enviará encabezados de solicitud detallados con información sobre el entorno y el navegador del usuario. @@ -1183,7 +1184,7 @@ Esta política empresarial es una adaptación por corto plazo y se quitará en Chrome 88.</translation> <translation id="2759224876420453487">Controlar el comportamiento del usuario en una sesión de varios perfiles</translation> -<translation id="2759426227259007018">Si estableces la política, se especificarán las apps que los usuarios pueden activar, como una app para tomar notas en la pantalla de bloqueo de <ph name="PRODUCT_OS_NAME" />. +<translation id="2759426227259007018">Si estableces la política, se especificarán las apps que los usuarios pueden activar para tomar notas en la pantalla de bloqueo de <ph name="PRODUCT_OS_NAME" />. Si la app preferida se habilita en la pantalla de bloqueo, aparecerá un elemento de IU para ejecutar la app preferida para tomar notas. Cuando se ejecute, la app podrá crear una ventana en la parte superior de la pantalla de bloqueo para tomar notas en este contexto. La app podrá importar las notas creadas a la sesión del usuario principal cuando la sesión se desbloquee. La pantalla de bloqueo solo admite apps para tomar notas de <ph name="PRODUCT_NAME" />. @@ -1441,6 +1442,7 @@ <translation id="3072847235228302527">Establecer las Condiciones del Servicio para la cuenta local del dispositivo</translation> <translation id="3086995894968271156">Configura Cast Receiver en <ph name="PRODUCT_NAME" />.</translation> <translation id="3091832372132789233">Cargar la batería para dispositivos que están principalmente conectados a una fuente de alimentación externa</translation> +<translation id="309416443108680956">Especifica lo que sucede cuando un usuario que se autentica mediante un token de seguridad (p. ej., con una tarjeta inteligente) quita ese token durante una sesión activa. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />: No pasa nada. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" />: Se bloquea la pantalla hasta que el usuario se vuelva a autenticar. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />: Se cierra la sesión y el usuario sale. Si no estableces esta política, se aplicará la configuración predeterminada <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />.</translation> <translation id="3096595567015595053">Lista de complementos habilitados</translation> <translation id="3101501961102569744">Elegir cómo especificar la configuración del servidor proxy</translation> <translation id="3101709781009526431">Fecha y hora</translation> @@ -1461,6 +1463,11 @@ <translation id="316778957754360075">Esta opción se eliminó a partir de la versión 29 de <ph name="PRODUCT_NAME" />. La forma recomendada de configurar colecciones de aplicaciones o extensiones alojadas por una organización es incluir el sitio que aloja los paquetes CRX en la política ExtensionInstallSources y colocar vínculos de descarga directa a los paquetes en una página web. Se puede crear un selector para esa página web con la política ExtensionInstallForcelist.</translation> <translation id="3168968618972302728">Las políticas relacionadas con la autenticación Kerberos.</translation> <translation id="3171369832001535378">Plantilla para el nombre de host de la red de dispositivos</translation> +<translation id="3176903288465566098">Si habilitas esta configuración, los usuarios que hayan habilitado Phone Hub podrán acceder a las notificaciones del teléfono desde el Sistema operativo Chrome. + + Si la inhabilitas, los usuarios no podrán usar esta función. Tampoco podrán hacerlo si inhabilitas la política PhoneHubAllowed. + + Si no estableces esta política, se podrá utilizar el valor predeterminado tanto para usuarios administrados por una empresa como para aquellos no administrados.</translation> <translation id="3177802893484440532">Solicitar comprobaciones OCSP/CRL en línea para los anclajes de confianza locales</translation> <translation id="3184161739683646075">Controla el modo de DNS sobre HTTPS</translation> <translation id="3185009703220253572">desde la versión <ph name="SINCE_VERSION" /></translation> @@ -1479,9 +1486,9 @@ El valor de la política debe especificarse en milisegundos.</translation> <translation id="3205825995289802549">Maximizar la primera ventana del navegador en la primera ejecución</translation> -<translation id="3210408472559816322">Si estableces la política, se especificarán los hosts de mensajería nativa que no se deben cargar. Un valor de <ph name="WILDCARD_VALUE" /> en una lista de elementos bloqueados significa que todos los hosts de mensajería nativa están bloqueados, a menos que se permitan de forma explícita. +<translation id="3210408472559816322">Si estableces la política, se especificarán los hosts de mensajería nativa que no se deben cargar. Un valor de <ph name="WILDCARD_VALUE" /> en una lista de bloqueo significa que todos los hosts de mensajería nativa están bloqueados, a menos que se permitan de forma explícita. - Si no estableces la política, <ph name="PRODUCT_NAME" /> cargará todos los hosts instalados de mensajería nativa.</translation> + Si no estableces la política, <ph name="PRODUCT_NAME" /> cargará todos los hosts de mensajería nativa instalados.</translation> <translation id="3211426942294667684">Configuración de acceso en el navegador</translation> <translation id="3219421230122020860">Modo incógnito disponible</translation> <translation id="3220624000494482595">Si la Aplicación de kiosko es una app de Android, esta no tendrá control sobre la versión de <ph name="PRODUCT_OS_NAME" />, incluso si esta política se establece como <ph name="TRUE" />.</translation> @@ -1859,6 +1866,7 @@ Si estableces la política, los usuarios no podrán cambiar la página principal en <ph name="PRODUCT_NAME" />. Si no la estableces, el usuario decidirá si la página Nueva pestaña es la página principal. En <ph name="MS_WIN_NAME" />, esta funcionalidad solo estará disponible en instancias que están vinculadas a un dominio de <ph name="MS_AD_NAME" />, están inscritas en <ph name="CHROME_BROWSER_CLOUSE_MANAGEMENT_NAME" /> o se ejecutan en Windows 10 Pro. En <ph name="MAC_OS_NAME" />, esta funcionalidad solo está disponible en instancias administradas mediante MDM o vinculadas a un dominio a través de MCX.</translation> +<translation id="3695706037816556327">Acción ante la eliminación del token de seguridad (p. ej., una tarjeta inteligente) para <ph name="PRODUCT_OS_NAME" /></translation> <translation id="3701121231485832347">Controla la configuración específica de los dispositivos <ph name="PRODUCT_OS_NAME" /> administrados por <ph name="MS_AD_NAME" />.</translation> <translation id="3702518095257671450">Certificación remota</translation> <translation id="3702647575225525306"><ph name="POLICY_NAME" /> (Pronto dejará de estar disponible el campo de una línea y desaparecerá. Empieza a usar el cuadro de texto de varias líneas que se encuentra a continuación).</translation> @@ -1896,6 +1904,8 @@ Si no se establecen estas políticas, los usuarios podrán elegir la configuración de proxy.</translation> <translation id="3758249152301468420">Inhabilitar herramientas para desarrolladores</translation> +<translation id="3760231600118073732">Bloquea la sesión actual</translation> +<translation id="3764097800332238572">Esta política solo tiene efecto cuando se establece la política <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_POLICY_NAME" /> como <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" /> o <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />, y un usuario quien se autentica mediante una tarjeta inteligente quita esa tarjeta. Luego, esta política especificará el tiempo (expresado en segundos) durante el cual se muestra una notificación con la que se informa al usuario sobre la acción inminente. Esta notificación bloquea la pantalla. La acción ocurrirá solo cuando caduque esta notificación. El usuario puede impedir que ocurra la acción. Para hacerlo, este debe volver a insertar la tarjeta inteligente antes de que caduque la notificación. Si estableces esta política en cero, no se mostrará ninguna notificación y la acción ocurrirá de forma inmediata.</translation> <translation id="3765260570442823273">Duración del mensaje que advierte al usuario que saldrá del navegador porque se encuentra inactivo</translation> <translation id="377044054160169374">Intervención ante experiencias abusivas</translation> <translation id="3780152581321609624">Incluir puerto no estándar en el SPN de Kerberos</translation> @@ -2404,7 +2414,7 @@ <translation id="4578912515887794133">Si se habilita esta configuración, el host de acceso remoto comparará el nombre del usuario local (con el que está asociado el host) y el nombre de la Cuenta de Google registrada como propietario del host (es decir, "juanperez" si el host pertenece a la Cuenta de Google "juanperez@ejemplo.com"). No se iniciará el host de acceso remoto si el nombre del propietario del host es diferente del nombre del usuario local con el que está asociado el host. Se debe usar la política RemoteAccessHostMatchUsername junto con RemoteAccessHostDomain para exigir también que la Cuenta de Google del propietario del host esté asociada a un dominio específico (es decir, "ejemplo.com"). Si se inhabilita esta configuración o no se establece, el host de acceso remoto se podrá asociar con cualquier usuario local.</translation> -<translation id="4587365491100112056">Si estableces la política, se especificará el tiempo (expresado en horas) de almacenamiento en caché de los datos de autenticación. El almacenamiento en caché incluye datos sobre dominios en los que confía el dominio de la máquina (dominios afiliados). Por lo tanto, el almacenamiento en caché de los datos de autenticación permite agilizar el acceso. No se guardan los datos específicos del usuario ni los datos de dominios no afiliados. +<translation id="4587365491100112056">Si estableces la política, se especificará el tiempo (expresado en horas) de almacenamiento en caché de los datos de autenticación. La caché contiene datos sobre dominios en los que confía el dominio de la máquina (dominios afiliados). Por lo tanto, el almacenamiento en caché de los datos de autenticación permite agilizar el acceso. No se almacenan en caché los datos específicos del usuario ni los datos de dominios no afiliados. Si se establece la política en 0, se desactivará el almacenamiento en caché de los datos de autenticación. En todos los accesos, se recuperan los datos específicos del dominio. Por lo tanto, si se desactiva el almacenamiento en caché de los datos de autenticación, es posible que se reduzca drásticamente la velocidad de acceso del usuario. @@ -2631,7 +2641,7 @@ Para <ph name="MODE_FIELD_NAME" />, debe ser <ph name="MODE_ENUM_DROP_DOWN" /> o <ph name="MODE_ENUM_PRE_MOUNT" />: - * <ph name="MODE_ENUM_DROP_DOWN" /> indica que se agregará <ph name="SHARE_URL_FIELD_NAME" /> a la lista de elementos descubiertos compartidos. + * <ph name="MODE_ENUM_DROP_DOWN" /> indica que se agregará <ph name="SHARE_URL_FIELD_NAME" /> a la lista de detección de elementos compartidos. * <ph name="MODE_ENUM_PRE_MOUNT" /> indica que se activará <ph name="SHARE_URL_FIELD_NAME" />.</translation> <translation id="5023555740504506178">Si se habilita o no se configura (predeterminado), una página web podrá utilizar @@ -2789,7 +2799,7 @@ Si inhabilitas la política, los usuarios no podrán guardar nuevas contraseñas, pero seguirán funcionando las que se hayan guardado antes. - Si la estableces, los usuarios no podrán cambiarla en <ph name="PRODUCT_NAME" />. Si no la estableces, el usuario podrá desactivar la configuración de guardado de contraseñas.</translation> + Si estableces esta política, los usuarios no podrán cambiarla en <ph name="PRODUCT_NAME" />. Si no la estableces, el usuario podrá desactivar la configuración de guardado de contraseñas.</translation> <translation id="5239333626804545932">Si habilitas la política o no la estableces, Limpiar Chrome analizará el sistema periódicamente para detectar software no deseado y, si encuentra alguno, le preguntará al usuario si quiere quitarlo. La opción de activar manualmente Limpiar Chrome desde chrome://settings estará habilitada. Si inhabilitas la política, Limpiar Chrome no analizará el sistema periódicamente y estará inhabilitada la activación manual. @@ -2821,14 +2831,14 @@ * <ph name="PROXY_SERVER_PROXY_SETTINGS_FIELD" /> (una dirección URL al servidor proxy) * <ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" /> (una lista de hosts de proxy que omite <ph name="PRODUCT_NAME" />) - El campo <ph name="PROXY_SERVER_MODE_PROXY_SETTINGS_FIELD" /> no está disponible. En su lugar, aparece el campo <ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" />, en donde puedes especificar el servidor proxy que usa Chrome. También evita que los usuarios cambien la configuración del proxy. + El campo <ph name="PROXY_SERVER_MODE_PROXY_SETTINGS_FIELD" /> dejó de estar disponible. En su lugar, aparece el campo <ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" />, en donde puedes especificar el servidor proxy que usa Chrome. También evita que los usuarios cambien la configuración del proxy. Para <ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" />, si eliges uno de estos valores: - * <ph name="PROXY_MODE_ENUM_DIRECT" />, no se usará nunca un proxy y se ignorará el resto de los campos - * <ph name="PROXY_MODE_ENUM_SYSTEM" />, se usará el proxy del sistema y se ignorará el resto de los campos - * <ph name="PROXY_MODE_ENUM_AUTO_DETECT" />, se ignorará el resto de los campos - * <ph name="PROXY_MODE_ENUM_FIXED_SERVER" />, se usarán los campos <ph name="PROXY_SERVER_PROXY_SETTINGS_FIELD" /> y <ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" /> - * <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" />, se usarán los campos <ph name="PROXY_BYPASS_LIST_PROXY_PAC_URL" /> y <ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" /> + * <ph name="PROXY_MODE_ENUM_DIRECT" />: no se usará nunca un proxy y se ignorará el resto de los campos. + * <ph name="PROXY_MODE_ENUM_SYSTEM" />: se usará el proxy del sistema y se ignorará el resto de los campos. + * <ph name="PROXY_MODE_ENUM_AUTO_DETECT" />: se ignorará el resto de los campos. + * <ph name="PROXY_MODE_ENUM_FIXED_SERVER" />: se usarán los campos <ph name="PROXY_SERVER_PROXY_SETTINGS_FIELD" /> y <ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" />. + * <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" />: se usarán los campos <ph name="PROXY_BYPASS_LIST_PROXY_PAC_URL" /> y <ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" />. Nota: Para obtener más ejemplos detallados, visita The Chromium Projects ( https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett ).</translation> <translation id="5272684451155669299">Si la política se establece como verdadera, el usuario podrá usar el hardware en los dispositivos de Chrome para verificar su identidad de forma remota ante la CA de privacidad mediante la API <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> con la función <ph name="CHALLENGE_USER_KEY_FUNCTION" />. @@ -2923,6 +2933,7 @@ Si la estableces como falsa, se inhabilitará la redirección de puertos a los contenedores de Crostini.</translation> <translation id="538108065117008131">Permitir que <ph name="PRODUCT_FRAME_NAME" /> maneje los siguientes tipos de contenido.</translation> +<translation id="5383436189211119400">Si estableces la política "DeviceArcDataSnapshotHours", se podrán tomar instantáneas de los datos de ARC. Además, se podrá definir que se actualicen de forma automática las instantáneas de los datos de ARC en los intervalos de tiempo definidos. Si se inicia un intervalo, se requiere que se actualice la instantánea de ARC y ningún usuario accedió, no se notificará al usuario cuando se inicie la actualización. Si hay una sesión de usuario activa, el usuario verá la notificación de la IU. Este deberá aceptar el proceso para que se reinicie el dispositivo y se actualice la instantánea de los datos de ARC. Nota: Durante el proceso de actualización, no se podrá usar el dispositivo.</translation> <translation id="538768040137709073">Habilita la función de portapapeles compartido, que permite que los usuarios compartan texto entre computadoras de escritorios con Chrome y dispositivos Android cuando está habilitada la sincronización y el usuario accedió a su cuenta. Si se establece la política como verdadera, el usuario de Chrome podrá compartir texto entre dispositivos. @@ -3214,9 +3225,9 @@ <translation id="5697306356229823047">Informa sobre los usuarios de dispositivos.</translation> <translation id="570062449808736508">Cuando esta política se establece con una string no vacía, WebView leerá las restricciones de URL del proveedor de contenido con el nombre de la autoridad proporcionado.</translation> <translation id="5708969689202733975">Configurar los modos de desbloqueo rápido permitidos</translation> -<translation id="5715617256528927547">Si estableces la política, se especificará la duración (expresada en horas) de almacenamiento en caché del Objeto de directiva de grupo (GPO). Este valor indica el tiempo máxima en el que pueden reutilizarse los GPO antes de que se vuelvan a descargar. En lugar de volverlos a descargar en cada obtención de política, el sistema volverá a utilizar los almacenados en caché, siempre que no cambien de versión. +<translation id="5715617256528927547">Si estableces la política, se especificará la duración (expresada en horas) de almacenamiento en caché del Objeto de directiva de grupo (GPO). Este valor indica el tiempo máximo en el que pueden reutilizarse los GPO antes de que se vuelvan a descargar. En lugar de volverlos a descargar en cada recuperación de la política, el sistema volverá a utilizar los almacenados en caché, siempre que no cambien de versión. - Si estableces la política en 0, se desactivará el almacenamiento en caché del GPO. Con esta acción, aumentará la carga del servidor, ya que se volverán a descargar los GPO en cada obtención de la política, incluso si no cambiaron. + Si estableces la política en 0, se desactivará el almacenamiento en caché del GPO. Con esta acción, aumentará la carga del servidor, ya que se volverán a descargar los GPO en cada recuperación de la política, incluso si no cambiaron. Si no estableces la política, se podrán reutilizar los GPO almacenados en caché por un máximo de 25 horas. @@ -3268,7 +3279,7 @@ <translation id="5832274826894536455">Políticas obsoletas</translation> <translation id="5835253272509953988">Si habilitas la política, los usuarios podrán hacer que <ph name="PRODUCT_NAME" /> verifique si los nombres de usuario y contraseñas ingresados estuvieron en una filtración. - Si la estableces, los usuarios no podrán cambiarla en <ph name="PRODUCT_NAME" />. Si no la estableces, se habilitará la comprobación de filtración de credenciales, pero el usuario podrá desactivarla. + Si estableces esta política, los usuarios no podrán cambiarla en <ph name="PRODUCT_NAME" />. Si no la estableces, se habilitará la comprobación de filtración de credenciales, pero el usuario podrá desactivarla. No se activará este comportamiento si la Navegación segura está inhabilitada (ya sea por la política o el usuario). Si quieres forzar la Navegación segura, usa la política <ph name="SAFE_BROWSING_ENABLED_POLICY_NAME" /> o <ph name="SAFE_BROWSING_PROTETION_LEVEL_POLICY_NAME" />.</translation> <translation id="5836064773277134605">Restringir el intervalo de puertos UDP que utiliza el host de acceso remoto</translation> @@ -3580,7 +3591,7 @@ Para obtener más información sobre <ph name="CORS" />, visita la siguiente página web: <ph name="CORS_HELP_URL" />. Ten en cuenta que se anunció que esta política se quitaría en la versión 82 de <ph name="PRODUCT_NAME" />, pero se quitó en la versión 84.</translation> -<translation id="6279722058145292462">Si estableces la política, se especificará la frecuencia (expresada en días) con la que un cliente cambia la contraseña de la cuenta de máquina. El cliente genera la contraseña de forma aleatoria y el usuario no puede verla. Si inhabilitas esta política o la estableces en una cantidad alta de días, la seguridad puede verse afectada de forma negativa porque los potenciales atacantes tendrán más tiempo para encontrar y usar la contraseña de la cuenta de máquina. +<translation id="6279722058145292462">Si estableces la política, se especificará la frecuencia (expresada en días) con la que un cliente cambia la contraseña de la cuenta de máquina. El cliente genera la contraseña de forma aleatoria, y el usuario no puede verla. Si inhabilitas esta política o la estableces en una cantidad alta de días, la seguridad puede verse afectada de forma negativa porque los potenciales atacantes tendrán más tiempo para encontrar y usar la contraseña de la cuenta de máquina. Si no la estableces, se cambiará la contraseña de la cuenta de máquina cada 30 días. @@ -3723,7 +3734,7 @@ El valor de la política debe especificarse en milisegundos. Se establecerán los valores de modo que sean inferiores a la demora de inactividad.</translation> <translation id="6506239283767807745">Esta política dejó de estar disponible; usa <ph name="NOTE_TAKING_APPS_LOCK_SCREEN_ALLOWLIST" /> en su lugar. - Si estableces la política, se especificarán las apps que los usuarios pueden activar, como una app para tomar notas en la pantalla de bloqueo de <ph name="PRODUCT_OS_NAME" />. + Si estableces la política, se especificarán las apps que los usuarios pueden activar para tomar notas en la pantalla de bloqueo de <ph name="PRODUCT_OS_NAME" />. Si la app preferida se habilita en la pantalla de bloqueo, aparecerá un elemento de IU para ejecutar la app preferida para tomar notas. Cuando se ejecute, la app podrá crear una ventana en la parte superior de la pantalla de bloqueo para tomar notas en este contexto. La app podrá importar las notas creadas a la sesión del usuario principal cuando la sesión se desbloquee. La pantalla de bloqueo solo admite apps para tomar notas de <ph name="PRODUCT_NAME" />. @@ -3761,7 +3772,7 @@ Para obtener información detallada sobre los patrones de URL válidos, consulta: https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="6553143066970470539">Porcentaje del brillo de pantalla</translation> <translation id="6559057113164934677">No permitir que ningún sitio acceda a la cámara ni al micrófono</translation> -<translation id="6559475864956112261">Esta política no está disponible; usa <ph name="PROXY_SETTINGS_POLICY_NAME" /> en su lugar. +<translation id="6559475864956112261">Esta política dejó de estar disponible. Usa <ph name="PROXY_SETTINGS_POLICY_NAME" /> en su lugar. Si la habilitas, podrás especificar el servidor proxy que usa Chrome y evitar que los usuarios cambien la configuración del proxy. Chrome y las apps de ARC ignorarán todas las opciones relacionadas con el proxy que se especificaron en la línea de comandos. Esta política solo tendrá efecto si no se especifica la política <ph name="PROXY_SETTINGS_POLICY_NAME" />. @@ -3892,6 +3903,7 @@ <translation id="6672070613706645316">Permite que los usuarios personalicen el fondo en la página Nueva pestaña</translation> <translation id="6672630473862787247">Permite la autenticación ambiental en sesiones comunes, de incógnito y de invitado.</translation> <translation id="6685903773201985073">Permite la autenticación ambiental en sesiones comunes y de invitado.</translation> +<translation id="6689343802305995925">No ocurre ninguna acción</translation> <translation id="6689792153960219308">Informar estado de hardware</translation> <translation id="6690425645391461516">Inhabilita las revisiones de intercepción de DNS y permite las barras de información de "http://intranetsite/" para "quisiste decir".</translation> <translation id="6698632841807204978">Habilitar la impresión monocromática</translation> @@ -4158,6 +4170,7 @@ Si inhabilitas la política, <ph name="PRODUCT_NAME" /> cerrará la pestaña y, luego, cambiará a un navegador alternativo, incluso si se trataba de la última pestaña. En consecuencia, <ph name="PRODUCT_NAME" /> saldrá por completo.</translation> <translation id="7019805045859631636">"Fast"</translation> +<translation id="7026351325994257733">Permite sincronizar los ajustes de la red Wi-Fi entre dispositivos con <ph name="PRODUCT_OS_NAME" /> y un teléfono Android conectado</translation> <translation id="7027785306666625591">Configura la administración de energía en <ph name="PRODUCT_OS_NAME" />. Estas políticas te permiten configurar el comportamiento de <ph name="PRODUCT_OS_NAME" /> cuando el usuario permanece inactivo durante cierta cantidad de tiempo.</translation> @@ -4186,6 +4199,7 @@ <translation id="7068108874199666656">Permite aplicar la configuración de red a todos los usuarios de un dispositivo <ph name="PRODUCT_OS_NAME" />. La configuración de red es una cadena escrita en formato JSON, como la define el formato que se describe en Open Network Configuration.</translation> <translation id="7070525176564511548">Se requiere el ingreso de la contraseña cada semana (168 horas)</translation> <translation id="7072208053150563108">Frecuencia de cambio de la contraseña del dispositivo</translation> +<translation id="7072567600438630966">Permite habilitar Phone Hub</translation> <translation id="7079519252486108041">Bloquear ventanas emergentes en estos sitios</translation> <translation id="7080072532759721791">Permite a los usuarios la carga o descarga de archivos protegidos con contraseña</translation> <translation id="7086677522575756117">Indica el porcentaje en que debe ajustarse la demora de atenuación de la pantalla cuando se observa que la actividad del usuario con la pantalla oscurecida o poco después de que esta se haya desactivado. @@ -4363,6 +4377,7 @@ Si no se establece esta política o se deja en blanco, el usuario podrá establecer cualquier Cuenta de Google como la principal del navegador en <ph name="PRODUCT_NAME" />.</translation> <translation id="723103540848640830">Establecer la longitud mínima del PIN de la pantalla bloqueada</translation> <translation id="7234280155140786597">Nombres de los hosts de mensajería nativa prohibidos (o * para todos)</translation> +<translation id="7246767840750730334">Permite habilitar las notificaciones de Phone Hub</translation> <translation id="7249828445670652637">Habilitar certificados de CA de <ph name="PRODUCT_OS_NAME" /> para apps de ARC</translation> <translation id="7252681704926980614">Envía los nombres de usuario y de archivo al servidor de impresoras nativas en cada trabajo de impresión. La acción predeterminada es no enviarlos. @@ -4467,6 +4482,11 @@ Esta política dejó de estar disponible; usa la política <ph name="PRINTERS_BULK_BLOCKLIST" /> en su lugar. </translation> +<translation id="7358744897221281073">Si habilitas la configuración, los usuarios que habilitaron Phone Hub podrán continuar tareas, como ver las páginas web del teléfono, desde el Sistema operativo Chrome. + + Si la inhabilitas, los usuarios no podrán usar esta función. Tampoco podrán hacerlo si inhabilitas la política PhoneHubAllowed. + + Si no estableces esta política, se podrá utilizar el valor predeterminado tanto para usuarios administrados por una empresa como para aquellos no administrados.</translation> <translation id="7360181094056034924">Controla el comportamiento de <ph name="PRODUCT_NAME" /> con los datos cargados y descargados que deban analizarse. Demorar la entrega implica que <ph name="PRODUCT_NAME" /> no permitirá que el usuario acceda a un archivo descargado, seleccione un archivo para cargar, pegue datos desde el portapapeles o arrastre y suelte datos hasta que se haya analizado el contenido y se conozca el resultado del análisis. Esta restricción solo se aplica a los archivos o datos que deban analizarse, según se especifique en las políticas <ph name="SEND_FILES_FOR_MALWARE_CHECK_POLICY_NAME" />, <ph name="CHECK_CONTENT_COMPLIANCE_POLICY_NAME" /> y las políticas que controlan la lista de dominios en los que se hayan habilitado las comprobaciones. Si no se establece esta política o se le asigna el valor "Ninguno", <ph name="PRODUCT_NAME" /> no demorará la carga de archivos, los datos pegados en el portapapeles ni los datos arrastrados y soltados. Tampoco demorará el acceso a los archivos descargados. El análisis se llevará a cabo en segundo plano. @@ -4522,6 +4542,13 @@ - Si inhabilitas esta política, los administradores deberán comunicárselo a los usuarios finales del dispositivo.</translation> <translation id="747275827471712187">Revierte el comportamiento de las cookies en estos sitios conforme al atributo heredado <ph name="ATTRIBUTE_SAMESITE_NAME" /></translation> +<translation id="7476621944304431784">Si habilitas esta configuración, los usuarios podrán sincronizar los ajustes de la red Wi-Fi entre sus dispositivos con <ph name="PRODUCT_OS_NAME" /> y un teléfono Android conectado. Para poder sincronizar los ajustes de la red Wi-Fi, los usuarios deben habilitar esta función de forma explícita completando un flujo de configuración. + + Si inhabilitas esta configuración, los usuarios no podrán sincronizar los ajustes de la red Wi-Fi. + + Esta función depende del tipo de datos de <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> que se habilite en la Sincronización de Chrome. Si inhabilitas <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> en la política <ph name="SYNC_TYPES_LIST_DISABLED_POLICY_NAME" /> o inhabilitas la Sincronización de Chrome en la política <ph name="SYNC_DISABLED_POLICY_NAME" />, no se habilitará esta función. + + Si no estableces esta política, los usuarios administrados no podrán sincronizar los ajustes de forma predeterminada.</translation> <translation id="7477231245051133709">Habilita la función de accesibilidad de audio mono</translation> <translation id="7477239290070847560">Destinos de los protocolos basados en la no configuración (mDNS y DNS-SD)</translation> <translation id="7485481791539008776">Normas de selección de la impresora predeterminada</translation> @@ -4613,7 +4640,7 @@ * Si seleccionas Combinar, se combinará la política del usuario de los GPO del usuario con la de los GPO de la computadora. Tendrán prioridad los GPO de la computadora. - * Si seleccionas Reemplazar, se reemplazará la política del usuario de los GPO del usuario con la de los GPO de la computadora. Se ignorarán los GPO del usuario.</translation> + * Si seleccionas Reemplazar, se reemplazará la política del usuario de los GPO del usuario por la de los GPO de la computadora. Se ignorarán los GPO del usuario.</translation> <translation id="7570291542739287032">Solo en la nube</translation> <translation id="757395965347379751">Cuando se habilita esta configuración, <ph name="PRODUCT_NAME" /> permite los certificados firmados por SHA-1 siempre que estén validados correctamente y vinculados a certificados de CA instalados de forma local. @@ -4663,6 +4690,7 @@ Si no la configuras, se desactivará el cursor grande en la pantalla de acceso. Los usuarios podrán activarlo en cualquier momento y su estado para la pantalla de acceso se mantendrá entre los diferentes usuarios. Nota: Si se especifica <ph name="DEVICE_LOGIN_SCREEN_LARGE_CURSOR_ENABLED" />, anulará esta política.</translation> +<translation id="7632147323011514740">Los intervalos cuando se puede iniciar el proceso de actualización de instantáneas de los datos de ARC en sesiones de invitados administrados</translation> <translation id="7632724434767231364">Nombre de la biblioteca GSSAPI</translation> <translation id="7643883929273267746">Restringir las cuentas visibles en <ph name="PRODUCT_NAME" /></translation> <translation id="7648907905084499629">Usar el atributo <ph name="FEATURE_NAME_SAMESITE_BY_DEFAULT_COOKIES" /> para el comportamiento de las cookies en todos los sitios</translation> @@ -4934,6 +4962,7 @@ Esta política siempre será válida para <ph name="PRODUCT_OS_NAME" />.</translation> <translation id="8050080920415773384">Impresión nativa</translation> <translation id="8053580360728293758">Anula el modo predeterminado de impresión a color. Si el modo no está disponible, se ignorará esta política.</translation> +<translation id="8056237304861875584">Permite habilitar la continuación de tareas en Phone Hub</translation> <translation id="8059164285174960932">URL donde los clientes de acceso remoto deben obtener el token de autenticación</translation> <translation id="8077245272412229388">Agrega cuentas de Kerberos completadas automáticamente. Si las credenciales de Kerberos coinciden con las de acceso, se podrá configurar una cuenta para que las reutilice. Para hacerlo, se debe especificar "<ph name="LOGIN_EMAIL_PLACEHOLDER" />" y "<ph name="PASSWORD_PLACEHOLDER" />" para el correo principal y la contraseña respectivamente, a fin de que pueda recuperarse el ticket de Kerberos automáticamente (a menos que se configure la autenticación de dos factores). Los usuarios no podrán modificar las cuentas que se agreguen a través de esta política. @@ -5187,11 +5216,11 @@ Si se establece esta política como verdadera o no se establece, el usuario tendrá acceso con permisos de administrador a los contenedores de Crostini. Si se establece como falsa, el usuario no tendrá acceso con permisos de administrador a ningún contenedor de Crostini, ya sea nuevo o existente.</translation> <translation id="8417305981081876834">Establecer la longitud máxima del PIN de pantalla bloqueada</translation> -<translation id="841853753509411428">Esta política no está disponible; usa "<ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" />" en su lugar. +<translation id="841853753509411428">Esta política dejó de estar disponible. Usa la política "<ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" />" en su lugar. - Si estableces la política, se especificarán los hosts de mensajería nativa que no deben incluirse en la lista de elementos bloqueados. Un valor de <ph name="WILDCARD_VALUE" /> en una lista de elementos bloqueados significa que todos los hosts de mensajería nativa están bloqueados, a menos que se permitan de forma explícita. + Si estableces la política, se especificarán los hosts de mensajería nativa que no deben incluirse en la lista de bloqueo. Un valor de <ph name="WILDCARD_VALUE" /> en una lista de bloqueo significa que todos los hosts de mensajería nativa están bloqueados, a menos que se permitan de forma explícita. - De forma predeterminada, se permiten todos los hosts de mensajería nativa. No obstante, si la política si todos los hosts de mensajería nativa se bloquearon mediante una política, el administrador puede utilizar la lista de elementos permitidos para modificar la política.</translation> + De forma predeterminada, se permiten todos los hosts de mensajería nativa. No obstante, si todos los hosts de mensajería nativa se bloquearon mediante una política, el administrador puede utilizar la lista de elementos permitidos para modificar la política.</translation> <translation id="841977920223099909">Activador de advertencia de la protección de la contraseña</translation> <translation id="8424255554404582727">Establecer la rotación predeterminada de la pantalla que se volverá a aplicar en cada reinicio</translation> <translation id="8426231401662877819">Rotar la pantalla hacia la derecha 90 grados</translation> @@ -5420,9 +5449,9 @@ <translation id="8767743923206070405">Si habilitas la política, se mostrará el botón de la página principal en la barra de herramientas de <ph name="PRODUCT_NAME" />. Si la inhabilitas, no se mostrará el botón. Si estableces esta política, los usuarios no podrán cambiarla en <ph name="PRODUCT_NAME" />. Si no la estableces, los usuarios decidirán si se muestra el botón.</translation> -<translation id="8768528324886802059">Si estableces la política, se especificarán los hosts de mensajería nativa que no deben incluirse en la lista de elementos bloqueados. Un valor de <ph name="WILDCARD_VALUE" /> en una lista de elementos bloqueados significa que todos los hosts de mensajería nativa están bloqueados, a menos que se permitan de forma explícita. +<translation id="8768528324886802059">Si estableces la política, se especificarán los hosts de mensajería nativa que no deben incluirse en la lista de bloqueo. Un valor de <ph name="WILDCARD_VALUE" /> en una lista de bloqueo significa que todos los hosts de mensajería nativa están bloqueados, a menos que se permitan de forma explícita. - De forma predeterminada, se permiten todos los hosts de mensajería nativa. No obstante, si la política si todos los hosts de mensajería nativa se bloquearon mediante una política, el administrador puede utilizar la lista de elementos permitidos para modificar la política.</translation> + De forma predeterminada, se permiten todos los hosts de mensajería nativa. No obstante, si todos los hosts de mensajería nativa se bloquearon mediante una política, el administrador puede utilizar la lista de elementos permitidos para modificar la política.</translation> <translation id="877185520360032968">Si estableces la política, se modificará el directorio predeterminado donde Chrome descarga los archivos; los usuarios podrán cambiar el directorio. Si no estableces la política, Chrome utilizará el directorio predeterminado específico de la plataforma. @@ -5708,6 +5737,11 @@ <translation id="9084985621503260744">Especificar si la actividad de video afecta a la administración de energía</translation> <translation id="9088433379343318874">Habilitar el proveedor de contenido de un usuario supervisado</translation> <translation id="9088444059179765143">Configurar el método de detección automática de la zona horaria</translation> +<translation id="9095999573959728902">Si habilitas esta configuración, los usuarios podrán habilitar Phone Hub, lo que les permitirá interactuar con el teléfono en un dispositivo con el Sistema operativo Chrome. + + Si la inhabilitas, los usuarios no podrán habilitar Phone Hub. + + Si no la estableces, la acción predeterminada no se permite para los usuarios administrados por empresas y sí se permite para los usuarios no administrados.</translation> <translation id="9096086085182305205">Lista blanca del servidor de autenticación</translation> <translation id="9105265795073104888">Las apps de Android tienen a su disposición solo un subgrupo de opciones de configuración de proxy. Dichas apps pueden elegir usar el proxy de forma voluntaria, pero no puedes forzarlas a que lo usen.</translation> <translation id="9106865192244721694">Permite WebUSB en estos sitios</translation> @@ -5756,6 +5790,7 @@ <translation id="9152473318295429890">Habilitar las sugerencias contextuales de páginas web relacionadas</translation> <translation id="9153446010242995516">Implementa la reversión y mantiene la versión objetivo si la versión del sistema operativo es más reciente que la objetivo. Intenta llevar a cabo la configuración a nivel de dispositivos (incluidas las credenciales de red) mediante el proceso de reversión, si es posible, pero realiza la reversión completa con la función Powerwash, incluso si no es posible restablecer los datos (porque la versión objetivo no admite el restablecimiento de los datos o porque un cambio no es compatible con las versiones anteriores). Esta política es compatible con la versión 75 de <ph name="PRODUCT_OS_NAME" /> y versiones posteriores. Para los clientes anteriores, este valor significa que la reversión está inhabilitada.</translation> +<translation id="9155218447258425310">Duración de la notificación ante la eliminación de la tarjeta inteligente para <ph name="PRODUCT_OS_NAME" /></translation> <translation id="9155375380628728544">Si estableces la política, los usuarios podrán agregar a la lista de idiomas preferidos solo uno de los idiomas de la lista de esta política. Si no la estableces o la estableces como una lista vacía, los usuarios podrán especificar sus idiomas preferidos.
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index 8b13594..83accef0 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -107,11 +107,11 @@ Estos son los efectos de cada valor: - * "All" admite los tipos de cifrado AES aes256-cts-hmac-sha1-96 y aes128-cts-hmac-sha1-96, así como el tipo de cifrado RC4 rc4-hmac. El cifrado AES tiene preferencia si el servidor admite los tipos de cifrado AES y RC4. + * "Todos" admite los tipos de cifrado AES "aes256-cts-hmac-sha1-96" y "aes128-cts-hmac-sha1-96", así como el tipo de cifrado RC4 "rc4-hmac". El cifrado AES tiene preferencia si el servidor admite los tipos de cifrado AES y RC4. - * "Strong" o no asignar ningún valor permite únicamente los tipos de cifrado AES. + * "Seguros" o no asignar ningún valor permite únicamente los tipos de cifrado AES. - * "Legacy" solo admite el tipo de cifrado RC4. El cifrado RC4 no es seguro. Solo debería ser necesario en circunstancias muy específicas. Si es posible, vuelve a configurar el servidor para que admita el cifrado AES. + * "Antiguos" solo admite el tipo de cifrado RC4. El cifrado RC4 no es seguro. Solo debería ser necesario en circunstancias muy específicas. Si es posible, vuelve a configurar el servidor para que admita el cifrado AES. Consulta también la página https://wiki.samba.org/index.php/Samba_4.6_Features_added/changed#Kerberos_client_encryption_types.</translation> <translation id="1177567780207290133">Si la política se define, controla el filtro de URL SafeSites, que usa la API Google Safe Search para clasificar las URL como pornográficas o no. @@ -1071,7 +1071,7 @@ Solo se aplica si se habilita la política "DefaultSearchProviderEnabled".</translation> <translation id="2567227673131796227">Esta política está obsoleta. Se debe usar la política <ph name="NATIVE_MESSAGING_BLOCKLIST_POLICY_NAME" /> en su lugar. - Si se establece esta política, se especificará qué hosts de mensajes nativos no se deben cargar. Un valor de lista de denegación de <ph name="WILDCARD_VALUE" /> significa que todos los hosts de mensajes nativos han sido denegados, excepto los que estén permitidos explícitamente. + Si se establece esta política, se especificará qué hosts de mensajes nativos no se deben cargar. Un valor de lista de bloqueados de <ph name="WILDCARD_VALUE" /> significa que todos los hosts de mensajes nativos han sido denegados, excepto los que estén permitidos explícitamente. Si no se le asigna un valor a la política, <ph name="PRODUCT_NAME" /> cargará todos los hosts de mensajes nativos instalados.</translation> <translation id="2571066091915960923">Habilita o inhabilita el proxy de compresión de datos y evita que los usuarios cambien esta opción. @@ -1492,7 +1492,7 @@ El valor de esta política debe especificarse en milisegundos.</translation> <translation id="3205825995289802549">Maximizar la primera ventana del navegador en la primera ejecución</translation> -<translation id="3210408472559816322">Si se establece esta política, se especificará qué hosts de mensajes nativos no se deben cargar. Un valor de lista de denegación de <ph name="WILDCARD_VALUE" /> significa que todos los hosts de mensajes nativos han sido denegados, excepto los que estén permitidos explícitamente. +<translation id="3210408472559816322">Si se establece esta política, se especificará qué hosts de mensajes nativos no se deben cargar. Un valor de lista de bloqueados de <ph name="WILDCARD_VALUE" /> significa que todos los hosts de mensajes nativos han sido denegados, excepto los que estén permitidos explícitamente. Si no se le asigna un valor a la política, <ph name="PRODUCT_NAME" /> cargará todos los hosts de mensajes nativos instalados.</translation> <translation id="3211426942294667684">Configuración de inicio de sesión en el navegador</translation> @@ -1874,7 +1874,7 @@ Si se le asigna un valor a esta política, los usuarios no podrán cambiar su tipo de página principal en <ph name="PRODUCT_NAME" />. Si no se le asigna ningún valor, los usuarios podrán elegir si quieren establecer la página Nueva pestaña como su página principal. En <ph name="MS_WIN_NAME" />, esta función solo está disponible en instancias que estén vinculadas a un dominio de <ph name="MS_AD_NAME" />, que se ejecuten en Windows 10 Pro o que se hayan registrado en <ph name="CHROME_BROWSER_CLOUSE_MANAGEMENT_NAME" />. En <ph name="MAC_OS_NAME" />, esta función solo está disponible en instancias que se gestionen mediante MDM o que estén vinculadas a un dominio a través de MCX.</translation> -<translation id="3695706037816556327">Qué acción se realiza al quitar el token de seguridad (por ejemplo, la tarjeta inteligente) de <ph name="PRODUCT_OS_NAME" />.</translation> +<translation id="3695706037816556327">Acción al quitar el token de seguridad (por ejemplo, una tarjeta inteligente) en <ph name="PRODUCT_OS_NAME" />.</translation> <translation id="3701121231485832347">Controla la configuración específica de los dispositivos con <ph name="PRODUCT_OS_NAME" /> gestionados con <ph name="MS_AD_NAME" />.</translation> <translation id="3702518095257671450">Confirmación remota</translation> <translation id="3702647575225525306"><ph name="POLICY_NAME" /> (el campo de una línea está obsoleto y desaparecerá en el futuro; a partir de ahora, debes utilizar el campo de varias líneas que aparece más abajo).</translation> @@ -3297,7 +3297,7 @@ <translation id="5832274826894536455">Políticas obsoletas</translation> <translation id="5835253272509953988">Si se habilita esta política, se permitirá que los usuarios hagan que <ph name="PRODUCT_NAME" /> compruebe si los nombres de usuario y las contraseñas que han escrito forman parte de alguna filtración de datos. - Si se asigna un valor a esta política, los usuarios no podrán modificarlo en <ph name="PRODUCT_NAME" />. Si no se le asigna ningún valor, se permitirá la comprobación de filtraciones de credenciales, pero el usuario podrá desactivarla. + Si se asigna un valor a esta política, los usuarios no podrán modificar la comprobación de filtraciones en <ph name="PRODUCT_NAME" />. Si no se le asigna ningún valor, se permitirá la comprobación de filtraciones de credenciales, pero el usuario podrá desactivarla. Este comportamiento no se activará si Navegación segura está inhabilitada, ya sea por obra de una política o del propio usuario. Para activar Navegación segura de forma forzosa, se debe usar la política <ph name="SAFE_BROWSING_ENABLED_POLICY_NAME" /> o la política <ph name="SAFE_BROWSING_PROTETION_LEVEL_POLICY_NAME" />.</translation> <translation id="5836064773277134605">Restringe el intervalo de puertos UDP utilizado por el host de acceso remoto</translation> @@ -4656,7 +4656,7 @@ Si el dispositivo del usuario está administrado, la disponibilidad de esta función dependerá también de la política de dispositivos correspondiente. Si el dispositivo del usuario no está administrado, la disponibilidad de esta función dependerá también de si el usuario es el propietario del dispositivo.</translation> -<translation id="7570111012674064005">Si se establece esta política, se especificará si la política de usuarios de Group Policy Object (GPO) del ordenador se procesa o no y cómo lo hace +<translation id="7570111012674064005">Si se establece esta política, se especificará si la política de usuarios de Group Policy Object (GPO) del ordenador se procesa o no y cómo lo hace. * "Default" o no asignar ningún valor hará que la política de usuarios solo pueda leerse desde los GPO del usuario. Se ignorarán los GPO del ordenador. @@ -5233,7 +5233,7 @@ <translation id="8417305981081876834">Definir la longitud máxima del PIN para la pantalla de bloqueo</translation> <translation id="841853753509411428">Esta política está obsoleta. Se debe usar la política <ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" /> en su lugar. - Si se establece esta política, se especificará qué hosts de mensajes nativos no están sujetos a la lista de denegación. Un valor de lista de denegación de <ph name="WILDCARD_VALUE" /> significa que todos los hosts de mensajes nativos han sido denegados, excepto los que estén permitidos explícitamente. + Si se establece esta política, se especificará qué hosts de mensajes nativos no están sujetos a la lista de bloqueados. Un valor de lista de bloqueados de <ph name="WILDCARD_VALUE" /> significa que todos los hosts de mensajes nativos han sido denegados, excepto los que estén permitidos explícitamente. Todos los hosts de mensajes nativos están permitidos de forma predeterminada. Sin embargo, si la política deniega todos los hosts de mensajes nativos, el administrador podrá usar la lista de permitidos para anular dicha política.</translation> <translation id="841977920223099909">Activar advertencia de protección de contraseña</translation> @@ -5456,7 +5456,7 @@ <translation id="8767743923206070405">Si se habilita esta política, se mostrará el botón de página principal en la barra de herramientas de <ph name="PRODUCT_NAME" />. Si se inhabilita esta política, no se mostrará el botón de página principal. Si se le asigna un valor a esta política, los usuarios no podrán cambiarlo en <ph name="PRODUCT_NAME" />. Si no se le asigna ningún valor, los usuarios podrán decidir si quieren que se muestre el botón de página principal.</translation> -<translation id="8768528324886802059">Si se establece esta política, se especificará qué hosts de mensajes nativos no están sujetos a la lista de denegación. Un valor de lista de denegación de <ph name="WILDCARD_VALUE" /> significa que todos los hosts de mensajes nativos han sido denegados, excepto los que estén permitidos explícitamente. +<translation id="8768528324886802059">Si se establece esta política, se especificará qué hosts de mensajes nativos no están sujetos a la lista de bloqueados. Un valor de lista de bloqueados de <ph name="WILDCARD_VALUE" /> significa que todos los hosts de mensajes nativos han sido denegados, excepto los que estén permitidos explícitamente. Todos los hosts de mensajes nativos están permitidos de forma predeterminada. Sin embargo, si la política deniega todos los hosts de mensajes nativos, el administrador podrá usar la lista de permitidos para anular dicha política.</translation> <translation id="877185520360032968">Si se le asigna un valor a esta política, cambia el directorio predeterminado donde Chrome descarga los archivos, pero los usuarios pueden cambiar el directorio. @@ -5804,7 +5804,7 @@ <translation id="9152473318295429890">Habilitar las sugerencias contextuales de páginas web relacionadas</translation> <translation id="9153446010242995516">Vuelve a instalar la versión anterior de destino si la versión del SO es más reciente y se puede conservar la configuración de nivel de dispositivo durante el proceso, incluidas las credenciales de red. Sin embargo, instala la versión anterior con un Powerwash completo, aunque no se puedan restaurar los datos, ya sea porque la versión de destino no admite restaurar datos o por cambios incompatibles con la versión anterior. Compatible con <ph name="PRODUCT_OS_NAME" /> 75 y versiones superiores, lo que significa que los clientes más antiguos no pueden instalar versiones anteriores.</translation> -<translation id="9155218447258425310">Duración de la notificación que se muestra al quitar la tarjeta inteligente de <ph name="PRODUCT_OS_NAME" />.</translation> +<translation id="9155218447258425310">Duración de la notificación al quitar la tarjeta inteligente en <ph name="PRODUCT_OS_NAME" />.</translation> <translation id="9155375380628728544">Si se le asigna un valor a esta política, los usuarios podrán añadir solo uno de los idiomas incluidos en esta política a la lista de idiomas preferidos. Si no se le asigna ningún valor o se le asigna una lista vacía, los usuarios podrán especificar los idiomas que deseen.
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb index 872b81c..8926010 100644 --- a/components/policy/resources/policy_templates_fr.xtb +++ b/components/policy/resources/policy_templates_fr.xtb
@@ -103,7 +103,7 @@ <translation id="1160939557934457296">Désactiver l'accès au site lors de l'affichage de la page d'avertissement par le service de navigation sécurisée</translation> <translation id="1163080558183062209">Permet de désactiver les types d'imprimantes figurant sur la liste deny</translation> <translation id="117059611145966538">Serveurs d'impression externes</translation> -<translation id="1171785618439752042">Le fait de configurer cette règle désigne les types de chiffrement autorisés lors de la demande de tickets Kerberos envoyés par un serveur <ph name="MS_AD_NAME" />. +<translation id="1171785618439752042">Cette règle permet de désigner les types de chiffrement autorisés lors de la demande de tickets Kerberos envoyés par un serveur <ph name="MS_AD_NAME" />. Configurations possibles : @@ -807,7 +807,7 @@ Si cette règle est définie sur "True" ou qu'elle n'est pas configurée, les avertissements liés à la confidentialité dans les sessions Invité gérées lancées automatiquement sont épinglés jusqu'à ce que les utilisateurs les ferment.</translation> <translation id="228665601367357543">Permet d'établir une liste de formats d'URL indiquant les sites qui sont automatiquement autorisés à accéder à un appareil USB avec les ID produit et ID de fournisseur indiqués. Pour que la règle soit valide, chaque élément de la liste doit contenir un champ "devices" et un champ "urls". Chaque élément du champ "devices" peut contenir à son tour un champ "vendor_id" et un champ "product_id". Si vous ne renseignez pas le champ "vendor_id", la règle qui est créée correspond à tous les appareils. Si vous ne renseignez pas le champ "product_id", la règle qui est créée correspond à tous les appareils ayant l'ID de fournisseur donné. Une règle contenant un champ "product_id", mais pas de champ "vendor_id", n'est pas valide. - Le modèle d'autorisation USB utilise l'URL de requête et l'URL d'intégration (du site du cadre de premier niveau) pour permettre à l'URL de requête d'accéder à l'appareil USB. L'URL de requête peut être différente de l'URL d'intégration si le site à l'origine de la demande est chargé dans un iFrame. Le champ "URL" peut de ce fait contenir jusqu'à deux chaînes d'URL séparées par une virgule, afin d'indiquer ces URL. Si vous ne spécifiez qu'une seule URL, l'accès aux appareils USB concernés est autorisé si l'URL du site à l'origine de la demande correspond à cette URL, quel que soit l'état d'intégration. Si les URL indiquées dans le champ "URL" ne sont pas valides, la règle est ignorée. + Le modèle d'autorisation USB utilise l'URL de requête et l'URL d'intégration (du site du cadre de premier niveau) pour permettre à l'URL de requête d'accéder à l'appareil USB. L'URL de requête peut être différente de l'URL d'intégration si le site à l'origine de la demande est chargé dans un iFrame. Le champ "urls" peut de ce fait contenir jusqu'à deux chaînes d'URL séparées par une virgule, afin d'indiquer ces URL. Si vous ne spécifiez qu'une seule URL, l'accès aux appareils USB concernés est autorisé si l'URL du site à l'origine de la demande correspond à cette URL, quel que soit l'état d'intégration. Si les URL indiquées dans le champ "urls" ne sont pas valides, la règle est ignorée. Si cette règle n'est pas configurée, la règle <ph name="DEFAULT_WEB_USB_GUARD_SETTING_POLICY_NAME" /> s'applique, à condition qu'elle soit définie. Si ce n'est pas le cas, le paramètre spécifié par l'utilisateur s'applique. @@ -1010,7 +1010,7 @@ Si cette règle n'est pas configurée, les conditions d'utilisation ne sont pas présentées aux utilisateurs. - La règle doit être définie sur une URL à partir de laquelle <ph name="PRODUCT_OS_NAME" /> peut télécharger les conditions d'utilisation. Ces conditions doivent être en texte brut et proposées au format texte/brut au type MIME. Aucun balisage n'est autorisé.</translation> + La règle doit être définie sur une URL à partir de laquelle <ph name="PRODUCT_OS_NAME" /> peut télécharger les conditions d'utilisation. Ces conditions doivent être en texte brut et proposées avec le type MIME text/plain. Aucun balisage n'est autorisé.</translation> <translation id="2502467045153796624">Comportement de retour à une version antérieure</translation> <translation id="250670737672448119">Active la fonctionnalité d'accessibilité de mise en surbrillance du curseur de saisie. @@ -1077,7 +1077,7 @@ Cette règle n'est respectée que si la règle "DefaultSearchProviderEnabled" est activée.</translation> <translation id="2567227673131796227">Cette règle est obsolète (veuillez utiliser la règle "<ph name="NATIVE_MESSAGING_BLOCKLIST_POLICY_NAME" />" à la place). - Définir la règle permet de déterminer les hôtes de messagerie native qui ne doivent pas être chargés. Si vous saisissez la valeur <ph name="WILDCARD_VALUE" /> dans la liste deny, tous les hôtes de messagerie native sont refusés, sauf s'ils sont explicitement autorisés. + Cette règle permet de spécifier les hôtes de messagerie native qui ne doivent pas être chargés. Si vous définissez la valeur liée à la liste noire sur <ph name="WILDCARD_VALUE" />, tous les hôtes de messagerie native sont refusés, sauf s'ils sont explicitement autorisés. Si cette règle n'est pas configurée, <ph name="PRODUCT_NAME" /> charge tous les hôtes de messagerie native qui sont installés.</translation> <translation id="2571066091915960923">Activer ou désactiver le proxy pour la compression de données et empêcher les utilisateurs de modifier ce paramètre @@ -1197,11 +1197,11 @@ <translation id="2759224876420453487">Contrôler le comportement de l'utilisateur lors d'une session à plusieurs profils</translation> <translation id="2759426227259007018">Permet de spécifier les applications que les utilisateurs peuvent activer comme applications de prise de notes sur l'écran de verrouillage <ph name="PRODUCT_OS_NAME" />. - Si l'application de prise de notes préférée est activée sur l'écran de verrouillage, un élément d'interface utilisateur destiné à la lancer s'affiche à l'écran. Une fois démarrée, l'application peut ouvrir une fenêtre en haut de l'écran de verrouillage et créer des notes dans ce contexte. L'application peut importer les notes créées dans la session de l'utilisateur principal (lorsque la session est déverrouillée). Seules les applications de prise de notes <ph name="PRODUCT_NAME" /> sont acceptées sur l'écran de verrouillage. + Si l'application de prise de notes préférée est activée sur l'écran de verrouillage, un élément d'interface utilisateur destiné à la lancer s'affiche à l'écran. Une fois démarrée, l'application peut ouvrir une fenêtre au-dessus de l'écran de verrouillage et créer des notes dans ce contexte. L'application peut importer les notes créées dans la session de l'utilisateur principal (lorsque la session est déverrouillée). Seules les applications de prise de notes <ph name="PRODUCT_NAME" /> sont acceptées sur l'écran de verrouillage. - Si cette règle est configurée, les utilisateurs ne peuvent activer une application sur l'écran de verrouillage que si l'ID d'extension de cette application figure dans la liste d'autorisation de la règle. Par conséquent, si la liste est vide, la prise de notes est désactivée sur l'écran de verrouillage. Lorsque la règle inclut un ID d'application, cela ne signifie pas nécessairement que les utilisateurs peuvent activer l'application en question comme application de prise de notes sur l'écran de verrouillage. Par exemple, dans <ph name="PRODUCT_NAME" /> 61, l'accès de l'ensemble des applications disponibles est également limité par la plate-forme. + Si cette règle est configurée, les utilisateurs ne peuvent activer une application sur l'écran de verrouillage que si l'ID d'extension de cette application figure dans la liste d'autorisation de la règle. Par conséquent, si la liste est vide, la prise de notes est désactivée sur l'écran de verrouillage. Lorsque la règle inclut un ID d'application, cela ne signifie pas nécessairement que les utilisateurs peuvent activer l'application en question comme application de prise de notes sur l'écran de verrouillage. Par exemple, dans <ph name="PRODUCT_NAME" /> 61, l'ensemble d'applications disponible est également limité par la plate-forme. - Si cette règle n'est pas configurée, aucune restriction qu'elle impose n'est appliquée à l'ensemble des applications que les utilisateurs peuvent activer sur l'écran de verrouillage.</translation> + Si cette règle n'est pas configurée, aucune restriction qu'elle impose n'est appliquée à l'ensemble d'applications que les utilisateurs peuvent activer sur l'écran de verrouillage.</translation> <translation id="2761483219396643566">Délai d'inactivité avant l'affichage d'un avertissement (en cas d'utilisation de la batterie)</translation> <translation id="2765601181281280493">Permet de répertorier les formats d'URL indiquant les sites non autorisés à demander aux utilisateurs d'accéder à un port série. @@ -1496,7 +1496,7 @@ La valeur de la règle doit être indiquée en millisecondes.</translation> <translation id="3205825995289802549">Agrandir la première fenêtre du navigateur à la première exécution</translation> -<translation id="3210408472559816322">Définir la règle permet de déterminer les hôtes de messagerie native qui ne doivent pas être chargés. Si vous saisissez la valeur <ph name="WILDCARD_VALUE" /> dans la liste deny, tous les hôtes de messagerie native sont refusés, sauf s'ils sont explicitement autorisés. +<translation id="3210408472559816322">Cette règle permet de spécifier les hôtes de messagerie native qui ne doivent pas être chargés. Si vous définissez la valeur liée à la liste noire sur <ph name="WILDCARD_VALUE" />, tous les hôtes de messagerie native sont refusés, sauf s'ils sont explicitement autorisés. Si cette règle n'est pas configurée, <ph name="PRODUCT_NAME" /> charge tous les hôtes de messagerie native qui sont installés.</translation> <translation id="3211426942294667684">Paramètres de connexion au navigateur</translation> @@ -2821,7 +2821,7 @@ Si cette règle est définie sur "False" ou qu'elle n'est pas configurée, le mode bureau unifié est désactivé, et les utilisateurs ne peuvent pas l'activer.</translation> <translation id="5255162913209987122">Peut être recommandée</translation> -<translation id="5264066441613395613">La définition de cette règle permet de configurer les paramètres de proxy pour Chrome et les applications ARC, qui ignorent toutes les options liées au proxy spécifiées à partir de la ligne de commande. +<translation id="5264066441613395613">Cette règle permet de configurer les paramètres de proxy pour Chrome et les applications ARC, qui ignorent toutes les options liées au proxy spécifiées à partir de la ligne de commande. Si cette règle n'est pas configurée, les utilisateurs peuvent sélectionner les paramètres de proxy. @@ -3233,7 +3233,7 @@ <translation id="5697306356229823047">Générer une liste des utilisateurs de l'appareil</translation> <translation id="570062449808736508">Lorsque ce règlement est défini sur une chaîne non vide, WebView lit les restrictions d'URL depuis le fournisseur de contenu portant le nom de l'autorité indiquée.</translation> <translation id="5708969689202733975">Configurer les modes de déverrouillage rapide autorisés</translation> -<translation id="5715617256528927547">Cette règle permet de spécifier la durée de mise en cache (en heures) des GPO ; c'est-à-dire la durée maximale pendant laquelle les GPO peuvent être réutilisés avant d'être de nouveau téléchargés Au lieu de les télécharger de nouveau à chaque récupération de règle, le système peut réutiliser ceux mis en cache tant que leur version ne change pas. +<translation id="5715617256528927547">Cette règle permet de spécifier la durée de mise en cache (en heures) des GPO, c'est-à-dire la durée maximale pendant laquelle les GPO peuvent être réutilisés avant d'être de nouveau téléchargés. Au lieu de les télécharger de nouveau à chaque récupération de règle, le système peut réutiliser ceux mis en cache tant que leur version ne change pas. Si vous définissez la règle sur 0, la mise en cache des GPO est désactivée. Cela a pour effet d'augmenter la charge du serveur, car les GPO sont de nouveau téléchargés à chaque récupération de règle, même s'ils n'ont pas été modifiés. @@ -3743,7 +3743,7 @@ Si l'application de prise de notes préférée est activée sur l'écran de verrouillage, un élément d'interface utilisateur destiné à la lancer s'affiche à l'écran. Une fois démarrée, l'application peut ouvrir une fenêtre en haut de l'écran de verrouillage et créer des notes dans ce contexte. L'application peut importer les notes créées dans la session de l'utilisateur principal (lorsque la session est déverrouillée). Seules les applications de prise de notes <ph name="PRODUCT_NAME" /> sont acceptées sur l'écran de verrouillage. - Si cette règle est configurée, les utilisateurs ne peuvent activer une application sur l'écran de verrouillage que si l'ID d'extension de cette application figure dans la liste d'autorisation de la règle. Par conséquent, si la liste est vide, la prise de notes est désactivée sur l'écran de verrouillage. Lorsque la règle inclut un ID d'application, cela ne signifie pas nécessairement que les utilisateurs peuvent activer l'application en question comme application de prise de notes sur l'écran de verrouillage. Par exemple, dans <ph name="PRODUCT_NAME" /> 61, l'accès de l'ensemble des applications disponibles est également limité par la plate-forme. + Si cette règle est configurée, les utilisateurs ne peuvent activer une application sur l'écran de verrouillage que si l'ID d'extension de cette application figure dans la liste d'autorisation de la règle. Par conséquent, si la liste est vide, la prise de notes est désactivée sur l'écran de verrouillage. Lorsque la règle inclut un ID d'application, cela ne signifie pas nécessairement que les utilisateurs peuvent activer l'application en question comme application de prise de notes sur l'écran de verrouillage. Par exemple, dans <ph name="PRODUCT_NAME" /> 61, l'ensemble d'applications disponible est également limité par la plate-forme. Si cette règle n'est pas configurée, aucune restriction qu'elle impose n'est appliquée à l'ensemble des applications que les utilisateurs peuvent activer sur l'écran de verrouillage.</translation> <translation id="6506486086262398387">Si cette règle est activée, la fonctionnalité Partages de fichiers en réseau de <ph name="PRODUCT_OS_NAME" /> utilise le protocole NTLM pour s'authentifier sur les partages SMB, si nécessaire. Si elle est désactivée, l'authentification NTLM sur les partages SMB l'est également. @@ -3786,7 +3786,7 @@ * <ph name="PROXY_MODE_ENUM_SYSTEM" /> : les paramètres de proxy utilisés sont ceux du système. * <ph name="PROXY_MODE_ENUM_AUTO_DETECT" /> : le serveur proxy est détecté automatiquement. - +Si vous sélectionnez les options suivantes : * <ph name="PROXY_MODE_ENUM_FIXED_SERVERS" /> : les serveurs proxy définis sont utilisés. Vous pouvez définir d'autres options avec les règles <ph name="PROXY_SERVER_POLICY_NAME" /> et <ph name="PROXY_BYPASS_LIST_POLICY_NAME" />. Les applications ARC n'utilisent que le serveur proxy HTTP ayant la priorité la plus élevée. * <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> : un script de proxy .pac est utilisé. Utilisez la règle <ph name="PROXY_PAC_URL_POLICY_NAME" /> pour définir l'URL d'un fichier .pac de proxy. @@ -5208,7 +5208,7 @@ <translation id="8417305981081876834">Définir le nombre maximal de caractères pour le code de l'écran de verrouillage</translation> <translation id="841853753509411428">Cette règle est obsolète (veuillez utiliser la règle <ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" /> à la place). - Cette règle permet de déterminer les hôtes de messagerie native à exclure de la liste deny. Si vous saisissez la valeur <ph name="WILDCARD_VALUE" /> dans la liste deny, tous les hôtes de messagerie native sont refusés, sauf s'ils sont explicitement autorisés. + Cette règle permet de déterminer les hôtes de messagerie native à exclure de la liste noire. Si vous définissez la valeur liée à la liste noire sur <ph name="WILDCARD_VALUE" />, tous les hôtes de messagerie native sont refusés, sauf s'ils sont explicitement autorisés. Tous les hôtes de messagerie native sont autorisés par défaut. Cependant, si tous sont refusés par la règle, l'administrateur peut utiliser la liste d'autorisation pour modifier cette règle.</translation> <translation id="841977920223099909">Déclencheur d'avertissement de protection par mot de passe</translation> @@ -5427,7 +5427,7 @@ <translation id="8767743923206070405">Si cette règle est activée, le bouton d'accueil s'affiche sur la barre d'outils de <ph name="PRODUCT_NAME" />. Si elle est désactivée, le bouton d'accueil ne s'affiche pas. Si cette règle est configurée, les utilisateurs ne peuvent pas la modifier dans <ph name="PRODUCT_NAME" />. Si elle n'est pas configurée, les utilisateurs peuvent choisir d'afficher ou non le bouton d'accueil.</translation> -<translation id="8768528324886802059">Cette règle permet de déterminer les hôtes de messagerie native à exclure de la liste deny. Si vous saisissez la valeur <ph name="WILDCARD_VALUE" /> dans la liste deny, tous les hôtes de messagerie native sont refusés, sauf s'ils sont explicitement autorisés. +<translation id="8768528324886802059">Cette règle permet de spécifier les hôtes de messagerie native à exclure de la liste noire. Si vous définissez la valeur liée à la liste noire sur <ph name="WILDCARD_VALUE" />, tous les hôtes de messagerie native sont refusés, sauf s'ils sont explicitement autorisés. Tous les hôtes de messagerie native sont autorisés par défaut. Cependant, si tous sont refusés par la règle, l'administrateur peut utiliser la liste d'autorisation pour modifier cette règle.</translation> <translation id="877185520360032968">Cette règle définit le répertoire par défaut utilisé par Chrome pour le téléchargement de fichiers. Les utilisateurs peuvent modifier la destination.
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index 6949c76..542e820 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb
@@ -4214,7 +4214,7 @@ <translation id="7068108874199666656">Memungkinkan pendorongan konfigurasi jaringan untuk diterapkan pada semua pengguna ke perangkat <ph name="PRODUCT_OS_NAME" />. Konfigurasi jaringan adalah string berformat JSON seperti yang didefinisikan oleh format Konfigurasi Jaringan Terbuka.</translation> <translation id="7070525176564511548">Sandi harus dimasukkan setiap minggu (168 jam)</translation> <translation id="7072208053150563108">Tingkat perubahan sandi mesin</translation> -<translation id="7072567600438630966">Mengizinkan pengaktifan Phone Hub.</translation> +<translation id="7072567600438630966">Izinkan pengaktifan Phone Hub.</translation> <translation id="7079519252486108041">Cekal pop-up di situs ini</translation> <translation id="7080072532759721791">Mengizinkan pengguna untuk mengupload atau mendownload file yang dilindungi sandi</translation> <translation id="7086677522575756117">Menentukan persentase yang digunakan untuk menskalakan penundaan peredupan layar ketika terdapat aktivitas pengguna saat layar redup atau segera setelah layar dimatikan. @@ -4392,7 +4392,7 @@ Jika kebijakan ini tidak disetel atau kosong, pengguna dapat menyetel akun Google apa pun sebagai akun utama browser di <ph name="PRODUCT_NAME" />.</translation> <translation id="723103540848640830">Setel panjang minimum PIN layar kunci.</translation> <translation id="7234280155140786597">Nama hosting perpesanan asli yang dilarang (atau * untuk semua)</translation> -<translation id="7246767840750730334">Mengizinkan pengaktifan notifikasi Phone Hub.</translation> +<translation id="7246767840750730334">Izinkan pengaktifan notifikasi Phone Hub.</translation> <translation id="7249828445670652637">Mengaktifkan sertifikat CA <ph name="PRODUCT_OS_NAME" /> untuk aplikasi ARC</translation> <translation id="7252681704926980614">Kirimkan nama pengguna dan nama file ke server printer native beserta setiap pekerjaan cetak. Setelan defaultnya bukan untuk mengirim. @@ -4973,7 +4973,7 @@ Kebijakan ini selalu berlaku untuk <ph name="PRODUCT_OS_NAME" />.</translation> <translation id="8050080920415773384">Pencetakan Asli</translation> <translation id="8053580360728293758">Mengganti mode warna pencetakan default. Jika mode tersebut tidak tersedia, kebijakan ini akan diabaikan.</translation> -<translation id="8056237304861875584">Mengizinkan pengaktifan kelanjutan tugas Phone Hub.</translation> +<translation id="8056237304861875584">Izinkan pengaktifkan kelanjutan tugas Phone Hub.</translation> <translation id="8059164285174960932">URL tempat klien akses jarak jauh seharusnya memperoleh token autentikasi mereka</translation> <translation id="8077245272412229388">Menambahkan akun Kerberos yang telah diisi. Jika kredensial Kerberos cocok dengan kredensial login, akun dapat dikonfigurasi untuk menggunakan kembali kredensial login dengan menentukan '<ph name="LOGIN_EMAIL_PLACEHOLDER" />' dan <ph name="PASSWORD_PLACEHOLDER" />', masing-masing untuk akun utama dan sandi, sehingga tiket Kerberos dapat diambil secara otomatis kecuali autentikasi 2 langkah dikonfigurasi. Pengguna tidak dapat memodifikasi akun yang ditambahkan melalui kebijakan ini.
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb index 0ad5a8f..b5c06e3 100644 --- a/components/policy/resources/policy_templates_it.xtb +++ b/components/policy/resources/policy_templates_it.xtb
@@ -2406,7 +2406,7 @@ Se il criterio viene impostato su 0, la memorizzazione nella cache dei dati di autenticazione viene disattivata. I dati specifici dell'area di autenticazione vengono recuperati a ogni accesso, quindi la relativa memorizzazione nella cache può rallentare in modo significativo l'accesso degli utenti. - Se non viene configurato, i dati di autenticazione memorizzati nella cache possono essere riutilizzati fino a 73 ore dopo il primo accesso. + Se non viene configurato, i dati di autenticazione memorizzati nella cache possono essere riutilizzati per un periodo massimo di 73 ore. Nota: se il dispositivo viene riavviato, la cache viene svuotata. Anche i dati relativi all'area di autenticazione degli utenti temporanei vengono memorizzati nella cache. Disattiva la cache per impedire il tracciamento dell'area di autenticazione degli utenti temporanei.</translation> <translation id="4591366717022345234">Fornisce agli utenti una build di correzione rapida</translation> @@ -2625,7 +2625,7 @@ <translation id="5017369989680827157">Se il criterio è impostato su True o se non viene configurato, gli utenti possono controllare la compilazione automatica per gli indirizzi nella UI. Se il criterio è impostato su False, la compilazione automatica non fornisce mai suggerimenti né compila le informazioni relative agli indirizzi, né salva le nuove informazioni inviate dagli utenti durante la navigazione sul Web.</translation> -<translation id="5021550478471824215">La configurazione del criterio consente di specificare un elenco di condivisioni file di rete preimpostata. Ogni elemento ha un oggetto con 2 proprietà: <ph name="SHARE_URL_FIELD_NAME" /> e <ph name="MODE_FIELD_NAME" />. +<translation id="5021550478471824215">La configurazione del criterio consente di specificare un elenco di condivisioni file di rete preimpostate. Ogni elemento ha un oggetto con 2 proprietà: <ph name="SHARE_URL_FIELD_NAME" /> e <ph name="MODE_FIELD_NAME" />. L'URL condivisione deve essere <ph name="SHARE_URL_FIELD_NAME" />.
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index e74fd85fe..6c65803 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb
@@ -41,6 +41,7 @@ このポリシーは、ユーザーのドメインがデバイスの登録ドメインと一致する場合にのみ適用されます。それ以外の場合は、ユーザーがデバイスで最初にログインしたときにのみ、IdP によって設定された Cookie がプロフィールに移行されます。</translation> <translation id="1029052664284722254">ユーザーのログアウト時にデバイスを再起動</translation> +<translation id="1032533786864478457">このポリシーを有効に設定した場合、ユーザーは自身のデバイスと Chromebook の間でテキスト メッセージを同期するよう設定できます。ユーザーは設定フローを行って明示的にこの機能を有効にする必要があります。設定フローが完了すると、ユーザーは自身の Chromebook でテキストを送受信できます。このポリシーを無効に設定した場合、ユーザーはテキストの同期を設定できません。このポリシーを未設定のままにした場合、デフォルトでは、この機能は管理対象ユーザーに対しては許可されず、管理対象外のユーザーに対しては許可されます。</translation> <translation id="1040446814317236570">PAC URL データ除去を有効にする(https:// の場合)</translation> <translation id="1046484220783400299">サポートが終了しているウェブ プラットフォームの機能を一定の期間有効にする</translation> <translation id="1047128214168693844">すべてのサイトに対してユーザーの物理的な現在地の追跡を許可しない</translation> @@ -647,6 +648,7 @@ この設定が無効な場合、ファイル転送は許可されません。この設定が有効か、設定されていない場合は、ファイル転送が許可されます。</translation> <translation id="2057317273526988987">URL のリストへのアクセスを許可する</translation> <translation id="2061810934846663491">リモート アクセス ホストの必須のドメイン名を設定する</translation> +<translation id="2069350366303315077">このポリシーを有効に設定した場合、<ph name="PRODUCT_NAME" /> ではゲスト セッションが強制的に適用され、プロフィールのログインはできなくなります。ゲストログインでは、ウィンドウがシークレット モードで開く <ph name="PRODUCT_NAME" /> プロフィールが使用されます。この設定を無効に設定するか未設定のままにした場合、またはブラウザのゲストモードを無効にした場合(<ph name="BROWSER_GUEST_MODE_ENABLED_POLICY_NAME" /> を使用)、新しいプロフィールと既存のプロフィールのどちらも使用できます。</translation> <translation id="2073552873076775140"><ph name="PRODUCT_NAME" /> へのログインを許可する</translation> <translation id="2075732129949889165">Crostini Ansible playbook</translation> <translation id="2077129598763517140">ハードウェア アクセラレーションが使用可能な場合は使用する</translation> @@ -973,6 +975,7 @@ <translation id="2482676533225429905">ネイティブ メッセージング</translation> <translation id="2483146640187052324">ネットワーク接続でネットワーク動作を予測する</translation> <translation id="2498238926436517902">常にシェルフを自動的に非表示にする</translation> +<translation id="250022556568924228">このポリシーを設定した場合、デバイスのローカル アカウントのセッションが開始されると、<ph name="PRODUCT_OS_NAME" /> は利用規約をダウンロードしてユーザーに表示します。利用規約に同意した場合のみ、ユーザーはセッションにログインできます。このポリシーを未設定のままにした場合、利用規約は表示されません。このポリシーは、<ph name="PRODUCT_OS_NAME" /> による利用規約のダウンロードが可能な URL に設定する必要があります。利用規約は書式なしテキストで、MIME タイプの text/plain として配信してください。マークアップ形式は使用できません。</translation> <translation id="2502467045153796624">チャンネル ダウングレードの動作</translation> <translation id="250670737672448119">「テキストカーソルによるハイライト表示」のユーザー補助機能を有効にします。 @@ -1085,6 +1088,7 @@ このポリシーを未設定のままにした場合、リストにウェブサイトは追加されません。 注: このリストには、<ph name="USE_IE_SITELIST_POLICY_NAME" /> ポリシーと <ph name="EXTERNAL_SITELIST_URL_POLICY_NAME" /> ポリシーからも要素が追加される可能性があります。</translation> +<translation id="2640898752536996430">ユーザーをログアウトする。</translation> <translation id="264093234299818170">拒否リストに登録されている以外のすべてのプリンタを表示する。</translation> <translation id="264252574246191885">非推奨</translation> <translation id="2647069081229792812">ブックマークの編集を有効または無効にする</translation> @@ -1159,6 +1163,7 @@ この企業向けのポリシーは一時的な適用を想定しており、Chrome 88 で削除される予定です。</translation> <translation id="2759224876420453487">マルチプロフィール セッションでのユーザーの動作を制御する</translation> +<translation id="2759426227259007018">このポリシーでは、<ph name="PRODUCT_OS_NAME" /> のロック画面でメモアプリとして有効にできるアプリを指定できます。任意のメモアプリをロック画面に設定すると、そのアプリを起動するための UI 要素が画面に表示されます。アプリを起動すると、ロック画面の上部にウィンドウが表示され、このコンテキストにメモを作成できます。アプリを使用して、作成したメモをメインのユーザー セッションに読み込むことができます(セッションがロックされていない場合)。ロック画面でサポートされているのは <ph name="PRODUCT_NAME" /> のメモアプリのみです。このポリシーを設定すると、アプリの拡張機能 ID がポリシーのリスト値に含まれている場合に、ユーザーはロック画面でアプリを有効にできます。このため、このポリシーを空のリストに設定すると、メモアプリはロック画面で無効になります。ポリシーでアプリ ID を指定しても、ユーザーがロック画面でそのアプリをメモアプリとして有効にできるとは限りません。たとえば、<ph name="PRODUCT_NAME" /> 61 では、使用できる一連のアプリに関して、さらにプラットフォームによる制限が適用されます。このポリシーを未設定のままにした場合、ユーザーがロック画面で有効にできる一連のアプリに関して、ポリシーを通じて適用される制限はありません。</translation> <translation id="2761483219396643566">アイドル警告が表示されるまでの時間(バッテリー電源での実行時)</translation> <translation id="2765601181281280493">このポリシーでは、ユーザーに対するシリアルポートへのアクセス要求を許可しないサイトの URL パターンリストを指定できます。 @@ -1408,6 +1413,7 @@ <translation id="3072847235228302527">デバイスのローカル アカウントの利用規約を設定する</translation> <translation id="3086995894968271156"><ph name="PRODUCT_NAME" /> で Cast Receiver を設定します。</translation> <translation id="3091832372132789233">主に外部電源に接続しているデバイスのバッテリーを充電する。</translation> +<translation id="309416443108680956">セキュリティ トークン(スマートカードなど)で認証を行っているユーザーがセッション中にトークンを取り出した場合の処理を指定します。<ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />: 何もしない。<ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" />: ユーザーが再度認証を行うまで画面をロックする。<ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />: セッションを終了し、ユーザーをログアウトする。このポリシーを設定しない場合、デフォルトの処理は <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" /> になります。</translation> <translation id="3096595567015595053">有効なプラグインのリスト</translation> <translation id="3101501961102569744">プロキシ サーバー設定の指定方法を選択する</translation> <translation id="3101709781009526431">日時</translation> @@ -1498,6 +1504,7 @@ <translation id="3251500716404598358">ブラウザ切り替えのポリシーを設定します。 設定したウェブサイトは、<ph name="PRODUCT_NAME" /> ではなく別のブラウザで自動的に表示されるようになります。</translation> +<translation id="3255624750680556186">このポリシーを有効に設定するか未設定のままにした場合、デバイスは Powerwash を実行できます。このポリシーを無効に設定した場合、デバイスは Powerwash を実行できません。ただし、<ph name="TPM_FIRMWARE_UPDATE_SETTINGS_NAME" /> が TPM ファームウェアの更新を許可する値に設定され、TPM ファームウェアがまだ更新されていない場合は、Powerwash を実行できる例外が発生することがあります。</translation> <translation id="3255762580838224124">このポリシーを設定した場合、各ディスプレイは再起動のたびに指定した方向に回転します。ポリシーの値を変更した後、初めて接続したときにも、指定した方向に回転します。ユーザーはログイン後に設定ページからディスプレイの回転方法を変更することができますが、次に再起動したときにはポリシーの値に戻ります。このポリシーは、メインと予備のディスプレイに適用されます。 このポリシーを設定しない場合、デフォルト値として 0 度が使用され、ユーザーはこの値を自由に変更できます。この場合、再起動時にデフォルト値が再適用されることはありません。</translation> @@ -1824,6 +1831,7 @@ このポリシーが設定されている場合、ユーザーは <ph name="PRODUCT_NAME" /> でホームページのタイプを変更できません。未設定の場合、新しいタブページをホームページにするかどうかはユーザーが選択します。 <ph name="MS_WIN_NAME" /> では、<ph name="MS_AD_NAME" /> ドメインに追加されたインスタンス、Windows 10 Pro で実行されているインスタンス、<ph name="CHROME_BROWSER_CLOUSE_MANAGEMENT_NAME" /> に登録されているインスタンスでのみこの機能を使用できます。<ph name="MAC_OS_NAME" /> では、MDM を介して管理されるインスタンスまたは MCX を介してドメインに追加されたインスタンスでのみこの機能を使用できます。</translation> +<translation id="3695706037816556327"><ph name="PRODUCT_OS_NAME" /> でセキュリティ トークン(スマートカードなど)を取り出したときに行う処理。</translation> <translation id="3701121231485832347"><ph name="MS_AD_NAME" /> による管理対象の <ph name="PRODUCT_OS_NAME" /> デバイスに固有の設定を制御します。</translation> <translation id="3702518095257671450">リモート認証</translation> <translation id="3702647575225525306"><ph name="POLICY_NAME" />(1 行入力欄はサポートを終了し、今後削除する予定です。下の複数行入力欄を使用するようにしてください)。</translation> @@ -1861,6 +1869,8 @@ このポリシーが未設定の場合、ユーザーは自分でプロキシ設定を選択できます。</translation> <translation id="3758249152301468420">デベロッパー ツールを無効にする</translation> +<translation id="3760231600118073732">現在のセッションをロックする。</translation> +<translation id="3764097800332238572">このポリシーは、<ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_POLICY_NAME" /> ポリシーが <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" /> または <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" /> に設定されている場合に、スマートカードで認証を行うユーザーがスマートカードを取り出したときにのみ適用されます。このポリシーでは、行われる処理の通知を何秒間表示するかを指定できます。この通知は画面を占拠して表示され、指定した表示時間が経過して通知が非表示になった後に処理が行われます。ユーザーは、通知が非表示になる前にスマートカードを入れ直すことで、処理が行われないようにすることができます。このポリシーを 0 に設定すると、通知は表示されず、処理がすぐに行われます。</translation> <translation id="3765260570442823273">アイドル時のログアウト警告メッセージの表示期間</translation> <translation id="377044054160169374">不正なコンテンツに対する処理の適用</translation> <translation id="3780152581321609624">Kerberos SPN に非標準ポートを含める</translation> @@ -2597,6 +2607,7 @@ このポリシーを無効に設定した場合、画面共有 API の呼び出しは失敗し、エラーが表示されます。</translation> +<translation id="5025239932007658691">このポリシーを有効に設定するか未設定のままにした場合、<ph name="PRODUCT_NAME" /> は正確なタイムスタンプを取得するため、Google サーバーに不定期のクエリを送信します。このポリシーを無効に設定すると、<ph name="PRODUCT_NAME" /> がこれらのクエリを送信するのを停止できます。</translation> <translation id="5032164758660626397">ユーザーによる大きなファイルの転送を禁止する</translation> <translation id="5056708224511062314">画面拡大鏡を無効にする</translation> <translation id="5058573563327660283">自動クリーンアップ時にディスクの空き容量を増やす方法を選択する(サポート終了)</translation> @@ -3357,6 +3368,7 @@ <translation id="6034341625190551415">公開セッションとキオスク アカウントを制御します。</translation> <translation id="6034603289689965535">ページのアンロード中にポップアップを表示することをページに許可します</translation> <translation id="6036523166753287175">リモート アクセス ホストからのファイアウォール トラバーサルを有効にする</translation> +<translation id="603768430528561926">このポリシーを有効に設定するか未設定のままにした場合、企業向けデバイスのユーザーは <ph name="PRODUCT_OS_NAME" /> の登録特典を利用できます。このポリシーを無効に設定した場合、ユーザーはこの特典を利用できません。</translation> <translation id="6048199181629830227">電力のピークシフト管理を有効にする</translation> <translation id="6054485492411959335">ユーザーに使用を許可するプリンタを指定します。 @@ -3565,6 +3577,7 @@ このポリシーを設定しないか、リストを空白にした場合、すべてのスキームが <ph name="PRODUCT_NAME" /> でアクセス可能になります。</translation> <translation id="6338982178236723271">システム情報を報告する</translation> <translation id="6342187235303612558">現在 DLP または不正なソフトウェアのスキャンでサポートされていないファイルをユーザーがアップロードまたはダウンロードできないようにします。</translation> +<translation id="6353890097388312479">このポリシーを All(0)に設定するか未設定のままにした場合、ユーザーは、すべての CA 証明書の信頼設定の編集、ユーザーが取り込んだ証明書の削除、証明書マネージャーによる証明書の取り込みを行うことができます。このポリシーを UserOnly(1)に設定した場合、ユーザーは、ユーザーが取り込んだ証明書のみを管理でき、組み込みの証明書の信頼設定を変更することはできません。このポリシーを None(2)に設定した場合、ユーザーは CA 証明書を表示できます(管理はできません)。</translation> <translation id="6366574325767783825">このポリシーを True に設定するか未設定のままにした場合、<ph name="PRODUCT_NAME" /> では Signed HTTP Exchange として配信されるウェブ コンテンツが許可されます。 このポリシーを False に設定した場合、Signed HTTP Exchange は読み込まれません。</translation> @@ -3654,6 +3667,7 @@ アイドル時の画面ロックの方法としては、停止時の画面ロックを有効にして、アイドル時間経過後に <ph name="PRODUCT_OS_NAME" /> を停止する方法をおすすめします。このポリシーは、ある程度の時間が経過した後で停止状態になる前に画面をロックする場合、またはアイドル時の停止を望まない場合にのみ使用してください。 このポリシーの値はミリ秒単位とし、アイドル待ちの時間より短い時間を指定できます。</translation> +<translation id="6506239283767807745">このポリシーはサポートが終了しています。代わりに <ph name="NOTE_TAKING_APPS_LOCK_SCREEN_ALLOWLIST" /> を使用してください。このポリシーでは、<ph name="PRODUCT_OS_NAME" /> のロック画面でメモアプリとして有効にできるアプリを指定できます。任意のメモアプリをロック画面に設定すると、そのアプリを起動するための UI 要素が画面に表示されます。アプリを起動すると、ロック画面の上部にウィンドウが表示され、このコンテキストにメモを作成できます。アプリを使用して、作成したメモをメインのユーザー セッションに読み込むことができます(セッションがロックされていない場合)。ロック画面でサポートされているのは <ph name="PRODUCT_NAME" /> のメモアプリのみです。このポリシーを設定すると、アプリの拡張機能 ID がポリシーのリスト値に含まれている場合に、ユーザーはロック画面でアプリを有効にできます。このため、このポリシーを空のリストに設定すると、メモアプリはロック画面で無効になります。ポリシーでアプリ ID を指定しても、ユーザーがロック画面でそのアプリをメモアプリとして有効にできるとは限りません。たとえば、<ph name="PRODUCT_NAME" /> 61 では、使用できる一連のアプリに関して、さらにプラットフォームによる制限が適用されます。このポリシーを未設定のままにした場合、ユーザーがロック画面で有効にできる一連のアプリに関して、ポリシーを通じて適用される制限はありません。</translation> <translation id="6506486086262398387">このポリシーを有効に設定した場合、<ph name="PRODUCT_OS_NAME" /> のネットワーク ファイル共有の機能では、必要に応じて SMB 共有の認証に NTLM が使用されます。このポリシーを無効に設定した場合、SMB 共有の NTLM 認証は無効になります。 このポリシーを未設定のままにした場合、デフォルトの動作は管理対象ユーザーに対して無効になり、それ以外のユーザーに対しては有効になります。</translation> @@ -3816,6 +3830,7 @@ <translation id="6672070613706645316">ユーザーに新しいタブページの背景のカスタマイズを許可する</translation> <translation id="6672630473862787247">通常セッション、シークレット モード、ゲスト セッションでアンビエント認証を有効にします。</translation> <translation id="6685903773201985073">ゲスト セッションと標準セッションでアンビエント認証を有効にします。</translation> +<translation id="6689343802305995925">何の処理も行わない。</translation> <translation id="6689792153960219308">ハードウェア ステータスを報告する</translation> <translation id="6690425645391461516">DNS 傍受チェックを無効にし、「もしかして: "http://intranetsite/"」情報バーを有効にする。</translation> <translation id="6698632841807204978">白黒印刷を有効にする</translation> @@ -4074,6 +4089,7 @@ このポリシーを無効に設定した場合、<ph name="PRODUCT_NAME" /> は、最後のタブであっても代替ブラウザへの切り替え後にタブを閉じます。その結果、<ph name="PRODUCT_NAME" /> が完全に終了します。</translation> <translation id="7019805045859631636">速い</translation> +<translation id="7026351325994257733">Wi-Fi ネットワーク設定を <ph name="PRODUCT_OS_NAME" /> デバイスと接続された Android スマートフォンとの間で同期できるようにします。</translation> <translation id="7027785306666625591"><ph name="PRODUCT_OS_NAME" /> の電源管理を設定します。 これらのポリシーでは、アイドル状態が一定時間続いたときの <ph name="PRODUCT_OS_NAME" /> の動作を設定できます。</translation> @@ -4439,6 +4455,13 @@ - このポリシーが無効の場合、管理者はそのことをデバイスのエンドユーザーに知らせる必要があります。</translation> <translation id="747275827471712187">指定したサイトの Cookie を以前の <ph name="ATTRIBUTE_SAMESITE_NAME" /> 動作に戻す</translation> +<translation id="7476621944304431784">この設定を有効にした場合、ユーザーは <ph name="PRODUCT_OS_NAME" /> デバイスと接続された Android スマートフォンとの間で Wi-Fi ネットワーク設定を同期できます。Wi-Fi ネットワーク設定を同期する前に、ユーザーは設定手順を完了して、この機能を明示的に有効にする必要があります。 + + この設定を無効にした場合、ユーザーは Wi-Fi ネットワーク設定を同期できません。 + + この機能は、Chrome 同期で <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> データタイプが有効になっているかどうかに依存します。<ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> が <ph name="SYNC_TYPES_LIST_DISABLED_POLICY_NAME" /> ポリシーで無効になっている場合、または <ph name="SYNC_DISABLED_POLICY_NAME" /> ポリシーで Chrome 同期が無効になっている場合、この機能は有効にできません。 + + このポリシーを未設定のままにした場合、管理対象ユーザーはデフォルトでこの機能を有効にできません。</translation> <translation id="7477231245051133709">「モノラル音声」のユーザー補助機能を有効にする</translation> <translation id="7477239290070847560">Zeroconf(mDNS+DNS-SD)プロトコルの送信先</translation> <translation id="7485481791539008776">デフォルト プリンタ選択ルール</translation> @@ -5646,6 +5669,7 @@ <translation id="9152473318295429890">現在のウェブページに関連するおすすめのウェブページの表示を有効にする</translation> <translation id="9153446010242995516">OS のバージョンが対象バージョンより新しい場合は、対象バージョンに戻してそのバージョンを維持します。ロールバック プロセスでデバイスごとの設定(ネットワーク認証情報など)を引き継げる場合は、引き継ぎを試みますが、データの復元が可能でない(対象バージョンがデータの復元に対応していない、または後方互換性のない変更がある)場合でも、完全な Powerwash によるロールバックを行います。 サポート対象は <ph name="PRODUCT_OS_NAME" /> バージョン 75 以降です。これより古いクライアントの場合、この値はロールバックが無効であることを意味します。</translation> +<translation id="9155218447258425310"><ph name="PRODUCT_OS_NAME" /> でスマートカードを取り出したときに通知を表示する時間。</translation> <translation id="9155375380628728544">このポリシーを設定した場合、ユーザーは、このポリシーで指定されている言語リストからのみ使用言語を追加できます。 このポリシーを設定しないか空白のリストを設定した場合、ユーザーは好きな言語を使用言語として指定できます。
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index c9ab5dd..4750bf6f 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb
@@ -45,7 +45,7 @@ 정책을 사용 중지하면 사용자는 문자 메시지 동기화를 설정할 수 없습니다. - 정책을 설정하지 않으면 기본적으로 관리 사용자에게는 기능이 허용되지 않지만 다른 사용자에게는 허용됩니다.</translation> + 정책을 설정하지 않으면 기본적으로 관리 대상 사용자에게는 기능이 허용되지 않고 다른 사용자에게는 허용됩니다.</translation> <translation id="1040446814317236570">PAC URL 제거 사용(https://용)</translation> <translation id="1046484220783400299">사용 중지된 웹 플랫폼 기능을 제한된 기간 동안 사용 설정</translation> <translation id="1047128214168693844">모든 사이트에서 사용자 실제 위치를 추적하도록 허용 안함</translation> @@ -1189,7 +1189,7 @@ <translation id="2759224876420453487">멀티 프로필 세션에서 사용자 활동 제어</translation> <translation id="2759426227259007018">정책을 설정하면 사용자가 <ph name="PRODUCT_OS_NAME" /> 잠금 화면에서 메모 앱으로 사용 설정할 수 있는 앱이 지정됩니다. - 선호하는 앱이 잠금 화면에 있는 경우 선호하는 메모 앱을 실행하기 위한 UI 요소가 화면에 표시됩니다. 앱을 실행하면 잠금 화면 상단에 앱 창이 표시되고 이러한 상황에서 메모가 생성됩니다. 세션이 잠금 해제되면 앱에서 생성된 메모를 기본 사용자 세션으로 가져올 수 있습니다. 잠금 화면에서는 <ph name="PRODUCT_NAME" /> 메모 앱만 지원됩니다. + 선호하는 앱이 잠금 화면에 있는 경우 해당 메모 앱을 실행하기 위한 UI 요소가 화면에 표시됩니다. 앱을 실행하면 잠금 화면 상단에 앱 창이 표시되고 이러한 상황에서 메모가 생성됩니다. 세션이 잠금 해제되면 앱에서 생성된 메모를 기본 사용자 세션으로 가져올 수 있습니다. 잠금 화면에서는 <ph name="PRODUCT_NAME" /> 메모 앱만 지원됩니다. 정책을 설정하면 사용자는 확장 프로그램 ID가 정책 목록 값에 포함된 앱을 잠금 화면에서 사용 설정할 수 있습니다. 따라서 정책을 빈 목록으로 설정하면 잠금 화면에서 메모 기능이 사용 중지됩니다. 앱 ID가 정책에 포함되어 있다고 해서 반드시 사용자가 잠금 화면에서 앱을 메모 앱으로 사용할 수 있는 것은 아닙니다. 예를 들어 <ph name="PRODUCT_NAME" /> 61에서는 사용할 수 있는 앱 집합이 플랫폼에서 제한됩니다. @@ -3654,7 +3654,7 @@ 이 정책을 설정하지 않거나 목록이 비어 있으면 <ph name="PRODUCT_NAME" />에서 모든 스키마에 액세스할 수 있게 됩니다.</translation> <translation id="6338982178236723271">시스템 정보 보고</translation> <translation id="6342187235303612558">사용자가 현재 DLP 또는 멀웨어 검사에서 지원되지 않는 파일을 업로드 또는 다운로드하지 못하게 합니다.</translation> -<translation id="6353890097388312479">정책을 모두(0)로 설정하거나 설정하지 않으면 사용자는 모든 CA 인증서의 신뢰 설정을 수정하고 사용자가 가져온 인증서를 삭제하며 인증서 관리자를 사용하여 인증서를 가져올 수 있습니다. 정책을 사용자전용(1)으로 설정하면 사용자는 사용자가 가져온 인증서만 관리할 수 있으며 내장 인증서의 신뢰 설정은 변경할 수 없습니다. 정책을 없음(2)으로 설정하면 사용자는 CA 인증서를 볼 수만 있습니다(관리할 수 없음).</translation> +<translation id="6353890097388312479">정책을 모두(0)로 설정하거나 설정하지 않으면 사용자는 모든 CA 인증서의 신뢰 설정을 수정하고 사용자가 가져온 인증서를 삭제하며 인증서 관리자를 사용하여 인증서를 가져올 수 있습니다. 정책을 사용자전용(1)으로 설정하면 사용자는 사용자가 가져온 인증서만 관리할 수 있으며 내장 인증서의 신뢰 설정은 변경할 수 없습니다. 정책을 없음(2)으로 설정하면 사용자는 CA 인증서를 볼 수만 있고 관리할 수는 없습니다.</translation> <translation id="6366574325767783825">정책을 True로 설정하거나 설정하지 않으면 <ph name="PRODUCT_NAME" />에서 서명된 HTTP 교환(SXG)으로 제공된 웹 콘텐츠를 허용합니다. 정책을 False로 설정하면 서명된 HTTP 교환(SXG)이 로드되지 않습니다.</translation> @@ -3750,7 +3750,7 @@ 정책을 설정하면 사용자가 <ph name="PRODUCT_OS_NAME" /> 잠금 화면에서 메모 앱으로 사용 설정할 수 있는 앱이 지정됩니다. - 선호하는 앱이 잠금 화면에 있는 경우 선호하는 메모 앱을 실행하기 위한 UI 요소가 화면에 표시됩니다. 앱을 실행하면 잠금 화면 상단에 앱 창이 표시되고 이러한 상황에서 메모가 생성됩니다. 세션이 잠금 해제되면 앱에서 생성된 메모를 기본 사용자 세션으로 가져올 수 있습니다. 잠금 화면에서는 <ph name="PRODUCT_NAME" /> 메모 앱만 지원됩니다. + 선호하는 앱이 잠금 화면에 있는 경우 해당 메모 앱을 실행하기 위한 UI 요소가 화면에 표시됩니다. 앱을 실행하면 잠금 화면 상단에 앱 창이 표시되고 이러한 상황에서 메모가 생성됩니다. 세션이 잠금 해제되면 앱에서 생성된 메모를 기본 사용자 세션으로 가져올 수 있습니다. 잠금 화면에서는 <ph name="PRODUCT_NAME" /> 메모 앱만 지원됩니다. 정책을 설정하면 사용자는 확장 프로그램 ID가 정책 목록 값에 포함된 앱을 잠금 화면에서 사용 설정할 수 있습니다. 따라서 정책을 빈 목록으로 설정하면 잠금 화면에서 메모 기능이 사용 중지됩니다. 앱 ID가 정책에 포함되어 있다고 해서 반드시 사용자가 잠금 화면에서 앱을 메모 앱으로 사용할 수 있는 것은 아닙니다. 예를 들어 <ph name="PRODUCT_NAME" /> 61에서는 사용할 수 있는 앱 집합이 플랫폼에서 제한됩니다.
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index 7432e2e..4d5f3cff 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -981,7 +981,7 @@ Als je het beleid niet instelt, worden er geen servicevoorwaarden weergegeven. - Het beleid moet worden ingesteld op een URL waar <ph name="PRODUCT_OS_NAME" /> de servicevoorwaarden kan downloaden. De servicevoorwaarden moeten in platte tekst zijn, weergegeven als MIME-type text/plain. Er is geen opmaak toegestaan.</translation> + Het beleid moet worden ingesteld op een URL waar <ph name="PRODUCT_OS_NAME" /> de servicevoorwaarden kan downloaden. De servicevoorwaarden moeten in platte tekst worden weergegeven als MIME-type text/plain. Er is geen opmaak toegestaan.</translation> <translation id="2502467045153796624">Downgradegedrag voor kanalen</translation> <translation id="250670737672448119">De toegankelijkheidsfunctie voor markering van het caret-teken inschakelen. @@ -1520,7 +1520,7 @@ Geconfigureerde websites worden automatisch geopend in een andere browser dan <ph name="PRODUCT_NAME" />.</translation> <translation id="3255624750680556186">Als je het beleid inschakelt of niet instelt, kan een apparaat Powerwash activeren. - Als je het beleid uitschakelt of niet instelt, kan een apparaat Powerwash niet activeren. Een uitzondering waarbij Powerwash nog wel is toegestaan, is als <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_NAME" /> is ingesteld op een waarde die de TPM-firmware-update toestaat en de TPM-firmware nog niet is geüpdatet.</translation> + Als je het beleid uitschakelt, kan een apparaat Powerwash niet activeren. Een uitzondering waarbij Powerwash nog wel is toegestaan, is als <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_NAME" /> is ingesteld op een waarde die de TPM-firmware-update toestaat en de TPM-firmware nog niet is geüpdatet.</translation> <translation id="3255762580838224124">Als je het beleid instelt, wordt elk scherm naar de opgegeven stand gedraaid: elke keer dat er opnieuw wordt opgestart en de eerste keer dat het scherm wordt verbonden nadat de beleidswaarde is gewijzigd. Gebruikers kunnen na inloggen de rotatie van het scherm wijzigen op de pagina met instellingen, maar de rotatie wordt bij de volgende keer opnieuw opstarten weer teruggezet. Dit beleid is van toepassing op primaire en secundaire schermen. Als je het beleid niet instelt, is de standaardwaarde 0 graden en kunnen gebruikers dit wijzigen. In dat geval wordt de standaardwaarde niet opnieuw toegepast bij opnieuw opstarten.</translation>
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index b7d25c5..3d40e74 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -636,7 +636,7 @@ </translation> <translation id="2030905906517501646">Ключевое слово для поисковой системы по умолчанию</translation> <translation id="203096360153626918">Правило не влияет на приложения Android. Они смогут переходить в полноэкранный режим, даже если для правила задано значение <ph name="FALSE" />.</translation> -<translation id="2036522553891755455">Включенное правило определяет, будет ли функция совместного доступа к файлам в сети в <ph name="PRODUCT_NAME" /> использовать протокол <ph name="NETBIOS_PROTOCOL" /> для обнаружения файлов в сети. Если правило отключено, протокол использоваться не будет. +<translation id="2036522553891755455">Включенное правило определяет, будет ли функция обнаружения общих папок в <ph name="PRODUCT_NAME" /> использовать протокол <ph name="NETBIOS_PROTOCOL" /> для обнаружения папок в сети. Если правило отключено, этот протокол использоваться не будет. Если правило не задано, оно будет по умолчанию считаться выключенным для профилей, управляемых администратором, и включенным для остальных.</translation> <translation id="2037214548071298156">Если правило включено или не настроено, зарегистрированные устройства отправляют статистические данные о работе аппаратного обеспечения, например об использовании процессора или оперативной памяти. @@ -662,7 +662,7 @@ <translation id="2098658257603918882">Включить в отчеты данные об использовании и сбоях</translation> <translation id="2104418465060359056">Передавать информацию о расширениях и плагинах</translation> <translation id="2106627642643925514">Переопределяет режим печати с вводом PIN-кода по умолчанию. Если этот режим недоступен, правило будет игнорироваться.</translation> -<translation id="2107563874993284076">Включенное правило позволяет пользователям использовать функцию общего доступа к файлам в сети в <ph name="PRODUCT_NAME" />. В противном случае эта функция недоступна.</translation> +<translation id="2107563874993284076">Включенное правило позволяет пользователям работать с общими сетевыми папками в <ph name="PRODUCT_NAME" />. В противном случае эта функция недоступна.</translation> <translation id="2107601598727098402"> Это правило не поддерживается начиная с версии M72. Вместо него используется правило CloudManagementEnrollmentToken. </translation> @@ -1104,6 +1104,7 @@ Если правило не настроено, список остается пустым. Для добавления элементов в список можно также использовать правила <ph name="USE_IE_SITELIST_POLICY_NAME" /> и <ph name="EXTERNAL_SITELIST_URL_POLICY_NAME" />.</translation> +<translation id="2640898752536996430">Выход из системы</translation> <translation id="264093234299818170">Пользователи видят все принтеры, кроме тех, которые находятся в списке блокировки.</translation> <translation id="264252574246191885">Ограниченный доступ</translation> <translation id="2647069081229792812">Включить или отключить возможность изменения закладок</translation> @@ -1435,6 +1436,7 @@ <translation id="3072847235228302527">Установить Условия использования локального аккаунта</translation> <translation id="3086995894968271156">Настройка ресивера Cast в <ph name="PRODUCT_NAME" />.</translation> <translation id="3091832372132789233">Заряжать батарею устройств, которые изначально подключены к внешнему источнику питания.</translation> +<translation id="309416443108680956">Определяет, что происходит, когда пользователь, вошедший в систему с помощью токена безопасности (например, смарт-карты), удаляет его. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />. Ничего не произойдет. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" />. Экран будет заблокирован, пока пользователь не войдет в систему повторно. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />. Сеанс будет завершен, а пользователь выйдет из системы. Если правило не настроено, по умолчанию используется параметр <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />.</translation> <translation id="3096595567015595053">Список включенных плагинов</translation> <translation id="3101501961102569744">Выбрать способ настройки прокси-сервера</translation> <translation id="3101709781009526431">Дата и время</translation> @@ -1527,7 +1529,7 @@ Добавленные сайты будут автоматически открываться не в <ph name="PRODUCT_NAME" />, а в другом браузере.</translation> <translation id="3255624750680556186">Если правило включено или не настроено, устройство может запускать функцию Powerwash. - Если правило отключено, устройству не разрешается включает эту функцию. Исключением будет ситуация, когда правило <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_NAME" /> разрешает обновлять встроенное ПО доверенного платформенного модуля (TPM), но оно ещё не было обновлено.</translation> + Если правило отключено, устройству не разрешается включать эту функцию. Исключением будет ситуация, когда правило <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_NAME" /> разрешает обновлять встроенное ПО доверенного платформенного модуля (TPM), но оно ещё не было обновлено.</translation> <translation id="3255762580838224124">Этот правило определяет поворот экрана в нужную ориентацию при каждой перезагрузке и при первом подключении после изменения правила. Пользователь может изменить настройки поворота, войдя в аккаунт, но после перезагрузки устройства они будут сброшены. Правило действует в отношении основного и дополнительного дисплея. Если оно не настроено, значение по умолчанию равно нулю градусов и пользователи могут самостоятельно его менять. В этом случае значение по умолчанию не применяется снова после перезапуска.</translation> @@ -1859,6 +1861,7 @@ Если правило задано, пользователи не смогут изменить главную страницу в <ph name="PRODUCT_NAME" />. Если правило не задано, они смогут выбрать, устанавливать ли страницу быстрого доступа в качестве главной. В <ph name="MS_WIN_NAME" /> это правило можно настроить только на устройствах из домена <ph name="MS_AD_NAME" />, на которых установлена ОС Windows 10 Pro или которые зарегистрированы в программе "<ph name="CHROME_BROWSER_CLOUSE_MANAGEMENT_NAME" />". В <ph name="MAC_OS_NAME" /> правило поддерживается только на устройствах, которые контролируются с помощью ПО для управления мобильными устройствами или добавлены в домен через MCX.</translation> +<translation id="3695706037816556327">Действие при удалении токена безопасности (например, смарт-карты) на устройстве с <ph name="PRODUCT_OS_NAME" /></translation> <translation id="3701121231485832347">Регулирует специальные настройки для устройств <ph name="PRODUCT_OS_NAME" /> под управлением <ph name="MS_AD_NAME" />.</translation> <translation id="3702518095257671450">Удаленная проверка</translation> <translation id="3702647575225525306"><ph name="POLICY_NAME" /> (Поле, состоящее из одной строки, устарело и в будущем будет удалено. Используйте расположенное ниже текстовое поле, которое содержит несколько строк.)</translation> @@ -1896,6 +1899,8 @@ Если эти правила не заданы, другие пользователи смогут изменить их самостоятельно.</translation> <translation id="3758249152301468420">Отключить инструменты разработчика</translation> +<translation id="3760231600118073732">Блокировка текущего сеанса</translation> +<translation id="3764097800332238572">Это правило действует, только если для правила <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_POLICY_NAME" /> выбран параметр <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" /> или <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" /> и пользователь, который вошел в систему с помощью смарт-карты, удалил ее. Правило позволяет указать, сколько секунд будет видно уведомление о скором выполнении определенного действия. Это сообщение заблокирует экран. Действие будет выполнено только после того, как истечет заданное для уведомления время. Если до этого пользователь заново вставит смарт-карту, действие не будет выполнено. Если значение равно нулю, уведомление не появляется и действие выполняется сразу.</translation> <translation id="3765260570442823273">Время показа предупреждения о выходе</translation> <translation id="377044054160169374">Принудительное прерывание при злоупотреблении доверием</translation> <translation id="3780152581321609624">Включить нестандартный порт в имя SPN Kerberos</translation> @@ -2407,7 +2412,7 @@ Если параметр отключен или не настроен, хост удаленного доступа может быть связан с любым локальным пользователем.</translation> <translation id="4587365491100112056">Правило позволяет указать срок использования кешированных данных аутентификации. В кеше содержатся данные о тех областях, которые машинная область считает надежными. Это позволяет выполнять вход в аккаунт быстрее. Сведения пользователей и данные о других областях не кешируются. - Если для правила указано значение "0", данные аутентификации кешироваться не будут. Так как эти сведения сохраняются после каждого входа, без них его выполнение может занять больше времени. + Если для правила указано значение "0", данные аутентификации кешироваться не будут. Так как эти сведения извлекаются при каждом входе, без их кеширования вход может занимать значительно больше времени. Если правило не настроено, кешированные данные аутентификации могут использоваться в течение 73 часов. @@ -2628,15 +2633,15 @@ <translation id="5017369989680827157">Если правило не настроено или задано значение True, пользователи смогут сами управлять автозаполнением адресов через интерфейс. Если задано значение False, функция автозаполнения никогда не будет предлагать вводить адреса. Кроме того, не будут сохраняться адреса, указываемые пользователями на веб-сайтах.</translation> -<translation id="5021550478471824215">Правило позволяет указать список настроек совместного доступа к файлам в сети. Каждый элемент – это объект с двумя свойствами: "<ph name="SHARE_URL_FIELD_NAME" />" и "<ph name="MODE_FIELD_NAME" />". +<translation id="5021550478471824215">Правило позволяет указать список настроенных общих папок в сети. Каждый элемент – это объект с двумя свойствами: <ph name="SHARE_URL_FIELD_NAME" /> и <ph name="MODE_FIELD_NAME" />. - Для URL общей папки должно быть указано значение "<ph name="SHARE_URL_FIELD_NAME" />". + URL общей папки должен быть указан в свойстве <ph name="SHARE_URL_FIELD_NAME" />. - Для свойства "<ph name="MODE_FIELD_NAME" />" должно быть указано значение "<ph name="MODE_ENUM_DROP_DOWN" />" или "<ph name="MODE_ENUM_PRE_MOUNT" />": + Для свойства <ph name="MODE_FIELD_NAME" /> должно быть указано значение <ph name="MODE_ENUM_DROP_DOWN" /> или <ph name="MODE_ENUM_PRE_MOUNT" />: - * "<ph name="MODE_ENUM_DROP_DOWN" />" показывает, что значение "<ph name="SHARE_URL_FIELD_NAME" />" будет добавлено в меню совместного доступа. + * <ph name="MODE_ENUM_DROP_DOWN" /> показывает, что папка <ph name="SHARE_URL_FIELD_NAME" /> будет добавлена в меню общих папок. - * "<ph name="MODE_ENUM_PRE_MOUNT" />" показывает, что значение "<ph name="SHARE_URL_FIELD_NAME" />" будет подключено напрямую.</translation> + * <ph name="MODE_ENUM_PRE_MOUNT" /> показывает, что папка <ph name="SHARE_URL_FIELD_NAME" /> будет подключена напрямую.</translation> <translation id="5023555740504506178">Если правило включено или не настроено (это значение выбрано по умолчанию), веб-страница может использовать API, предназначенные для демонстрации экрана (например, getDisplayMedia() или Desktop Capture API), чтобы предложить пользователю выбрать вкладку, окно или рабочий стол, который нужно показать. Если правило отключено, при вызове API для демонстрации экрана будет появляться сообщение об ошибке.</translation> @@ -2790,7 +2795,7 @@ Если отключить правило, пользователям будут доступны только ранее сохраненные пароли, а сохранить новые будет нельзя. - Если правило настроено, его не удастся изменить в <ph name="PRODUCT_NAME" />. В противном случае пользователи при желании смогут отключить функцию сохранения паролей.</translation> + Если правило настроено, пользователи не могут изменить его в <ph name="PRODUCT_NAME" />. В противном случае пользователи при желании смогут отключить функцию сохранения паролей.</translation> <translation id="5239333626804545932">Если правило включено или не настроено, Инструмент очистки Chrome будет периодически проверять систему и отправлять пользователю запросы на удаление обнаруженного нежелательного ПО. Ручной запуск инструмента на странице chrome://settings будет включен. Если правило отключено, то Инструмент очистки Chrome не сможет запускаться, а ручной запуск будет отключен. @@ -2812,24 +2817,24 @@ Если правило не настроено или указано значение False, режим единого рабочего стола будет отключен и пользователи не смогут его включить.</translation> <translation id="5255162913209987122">Рекомендуется</translation> -<translation id="5264066441613395613">Правило позволяет Chrome и ARC-приложениям игнорировать все настройки прокси-сервера, указанные с помощью командной строки. +<translation id="5264066441613395613">Правило позволяет задать настройки прокси-сервера для Chrome и ARC-приложений, игнорируя все настройки прокси, указанные с помощью командной строки. Если правило не задано, пользователи смогут самостоятельно настраивать прокси-сервер. - Правило <ph name="PROXY_SETTINGS_POLICY_NAME" /> активирует следующие поля: - * поле "<ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" />" позволяет задать прокси-сервер для Chrome и запрещает другим пользователям изменять эти настройки; - * поле "<ph name="PROXY_PAC_URL_PROXY_SETTINGS_FIELD" />" задает URL файла PAC прокси-сервера; - * поле "<ph name="PROXY_SERVER_PROXY_SETTINGS_FIELD" />" задает URL прокси-сервера; - * поле "<ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" />" задает список прокси-серверов, которые <ph name="PRODUCT_NAME" /> игнорирует. + Правило <ph name="PROXY_SETTINGS_POLICY_NAME" /> позволяет указать значения следующих полей: + * поле <ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" /> задает прокси-сервер для Chrome и запрещает пользователям изменять эти настройки; + * поле <ph name="PROXY_PAC_URL_PROXY_SETTINGS_FIELD" /> задает URL файла PAC прокси-сервера; + * поле <ph name="PROXY_SERVER_PROXY_SETTINGS_FIELD" /> задает URL прокси-сервера; + * поле <ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" /> задает список прокси-серверов, которые <ph name="PRODUCT_NAME" /> игнорирует. - Поле "<ph name="PROXY_SERVER_MODE_PROXY_SETTINGS_FIELD" />" заменено полем "<ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" />", которое задает прокси-сервер для Chrome и запрещает другим пользователям изменять эти настройки. + Поле <ph name="PROXY_SERVER_MODE_PROXY_SETTINGS_FIELD" /> заменено полем <ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" />, которое задает прокси-сервер для Chrome и запрещает пользователям изменять эти настройки. - Выберите значение поля "<ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" />": + Выбор значения поля <ph name="PROXY_MODE_PROXY_SETTINGS_FIELD" />: * <ph name="PROXY_MODE_ENUM_DIRECT" /> – прокси-сервер никогда не будет использоваться, а значения остальных полей будут игнорироваться. * <ph name="PROXY_MODE_ENUM_SYSTEM" /> – будут использоваться системные настройки прокси-сервера, значения остальных полей будут игнорироваться. * <ph name="PROXY_MODE_ENUM_AUTO_DETECT" /> – значения остальных полей будут игнорироваться. - * <ph name="PROXY_MODE_ENUM_FIXED_SERVER" /> – будут использоваться поля "<ph name="PROXY_SERVER_PROXY_SETTINGS_FIELD" />" и "<ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" />". - * <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> – будут использоваться поля "<ph name="PROXY_BYPASS_LIST_PROXY_PAC_URL" />" и "<ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" />". + * <ph name="PROXY_MODE_ENUM_FIXED_SERVER" /> – будут использоваться поля <ph name="PROXY_SERVER_PROXY_SETTINGS_FIELD" /> и <ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" />. + * <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> – будут использоваться поля <ph name="PROXY_BYPASS_LIST_PROXY_PAC_URL" /> и <ph name="PROXY_BYPASS_LIST_PROXY_SETTINGS_FIELD" />. Примечание. Подробную информацию можно найти здесь: https://www.chromium.org/developers/design-documents/network-settings#TOC-Command-line-options-for-proxy-sett.</translation> <translation id="5272684451155669299">Если вы укажете значение True, то разрешите использовать аппаратное обеспечение устройств Chrome для удаленной проверки личных данных пользователя в центре сертификации с помощью функции <ph name="ENTERPRISE_PLATFORM_KEYS_API" /> <ph name="CHALLENGE_USER_KEY_FUNCTION" />. @@ -3272,9 +3277,9 @@ <translation id="5815129011704381141">Автоматическая перезагрузка после обновления</translation> <translation id="582857022372205358">Включить переплет по короткому краю при двусторонней печати</translation> <translation id="5832274826894536455">Устаревшие правила</translation> -<translation id="5835253272509953988">Если параметр включен, то пользователи смогут проверять в <ph name="PRODUCT_NAME" />, не стали ли введенные ими данные (например, имена пользователей и пароли) известны посторонним в результате утечки. +<translation id="5835253272509953988">Если правило включено, то пользователи смогут проверять в <ph name="PRODUCT_NAME" />, не стали ли введенные ими данные (например, имена пользователей и пароли) известны посторонним в результате утечки. - Если правило настроено, его не удастся изменить в <ph name="PRODUCT_NAME" />. В противном случае проверка также будет доступна, но при желании пользователи смогут ее отключить. + Если правило настроено, пользователи не могут изменить его в <ph name="PRODUCT_NAME" />. В противном случае проверка также будет доступна, но при желании пользователи смогут ее отключить. Функция "Безопасный просмотр" может быть отключена как с помощью правила, так и самим пользователем. В таком случае действие запускаться не будет. Чтобы принудительно включить Безопасный просмотр, используйте правило <ph name="SAFE_BROWSING_ENABLED_POLICY_NAME" /> или <ph name="SAFE_BROWSING_PROTETION_LEVEL_POLICY_NAME" />.</translation> <translation id="5836064773277134605">Ограничить диапазон портов UDP, используемых хостами удаленного доступа</translation> @@ -3734,7 +3739,7 @@ Если правило настроено, пользователь сможет включать приложения на заблокированном экране, если их идентификаторы расширений есть в списке правила. Следовательно, если в правиле задан пустой список, создавать заметки при заблокированном экране будет нельзя. Если идентификатор приложения есть в списке правила, не исключено, что пользователь все равно не сможет создавать заметки на заблокированном экране именно в этом приложении. Например, в <ph name="PRODUCT_NAME" /> 61 список доступных приложений дополнительно ограничен самой платформой. Если правило не настроено, то оно не будет ограничивать список приложений, которые пользователь может включить на заблокированном экране.</translation> -<translation id="6506486086262398387">Если правило включено, функция общего доступа к файлам в сети в <ph name="PRODUCT_OS_NAME" /> при необходимости будет использовать протокол NTLM для аутентификации общих папок с протоколом SMB. Если правило отключено, протокол NTLM для аутентификации применяться не будет. +<translation id="6506486086262398387">Если правило включено, функция общих сетевых папок в <ph name="PRODUCT_OS_NAME" /> при необходимости будет использовать протокол NTLM для аутентификации при доступе к общим папкам по протоколу SMB. Если правило отключено, протокол NTLM для аутентификации применяться не будет. Если правило не задано, оно будет по умолчанию считаться выключенным для профилей, управляемых администратором, и включенным для остальных.</translation> <translation id="6515357889978918016">Образ <ph name="PLUGIN_VM_NAME" /></translation> @@ -3895,6 +3900,7 @@ <translation id="6672070613706645316">Разрешить пользователям менять фон на странице быстрого доступа</translation> <translation id="6672630473862787247">Включить пассивную аутентификацию для обычных и гостевых сеансов, а также режима инкогнито</translation> <translation id="6685903773201985073">Включить пассивную аутентификацию для гостевых и обычных сеансов</translation> +<translation id="6689343802305995925">Нет действий</translation> <translation id="6689792153960219308">Отчет о статусе оборудования</translation> <translation id="6690425645391461516">Отключить проверки на перехват DNS, но разрешить показ информационных панелей с вопросом о том, не хотел ли пользователь ввести адрес сайта в интранете</translation> <translation id="6698632841807204978">Включить черно-белую печать</translation> @@ -4161,6 +4167,7 @@ В случае отключения правила <ph name="PRODUCT_NAME" /> закрывает вкладку после запуска альтернативного браузера, даже если она была единственной оставшейся. В результате работа <ph name="PRODUCT_NAME" /> полностью прекращается.</translation> <translation id="7019805045859631636">Fast</translation> +<translation id="7026351325994257733">Разрешить синхронизацию параметров сети Wi-Fi между устройствами с <ph name="PRODUCT_OS_NAME" /> и подключенным телефоном Android</translation> <translation id="7027785306666625591">Настройка режима энергопотребления в <ph name="PRODUCT_OS_NAME" /> Эти правила определяют режим работы <ph name="PRODUCT_OS_NAME" />, когда пользователь неактивен в течение определенного времени.</translation> @@ -4531,6 +4538,13 @@ – Если это правило отключено, администраторы должны уведомить об этом конечных пользователей устройства.</translation> <translation id="747275827471712187">Вернуться к ранее применявшемуся поведению атрибута <ph name="ATTRIBUTE_SAMESITE_NAME" /> для файлов cookie на этих сайтах</translation> +<translation id="7476621944304431784">Если эта настройка включена, пользователям разрешено синхронизировать параметры сети Wi-Fi между устройствами с <ph name="PRODUCT_OS_NAME" /> и подключенным телефоном Android. Чтобы такая синхронизация была возможна, пользователи должны специально выбрать и настроить эту функцию. + + Если настройка отключена, синхронизировать параметры сети Wi-Fi нельзя. + + Эта функция зависит от того, включен ли тип данных <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> в синхронизации Chrome. Если параметр <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> отключен в правиле <ph name="SYNC_TYPES_LIST_DISABLED_POLICY_NAME" /> или синхронизация Chrome отключена с помощью правила <ph name="SYNC_DISABLED_POLICY_NAME" />, эта функция будет недоступна. + + Если правило не задано, по умолчанию синхронизация запрещена для управляемых профилей.</translation> <translation id="7477231245051133709">Включить монофонический звук (специальная возможность)</translation> <translation id="7477239290070847560">Принтеры, работающие по протоколам Zeroconf (mDNS + DNS-SD)</translation> <translation id="7485481791539008776">Правила выбора принтера по умолчанию</translation> @@ -5186,7 +5200,7 @@ Правило позволяет исключить определенные хосты обмена сообщениями с оригинальными приложениями из списка запрещенных. Если значение "<ph name="WILDCARD_VALUE" />" применено для всего списка запрещенных хостов, загружаются только явно разрешенные. - По умолчанию все эти хосты разрешены. Хотя правило запрещает все хосты обмена сообщениями с оригинальными приложениями, администратор может изменить его, создав список разрешенных хостов.</translation> + По умолчанию все эти хосты разрешены. Однако если правило запрещает все хосты обмена сообщениями с оригинальными приложениями, администратор может изменить его, создав список разрешенных хостов.</translation> <translation id="841977920223099909">Триггер, при котором будет получено предупреждение от защиты паролем</translation> <translation id="8424255554404582727">Поворот изображения на экране по умолчанию (применяется при каждой перезагрузке)</translation> <translation id="8426231401662877819">Повернуть экран на 90 градусов по часовой стрелке</translation> @@ -5413,7 +5427,7 @@ Если правило задано, не удастся изменить эту настройку в <ph name="PRODUCT_NAME" />. В противном случае пользователи смогут добавить или скрыть кнопку главного экрана.</translation> <translation id="8768528324886802059">Правило позволяет исключить определенные хосты обмена сообщениями с оригинальными приложениями из списка запрещенных. Если значение "<ph name="WILDCARD_VALUE" />" применено для всего списка запрещенных хостов, загружаются только явно разрешенные. - По умолчанию все эти хосты разрешены. Хотя правило запрещает все хосты обмена сообщениями с оригинальными приложениями, администратор может изменить его, создав список разрешенных хостов.</translation> + По умолчанию все эти хосты разрешены. Однако если правило запрещает все хосты обмена сообщениями с оригинальными приложениями, администратор может изменить его, создав список разрешенных хостов.</translation> <translation id="877185520360032968">Это правило изменяет каталог, в который браузер Chrome по умолчанию скачивает файлы. Пользователи могут выбрать другой каталог. Если правило не настроено, браузер Chrome использует каталог, заданный по умолчанию в той или иной ОС. @@ -5749,6 +5763,7 @@ <translation id="9152473318295429890">Правило определяет, увидит ли пользователь предложения похожих веб-страниц</translation> <translation id="9153446010242995516">Откатить до целевой версии и оставаться в ней, если установлена более поздняя версия ОС. По возможности перенести конфигурацию на уровне устройства (включая сетевые учетные данные). Выполнить откат и Powerwash, даже если восстановление данных невозможно (так как целевая версия не поддерживает восстановление данных и изменения будут выполнены без сохранения обратной совместимости). Поддерживается на <ph name="PRODUCT_OS_NAME" /> версии 75 и выше. В более ранних версиях эта функция отключает возможность отката.</translation> +<translation id="9155218447258425310">Длительность уведомления, которое появляется после удаления смарт-карты на устройстве с <ph name="PRODUCT_OS_NAME" /></translation> <translation id="9155375380628728544">Если правило настроено, пользователи могут добавить только один из перечисленных в нем языков в список предпочтительных. Если значение не задано или указан пустой список, пользователи могут добавлять в качестве предпочтительных любые языки.
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 5d4935b2..61e9706 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb
@@ -109,9 +109,9 @@ * "ทั้งหมด" จะอนุญาตประเภทการเข้ารหัส AES ซึ่งได้แก่ aes256-cts-hmac-sha1-96 และ aes128-cts-hmac-sha1-96 รวมถึงประเภทการเข้ารหัส RC4 ซึ่งก็คือ rc4-hmac AES จะมีความสำคัญเหนือกว่าหากเซิร์ฟเวอร์รองรับประเภทการเข้ารหัส AES และ RC4 - * "เข้มงวด" หรือไม่ได้ตั้งค่าจะอนุญาตเฉพาะประเภท AES + * "แรง" หรือไม่ได้ตั้งค่าจะอนุญาตเฉพาะประเภท AES - * "เดิม" จะอนุญาตเฉพาะประเภท RC4 ซึ่งไม่มีความปลอดภัย และควรใช้ในบางกรณีเท่านั้น หากเป็นไปได้ ให้กำหนดค่าเซิร์ฟเวอร์ใหม่เพื่อให้รองรับ AES + * "แบบเดิม" จะอนุญาตเฉพาะประเภท RC4 ซึ่งไม่มีความปลอดภัย และควรใช้ในบางกรณีเท่านั้น หากเป็นไปได้ ให้กำหนดค่าเซิร์ฟเวอร์ใหม่เพื่อให้รองรับ AES รวมถึงดู https://wiki.samba.org/index.php/Samba_4.6_Features_added/changed#Kerberos_client_encryption_types</translation> <translation id="1177567780207290133">การตั้งค่านโยบายจะควบคุมตัวกรอง URL ของ SafeSites ซึ่งใช้ Google Safe Search API เพื่อจำแนก URL ว่าเป็นประเภทลามกอนาจารหรือไม่
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index 96fbf9d..a32617b 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb
@@ -41,9 +41,9 @@ Bu politika yalnızca, alan adı ile cihazın kaydolduğu alan adı eşleşen kullanıcıları etkiler. Diğer tüm kullanıcılar için, IdP tarafından ayarlanan çerezler kullanıcının profiline sadece cihazda ilk defa giriş yaparken aktarılır.</translation> <translation id="1029052664284722254">Kullanıcı oturumu kapattığında cihazı yeniden başlamaya zorla</translation> -<translation id="1032533786864478457">Politika Etkin değerine ayarlanırsa kullanıcılar cihazlarını, kısa mesajlarını Chromebook'larla senkronize edecek şekilde ayarlayabilirler Kullanıcıların, bir kurulum akışını tamamlayarak bu özelliğe açık bir şekilde kaydolmaları gerekir. Kullanıcılar, kurulumu tamamladıktan sonra Chromebook'larında kısa mesaj gönderip alabilirler. +<translation id="1032533786864478457">Politika, Etkin değerine ayarlanırsa kullanıcılar cihazlarını, kısa mesajlarını Chromebook'larla senkronize edecek şekilde ayarlayabilirler Kullanıcıların, bir kurulum akışını tamamlayarak bu özelliğe açık bir şekilde kaydolmaları gerekir. Kullanıcılar, kurulumu tamamladıktan sonra Chromebook'larından kısa mesaj gönderip alabilirler. - Politika Devre Dışı değerine ayarlanırsa kullanıcılar kısa mesaj senkronizasyonunu ayarlayamazlar. + Politika, Devre Dışı değerine ayarlanırsa kullanıcılar kısa mesaj senkronizasyonunu ayarlayamazlar. Politika ayarlanmadan bırakılırsa bu özellik, varsayılan olarak yönetilen kullanıcılar için devre dışı bırakılır, diğer kullanıcılar için etkinleştirilir.</translation> <translation id="1040446814317236570">PAC URL ayırmayı etkinleştir (https:// için)</translation> @@ -642,9 +642,9 @@ Bu ayar devre dışı bırakılırsa dosya aktarımına izin verilmez. Bu ayar etkinleştirilirse veya ayarlanmazsa dosya aktarımına izin verilir.</translation> <translation id="2057317273526988987">URL listesine erişimi engelle</translation> <translation id="2061810934846663491">Uzaktan erişim ana makineleri için gereken alan adlarını yapılandır</translation> -<translation id="2069350366303315077">Politika Etkin değerine ayarlanırsa <ph name="PRODUCT_NAME" />, misafir oturumunu zorunlu kılıp profil oturum açmalarını engeller. Misafir oturum açmaları, tüm pencerelerin gizli modda olduğu <ph name="PRODUCT_NAME" /> profilleridir. +<translation id="2069350366303315077">Politika, Etkin değerine ayarlanırsa <ph name="PRODUCT_NAME" />, misafir oturumunu zorunlu kılıp profil ile oturum açma işlemlerini engeller. Misafir oturumları, tüm pencerelerin gizli modda olduğu <ph name="PRODUCT_NAME" /> profilleridir. - Politika Devre Dışı değerine ayarlanır, ayarlanmadan bırakılır veya tarayıcı Misafir Modu devre dışı bırakılırsa (<ph name="BROWSER_GUEST_MODE_ENABLED_POLICY_NAME" /> politikasıyla) yeni ve mevcut profiller kullanılabilir.</translation> + Politika, Devre Dışı değerine ayarlanır, ayarlanmadan bırakılır veya tarayıcı Misafir Modu devre dışı bırakılırsa (<ph name="BROWSER_GUEST_MODE_ENABLED_POLICY_NAME" /> politikasıyla) yeni ve mevcut profiller kullanılabilir.</translation> <translation id="2073552873076775140"><ph name="PRODUCT_NAME" /> oturumunun açılmasına izin ver</translation> <translation id="2075732129949889165">Crostini Ansible başucu kitabı</translation> <translation id="2077129598763517140">Kullanılabilir olduğunda donanım hızlandırmayı kullan</translation> @@ -980,7 +980,7 @@ <translation id="2482676533225429905">Yerel Mesajlaşma</translation> <translation id="2483146640187052324">Ağ bağlantılarında ağ işlemlerini tahmin et</translation> <translation id="2498238926436517902">Rafı her zaman otomatik olarak gizle</translation> -<translation id="250022556568924228">Politika ayarlanırsa <ph name="PRODUCT_OS_NAME" />, Hizmet Şartları'nı indirip cihaz yerel hesabı oturumu her başlatıldığında kullanıcılara sunar. Kullanıcılar yalnızca Hizmet Şartları kabul ettikten sonra oturuma giriş yapabilirler. +<translation id="250022556568924228">Politika ayarlanırsa <ph name="PRODUCT_OS_NAME" />, Hizmet Şartları'nı indirir ve cihaz yerel hesabı oturumu her başlatıldığında kullanıcılara gösterir. Kullanıcılar yalnızca Hizmet Şartları'nı kabul ettikten sonra oturuma giriş yapabilirler. Politika ayarlanmadan bırakılırsa Hizmet Şartları görünmez. @@ -1096,6 +1096,7 @@ Politika ayarlanmadan bırakılırsa web siteleri listeye eklenmez. Not: Bu listeye <ph name="USE_IE_SITELIST_POLICY_NAME" /> ve <ph name="EXTERNAL_SITELIST_URL_POLICY_NAME" /> politikaları aracılığıyla öğeler eklenebileceğini de unutmayın.</translation> +<translation id="2640898752536996430">Kullanıcının oturumu kapansın.</translation> <translation id="264093234299818170">Engellenenler listesinde olanlar dışında tüm yazıcılar gösterilir.</translation> <translation id="264252574246191885">Liste dışı</translation> <translation id="2647069081229792812">Yer işareti düzenlemesini etkinleştir veya devre dışı bırak</translation> @@ -1427,6 +1428,7 @@ <translation id="3072847235228302527">Bir cihaz yerel hesabı için Hizmet Şartları'nı ayarlama</translation> <translation id="3086995894968271156">Cast Receiver'ı <ph name="PRODUCT_NAME" /> ürününde yapılandırın.</translation> <translation id="3091832372132789233">Öncelikle harici bir güç kaynağına bağlı cihazlar için pili şarj edin.</translation> +<translation id="309416443108680956">Güvenlik jetonuyla (ör. akıllı kart) kimlik doğrulaması yapan bir kullanıcı, oturum sırasında bu jetonu çıkardığında ne olacağını belirtir. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />: Hiçbir şey olmaz. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" />: Kullanıcı tekrar kimlik doğrulayana kadar ekran kilitlenir. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />: Oturum sona erdirilir ve kullanıcının oturumu kapatılır. Bu politika ayarlanmazsa <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" /> kabul edilir.</translation> <translation id="3096595567015595053">Etkin eklentilerin listesi</translation> <translation id="3101501961102569744">Proxy sunucu ayarlarının nasıl belirtileceğini seç</translation> <translation id="3101709781009526431">Tarih ve saat</translation> @@ -1517,9 +1519,9 @@ <translation id="3251500716404598358">Tarayıcılar arasında geçiş yapmak için politikaları yapılandırır. Yapılandırılan web siteleri otomatik olarak <ph name="PRODUCT_NAME" /> dışında bir tarayıcıda açılır.</translation> -<translation id="3255624750680556186">Politika Etkin değerine ayarlanır veya ayarlanmadan bırakılırsa cihaz Powerwash işlemini tetikleyebilir. +<translation id="3255624750680556186">Politika, Etkin değerine ayarlanır veya ayarlanmadan bırakılırsa cihaz Powerwash işlemini tetikleyebilir. - Politika Devre Dışı değerine ayarlanırsa cihaz Powerwash işlemini tetikleyemez. Powerwash işleminin gerçekleşmesine yine de izin veren istisna durum, <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_NAME" /> politikasının TPM donanım yazılımı güncellemesine izin veren bir değere ayarlanması, ancak TPM donanım yazılımının henüz güncellenmemiş olması sonucu oluşur.</translation> + Politika, Devre Dışı değerine ayarlanırsa cihaz Powerwash işlemini tetikleyemez. <ph name="TPM_FIRMWARE_UPDATE_SETTINGS_NAME" /> politikası TPM donanım yazılımı güncellemesine izin veren bir değere ayarlanmış ancak TPM donanım yazılımı henüz güncellenmemişse, Powerwash işleminin yine de gerçekleşmesini sağlayacak bir istisna durumu oluşur.</translation> <translation id="3255762580838224124">Bu politikanın ayarlanması, her ekranın her yeniden başlatmada ve politika değeri değiştikten sonraki ilk bağlantısında belirtilen yöne döndürülmesini sağlar. Kullanıcılar oturum açtıktan sonra ayarlar sayfasında ekran döndürmeyi değiştirebilir, ancak ayar bir sonraki yeniden başlatmada eski haline döner. Bu politika, birincil ve ikincil ekranlar için geçerlidir. Politika ayarlanmazsa varsayılan değer 0 derece olur ve kullanıcılar bu değeri istedikleri gibi değiştirebilir. Bu durumda, varsayılan değer yeniden başlatma sırasında tekrar uygulanmaz.</translation> @@ -1848,6 +1850,7 @@ Bu politikayı ayarlarsanız kullanıcılar <ph name="PRODUCT_NAME" /> ürününde ana sayfa türlerini değiştiremez. Politika ayarlanmadan bırakılırsa ana sayfasının Yeni Sekme sayfası olup olmayacağına kullanıcı karar verir. <ph name="MS_WIN_NAME" /> işletim sisteminde bu işlev, yalnızca Windows 10 Pro üzerinde çalışan bir <ph name="MS_AD_NAME" /> alan adına katılmış veya <ph name="CHROME_BROWSER_CLOUSE_MANAGEMENT_NAME" /> öğesine kaydolmuş örneklerde kullanılabilir. <ph name="MAC_OS_NAME" /> işletim sisteminde bu işlev, yalnızca MDM ile çalışan veya MCX aracılığıyla bir alan adına katılmış örneklerde kullanılabilir.</translation> +<translation id="3695706037816556327"><ph name="PRODUCT_OS_NAME" /> için güvenlik jetonunun (ör. akıllı kart) çıkarılmasıyla ilgili işlem.</translation> <translation id="3701121231485832347"><ph name="MS_AD_NAME" /> tarafından yönetilen <ph name="PRODUCT_OS_NAME" /> cihazlara özgü ayarları kontrol eder.</translation> <translation id="3702518095257671450">Uzaktan onay</translation> <translation id="3702647575225525306"><ph name="POLICY_NAME" /> (Tek satırlı alanlar artık kullanılmamaktadır ve yakında kaldırılacaktır. Lütfen aşağıdaki çok satırlı metin kutusunu kullanın.)</translation> @@ -1885,6 +1888,8 @@ Bu politikaların ayarlanmadan bırakılması, kullanıcıların proxy ayarlarını kendilerinin yapabilmesine olanak tanır.</translation> <translation id="3758249152301468420">Geliştirici Araçları'nı devre dışı bırak</translation> +<translation id="3760231600118073732">Geçerli oturum kilitlensin.</translation> +<translation id="3764097800332238572">Bu politika, yalnızca <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_POLICY_NAME" /> politikası <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" /> veya <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" /> değerine ayarlanırsa ve akıllı kartla kimlik doğrulaması yapan kullanıcı bu akıllı kartı çıkarırsa geçerli olur. Ardından bu politika, gerçekleşmek üzere olan işlem hakkında kullanıcıyı bilgilendiren bildirimin kaç saniye görüntüleneceğini belirtir. Bu bildirim ekranı engeller. İşlem, yalnızca bu bildirimin süresi dolduktan sonra gerçekleşir. Kullanıcı, bildirimin süresi dolmadan akıllı kartı yeniden takarak işlemin gerçekleşmesini önleyebilir. Bu politika sıfır değerine ayarlanırsa herhangi bir bildirim görüntülenmeden işlem hemen gerçekleşir.</translation> <translation id="3765260570442823273">Boştayken çıkış yapma uyarı mesajının süresi</translation> <translation id="377044054160169374">Kötüye Kullanım Deneyimi Müdahele Yaptırımı</translation> <translation id="3780152581321609624">Kerberos SPN'sine standart dışı bağlantı noktasını dahil et</translation> @@ -2627,9 +2632,9 @@ <translation id="5023555740504506178">Bu politika etkinleştirilir veya yapılandırılmazsa (varsayılan) bir web sayfası, kullanıcıdan ekran görüntüsü alınacak bir sekme, pencere veya masaüstü seçmesini istemek için ekran paylaşımı API'lerini (ör. getDisplayMedia() veya Desktop Capture uzantı API'si) kullanabilir. Bu politika devre dışı bırakıldığında, ekran paylaşımı API'lerine yapılan çağrılar bir hatayla başarısız olur.</translation> -<translation id="5025239932007658691">Politika Etkin değerine ayarlanır veya ayarlanmadan bırakılırsa <ph name="PRODUCT_NAME" />, doğru zaman damgası almak için bir Google sunucusuna ara sıra sorgu gönderir. +<translation id="5025239932007658691">Politika, Etkin değerine ayarlanır veya ayarlanmadan bırakılırsa <ph name="PRODUCT_NAME" />, doğru zaman damgası almak için bir Google sunucusuna ara sıra sorgu gönderir. - Politika Devre Dışı değerine ayarlanırsa <ph name="PRODUCT_NAME" />, bu sorguları göndermez.</translation> + Politika, Devre Dışı değerine ayarlanırsa <ph name="PRODUCT_NAME" />, bu sorguları göndermez.</translation> <translation id="5032164758660626397">Kullanıcının büyük dosyalar aktarmasını engelle</translation> <translation id="5056708224511062314">Ekran büyüteci devre dışı</translation> <translation id="5058573563327660283">Otomatik temizlik sırasında disk alanı boşaltmak için kullanılan stratejiyi seç (kullanımdan kaldırıldı)</translation> @@ -3402,9 +3407,9 @@ <translation id="6034341625190551415">Herkese açık oturum ve kiosk hesap türlerini kontrol eder.</translation> <translation id="6034603289689965535">Sayfanın yüklemesi kaldırılırken pop-up göstermesine olanak tanır</translation> <translation id="6036523166753287175">Uzaktan erişim ana makinesinden güvenlik duvarı geçişini etkinleştir</translation> -<translation id="603768430528561926">Politika Etkin değerine ayarlanır veya ayarlanmadan bırakılırsa kurumsal cihaz kullanıcıları, <ph name="PRODUCT_OS_NAME" /> Kaydı aracılığıyla teklifleri kullanabilirler. +<translation id="603768430528561926">Politika, Etkin değerine ayarlanır veya ayarlanmadan bırakılırsa kurumsal cihaz kullanıcıları, <ph name="PRODUCT_OS_NAME" /> Kaydı aracılığıyla teklifleri kullanabilirler. - Politika Devre Dışı değerine ayarlanırsa kullanıcılar teklifleri kullanamazlar.</translation> + Politika, Devre Dışı değerine ayarlanırsa kullanıcılar teklifleri kullanamazlar.</translation> <translation id="6048199181629830227">Güç tüketimi en üst düzeydeyken pil kullanımına geçme güç yönetimini etkinleştir</translation> <translation id="6054485492411959335">Kullanıcının kullanabileceği yazıcıları belirtir. @@ -3619,7 +3624,7 @@ Bu politika ayarlanmazsa veya liste boşsa <ph name="PRODUCT_NAME" /> içindeki tüm şemalara erişilebilir.</translation> <translation id="6338982178236723271">Sistem bilgileri raporlama</translation> <translation id="6342187235303612558">Kullanıcıların, veri kaybını önleme veya kötü amaçlı yazılıma karşı tarama için şu anda desteklenmeyen dosyaları yüklemesini veya indirmesini engelle.</translation> -<translation id="6353890097388312479">Politika Tümü (0) değerine ayarlanırsa veya ayarlanmadan bırakılırsa kullanıcılar, tüm CA sertifikaları için güven ayarlarını düzenleyebilir, kullanıcının içe aktardığı sertifikaları kaldırabilir ve başka sertifikaları içe aktarabilirler. Politika Yalnızca Kullanıcı (1) değerine ayarlanırsa kullanıcılar, yalnızca kullanıcının içe aktardığı sertifikaları yönetebilir, ancak yerleşik sertifikaların güven ayarlarını değiştiremezler. Politika Yok (2) değerine ayarlanırsa kullanıcılar, CA sertifikalarını görüntüleyebilirler (yönetemezler).</translation> +<translation id="6353890097388312479">Politika, Tümü (0) değerine ayarlanırsa veya ayarlanmadan bırakılırsa kullanıcılar, tüm CA sertifikaları için güven ayarlarını düzenleyebilir, kullanıcının içe aktardığı sertifikaları kaldırabilir ve başka sertifikaları içe aktarabilirler. Politika, Yalnızca Kullanıcı (1) değerine ayarlanırsa kullanıcılar, yalnızca kullanıcının içe aktardığı sertifikaları yönetebilir, ancak yerleşik sertifikaların güven ayarlarını değiştiremezler. Politika, Yok (2) değerine ayarlanırsa kullanıcılar, CA sertifikalarını görüntüleyebilirler (yönetemezler).</translation> <translation id="6366574325767783825">Politika True (Doğru) değerine ayarlanır veya ayarlanmadan bırakılırsa <ph name="PRODUCT_NAME" />, İmzalanmış HTTP Takası olarak yayınlanan web içeriklerini kabul eder. Politikanın False (Yanlış) değerine ayarlanması, İmzalanmış HTTP Takası içeriğinin yüklenmesini önler.</translation> @@ -3882,6 +3887,7 @@ <translation id="6672070613706645316">Kullanıcıların Yeni Sekme sayfasındaki arka planı özelleştirmelerin izin ver.</translation> <translation id="6672630473862787247">Ambiyans kimlik doğrulamasını normal, gizli ve misafir oturumlarında etkinleştir.</translation> <translation id="6685903773201985073">Ambiyans kimlik doğrulamasını misafir oturumlarında ve normal oturumlarda etkinleştir.</translation> +<translation id="6689343802305995925">Herhangi bir işlem yapılmasın.</translation> <translation id="6689792153960219308">Donanım durumunu bildir</translation> <translation id="6690425645391461516">DNS müdahale kontrollerini devre dışı bırak; bunu mu demek istediniz "http://intranetsite/" bilgi çubuklarına izin ver.</translation> <translation id="6698632841807204978">Tek renk yazdırmayı etkinleştir</translation> @@ -4149,6 +4155,7 @@ Politika Devre dışı değerine ayarlanırsa alternatif tarayıcıya son sekmeden geçilmiş olsa bile <ph name="PRODUCT_NAME" /> o sekmeyi kapatır. Bu da <ph name="PRODUCT_NAME" /> tarayıcısının tamamen çıkış yapmasına neden olur.</translation> <translation id="7019805045859631636">Hızlı</translation> +<translation id="7026351325994257733"><ph name="PRODUCT_OS_NAME" /> cihazlar ve bağlı Android telefon arasında kablosuz ağ yapılandırmalarının senkronize edilmesine izin ver.</translation> <translation id="7027785306666625591"><ph name="PRODUCT_OS_NAME" /> sisteminde güç yönetimini yapılandırın. Bu politikalar, kullanıcı belirli bir süre boyunca hiçbir şey yapmadığında <ph name="PRODUCT_OS_NAME" /> sisteminin çalışma biçimini yapılandırmanıza olanak verir.</translation> @@ -4523,6 +4530,13 @@ - Bu politika Devre Dışı ise yöneticiler bunu cihazın son kullanıcılarına belirtmelidir.</translation> <translation id="747275827471712187">Bu sitelerde çerezler için eski <ph name="ATTRIBUTE_SAMESITE_NAME" /> davranışına geri dön</translation> +<translation id="7476621944304431784">Bu ayar etkinleştirildiğinde kullanıcıların, <ph name="PRODUCT_OS_NAME" /> cihazları ile bağlı Android telefonları arasında kablosuz ağ yapılandırmalarını senkronize etmelerine izin verilir. Kablosuz ağ yapılandırmaları senkronize edilmeden önce kullanıcıların bir kurulum akışını tamamlayarak bu özelliğe açık bir şekilde kaydolmaları gerekir. + + Bu ayar devre dışı bırakılırsa kullanıcıların, kablosuz ağ yapılandırmalarını senkronize etmelerine izin verilmez. + + Bu özellik, etkinleştirilen Chrome Senkronizasyonundaki <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> veri türüne bağlıdır. <ph name="SYNC_TYPES_LIST_DISABLED_POLICY_NAME" /> politikasında <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> devre dışı bırakılırsa veya <ph name="SYNC_DISABLED_POLICY_NAME" /> politikasında Chrome Senkronizasyonu devre dışı bırakılırsa bu özellik etkinleştirilmez. + + Bu politika ayarlanmadan bırakılırsa yönetilen kullanıcılar için varsayılana izin verilmez.</translation> <translation id="7477231245051133709">Mono ses erişilebilirlik özelliklerini etkinleştir</translation> <translation id="7477239290070847560">Zeroconf tabanlı (mDNS + DNS-SD) protokol hedefleri</translation> <translation id="7485481791539008776">Varsayılan yazıcı seçimi için kurallar</translation> @@ -5728,6 +5742,7 @@ <translation id="9152473318295429890">İlişkili web sayfalarının bağlam önerilerini etkinleştir</translation> <translation id="9153446010242995516">OS sürümü hedeften daha yeniyse geri alın ve hedefin sürümünde kalın. Mümkünse geri alma işlemiyle cihaz düzeyinde yapılandırmayı (ağ kimlik bilgileri dahil) aktarmayı deneyin, ancak (hedef sürümün verilerin geri yüklenmesini desteklememesi veya geriye dönük uyumluluğu olmayan bir değişiklik nedeniyle) verilerin geri yüklenmesi mümkün olmazsa bile geri yükleme işlemini tam powerwash yöntemiyle gerçekleştirin. <ph name="PRODUCT_OS_NAME" /> sürüm 75'te ve sonraki sürümlerde desteklenir. Daha eski istemciler için bu değer, geri yüklemenin devre dışı bırakıldığı anlamına gelir.</translation> +<translation id="9155218447258425310"><ph name="PRODUCT_OS_NAME" /> için akıllı kartın çıkarılmasıyla ilgili bildirim süresi.</translation> <translation id="9155375380628728544">Politikayı ayarlamak, kullanıcıların bu politikada listelenen dillerden sadece birini tercih edilen diller listesine eklemesine izin verir. Ayarlanmazsa veya boş bir listeye ayarlanırsa kullanıcılar dilleri tercihlerine göre belirleyebilir.
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index 0e598d9..b55e5535 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb
@@ -41,7 +41,7 @@ Це правило стосується лише користувачів домену, у якому зареєстровано пристрій. Для інших користувачів файли cookie від постачальника ідентифікатора передаватимуться в профіль користувача лише під час їх першого входу на пристрої.</translation> <translation id="1029052664284722254">Ініціювати перезапуск пристрою після виходу користувача з облікового запису</translation> -<translation id="1032533786864478457">Якщо це правило ввімкнено, користувачі зможуть налаштувати синхронізацію своїх текстових повідомлень між Chromebook та іншими пристроями. Користувачі мають явно ввімкнути цю функцію, налаштувавши її. Після цього вони зможуть надсилати й отримувати текстові повідомлення на пристроях Chromebook. +<translation id="1032533786864478457">Якщо це правило ввімкнено, користувачі зможуть налаштувати синхронізацію своїх текстових повідомлень між Chromebook та іншими пристроями. Користувачі мають спеціально ввімкнути й налаштувати цю функцію. Після цього вони зможуть надсилати й отримувати текстові повідомлення на пристроях Chromebook. Якщо це правило вимкнено, користувачі не зможуть налаштувати синхронізацію повідомлень. @@ -1190,13 +1190,13 @@ Це корпоративне правило призначене для короткочасної адаптації та буде вилучене у версії Chrome 88.</translation> <translation id="2759224876420453487">Керувати поведінкою користувача в сеансі мультипрофілю</translation> -<translation id="2759426227259007018">За допомогою налаштувань цього правила можна вказати, які додатки користувачі можуть вмикати як додатки для створення нотаток на заблокованому екрані пристрою <ph name="PRODUCT_OS_NAME" />. +<translation id="2759426227259007018">За допомогою цього правила можна створити список додатків, які користувачі можуть використовувати для нотаток на заблокованому екрані пристрою <ph name="PRODUCT_OS_NAME" />. - Якщо вибраний додаток розміщено на заблокованому екрані, на ньому ж відображатиметься елемент інтерфейсу для запуску додатка для створення нотаток. Коли додаток запущено, він може відкривати вікно вгорі заблокованого екрана та створювати нотатки в цьому контексті. Додаток може імпортувати створені нотатки в сеанс основного користувача, коли його розблокують. На заблокованому екрані підтримуються лише додатки <ph name="PRODUCT_NAME" /> для створення нотаток. + Якщо вибраний додаток дозволено використовувати, на заблокованому екрані відображатиметься елемент інтерфейсу для запуску додатка для створення нотаток. Після запуску додатка поверх заблокованого екрана з'явиться вікно для створення нотаток. Додаток може імпортувати створені нотатки в сеанс основного користувача, коли екран буде розблоковано. На заблокованому екрані підтримуються лише додатки <ph name="PRODUCT_NAME" /> для створення нотаток. - Якщо це правило налаштовано й у відповідному списку вказано ідентифікатор розширення додатка, користувачі зможуть вмикати цей додаток на заблокованому екрані. Тому, якщо для правила вказано порожній список, на заблокованому екрані не можна робити нотатки. Навіть якщо в списку правила вказано ідентифікатор додатка, у деяких випадках користувачі все одно не зможуть вмикати його як додаток для створення нотаток на заблокованому екрані. Наприклад, платформа додатково обмежує набір доступних додатків для <ph name="PRODUCT_NAME" /> 61. + Якщо це правило налаштовано й ідентифікатор розширення додатка вказано в списку дозволених, користувачі зможуть вмикати цей додаток на заблокованому екрані. Якщо для правила вказано порожній список, на заблокованому екрані не можна буде робити нотатки. Навіть якщо в списку правила вказано ідентифікатор додатка, у деяких випадках користувачі все одно не зможуть вмикати його для створення нотаток на заблокованому екрані. Наприклад, платформа додатково обмежує набір доступних додатків для <ph name="PRODUCT_NAME" /> 61. - Якщо це правило не налаштовано, обмеження щодо додатків, які користувач може активувати на заблокованому екрані, не діють."</translation> + Якщо це правило не налаштовано, обмеження щодо додатків, які користувач може активувати на заблокованому екрані, не діють.</translation> <translation id="2761483219396643566">Затримка застереження через неактивність, коли використовується заряд акумулятора</translation> <translation id="2765601181281280493">Налаштувавши це правило, ви зможете вказати список шаблонів URL-адрес, що визначають сайти, яким заборонено запитувати дозвіл на доступ до послідовного порту. @@ -3436,7 +3436,7 @@ <translation id="6034341625190551415">Керує загальнодоступним сеансом і типами облікових записів термінала.</translation> <translation id="6034603289689965535">Дозволяє показувати спливаючу рекламу під час завантаження сторінки</translation> <translation id="6036523166753287175">Увімкнення обходу брандмауера з хосту віддаленого доступу</translation> -<translation id="603768430528561926">Якщо це правило ввімкнено або не налаштовано, користувачі пристроїв організації зможуть активувати пропозиції за допомогою реєстрації <ph name="PRODUCT_OS_NAME" />. +<translation id="603768430528561926">Якщо це правило ввімкнено або не налаштовано, користувачі пристроїв організації зможуть активувати пропозиції, реєструючи <ph name="PRODUCT_OS_NAME" />. Якщо це правило вимкнено, користувачі не зможуть активувати такі пропозиції.</translation> <translation id="6048199181629830227">Увімкнути керування живленням під час максимального навантаження</translation> @@ -3747,11 +3747,11 @@ Значення правила вказуються в мілісекундах. Крім того, вони не можуть перевищувати тривалість затримки через неактивність.</translation> <translation id="6506239283767807745">Це правило більше не підтримується. Натомість використовуйте правило <ph name="NOTE_TAKING_APPS_LOCK_SCREEN_ALLOWLIST" />. - За допомогою налаштувань цього правила можна вказати, які додатки користувачі можуть вмикати як додатки для створення нотаток на заблокованому екрані пристрою <ph name="PRODUCT_OS_NAME" />. + За допомогою цього правила можна створити список додатків, які користувачі можуть використовувати для нотаток на заблокованому екрані пристрою <ph name="PRODUCT_OS_NAME" />. - Якщо вибраний додаток розміщено на заблокованому екрані, на ньому ж відображатиметься елемент інтерфейсу для запуску додатка для створення нотаток. Коли додаток запущено, він може відкривати вікно вгорі заблокованого екрана та створювати нотатки в цьому контексті. Додаток може імпортувати створені нотатки в сеанс основного користувача, коли його розблокують. На заблокованому екрані підтримуються лише додатки <ph name="PRODUCT_NAME" /> для створення нотаток. + Якщо вибраний додаток дозволено використовувати, на заблокованому екрані відображатиметься елемент інтерфейсу для запуску додатка для створення нотаток. Після запуску додатка поверх заблокованого екрана з'явиться вікно для створення нотаток. Додаток може імпортувати створені нотатки в сеанс основного користувача, коли екран буде розблоковано. На заблокованому екрані підтримуються лише додатки <ph name="PRODUCT_NAME" /> для створення нотаток. - Якщо це правило налаштовано й у відповідному списку вказано ідентифікатор розширення додатка, користувачі зможуть вмикати цей додаток на заблокованому екрані. Тому, якщо для правила вказано порожній список, на заблокованому екрані не можна робити нотатки. Навіть якщо в списку правила вказано ідентифікатор додатка, у деяких випадках користувачі все одно не зможуть вмикати його як додаток для створення нотаток на заблокованому екрані. Наприклад, платформа додатково обмежує набір доступних додатків для <ph name="PRODUCT_NAME" /> 61. + Якщо це правило налаштовано й ідентифікатор розширення додатка вказано в списку дозволених, користувачі зможуть вмикати цей додаток на заблокованому екрані. Якщо для правила вказано порожній список, на заблокованому екрані не можна буде робити нотатки. Навіть якщо в списку правила вказано ідентифікатор додатка, у деяких випадках користувачі все одно не зможуть вмикати його для створення нотаток на заблокованому екрані. Наприклад, платформа додатково обмежує набір доступних додатків для <ph name="PRODUCT_NAME" /> 61. Якщо це правило не налаштовано, обмеження щодо додатків, які користувач може активувати на заблокованому екрані, не діють.</translation> <translation id="6506486086262398387">Якщо це правило ввімкнено, функція мережевих файлообмінників для <ph name="PRODUCT_OS_NAME" /> використовує за потреби NTLM для автентифікації у файлообмінниках SMB. Якщо це правило вимкнено, NTLM-автентифікацію у файлообмінниках SMB вимкнено.
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 083d76bd..be8c59e 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -1116,6 +1116,7 @@ Nếu bạn không đặt chính sách này, thì hệ thống sẽ không thêm trang web nào vào danh sách này. Lưu ý: Bạn cũng có thể thêm các thành phần vào danh sách này thông qua chính sách <ph name="USE_IE_SITELIST_POLICY_NAME" /> và <ph name="EXTERNAL_SITELIST_URL_POLICY_NAME" />.</translation> +<translation id="2640898752536996430">Đăng xuất người dùng.</translation> <translation id="264093234299818170">Tất cả máy in đều được hiển thị trừ những máy in trong danh sách chặn.</translation> <translation id="264252574246191885">Không công khai</translation> <translation id="2647069081229792812">Bật hoặc tắt tính năng chỉnh sửa dấu trang</translation> @@ -1446,6 +1447,7 @@ <translation id="3072847235228302527">Đặt Điều khoản dịch vụ cho một tài khoản cục bộ trên thiết bị</translation> <translation id="3086995894968271156">Định cấu hình Bộ thu Google Cast trong <ph name="PRODUCT_NAME" />.</translation> <translation id="3091832372132789233">Sạc pin cho những thiết bị chủ yếu kết nối với nguồn điện bên ngoài.</translation> +<translation id="309416443108680956">Chỉ rõ điều gì sẽ xảy ra khi người dùng đang xác thực qua một mã bảo mật (chẳng hạn như qua thẻ thông minh) xóa mã đó khi phiên xác thực đang diễn ra. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />: Không có điều gì xảy ra. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" />: Màn hình sẽ bị khóa cho đến khi người dùng xác thực lại. <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />: Phiên xác thực kết thúc và người dùng bị đăng xuất. Nếu bạn không đặt chính sách này, chính sách mặc định sẽ là <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />.</translation> <translation id="3096595567015595053">Danh sách plugin được kích hoạt</translation> <translation id="3101501961102569744">Chọn cách chỉ định cài đặt máy chủ proxy</translation> <translation id="3101709781009526431">Ngày và giờ</translation> @@ -1872,6 +1874,7 @@ Nếu bạn đặt chính sách này, người dùng sẽ không thể thay đổi loại trang chủ của họ trong <ph name="PRODUCT_NAME" />. Nếu bạn không đặt chính sách này, người dùng sẽ quyết định liệu trang Thẻ mới có phải là trang chủ của họ hay không. Trên <ph name="MS_WIN_NAME" />, chức năng này chỉ có ở những phiên bản liên kết với một miền <ph name="MS_AD_NAME" />, chạy trên Windows 10 Pro hoặc đã đăng ký <ph name="CHROME_BROWSER_CLOUSE_MANAGEMENT_NAME" />. Trên <ph name="MAC_OS_NAME" />, chức năng này chỉ có ở những phiên bản được quản lý qua MDM hoặc liên kết với một miền qua MCX.</translation> +<translation id="3695706037816556327">Hành động xóa mã bảo mật (chẳng hạn như thẻ thông minh) của <ph name="PRODUCT_OS_NAME" />.</translation> <translation id="3701121231485832347">Kiểm soát các tùy chọn cài đặt dành riêng cho các thiết bị <ph name="PRODUCT_OS_NAME" /> do <ph name="MS_AD_NAME" /> quản lý.</translation> <translation id="3702518095257671450">Chứng thực từ xa</translation> <translation id="3702647575225525306"><ph name="POLICY_NAME" /> (Trường một dòng không dùng nữa và sẽ bị xóa trong tương lai. Hãy bắt đầu sử dụng hộp văn bản nhiều dòng bên dưới.)</translation> @@ -1909,6 +1912,8 @@ Việc không đặt các chính sách này sẽ cho phép người dùng tự chọn cài đặt proxy.</translation> <translation id="3758249152301468420">Vô hiệu hóa công cụ dành cho nhà phát triển</translation> +<translation id="3760231600118073732">Khóa phiên xác thực hiện tại.</translation> +<translation id="3764097800332238572">Chính sách này chỉ có hiệu lực khi bạn đặt chính sách <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_POLICY_NAME" /> thành <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" /> hoặc <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" /> và khi người dùng tháo thẻ thông minh mà họ dùng để xác thực. Khi đó, chính sách này sẽ chỉ rõ số giây hiển thị một thông báo cho người dùng biết về hành động sắp diễn ra. Thông báo này đang chặn màn hình. Hành động sẽ chỉ diễn ra sau khi thông báo này hết hạn. Người dùng có thể ngăn hành động diễn ra bằng cách lắp lại thẻ thông minh trước khi thông báo hết hạn. Nếu bạn đặt chính sách này thành 0, sẽ không có thông báo nào hiển thị và hành động sẽ diễn ra ngay lập tức.</translation> <translation id="3765260570442823273">Thời lượng hiển thị thông điệp cảnh báo đăng xuất khi không hoạt động</translation> <translation id="377044054160169374">Thực thi can thiệp trải nghiệm lạm dụng</translation> <translation id="3780152581321609624">Bao gồm cổng không chuẩn trong Kerberos SPN</translation> @@ -3918,6 +3923,7 @@ <translation id="6672070613706645316">Cho phép người dùng tùy chỉnh nền trên trang Thẻ mới</translation> <translation id="6672630473862787247">Bật quy trình xác thực môi trường xung quanh trong các phiên khách, phiên thông thường và phiên ẩn danh.</translation> <translation id="6685903773201985073">Bật quy trình xác thực môi trường xung quanh trong các phiên khách và phiên thông thường.</translation> +<translation id="6689343802305995925">Không có hành động nào diễn ra.</translation> <translation id="6689792153960219308">Báo cáo trạng thái phần cứng</translation> <translation id="6690425645391461516">Tắt các tùy chọn kiểm tra chặn hệ thống tên miền (DNS); cho phép thanh thông tin "Ý của bạn là http://intranetsite/".</translation> <translation id="6698632841807204978">Bật chế độ in đen trắng</translation> @@ -4186,6 +4192,7 @@ Nếu bạn đặt chính sách này thành Tắt, thì <ph name="PRODUCT_NAME" /> sẽ đóng thẻ sau khi chuyển sang trình duyệt thay thế, ngay cả khi đó là thẻ cuối cùng. Điều này sẽ khiến cho <ph name="PRODUCT_NAME" /> thoát hoàn toàn.</translation> <translation id="7019805045859631636">Nhanh</translation> +<translation id="7026351325994257733">Cho phép đồng bộ hóa các cấu hình mạng Wi-Fi trên nhiều thiết bị <ph name="PRODUCT_OS_NAME" /> với một điện thoại Android đã kết nối.</translation> <translation id="7027785306666625591">Định cấu hình việc quản lý nguồn trong <ph name="PRODUCT_OS_NAME" />. Những chính sách này cho phép bạn định cấu hình cách <ph name="PRODUCT_OS_NAME" /> hoạt động khi người dùng duy trì chế độ rảnh trong một khoảng thời gian.</translation> @@ -4559,6 +4566,13 @@ – Nếu bạn đặt chính sách này thành Tắt, quản trị viên sẽ phải thông báo điều này cho người dùng cuối của thiết bị.</translation> <translation id="747275827471712187">Quay lại về hành vi <ph name="ATTRIBUTE_SAMESITE_NAME" /> cũ đối với cookie trên các trang web này</translation> +<translation id="7476621944304431784">Nếu bạn bật tùy chọn cài đặt này, thì người dùng sẽ được phép đồng bộ hóa các cấu hình mạng Wi-Fi giữa (các) thiết bị <ph name="PRODUCT_OS_NAME" /> và một điện thoại Android đã kết nối. Trước khi có thể đồng bộ hóa các cấu hình mạng Wi-Fi, người dùng phải chọn sử dụng tính năng này một cách rõ ràng bằng cách hoàn thành quy trình thiết lập. + + Nếu bạn tắt tùy chọn cài đặt này, người dùng sẽ không được phép đồng bộ hóa các cấu hình mạng Wi-Fi. + + Tính năng này tùy thuộc vào loại dữ liệu <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> đang được bật trong Chrome Sync. Nếu bạn tắt <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> trong chính sách <ph name="SYNC_TYPES_LIST_DISABLED_POLICY_NAME" /> hoặc tắt Chrome Sync trong chính sách <ph name="SYNC_DISABLED_POLICY_NAME" />, thì tính năng này sẽ không được bật. + + Nếu bạn không đặt chính sách này, thì người dùng được quản lý sẽ không được phép sử dụng tùy chọn mặc định.</translation> <translation id="7477231245051133709">Bật tính năng hỗ trợ tiếp cận về đơn âm</translation> <translation id="7477239290070847560">Đích giao thức dựa trên máy in tự động định cấu hình (mDNS + DNS-SD)</translation> <translation id="7485481791539008776">Quy tắc chọn máy in mặc định</translation> @@ -5796,6 +5810,7 @@ <translation id="9152473318295429890">Bật nội dung đề xuất theo ngữ cảnh của các trang web liên quan</translation> <translation id="9153446010242995516">Hạ cấp và tiếp tục sử dụng phiên bản đích nếu phiên bản hệ điều hành mới hơn phiên bản đích. Hãy tìm cách chuyển sang cấu hình cấp thiết bị (bao gồm cả thông tin truy cập mạng) thông qua quá trình hạ cấp nếu có thể, nhưng hãy thực hiện quá trình hạ cấp bằng chức năng powerwash đầy đủ ngay cả khi không thể khôi phục dữ liệu (vì phiên bản đích không hỗ trợ khôi phục dữ liệu hoặc do một sự thay đổi không tương thích ngược). Hỗ trợ trên <ph name="PRODUCT_OS_NAME" /> phiên bản 75 trở lên. Với các ứng dụng cũ, giá trị này nghĩa là khả năng hạ cấp đã bị tắt.</translation> +<translation id="9155218447258425310">Khoảng thời gian hiển thị thông báo về việc tháo thẻ thông minh của <ph name="PRODUCT_OS_NAME" />.</translation> <translation id="9155375380628728544">Nếu bạn đặt chính sách này, thì người dùng chỉ có thể thêm một trong các ngôn ngữ có trong chính sách này vào danh sách ngôn ngữ mà họ muốn dùng. Nếu bạn không đặt hoặc đặt chính sách này thành một danh sách trống, thì người dùng có thể chỉ định các ngôn ngữ mà họ muốn dùng.
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index 9e14e0c9..3dd539a 100644 --- a/components/policy/resources/policy_templates_zh-CN.xtb +++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -1086,6 +1086,7 @@ 如果您不设置此政策,系统不会将任何网站加入列表。 注意:系统也可通过 <ph name="USE_IE_SITELIST_POLICY_NAME" /> 和 <ph name="EXTERNAL_SITELIST_URL_POLICY_NAME" /> 政策向该列表添加元素。</translation> +<translation id="2640898752536996430">强制用户退出。</translation> <translation id="264093234299818170">显示除屏蔽名单所含打印机之外的所有打印机。</translation> <translation id="264252574246191885">不公开</translation> <translation id="2647069081229792812">启用或停用书签修改功能</translation> @@ -1417,6 +1418,7 @@ <translation id="3072847235228302527">为设备本地帐号设置服务条款</translation> <translation id="3086995894968271156">在 <ph name="PRODUCT_NAME" />中配置 Cast 接收器。</translation> <translation id="3091832372132789233">为主要连接到外部电源的设备的电池充电。</translation> +<translation id="309416443108680956">此政策用于指定:当通过安全令牌(例如使用智能卡)验证身份的用户在会话过程中移除该令牌时,会发生什么情况。<ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />:不会发生任何情况。<ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" />:屏幕会被锁定,直到用户重新验证身份为止。<ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />:会话会被结束,并且用户会被强制退出。如果此政策未设置,它将默认等同于已设为 <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />。</translation> <translation id="3096595567015595053">已启用插件的列表</translation> <translation id="3101501961102569744">选择如何指定代理服务器设置</translation> <translation id="3101709781009526431">日期和时间</translation> @@ -1829,6 +1831,7 @@ 如果您设置了此政策,用户将无法更改 <ph name="PRODUCT_NAME" /> 中的主页类型。如果您未设置此政策,用户便可自行决定是否使用“新标签页”页面作为主页。 在 <ph name="MS_WIN_NAME" /> 上,此功能仅适用于已加入 <ph name="MS_AD_NAME" /> 网域的实例、在 Windows 10 专业版上运行的实例,或已注册 <ph name="CHROME_BROWSER_CLOUSE_MANAGEMENT_NAME" />的实例。在 <ph name="MAC_OS_NAME" /> 上,此功能仅适用于通过 MDM 进行管理或通过 MCX 加入网域的实例。</translation> +<translation id="3695706037816556327">当用户从 <ph name="PRODUCT_OS_NAME" />设备上移除安全令牌(例如智能卡)时,系统会执行什么操作。</translation> <translation id="3701121231485832347">控制由 <ph name="MS_AD_NAME" /> 管理的 <ph name="PRODUCT_OS_NAME" />设备的专用设置。</translation> <translation id="3702518095257671450">远程证明</translation> <translation id="3702647575225525306"><ph name="POLICY_NAME" />(我们已弃用并将于日后移除单行字段。请开始使用下面的多行文本框。)</translation> @@ -1865,6 +1868,8 @@ 如果您未设置这些政策,用户将可以自行选择代理设置。</translation> <translation id="3758249152301468420">停用开发者工具</translation> +<translation id="3760231600118073732">锁定当前会话。</translation> +<translation id="3764097800332238572">仅当 <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_POLICY_NAME" /> 政策设为 <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" /> 或 <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />,并且通过智能卡验证身份的用户移除该卡时,此政策才会生效。通过设置此政策,您可指定旨在让用户知道系统即将执行的操作的通知应持续显示多少秒。此通知会遮住屏幕上的其他内容。仅当此通知显示完毕后,系统才会执行相应操作。用户只需在此通知显示完毕前重新插入智能卡,便能阻止系统执行该操作。如果此政策设为零,系统将不会显示任何通知,并且会立即执行该操作。</translation> <translation id="3765260570442823273">待机退出警告讯息的持续时间</translation> <translation id="377044054160169374">针对误导性体验的强制干预政策</translation> <translation id="3780152581321609624">在 Kerberos SPN 中加入非标准端口</translation> @@ -3854,6 +3859,7 @@ <translation id="6672070613706645316">允许用户在“新标签页”页面上自定义背景</translation> <translation id="6672630473862787247">为常规会话、无痕会话和访客会话启用静默身份验证。</translation> <translation id="6685903773201985073">为访客会话和常规会话启用静默身份验证。</translation> +<translation id="6689343802305995925">不执行任何操作。</translation> <translation id="6689792153960219308">报告硬件状态</translation> <translation id="6690425645391461516">停用 DNS 拦截检查功能;允许使用“您是不是要前往 http://intranetsite/?”信息栏。</translation> <translation id="6698632841807204978">启用单色打印</translation> @@ -4120,6 +4126,7 @@ 如果此政策已停用,当切换到备用浏览器后,<ph name="PRODUCT_NAME" /> 会关闭所含的标签页(即使仅剩下此标签页)。这会导致 <ph name="PRODUCT_NAME" /> 彻底关闭。</translation> <translation id="7019805045859631636">快</translation> +<translation id="7026351325994257733">允许在 <ph name="PRODUCT_OS_NAME" />设备和一部已连接的 Android 手机之间同步 Wi-Fi 网络配置。</translation> <translation id="7027785306666625591">配置<ph name="PRODUCT_OS_NAME" />中的电源管理设置。 这些政策可让您配置在用户停止操作一定时间后<ph name="PRODUCT_OS_NAME" />的行为。</translation> @@ -4484,6 +4491,13 @@ - 如果此政策已停用,管理员必须告知设备的最终用户。</translation> <translation id="747275827471712187">将这些网站上的 Cookie 恢复为旧版 <ph name="ATTRIBUTE_SAMESITE_NAME" /> 行为</translation> +<translation id="7476621944304431784">如果此设置已启用,用户将能够在其 <ph name="PRODUCT_OS_NAME" />设备和一部已连接的 Android 手机之间同步 Wi-Fi 网络配置。不过,用户必须通过完成一个设置流程来明确选择启用这项功能,才能同步 Wi-Fi 网络配置。 + + 如果此设置已停用,用户将无法同步 Wi-Fi 网络配置。 + + 这项功能有赖于在 Chrome 同步设置中启用 <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> 数据类型。如果 <ph name="SYNC_TYPES_LIST_DISABLED_POLICY_NAME" /> 政策已停用 <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" />,或者 <ph name="SYNC_DISABLED_POLICY_NAME" /> 政策已停用 Chrome 同步,系统将不会启用这项功能。 + + 如果此政策未设置,默认情况下,受管用户将无法使用这项功能。</translation> <translation id="7477231245051133709">启用“单声道音频”无障碍功能</translation> <translation id="7477239290070847560">基于 Zeroconf (mDNS + DNS-SD) 的协议目的地</translation> <translation id="7485481791539008776">默认打印机选择规则</translation> @@ -5674,6 +5688,7 @@ <translation id="9152473318295429890">允许根据上下文建议相关的网页</translation> <translation id="9153446010242995516">如果操作系统版本比目标版本新,则回滚到目标版本,并一直使用此版本。如果可能,会尝试通过回滚过程保留设备级配置(包括网络凭据),但即使无法恢复数据(因为目标版本不支持恢复数据,或因为发生了无法向后兼容的更改),也会通过执行完整的 Powerwash 操作进行回滚。 <ph name="PRODUCT_OS_NAME" /> 75 及更高版本均支持。对于旧版客户端,此值意味着禁用回滚。</translation> +<translation id="9155218447258425310">当用户从 <ph name="PRODUCT_OS_NAME" />设备上移除智能卡时,通知会持续显示多长时间。</translation> <translation id="9155375380628728544">如果您设置了此政策,用户只能将此政策所列出的语言之一添加到首选语言列表内。 如果此政策设为一个空列表或未设置,用户可将任何语言指定为首选语言。
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index e42cb9c9..23032a0d 100644 --- a/components/policy/resources/policy_templates_zh-TW.xtb +++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -616,7 +616,7 @@ <translation id="2030905906517501646">預設搜尋引擎關鍵字</translation> <translation id="203096360153626918">這項政策對 Android 應用程式沒有影響。即使將這項政策設為 <ph name="FALSE" />,Android 應用程式仍可進入全螢幕模式。</translation> <translation id="2036522553891755455">如果將這項政策設為啟用,共用檔案搜尋功能 (在 <ph name="PRODUCT_NAME" />上為「網路檔案共用」功能) 會使用 <ph name="NETBIOS_PROTOCOL" /> 搜尋網路上的共用檔案。如果設為停用,共用檔案搜尋功能就不會使用這項通訊協定搜尋共用檔案。 - 如果不設定這項政策,系統預設會為受管理的使用者停用政策觸發行為,並為其他使用者啟用相關行為。</translation> + 如果不設定這項政策,系統預設會為受管理的使用者停用此通訊協定,其他使用者則會設為啟用。</translation> <translation id="2037214548071298156">如果將這項政策設為啟用或不設定,已註冊的裝置會回報 CPU/RAM 使用量等硬體統計資料。 如果將這項政策設為停用,已註冊的裝置不會回報硬體統計資料。</translation> @@ -1038,8 +1038,8 @@ 只有在啟用「DefaultSearchProviderEnabled」政策時,系統才會遵循這項政策。</translation> <translation id="2567227673131796227">這項政策已遭淘汰,請改用「<ph name="NATIVE_MESSAGING_BLOCKLIST_POLICY_NAME" />」政策。 - 你可以透過這項政策,指定拒絕載入的內建訊息傳遞主機。如果將拒絕清單的值設為 <ph name="WILDCARD_VALUE" />,系統會拒絕所有內建訊息傳遞主機,但政策明確允許使用的主機除外。 - 如果不設定這項政策,<ph name="PRODUCT_NAME" /> 會載入所有已安裝的內建訊息傳遞主機。</translation> + 你可以透過這項政策,指定拒絕載入的原生訊息傳遞主機。如果將拒絕清單的值設為 <ph name="WILDCARD_VALUE" />,系統會拒絕所有原生訊息傳遞主機,但政策明確允許使用的主機除外。 + 如果不設定這項政策,<ph name="PRODUCT_NAME" /> 會載入所有已安裝的原生訊息傳遞主機。</translation> <translation id="2571066091915960923">啟用或停用資料壓縮 Proxy 功能,並且防止使用者變更這項設定。 只要你啟用或停用這項設定,使用者即無法變更或覆寫這項設定。 @@ -1081,6 +1081,7 @@ 如果未設定這項政策,系統不會將任何網站加入清單。 注意:系統也可以透過 <ph name="USE_IE_SITELIST_POLICY_NAME" /> 和 <ph name="EXTERNAL_SITELIST_URL_POLICY_NAME" /> 政策將元素加入這份清單。</translation> +<translation id="2640898752536996430">將使用者登出。</translation> <translation id="264093234299818170">系統會顯示所有印表機 (封鎖清單中的印表機除外)。</translation> <translation id="264252574246191885">不公開</translation> <translation id="2647069081229792812">允許或禁止編輯書籤</translation> @@ -1141,7 +1142,7 @@ 如果這項設定已停用,所有的網頁都無法使用 JavaScript,使用者也無法變更這項設定。 如果這項設定已啟用或並未指定,網頁就能使用 JavaScript,但使用者可以變更這項設定。</translation> -<translation id="2752046642026416564">如果將這項政策設為啟用或不設定,<ph name="PRODUCT_NAME" /> 將可使用安裝在使用者層級的內建訊息傳遞主機。 +<translation id="2752046642026416564">如果將這項政策設為啟用或不設定,<ph name="PRODUCT_NAME" /> 將可使用安裝在使用者層級的原生訊息傳遞主機。 如果設為停用,<ph name="PRODUCT_NAME" /> 只能使用安裝在系統層級的主機。</translation> <translation id="2753637905605932878">限制 WebRTC 所使用的本機 UDP 通訊埠範圍</translation> @@ -1408,6 +1409,7 @@ <translation id="3072847235228302527">為裝置本機帳戶設定《服務條款》</translation> <translation id="3086995894968271156">設定「<ph name="PRODUCT_NAME" />」的 Cast 接收器</translation> <translation id="3091832372132789233">對主要連線至外部電源的裝置進行充電。</translation> +<translation id="309416443108680956">指定當透過安全性權杖 (例如智慧型卡片) 驗證的使用者在工作階段中將該權杖移除時,系統要執行的動作。<ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />:不執行任何動作。<ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" />:鎖定螢幕,直到使用者再次驗證為止。<ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />:結束工作階段,並將使用者登出。如果不設定這項政策,系統會預設為 <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_IGNORE" />。</translation> <translation id="3096595567015595053">啟用的外掛程式清單</translation> <translation id="3101501961102569744">選擇如何指定 Proxy 伺服器設定</translation> <translation id="3101709781009526431">日期與時間</translation> @@ -1451,8 +1453,8 @@ 指定政策值時需以毫秒為單位。</translation> <translation id="3205825995289802549">首次執行時將第一個瀏覽器視窗最大化</translation> -<translation id="3210408472559816322">你可以透過這項政策,指定拒絕載入的內建訊息傳遞主機。如果將拒絕清單的值設為 <ph name="WILDCARD_VALUE" />,系統會拒絕所有內建訊息傳遞主機,但政策明確允許使用的主機除外。 - 如果不設定這項政策,<ph name="PRODUCT_NAME" /> 會載入所有已安裝的內建訊息傳遞主機。</translation> +<translation id="3210408472559816322">你可以透過這項政策,指定拒絕載入的原生訊息傳遞主機。如果將拒絕清單的值設為 <ph name="WILDCARD_VALUE" />,系統會拒絕所有原生訊息傳遞主機,但政策明確允許使用的主機除外。 + 如果不設定這項政策,<ph name="PRODUCT_NAME" /> 會載入所有已安裝的原生訊息傳遞主機。</translation> <translation id="3211426942294667684">瀏覽器登入設定</translation> <translation id="3219421230122020860">可使用無痕模式</translation> <translation id="3220624000494482595">如果資訊站應用程式是 Android 應用程式,即使將這項政策設為 <ph name="TRUE" />,仍無法控制 <ph name="PRODUCT_OS_NAME" />版本。</translation> @@ -1819,6 +1821,7 @@ 如果設定這項政策,使用者將無法在 <ph name="PRODUCT_NAME" /> 中變更首頁類型。如果未設定,使用者可決定是否使用「新分頁」做為首頁。 在 <ph name="MS_WIN_NAME" /> 上,這項功能僅適用於已加入 <ph name="MS_AD_NAME" /> 網域的執行個體、在 Windows 10 專業版上執行的執行個體,或是已註冊 <ph name="CHROME_BROWSER_CLOUSE_MANAGEMENT_NAME" />服務的執行個體。在 <ph name="MAC_OS_NAME" /> 上,這項功能僅適用於透過行動裝置管理 (MDM) 進行管理或透過 MCX 加入網域的執行個體。</translation> +<translation id="3695706037816556327">在 <ph name="PRODUCT_OS_NAME" />上移除安全性權杖 (例如智慧型卡片) 時,系統要執行的動作。</translation> <translation id="3701121231485832347">控管 <ph name="MS_AD_NAME" /> 管理的 <ph name="PRODUCT_OS_NAME" /> 裝置專屬設定。</translation> <translation id="3702518095257671450">遠端認證</translation> <translation id="3702647575225525306"><ph name="POLICY_NAME" /> (單行欄位已淘汰,日後將遭到移除。請開始使用下方的多行文字方塊。)</translation> @@ -1856,6 +1859,8 @@ 如未設定這些政策,使用者可自行選擇 Proxy 設定。</translation> <translation id="3758249152301468420">停用開發人員工具</translation> +<translation id="3760231600118073732">鎖定目前的工作階段。</translation> +<translation id="3764097800332238572">只有當 <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_POLICY_NAME" /> 政策設為 <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOCK" /> 或 <ph name="SECURITY_TOKEN_SESSION_BEHAVIOR_LOGOUT" />,且透過智慧型卡片驗證的使用者移除該智慧型卡片時,這項政策才會生效。這項政策會指定當系統通知使用者即將執行的動作時,通知要顯示幾秒。這項通知會遮住螢幕。系統會在這項通知到期後才執行動作。如要避免系統執行該動作,使用者可在通知到期之前重新插入智慧型卡片。如果將這項政策設為 0,則系統不會顯示通知,並會立即執行動作。</translation> <translation id="3765260570442823273">閒置登出時間警告訊息</translation> <translation id="377044054160169374">強制干預濫用行為</translation> <translation id="3780152581321609624">Kerberos SPN 包含非標準通訊埠</translation> @@ -3687,7 +3692,7 @@ 如果不設定這項政策,使用者可在螢幕鎖定畫面上啟用的應用程式組合就不會受到限制。</translation> <translation id="6506486086262398387">如果將這項政策設為啟用,<ph name="PRODUCT_OS_NAME" />的網路檔案共用功能會在必要時對 SMB 共用檔案使用 NTLM 驗證機制。如果設為停用,將會關閉 SMB 共用檔案的 NTLM 驗證機制。 - 如果不設定這項政策,系統預設會為受管理的使用者停用政策觸發行為,並為其他使用者啟用相關行為。</translation> + 如果不設定這項政策,系統預設會為受管理的使用者停用此機制,其他使用者則會設為啟用。</translation> <translation id="6515357889978918016"><ph name="PLUGIN_VM_NAME" /> 圖片</translation> <translation id="6518102411616460786">等待目標版本跟上版本降級</translation> <translation id="6520802717075138474">第一次執行時從預設瀏覽器匯入搜尋引擎</translation> @@ -3845,6 +3850,7 @@ <translation id="6672070613706645316">允許使用者自訂新分頁的背景</translation> <translation id="6672630473862787247">在一般工作階段、無痕模式工作階段和訪客工作階段中啟用背景驗證。</translation> <translation id="6685903773201985073">在訪客工作階段和一般工作階段中啟用背景驗證。</translation> +<translation id="6689343802305995925">不執行任何動作。</translation> <translation id="6689792153960219308">回報硬體狀態</translation> <translation id="6690425645391461516">停用 DNS 攔截檢查功能;允許你是不是要前往「http://intranetsite/」資訊列。</translation> <translation id="6698632841807204978">啟用單色列印</translation> @@ -4116,6 +4122,7 @@ 如果將這項政策設為停用,當 Chrome 分頁改以其他瀏覽器開啟後,<ph name="PRODUCT_NAME" /> 將關閉該分頁,即使該分頁是最後一個分頁也一樣。這會導致 <ph name="PRODUCT_NAME" /> 完全關閉。</translation> <translation id="7019805045859631636">快</translation> +<translation id="7026351325994257733">允許在搭載 <ph name="PRODUCT_OS_NAME" />的裝置和已連結的 Android 手機上,將 Wi-Fi 網路設定保持同步。</translation> <translation id="7027785306666625591">設定 <ph name="PRODUCT_OS_NAME" /> 的電源管理。 這些政策可讓你設定當使用者閒置一段時間後,要讓 <ph name="PRODUCT_OS_NAME" /> 採取的動作。</translation> @@ -4487,6 +4494,13 @@ - 如果停用這項政策,管理員必須告知裝置使用者。</translation> <translation id="747275827471712187">將這些網站上的 Cookie 還原成舊版的 <ph name="ATTRIBUTE_SAMESITE_NAME" /> 行為</translation> +<translation id="7476621944304431784">如果啟用這項設定,使用者將可在搭載 <ph name="PRODUCT_OS_NAME" />的裝置和已連結的 Android 手機上,將 Wi-Fi 網路設定保持同步。在同步 Wi-Fi 網路設定之前,使用者必須先完成設定流程以明確啟用這項功能。 + + 如果停用這項設定,使用者就無法同步 Wi-Fi 網路設定。 + + 這項功能取決於要啟用的 Chrome 同步功能中的 <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" /> 資料類型。如果在 <ph name="SYNC_TYPES_LIST_DISABLED_POLICY_NAME" /> 政策中停用 <ph name="WIFI_CONFIGURATIONS_DATATYPE_NAME" />,或是在 <ph name="SYNC_DISABLED_POLICY_NAME" /> 政策中停用 Chrome 同步功能,使用者將無法啟用這項功能。 + + 如果未設定這項政策,在預設情況下,受管理的使用者將無法使用這項功能。</translation> <translation id="7477231245051133709">啟用單聲道音訊無障礙功能</translation> <translation id="7477239290070847560">可支援無須調整設定 (mDNS 和 DNS-SD) 的通訊協定目的地</translation> <translation id="7485481791539008776">預設印表機選取規則</translation> @@ -5135,8 +5149,8 @@ <translation id="8417305981081876834">設定螢幕鎖定 PIN 碼的長度上限</translation> <translation id="841853753509411428">這項政策已遭淘汰,請改用「<ph name="NATIVE_MESSAGING_ALLOWLIST_POLICY_NAME" />」政策。 - 你可以透過這項政策,指定哪些內建訊息傳遞主機可不受拒絕清單影響。如果將拒絕清單的值設為 <ph name="WILDCARD_VALUE" />,系統會拒絕所有內建訊息傳遞主機,但政策明確允許使用的主機除外。 - 根據預設,系統會允許使用所有內建訊息傳遞主機,但如果政策拒絕了所有內建訊息傳遞主機,管理員可以使用允許清單修改該政策。</translation> + 你可以透過這項政策,指定哪些原生訊息傳遞主機可不受拒絕清單影響。如果將拒絕清單的值設為 <ph name="WILDCARD_VALUE" />,系統會拒絕所有原生訊息傳遞主機,但政策明確允許使用的主機除外。 + 根據預設,系統會允許使用所有原生訊息傳遞主機,但如果政策拒絕了所有原生訊息傳遞主機,管理員可以使用允許清單修改該政策。</translation> <translation id="841977920223099909">密碼保護警告觸發條件</translation> <translation id="8424255554404582727">設定畫面旋轉預設值 (每次重新啟動皆重新套用)</translation> <translation id="8426231401662877819">將畫面以順時針方向旋轉 90 度</translation> @@ -5353,8 +5367,8 @@ <translation id="8767743923206070405">如果將這項政策設為啟用,<ph name="PRODUCT_NAME" /> 的工具列上會顯示「首頁」按鈕。如果將這項政策設為停用,則不會顯示「首頁」按鈕。 如果設定這項政策,使用者將無法在 <ph name="PRODUCT_NAME" /> 中進行變更。如果未設定,使用者可選擇是否要顯示「首頁」按鈕。</translation> -<translation id="8768528324886802059">你可以透過這項政策,指定哪些內建訊息傳遞主機可不受拒絕清單影響。如果將拒絕清單的值設為 <ph name="WILDCARD_VALUE" />,系統會拒絕所有內建訊息傳遞主機,但政策明確允許使用的主機除外。 - 根據預設,系統會允許使用所有內建訊息傳遞主機,但如果政策拒絕了所有內建訊息傳遞主機,管理員可以使用允許清單修改該政策。</translation> +<translation id="8768528324886802059">你可以透過這項政策,指定哪些原生訊息傳遞主機可不受拒絕清單影響。如果將拒絕清單的值設為 <ph name="WILDCARD_VALUE" />,系統會拒絕所有原生訊息傳遞主機,但政策明確允許使用的主機除外。 + 根據預設,系統會允許使用所有原生訊息傳遞主機,但如果政策拒絕了所有原生訊息傳遞主機,管理員可以使用允許清單修改該政策。</translation> <translation id="877185520360032968">你可以透過這項政策,變更 Chrome 下載檔案時的預設目錄,但使用者可以自行變更目錄。 如果未設定這項政策,Chrome 會使用其平台專屬的預設目錄。 @@ -5678,6 +5692,7 @@ <translation id="9152473318295429890">允許根據目前網頁內容建議相關的網頁</translation> <translation id="9153446010242995516">如果 OS 版本比目標版本還新,則復原並維持在目標版本。系統會在版本復原過程中儘可能嘗試沿用網路憑證等裝置層級設定,但即使因故無法還原資料 (例如目標版本不支援還原資料,或變更內容與舊版不相容),系統仍會復原至目標版本,並執行完整的 Powerwash。 支援 <ph name="PRODUCT_OS_NAME" /> 75 以上版本。如果用戶端版本較舊,則這個值代表復原功能已停用。</translation> +<translation id="9155218447258425310">在 <ph name="PRODUCT_OS_NAME" />上移除智慧型卡片時,系統顯示通知的持續時間。</translation> <translation id="9155375380628728544">你可以透過這項政策,限定使用者只能將政策中列出的其中一種語言新增至慣用語言清單。 如果未設定或設為空白清單,使用者可以自行指定任何語言。
diff --git a/components/prerender/browser/prerender_manager.cc b/components/prerender/browser/prerender_manager.cc index 41f9898f..a2e50b3 100644 --- a/components/prerender/browser/prerender_manager.cc +++ b/components/prerender/browser/prerender_manager.cc
@@ -286,36 +286,6 @@ return GetPrerenderContents(web_contents); } -bool PrerenderManager::HasPrerenderedUrl( - GURL url, - content::WebContents* web_contents) const { - content::SessionStorageNamespace* session_storage_namespace = - web_contents->GetController().GetDefaultSessionStorageNamespace(); - - for (const auto& prerender_data : active_prerenders_) { - PrerenderContents* prerender_contents = prerender_data->contents(); - if (prerender_contents->Matches(url, session_storage_namespace)) - return true; - } - return false; -} - -bool PrerenderManager::HasPrerenderedAndFinishedLoadingUrl( - GURL url, - content::WebContents* web_contents) const { - content::SessionStorageNamespace* session_storage_namespace = - web_contents->GetController().GetDefaultSessionStorageNamespace(); - - for (const auto& prerender_data : active_prerenders_) { - PrerenderContents* prerender_contents = prerender_data->contents(); - if (prerender_contents->Matches(url, session_storage_namespace) && - prerender_contents->has_finished_loading()) { - return true; - } - } - return false; -} - PrerenderContents* PrerenderManager::GetPrerenderContents( const content::WebContents* web_contents) const { DCHECK_CURRENTLY_ON(BrowserThread::UI); @@ -348,19 +318,6 @@ return web_contents ? GetPrerenderContents(web_contents) : nullptr; } -PrerenderContents* PrerenderManager::GetPrerenderContentsForProcess( - int render_process_id) const { - DCHECK_CURRENTLY_ON(BrowserThread::UI); - for (auto& prerender_data : active_prerenders_) { - PrerenderContents* prerender_contents = prerender_data->contents(); - if (prerender_contents->GetRenderViewHost()->GetProcess()->GetID() == - render_process_id) { - return prerender_contents; - } - } - return nullptr; -} - std::vector<WebContents*> PrerenderManager::GetAllNoStatePrefetchingContentsForTesting() const { DCHECK_CURRENTLY_ON(BrowserThread::UI);
diff --git a/components/prerender/browser/prerender_manager.h b/components/prerender/browser/prerender_manager.h index 0a802c1..a3f934b 100644 --- a/components/prerender/browser/prerender_manager.h +++ b/components/prerender/browser/prerender_manager.h
@@ -177,17 +177,6 @@ bool IsWebContentsPrerendering( const content::WebContents* web_contents) const; - // Whether the PrerenderManager has an active prerender with the given url and - // SessionStorageNamespace associated with the given WebContents. - bool HasPrerenderedUrl(GURL url, content::WebContents* web_contents) const; - - // Whether the PrerenderManager has an active prerender with the given url and - // SessionStorageNamespace associated with the given WebContents, and that - // prerender has finished loading.. - bool HasPrerenderedAndFinishedLoadingUrl( - GURL url, - content::WebContents* web_contents) const; - // Returns the PrerenderContents object for the given web_contents, otherwise // returns NULL. Note that the PrerenderContents may have been Destroy()ed, // but not yet deleted. @@ -200,11 +189,6 @@ virtual PrerenderContents* GetPrerenderContentsForRoute(int child_id, int route_id) const; - // Returns the PrerenderContents object that is found in active prerenders to - // match the |render_process_id|. Otherwise returns a nullptr. - PrerenderContents* GetPrerenderContentsForProcess( - int render_process_id) const; - // Returns a list of all WebContents being prerendered. std::vector<content::WebContents*> GetAllPrerenderingContents() const;
diff --git a/components/services/app_service/app_service_impl.cc b/components/services/app_service/app_service_impl.cc index 2eb4a9c..6395f0e 100644 --- a/components/services/app_service/app_service_impl.cc +++ b/components/services/app_service/app_service_impl.cc
@@ -293,6 +293,20 @@ std::move(callback)); } +void AppServiceImpl::ExecuteContextMenuCommand(apps::mojom::AppType app_type, + const std::string& app_id, + int command_id, + const std::string& shortcut_id, + int64_t display_id) { + auto iter = publishers_.find(app_type); + if (iter == publishers_.end()) { + return; + } + + iter->second->ExecuteContextMenuCommand(app_id, command_id, shortcut_id, + display_id); +} + void AppServiceImpl::OpenNativeSettings(apps::mojom::AppType app_type, const std::string& app_id) { auto iter = publishers_.find(app_type);
diff --git a/components/services/app_service/app_service_impl.h b/components/services/app_service/app_service_impl.h index c87c7e6f2..a75d357 100644 --- a/components/services/app_service/app_service_impl.h +++ b/components/services/app_service/app_service_impl.h
@@ -89,6 +89,11 @@ apps::mojom::MenuType menu_type, int64_t display_id, GetMenuModelCallback callback) override; + void ExecuteContextMenuCommand(apps::mojom::AppType app_type, + const std::string& app_id, + int command_id, + const std::string& shortcut_id, + int64_t display_id) override; void OpenNativeSettings(apps::mojom::AppType app_type, const std::string& app_id) override; void AddPreferredApp(apps::mojom::AppType app_type,
diff --git a/components/services/app_service/public/cpp/publisher_base.cc b/components/services/app_service/public/cpp/publisher_base.cc index b401bac..54f85c6 100644 --- a/components/services/app_service/public/cpp/publisher_base.cc +++ b/components/services/app_service/public/cpp/publisher_base.cc
@@ -112,6 +112,13 @@ NOTIMPLEMENTED(); } +void PublisherBase::ExecuteContextMenuCommand(const std::string& app_id, + int command_id, + const std::string& shortcut_id, + int64_t display_id) { + NOTIMPLEMENTED(); +} + void PublisherBase::OpenNativeSettings(const std::string& app_id) { NOTIMPLEMENTED(); }
diff --git a/components/services/app_service/public/cpp/publisher_base.h b/components/services/app_service/public/cpp/publisher_base.h index d1a292df..51b3a745 100644 --- a/components/services/app_service/public/cpp/publisher_base.h +++ b/components/services/app_service/public/cpp/publisher_base.h
@@ -75,6 +75,10 @@ apps::mojom::MenuType menu_type, int64_t display_id, GetMenuModelCallback callback) override; + void ExecuteContextMenuCommand(const std::string& app_id, + int command_id, + const std::string& shortcut_id, + int64_t display_id) override; void OpenNativeSettings(const std::string& app_id) override; void OnPreferredAppSet( const std::string& app_id,
diff --git a/components/services/app_service/public/mojom/app_service.mojom b/components/services/app_service/public/mojom/app_service.mojom index 697db64..4e77639 100644 --- a/components/services/app_service/public/mojom/app_service.mojom +++ b/components/services/app_service/public/mojom/app_service.mojom
@@ -97,6 +97,14 @@ MenuType menu_type, int64 display_id) => (MenuItems menu_items); + // Executes the menu item command for an app with |app_id|. + ExecuteContextMenuCommand( + AppType app_type, + string app_id, + int32 command_id, + string shortcut_id, + int64 display_id); + // Opens native settings for the app with |app_id|. OpenNativeSettings( AppType app_type, @@ -192,6 +200,13 @@ MenuType menu_type, int64 display_id) => (MenuItems menu_items); + // Executes the menu item command for an app with |app_id|. + ExecuteContextMenuCommand( + string app_id, + int32 command_id, + string shortcut_id, + int64 display_id); + // Opens native settings for the app with |app_id|. OpenNativeSettings( string app_id);
diff --git a/components/services/app_service/public/mojom/types.mojom b/components/services/app_service/public/mojom/types.mojom index f327cf9..7392ec0 100644 --- a/components/services/app_service/public/mojom/types.mojom +++ b/components/services/app_service/public/mojom/types.mojom
@@ -237,7 +237,7 @@ // kRadio -> [command_id, string_id, radio_group_id]. // kSeparator -> [command_id]. // kSubmenu -> [command_id, string_id, submenu]. -// kArcCommand -> [command_id, shortcut_id, label, image]. +// kPublisherCommand -> [command_id, shortcut_id, label, image]. // struct MenuItems { array<MenuItem> items; @@ -260,7 +260,7 @@ kRadio, // Can be selected/checked among a group of choices. kSeparator, // Shows a horizontal line separator. kSubmenu, // Presents a submenu within another menu. - kArcCommand, // Performs an ARC shortcut action when selected. + kPublisherCommand, // Performs an app publisher shortcut action when selected. }; // Which component requests context menus, the app list or shelf.
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb index 8b445626..93280fec 100644 --- a/components/strings/components_strings_as.xtb +++ b/components/strings/components_strings_as.xtb
@@ -283,6 +283,7 @@ <translation id="204357726431741734">আপোনাৰ Google একাউণ্টত ষ্ট’ৰ হৈ থকা পাছৱৰ্ডসমূহ ব্যৱহাৰ কৰিবলৈ ছাইন ইন কৰক</translation> <translation id="2053111141626950936"><ph name="LANGUAGE" /> ভাষাৰ পৃষ্ঠাসমূহ অনুবাদ কৰা নহয়।</translation> <translation id="2053553514270667976">পিন ক’ড</translation> +<translation id="2054665754582400095">আপোনাৰ উপস্থিতি</translation> <translation id="2064691555167957331">{COUNT,plural, =1{১টা পৰামৰ্শ}one{#টা পৰামৰ্শ}other{#টা পৰামৰ্শ}}</translation> <translation id="2079545284768500474">আনডু কৰক</translation> <translation id="20817612488360358">ছিষ্টেম প্ৰক্সি ছেটিংসমূহ ব্যৱহাৰ কৰিবলৈ ছেট কৰা হৈছে কিন্তু ক্ষতিকাৰক প্ৰক্সি কনফিগাৰেশ্বনো নির্দিষ্ট কৰা হৈছে।</translation>
diff --git a/components/strings/components_strings_bn.xtb b/components/strings/components_strings_bn.xtb index 1e498ca..b546497 100644 --- a/components/strings/components_strings_bn.xtb +++ b/components/strings/components_strings_bn.xtb
@@ -909,6 +909,7 @@ <translation id="4597348597567598915">সাইজ ৮</translation> <translation id="4600854749408232102">C6/C5 (Envelope)</translation> <translation id="4628948037717959914">ফটো</translation> +<translation id="4631649115723685955">ক্যাশব্যাক অফার লিঙ্ক করা হয়েছে</translation> <translation id="464342062220857295">সার্চের ফিচার</translation> <translation id="4644670975240021822">রিভার্স অর্ডার, সামনের দিক নীচে</translation> <translation id="4646534391647090355">আমাকে এখনই সেখানে নিয়ে চলুন</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index 55355275..39e2efd 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb
@@ -279,6 +279,7 @@ <translation id="204357726431741734">Accede a tu Cuenta de Google para usar las contraseñas guardadas allí</translation> <translation id="2053111141626950936">No se traducirán las páginas en <ph name="LANGUAGE" />.</translation> <translation id="2053553514270667976">Código Postal</translation> +<translation id="2054665754582400095">Tu presencia</translation> <translation id="2064691555167957331">{COUNT,plural, =1{1 sugerencia}other{# sugerencias}}</translation> <translation id="2079545284768500474">Deshacer</translation> <translation id="20817612488360358">Se ha establecido la configuración de proxy del sistema, pero también se ha especificado una configuración explícita de proxy.</translation>
diff --git a/components/strings/components_strings_iw.xtb b/components/strings/components_strings_iw.xtb index 6650879..4489bc8e 100644 --- a/components/strings/components_strings_iw.xtb +++ b/components/strings/components_strings_iw.xtb
@@ -675,9 +675,9 @@ <translation id="3704162925118123524">ייתכן שתוצג דרישה להיכנס לדף ההתחברות של הרשת שבה אתה משתמש.</translation> <translation id="3704609568417268905"><ph name="TIME" /> <ph name="BOOKMARKED" /> <ph name="TITLE" /> <ph name="DOMAIN" /></translation> <translation id="3705189812819839667"><ph name="RESULT_OWNER" /> - <ph name="RESULT_PRODUCT_SOURCE" /></translation> -<translation id="370665806235115550">טוען...</translation> +<translation id="370665806235115550">בטעינה...</translation> <translation id="3709599264800900598">טקסט שהעתקת</translation> -<translation id="3711895659073496551">השהה</translation> +<translation id="3711895659073496551">השהיה</translation> <translation id="3712624925041724820">אין מספיק רישיונות</translation> <translation id="3714780639079136834">להפעיל את חבילת הגלישה או את ה-Wi-Fi</translation> <translation id="3715597595485130451">התחברות ל-Wi-Fi</translation> @@ -702,7 +702,7 @@ <translation id="3784372983762739446">מכשירי Bluetooth</translation> <translation id="3787705759683870569">תאריך תפוגה: <ph name="EXPIRATION_MONTH" />/<ph name="EXPIRATION_YEAR" /></translation> <translation id="3789155188480882154">גודל 16</translation> -<translation id="3789841737615482174">התקן</translation> +<translation id="3789841737615482174">התקנה</translation> <translation id="3793574014653384240">כמות הקריסות שאירעו לאחרונה והסיבות שהובילו לקריסות האלה</translation> <translation id="3797522431967816232">Prc3 (Envelope)</translation> <translation id="3799805948399000906">גופן שהתבקש</translation> @@ -873,7 +873,7 @@ <translation id="4432792777822557199">דפים ב<ph name="SOURCE_LANGUAGE" /> יתורגמו ל<ph name="TARGET_LANGUAGE" /> מעכשיו והלאה</translation> <translation id="4434045419905280838">חלונות קופצים והפניות אוטומטיות</translation> <translation id="4435702339979719576">Postcard)</translation> -<translation id="443673843213245140">השימוש בשרת Proxy הושבת, אך צויינה תצורת שרת Proxy מפורשת.</translation> +<translation id="443673843213245140">השימוש בשרת Proxy הושבת, אך צוינה תצורת שרת Proxy מפורשת.</translation> <translation id="4466881336512663640">השינויים בטופס יתבטלו. להמשיך?</translation> <translation id="4476953670630786061">הטופס הזה לא מאובטח. המילוי האוטומטי נכבה.</translation> <translation id="4477350412780666475">הטראק הבא</translation> @@ -1129,7 +1129,7 @@ <translation id="5492298309214877701">כתובת האתר הזה באינטראנט של החברה, הארגון או מוסד הלימודים, זהה לכתובת של אתר חיצוני. <ph name="LINE_BREAK" /> - נסה ליצור קשר עם מנהל המערכת.</translation> +יש לנסות ליצור קשר עם מנהל המערכת.</translation> <translation id="549333378215107354">גודל 3</translation> <translation id="5509762909502811065">B0</translation> <translation id="5509780412636533143">סימניות מנוהלות</translation> @@ -1378,7 +1378,7 @@ <translation id="6468485451923838994">גופנים</translation> <translation id="647261751007945333">מדיניות המכשיר</translation> <translation id="6476284679642588870">ניהול אמצעי תשלום</translation> -<translation id="6489534406876378309">התחל להעלות קריסות</translation> +<translation id="6489534406876378309">התחלת ההעלאה של קריסות</translation> <translation id="6499038740797743453">לאפס את הסיסמה?</translation> <translation id="6502991525169604759">ללא השינויים שלך</translation> <translation id="6508722015517270189">הפעלה מחדש של Chrome</translation> @@ -2016,7 +2016,7 @@ <translation id="9157595877708044936">מגדיר...</translation> <translation id="9158625974267017556">C6 (Envelope)</translation> <translation id="9168814207360376865">מתן הרשאה לאתרים לבדוק אם שמרת אמצעי תשלום</translation> -<translation id="9169664750068251925">חסום תמיד באתר זה</translation> +<translation id="9169664750068251925">אני רוצה לחסום תמיד באתר זה</translation> <translation id="9170848237812810038">&ביטול</translation> <translation id="9171296965991013597">לצאת מהאפליקציה?</translation> <translation id="9173282814238175921">מסמך יחיד/גיליון חדש</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb index ee7b317d..e2e4eb2 100644 --- a/components/strings/components_strings_ja.xtb +++ b/components/strings/components_strings_ja.xtb
@@ -898,6 +898,7 @@ <translation id="4597348597567598915">サイズ 8</translation> <translation id="4600854749408232102">C6 / C5(封筒)</translation> <translation id="4628948037717959914">写真</translation> +<translation id="4631649115723685955">キャッシュバックをリンクしました</translation> <translation id="464342062220857295">検索機能</translation> <translation id="4644670975240021822">逆の順序(下向き)</translation> <translation id="4646534391647090355">今すぐ表示</translation>
diff --git a/components/strings/components_strings_kn.xtb b/components/strings/components_strings_kn.xtb index 8c2a0ad..373c37e 100644 --- a/components/strings/components_strings_kn.xtb +++ b/components/strings/components_strings_kn.xtb
@@ -896,6 +896,7 @@ <translation id="4597348597567598915">ಗಾತ್ರ 8</translation> <translation id="4600854749408232102">C6/C5 (Envelope)</translation> <translation id="4628948037717959914">ಫೋಟೋ</translation> +<translation id="4631649115723685955">ಕ್ಯಾಶ್ಬ್ಯಾಕ್ ಲಿಂಕ್ ಮಾಡಲಾಗಿದೆ</translation> <translation id="464342062220857295">ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಹುಡುಕಿ</translation> <translation id="4644670975240021822">ಹಿಮ್ಮುಖ ಆರ್ಡರ್ ಮುಖ ಕೆಳಗೆ</translation> <translation id="4646534391647090355">ನನ್ನನ್ನು ಈಗ ಅಲ್ಲಿಗೆ ಕರೆದೊಯ್ಯಿರಿ</translation>
diff --git a/components/strings/components_strings_mr.xtb b/components/strings/components_strings_mr.xtb index 2a68cb1c..b03ae87 100644 --- a/components/strings/components_strings_mr.xtb +++ b/components/strings/components_strings_mr.xtb
@@ -305,9 +305,9 @@ <translation id="2130448033692577677">DnsOverHttpsMode धोरण सेट केले नसल्यामुळे तुम्ही नमूद केलेली टेम्पलेट कदाचित लागू केली जाऊ शकत नाहीत.</translation> <translation id="213826338245044447">Mobile बुकमार्क</translation> <translation id="214556005048008348">पेमेंट रद्द करा</translation> -<translation id="2147827593068025794">पार्श्वभूमी संकालन</translation> +<translation id="2147827593068025794">पार्श्वभूमी सिंक</translation> <translation id="2148613324460538318">कार्ड जोडा</translation> -<translation id="2154054054215849342">आपल्या डोमेनसाठी संकालन उपलब्ध नाही</translation> +<translation id="2154054054215849342">आपल्या डोमेनसाठी सिंक उपलब्ध नाही</translation> <translation id="2154484045852737596">कार्ड संपादित करा</translation> <translation id="2161656808144014275">मजकूर</translation> <translation id="2164510882479075877"><ph name="HOST_NAME" /> मध्ये टायपो आहे का ते तपासा.</translation> @@ -349,7 +349,7 @@ <translation id="2300306941146563769">अपलोड केला नाही</translation> <translation id="2310021320168182093">Chou2 (Envelope)</translation> <translation id="2316887270356262533">१ MB पेक्षा कमी जागा मोकळी करते. काही साइट तुमच्या पुढील भेटीच्या वेळी आणखी धीम्या गतीने लोड होऊ शकतात.</translation> -<translation id="2317259163369394535"><ph name="DOMAIN" /> साठी वापरकर्तानाव आणि पासवर्ड आवश्यक आहेत.</translation> +<translation id="2317259163369394535"><ph name="DOMAIN" /> साठी वापरकर्ता नाव आणि पासवर्ड आवश्यक आहेत.</translation> <translation id="2330137317877982892"><ph name="CREDIT_CARD" />, <ph name="EXPIRATION_DATE_ABBR" /> रोजी एक्स्पायर होईल</translation> <translation id="2337852623177822836">सेटिंग तुमच्या ॲडमिनिस्ट्रेटरने नियंत्रित केलेले आहे</translation> <translation id="2344028582131185878">स्वयंचलित डाउनलोड</translation> @@ -962,7 +962,7 @@ <translation id="4850886885716139402">पहा</translation> <translation id="4854362297993841467">ही वितरण पद्धत उपलब्ध नाही. वेगळी पद्धत वापरून पहा.</translation> <translation id="4876188919622883022">सिंप्लिफाइड व्ह्यू</translation> -<translation id="4876305945144899064">वापरकर्तानाव नाही</translation> +<translation id="4876305945144899064">वापरकर्ता नाव नाही</translation> <translation id="4877083676943085827">{COUNT,plural, =0{काहीही नाही}=1{<ph name="EXAMPLE_DOMAIN_1" />}=2{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />}other{<ph name="EXAMPLE_DOMAIN_1" />, <ph name="EXAMPLE_DOMAIN_2" />, <ph name="AND_MORE" />}}</translation> <translation id="4877422487531841831"><ph name="TEXT" /> शोधा</translation> <translation id="4879491255372875719">आपोआप (डीफॉल्ट)</translation> @@ -1301,7 +1301,7 @@ <translation id="6203231073485539293">तुमचे इंटरनेट कनेक्शन तपासा</translation> <translation id="6218753634732582820">Chromium वरून पत्ता काढून टाकायचा?</translation> <translation id="622039917539443112">समांतर फोल्ड</translation> -<translation id="6221345481584921695">Google सुरक्षित ब्राउझिंगला अलीकडे <ph name="SITE" /> वर <ph name="BEGIN_LINK" />मालवेअर आढळले आहे<ph name="END_LINK" />. सामान्यतः सुरक्षित असलेल्या वेबसाइट काहीवेळा मालवेअरमुळे संक्रमित झालेल्या असतात. एक ज्ञात मालवेअर वितरक असलेल्या, <ph name="SUBRESOURCE_HOST" /> कडून दुर्भावनापूर्ण सामग्री येते.</translation> +<translation id="6221345481584921695">Google सुरक्षित ब्राउझिंगला अलीकडे <ph name="SITE" /> वर <ph name="BEGIN_LINK" />मालवेअर आढळले आहे<ph name="END_LINK" />. सामान्यतः सुरक्षित असलेल्या वेबसाइट काहीवेळा मालवेअरमुळे संक्रमित झालेल्या असतात. एक ज्ञात मालवेअर वितरक असलेल्या, <ph name="SUBRESOURCE_HOST" /> कडून दुर्भावनापूर्ण आशय येते.</translation> <translation id="6234122620015464377">प्रत्येक दस्तऐवजानंतर ट्रिम करा</translation> <translation id="6240447795304464094">Google Pay लोगो</translation> <translation id="6241121617266208201">सूचना लपवा</translation> @@ -1357,7 +1357,7 @@ <translation id="6410264514553301377"><ph name="CREDIT_CARD" /> साठी कालबाह्यता तारीख आणि CVC प्रविष्ट करा</translation> <translation id="6415778972515849510">तुमच्या Google खात्याचे संरक्षण करण्यात आणि तुमचा पासवर्ड बदलण्यात Chromium तुम्हाला मदत करू शकते.</translation> <translation id="6423385022588644828">यापुढे टच आयडी वापरून तुमच्या कार्डांची जलद खात्री करा</translation> -<translation id="6425092077175753609">सामग्री</translation> +<translation id="6425092077175753609">आशय</translation> <translation id="6427730057873428458">गेट फोल्ड</translation> <translation id="6428450836711225518">तुमच्या फोन नंबरची पडताळणी करा</translation> <translation id="6433490469411711332">संपर्क माहिती संपादित करा</translation> @@ -1623,7 +1623,7 @@ <translation id="7538364083937897561">A2 (Envelope)</translation> <translation id="7542403920425041731">तुम्ही निश्चित केल्यावर, तुमचे कार्ड तपशील या साइटसह शेअर केले जातील.</translation> <translation id="7542995811387359312">स्वयंचलित क्रेडिट कार्ड भरणे अक्षम झाले आहे कारण हा फॉर्म सुरक्षित कनेक्शन वापरत नाही.</translation> -<translation id="7548892272833184391">कनेक्शन एरर दुरूस्त करा</translation> +<translation id="7548892272833184391">कनेक्शन एरर दुरुस्त करा</translation> <translation id="7549584377607005141">हे वेबपेज योग्यरितीने प्रदर्शित केले जाण्यासाठी तुम्ही पूर्वी एंटर केलेला डेटा आवश्यक आहे. तुम्ही हा डेटा पुन्हा पाठवू शकता, परंतु असे केल्याने या पेजने मागे केलेली कोणत्याही क्रियेची पुनरावृत्ती तुम्ही कराल.</translation> <translation id="7550637293666041147">तुमच्या डिव्हाइसचे वापरकर्ता नाव आणि Chrome चे वापरकर्ता नाव</translation> <translation id="7552846755917812628">खालील टिपा वापरून पहा:</translation> @@ -1864,7 +1864,7 @@ <translation id="8490137692873530638">स्टॅकर १०</translation> <translation id="8498891568109133222"><ph name="HOST_NAME" /> नी प्रतिसाद देण्यात बराच वेळ घेतला.</translation> <translation id="8503559462189395349">Chrome पासवर्ड</translation> -<translation id="8503813439785031346">वापरकर्तानाव</translation> +<translation id="8503813439785031346">वापरकर्ता नाव</translation> <translation id="8507227106804027148">कमांड लाइन</translation> <translation id="8508648098325802031">शोध आयकन</translation> <translation id="8522552481199248698">तुमच्या Google खात्याचे संरक्षण करण्यात आणि तुमचा पासवर्ड बदलण्यात Chrome तुम्हाला मदत करू शकते.</translation> @@ -1969,7 +1969,7 @@ <translation id="8989148748219918422"><ph name="ORGANIZATION" /> [<ph name="COUNTRY" />]</translation> <translation id="8996941253935762404">पुढे असणार्या साइटमध्ये हानिकारक प्रोग्राम आहेत</translation> <translation id="8997023839087525404">सर्व्हरने सर्टिफिकेट पारदर्शकता धोरणाचा वापर करून सार्वजनिकरत्या उघड न केलेले एक सर्टिफिकेट सादर केले. काही सर्टिफिकेट विश्वसनीय आहेत आणि हल्लेखोरांविरूद्ध संरक्षण करतात याची खात्री करण्यासाठी त्यांच्यासाठी ही एक आवश्यकता आहे.</translation> -<translation id="9001074447101275817">प्रॉक्सी <ph name="DOMAIN" /> ला वापरकर्तानाव आणि पासवर्ड आवश्यक आहेत.</translation> +<translation id="9001074447101275817">प्रॉक्सी <ph name="DOMAIN" /> ला वापरकर्ता नाव आणि पासवर्ड आवश्यक आहेत.</translation> <translation id="9004367719664099443">VR सेशन प्रगतीपथावर आहे</translation> <translation id="9005998258318286617">पीडीएफ दस्तऐवज लोड करण्यात अपयश आले.</translation> <translation id="9008201768610948239">दुर्लक्ष करा</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb index 070e9e9f..c1eb16d 100644 --- a/components/strings/components_strings_ne.xtb +++ b/components/strings/components_strings_ne.xtb
@@ -904,6 +904,7 @@ <translation id="4597348597567598915">आकार ८</translation> <translation id="4600854749408232102">C6/C5 (Envelope)</translation> <translation id="4628948037717959914">तस्बिर</translation> +<translation id="4631649115723685955">यो कार्डमार्फत भुक्तानी गर्दा क्यासब्याक पाइन्छ</translation> <translation id="464342062220857295">खोजसम्बन्धी सुविधाहरू</translation> <translation id="4644670975240021822">विपरीत क्रम तर तलतिर फर्काएर</translation> <translation id="4646534391647090355">मलाई अहिले नै त्यहाँ लैजानुहोस्</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb index ce5e2727..cca3548 100644 --- a/components/strings/components_strings_or.xtb +++ b/components/strings/components_strings_or.xtb
@@ -279,6 +279,7 @@ <translation id="204357726431741734">ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ସେଭ୍ କରାଯାଇଥିବା ପାସୱାର୍ଡଗୁଡ଼ିକ ବ୍ୟବହାର କରିବାକୁ ସାଇନ୍ ଇନ୍ କରନ୍ତୁ</translation> <translation id="2053111141626950936"><ph name="LANGUAGE" />ରେ ଥିବା ପୃଷ୍ଠାଗୁଡ଼ିକ ଅନୁବାଦ କରାଯିବ ନାହିଁ।</translation> <translation id="2053553514270667976">ZIP କୋଡ୍</translation> +<translation id="2054665754582400095">ଆପଣଙ୍କ ଉପସ୍ଥିତି</translation> <translation id="2064691555167957331">{COUNT,plural, =1{1ଟି ପରାମର୍ଶ}other{#ଟି ପରାମର୍ଶ}}</translation> <translation id="2079545284768500474">ପୂର୍ବବତ୍</translation> <translation id="20817612488360358">ସିଷ୍ଟମ୍ ପ୍ରକ୍ସି ସେଟିଂସ୍ ବ୍ୟବହାର କରିବା ପାଇଁ ପ୍ରସ୍ତୁତ ଅଛି କିନ୍ତୁ ଏକ ସୁନିର୍ଦ୍ଦିଷ୍ଟ ପ୍ରକ୍ସି କନ୍ଫିଗ୍ରେସନ୍ ମଧ୍ୟ ନିର୍ଦ୍ଦିଷ୍ଟ କରାଯାଇଛି।</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb index fbdf3e3d..a855056 100644 --- a/components/strings/components_strings_pa.xtb +++ b/components/strings/components_strings_pa.xtb
@@ -896,6 +896,7 @@ <translation id="4597348597567598915">ਆਕਾਰ 8</translation> <translation id="4600854749408232102">C6/C5 (ਲਿਫ਼ਾਫ਼ਾ)</translation> <translation id="4628948037717959914">ਫ਼ੋਟੋ</translation> +<translation id="4631649115723685955">ਕੈਸ਼ਬੈਕ ਨੂੰ ਲਿੰਕ ਕੀਤਾ ਗਿਆ</translation> <translation id="464342062220857295">'ਖੋਜ' ਦੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ</translation> <translation id="4644670975240021822">ਉਲਟੇ ਕ੍ਰਮ ਵਿੱਚ ਪਾਸਾ ਹੇਠਾਂ ਕੀਤੇ ਹੋਏ</translation> <translation id="4646534391647090355">ਮੈਨੂੰ ਹੁਣੇ ਉੱਥੇ ਲੈ ਜਾਓ</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb index 2c95b94..c9737f0 100644 --- a/components/strings/components_strings_ta.xtb +++ b/components/strings/components_strings_ta.xtb
@@ -283,6 +283,7 @@ <translation id="204357726431741734">உங்கள் Google கணக்கில் சேமிக்கப்பட்டுள்ள கடவுச்சொற்களைப் பயன்படுத்த உள்நுழைக</translation> <translation id="2053111141626950936"><ph name="LANGUAGE" /> மொழியில் உள்ள பக்கங்கள் மொழிபெயர்க்கப்படாது.</translation> <translation id="2053553514270667976">ஜிப் குறியீடு</translation> +<translation id="2054665754582400095">எனது செயல்பாடு</translation> <translation id="2064691555167957331">{COUNT,plural, =1{1 பரிந்துரை}other{# பரிந்துரைகள்}}</translation> <translation id="2079545284768500474">செயல்தவிர்</translation> <translation id="20817612488360358">கணினி ப்ராக்ஸி அமைப்புகள் பயன்படுத்த அமைக்கப்பட்டுள்ளது. வெளிப்படையான ப்ராக்ஸி உள்ளமைவும் குறிப்பிடப்பட்டுள்ளது.</translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb index 7b0ab35..1023bd43 100644 --- a/components/strings/components_strings_ur.xtb +++ b/components/strings/components_strings_ur.xtb
@@ -284,6 +284,7 @@ <translation id="204357726431741734">اپنے Google اکاؤنٹ میں محفوظ کردہ پاس ورڈز کا استعمال کرنے کے لئے سائن ان کریں</translation> <translation id="2053111141626950936"><ph name="LANGUAGE" /> کے صفحات کا ترجمہ نہیں کیا جائے گا۔</translation> <translation id="2053553514270667976">زپ کوڈ</translation> +<translation id="2054665754582400095">آپ کی موجودگی</translation> <translation id="2064691555167957331">{COUNT,plural, =1{1 تجویز}other{# تجاویز}}</translation> <translation id="2079545284768500474">کالعدم کریں</translation> <translation id="20817612488360358">سسٹم پراکسی کی ترتیبات استعمال کیے جانے کیلئے سیٹ ہیں لیکن ایک واضح پراکسی کنفیگریشن بھی متعین کی گئی ہے۔</translation>
diff --git a/components/sync/BUILD.gn b/components/sync/BUILD.gn index 2a72573d..d8d918aa 100644 --- a/components/sync/BUILD.gn +++ b/components/sync/BUILD.gn
@@ -67,8 +67,6 @@ "engine/shutdown_reason.cc", "engine/shutdown_reason.h", "engine/sync_auth_provider.h", - "engine/sync_backend_registrar.cc", - "engine/sync_backend_registrar.h", "engine/sync_credentials.h", "engine/sync_encryption_handler.h", "engine/sync_engine.cc", @@ -427,7 +425,6 @@ "driver/sync_user_settings_unittest.cc", "engine/cycle/sync_cycle_snapshot_unittest.cc", "engine/net/http_bridge_unittest.cc", - "engine/sync_backend_registrar_unittest.cc", "engine_impl/backoff_delay_provider_unittest.cc", "engine_impl/bookmark_update_preprocessing_unittest.cc", "engine_impl/cancelation_signal_unittest.cc", @@ -511,8 +508,6 @@ "//components/sync/driver:test_support", "//components/sync/invalidations:test_support", "//components/sync/js:test_support", - "//components/sync_preferences", - "//components/sync_preferences:test_support", "//components/version_info", "//components/version_info:generate_version_info", "//components/version_info:version_string",
diff --git a/components/sync/base/DEPS b/components/sync/base/DEPS index e1441b2..aee546f 100644 --- a/components/sync/base/DEPS +++ b/components/sync/base/DEPS
@@ -5,7 +5,6 @@ "+components/pref_registry", "+components/prefs", "+components/sync/protocol", - "+components/sync_preferences", "+third_party/zlib", # For UniquePosition compression "+net", "+ui/base",
diff --git a/components/sync/base/sync_prefs.cc b/components/sync/base/sync_prefs.cc index 26b5489..1b045316 100644 --- a/components/sync/base/sync_prefs.cc +++ b/components/sync/base/sync_prefs.cc
@@ -16,7 +16,7 @@ #include "base/rand_util.h" #include "base/strings/string_number_conversions.h" #include "base/values.h" -#include "components/pref_registry/pref_registry_syncable.h" +#include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_service.h" #include "components/sync/base/pref_names.h" #include "components/sync/base/user_selectable_type.h" @@ -108,7 +108,7 @@ kSyncUserConsents}; } -void RegisterObsoleteUserTypePrefs(user_prefs::PrefRegistrySyncable* registry) { +void RegisterObsoleteUserTypePrefs(PrefRegistrySimple* registry) { for (const std::string& obsolete_pref : GetObsoleteUserTypePrefs()) { registry->RegisterBooleanPref(obsolete_pref, false); } @@ -148,8 +148,7 @@ } // static -void SyncPrefs::RegisterProfilePrefs( - user_prefs::PrefRegistrySyncable* registry) { +void SyncPrefs::RegisterProfilePrefs(PrefRegistrySimple* registry) { // Actual user-controlled preferences. registry->RegisterBooleanPref(prefs::kSyncFirstSetupComplete, false); registry->RegisterBooleanPref(prefs::kSyncRequested, false); @@ -497,9 +496,8 @@ } // static -void SyncPrefs::RegisterTypeSelectedPref( - user_prefs::PrefRegistrySyncable* registry, - UserSelectableType type) { +void SyncPrefs::RegisterTypeSelectedPref(PrefRegistrySimple* registry, + UserSelectableType type) { const char* pref_name = GetPrefNameForType(type); DCHECK(pref_name); registry->RegisterBooleanPref(pref_name, false);
diff --git a/components/sync/base/sync_prefs.h b/components/sync/base/sync_prefs.h index 5010a54..c98b5fa 100644 --- a/components/sync/base/sync_prefs.h +++ b/components/sync/base/sync_prefs.h
@@ -23,12 +23,9 @@ #include "components/sync/base/user_selectable_type.h" #include "components/sync/protocol/sync.pb.h" +class PrefRegistrySimple; class PrefService; -namespace user_prefs { -class PrefRegistrySyncable; -} - namespace syncer { class SyncPrefObserver { @@ -67,7 +64,7 @@ explicit SyncPrefs(PrefService* pref_service); ~SyncPrefs() override; - static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); + static void RegisterProfilePrefs(PrefRegistrySimple* registry); void AddSyncPrefObserver(SyncPrefObserver* sync_pref_observer); void RemoveSyncPrefObserver(SyncPrefObserver* sync_pref_observer); @@ -197,7 +194,7 @@ bool IsLocalSyncEnabled() const; private: - static void RegisterTypeSelectedPref(user_prefs::PrefRegistrySyncable* prefs, + static void RegisterTypeSelectedPref(PrefRegistrySimple* prefs, UserSelectableType type); void OnSyncManagedPrefChanged();
diff --git a/components/sync/base/sync_prefs_unittest.cc b/components/sync/base/sync_prefs_unittest.cc index f4b1bebe..a1b7ec9 100644 --- a/components/sync/base/sync_prefs_unittest.cc +++ b/components/sync/base/sync_prefs_unittest.cc
@@ -11,11 +11,11 @@ #include "base/test/task_environment.h" #include "base/time/time.h" #include "components/prefs/pref_notifier_impl.h" +#include "components/prefs/pref_registry_simple.h" #include "components/prefs/pref_value_store.h" #include "components/prefs/testing_pref_service.h" #include "components/sync/base/pref_names.h" #include "components/sync/base/user_selectable_type.h" -#include "components/sync_preferences/testing_pref_service_syncable.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -39,7 +39,7 @@ } base::test::SingleThreadTaskEnvironment task_environment_; - sync_preferences::TestingPrefServiceSyncable pref_service_; + TestingPrefServiceSimple pref_service_; std::unique_ptr<SyncPrefs> sync_prefs_; }; @@ -311,7 +311,7 @@ } base::test::SingleThreadTaskEnvironment task_environment_; - sync_preferences::TestingPrefServiceSyncable pref_service_; + TestingPrefServiceSimple pref_service_; }; TEST_F(SyncPrefsMigrationTest, SyncSuppressed_NotSet) {
diff --git a/components/sync/driver/BUILD.gn b/components/sync/driver/BUILD.gn index 918ea73..85cb000 100644 --- a/components/sync/driver/BUILD.gn +++ b/components/sync/driver/BUILD.gn
@@ -159,6 +159,7 @@ deps = [ "//components/invalidation/impl:test_support", "//components/pref_registry", + "//components/prefs:test_support", "//components/signin/public/base", "//components/signin/public/identity_manager:test_support", "//components/sync", @@ -166,7 +167,6 @@ "//components/sync:test_support_model", "//components/sync/driver", "//components/sync/invalidations:test_support", - "//components/sync_preferences:test_support", "//components/version_info", "//components/version_info:generate_version_info", "//google_apis",
diff --git a/components/sync/driver/DEPS b/components/sync/driver/DEPS index 7c7265e..f639be6 100644 --- a/components/sync/driver/DEPS +++ b/components/sync/driver/DEPS
@@ -18,7 +18,6 @@ "+components/sync/nigori", "+components/sync/protocol", "+components/sync/test", - "+components/sync_preferences", "+net", "+policy", "+services/network/public/cpp",
diff --git a/components/sync/driver/data_type_manager_impl.cc b/components/sync/driver/data_type_manager_impl.cc index aede22a..dbc8477 100644 --- a/components/sync/driver/data_type_manager_impl.cc +++ b/components/sync/driver/data_type_manager_impl.cc
@@ -644,7 +644,6 @@ params->reason = last_requested_context_.reason; params->enabled_types = enabled_types; - params->disabled_types = disabled_types; params->to_download = types_to_download; params->to_purge = types_to_purge; params->ready_task = base::BindOnce(&DataTypeManagerImpl::DownloadCompleted, @@ -743,8 +742,7 @@ } } -void DataTypeManagerImpl::OnModelAssociationDone( - const DataTypeManager::ConfigureResult& result) { +void DataTypeManagerImpl::OnModelAssociationDone(const ModelTypeSet& types) { DCHECK(state_ == STOPPING || state_ == CONFIGURING); if (state_ == STOPPING) @@ -756,17 +754,12 @@ return; } - if (result.status == ABORTED) { - Abort(result.status); - return; - } - - DCHECK(result.status == OK); DCHECK(!association_types_queue_.empty()); // If this model association was for the full set of types, then this priority // set is done. Otherwise it was just the ready types and the unready types // still need to be associated. + ConfigureResult result(OK, types); if (result.requested_types == association_types_queue_.front().types) { association_types_queue_.pop(); if (!association_types_queue_.empty()) {
diff --git a/components/sync/driver/data_type_manager_impl.h b/components/sync/driver/data_type_manager_impl.h index 65e2357..c31c710 100644 --- a/components/sync/driver/data_type_manager_impl.h +++ b/components/sync/driver/data_type_manager_impl.h
@@ -58,8 +58,7 @@ // |ModelAssociationManagerDelegate| implementation. void OnAllDataTypesReadyForConfigure() override; void OnSingleDataTypeAssociationDone(ModelType type) override; - void OnModelAssociationDone( - const DataTypeManager::ConfigureResult& result) override; + void OnModelAssociationDone(const ModelTypeSet& types) override; void OnSingleDataTypeWillStop(ModelType type, const SyncError& error) override;
diff --git a/components/sync/driver/data_type_manager_impl_unittest.cc b/components/sync/driver/data_type_manager_impl_unittest.cc index df5a6a58..a124beff 100644 --- a/components/sync/driver/data_type_manager_impl_unittest.cc +++ b/components/sync/driver/data_type_manager_impl_unittest.cc
@@ -198,16 +198,6 @@ custom_priority_types_ = priority_types; } - DataTypeManager::ConfigureResult configure_result() const { - return configure_result_; - } - - void OnModelAssociationDone( - const DataTypeManager::ConfigureResult& result) override { - configure_result_ = result; - DataTypeManagerImpl::OnModelAssociationDone(result); - } - void set_downloaded_types(ModelTypeSet downloaded_types) { downloaded_types_ = downloaded_types; } @@ -218,8 +208,7 @@ } private: - ModelTypeSet custom_priority_types_ = ModelTypeSet(); - DataTypeManager::ConfigureResult configure_result_; + ModelTypeSet custom_priority_types_; }; // The actual test harness class, parametrized on nigori state (i.e., tests are
diff --git a/components/sync/driver/glue/sync_engine_backend.cc b/components/sync/driver/glue/sync_engine_backend.cc index 41d83d9..8bc5a596 100644 --- a/components/sync/driver/glue/sync_engine_backend.cc +++ b/components/sync/driver/glue/sync_engine_backend.cc
@@ -25,7 +25,6 @@ #include "components/sync/engine/engine_components_factory.h" #include "components/sync/engine/events/protocol_event.h" #include "components/sync/engine/net/http_post_provider_factory.h" -#include "components/sync/engine/sync_backend_registrar.h" #include "components/sync/engine/sync_manager.h" #include "components/sync/engine/sync_manager_factory.h" #include "components/sync/invalidations/switches.h" @@ -127,21 +126,12 @@ LoadAndConnectNigoriController(); - // Before proceeding any further, we need to download the control types and - // purge any partial data (ie. data downloaded for a type that was on its way - // to being initially synced, but didn't quite make it.). The following - // configure cycle will take care of this. It depends on the registrar state - // which we initialize below to ensure that we don't perform any downloads if - // all control types have already completed their initial sync. - registrar_->SetInitialTypes(sync_manager_->InitialSyncEndedTypes()); - ConfigureReason reason = sync_manager_->InitialSyncEndedTypes().Empty() ? CONFIGURE_REASON_NEW_CLIENT : CONFIGURE_REASON_NEWLY_ENABLED_DATA_TYPE; - ModelTypeSet new_control_types = registrar_->ConfigureDataTypes( - /*types_to_add=*/ControlTypes(), - /*types_to_remove=*/ModelTypeSet()); + ModelTypeSet new_control_types = + Difference(ControlTypes(), sync_manager_->InitialSyncEndedTypes()); SDVLOG(1) << "Control Types " << ModelTypeSetToString(new_control_types) << " added; calling ConfigureSyncer"; @@ -261,10 +251,6 @@ authenticated_account_id_ = params.authenticated_account_id; - DCHECK(!registrar_); - DCHECK(params.registrar); - registrar_ = std::move(params.registrar); - auto nigori_processor = std::make_unique<NigoriModelTypeProcessor>(); nigori_controller_ = std::make_unique<ModelTypeController>( NIGORI, std::make_unique<ForwardingModelTypeControllerDelegate>( @@ -362,7 +348,7 @@ host_.Call( FROM_HERE, &SyncEngineImpl::HandleInitializationSuccessOnFrontendLoop, - registrar_->GetLastConfiguredTypes(), js_backend_, debug_info_listener_, + sync_manager_->GetEnabledTypes(), js_backend_, debug_info_listener_, base::Passed(sync_manager_->GetModelTypeConnectorProxy()), sync_manager_->birthday(), sync_manager_->bag_of_chips()); @@ -402,8 +388,6 @@ } DoDestroySyncManager(); - registrar_ = nullptr; - if (reason == DISABLE_SYNC) { DeleteLegacyDirectoryFilesAndNigoriStorage(sync_data_folder_); } @@ -441,8 +425,6 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); DCHECK(!params.ready_task.is_null()); - registrar_->ConfigureDataTypes(params.enabled_types, params.disabled_types); - base::OnceClosure chained_ready_task( base::BindOnce(&SyncEngineBackend::DoFinishConfigureDataTypes, weak_ptr_factory_.GetWeakPtr(), params.to_download, @@ -461,7 +443,8 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); // Update the enabled types for the bridge and sync manager. - ModelTypeSet enabled_types = registrar_->GetTypesWithRoutingInfo(); + // TODO(crbug.com/1140938): track |enabled_types| directly in SyncEngineImpl. + ModelTypeSet enabled_types = sync_manager_->GetEnabledTypes(); enabled_types.RemoveAll(ProxyTypes()); const ModelTypeSet failed_configuration_types =
diff --git a/components/sync/driver/glue/sync_engine_backend.h b/components/sync/driver/glue/sync_engine_backend.h index 4188bc2..def6a2d 100644 --- a/components/sync/driver/glue/sync_engine_backend.h +++ b/components/sync/driver/glue/sync_engine_backend.h
@@ -23,6 +23,7 @@ #include "components/sync/engine/model_type_configurer.h" #include "components/sync/engine/shutdown_reason.h" #include "components/sync/engine/sync_encryption_handler.h" +#include "components/sync/engine/sync_manager.h" #include "components/sync/engine/sync_status_observer.h" #include "components/sync/engine_impl/cancelation_signal.h" #include "url/gurl.h" @@ -173,9 +174,6 @@ // Our parent SyncEngineImpl. WeakHandle<SyncEngineImpl> host_; - // Non-null only between calls to DoInitialize() and DoShutdown(). - std::unique_ptr<SyncBackendRegistrar> registrar_; - // Our encryptor, which uses Chrome's encryption functions. SystemEncryptor encryptor_;
diff --git a/components/sync/driver/glue/sync_engine_impl.cc b/components/sync/driver/glue/sync_engine_impl.cc index f1e31ce1..00b5c253 100644 --- a/components/sync/driver/glue/sync_engine_impl.cc +++ b/components/sync/driver/glue/sync_engine_impl.cc
@@ -26,7 +26,6 @@ #include "components/sync/engine/engine_components_factory_impl.h" #include "components/sync/engine/events/protocol_event.h" #include "components/sync/engine/net/http_bridge.h" -#include "components/sync/engine/sync_backend_registrar.h" #include "components/sync/engine/sync_engine_host.h" #include "components/sync/engine/sync_manager_factory.h" #include "components/sync/engine/sync_string_conversions.h" @@ -59,15 +58,12 @@ SyncEngineImpl::~SyncEngineImpl() { DCHECK(!backend_ && !host_) << "Must call Shutdown before destructor."; - DCHECK(!registrar_); } void SyncEngineImpl::Initialize(InitParams params) { DCHECK(params.host); - DCHECK(params.registrar); host_ = params.host; - registrar_ = params.registrar.get(); sync_task_runner_->PostTask( FROM_HERE, base::BindOnce(&SyncEngineBackend::DoInitialize, backend_, @@ -193,9 +189,7 @@ model_type_connector_.reset(); - // Shut down and destroy SyncManager. SyncManager holds a pointer to - // |registrar_| so its destruction must be sequenced before the destruction of - // |registrar_|. + // Shut down and destroy SyncManager. sync_task_runner_->PostTask( FROM_HERE, base::BindOnce(&SyncEngineBackend::DoShutdown, backend_, reason)); @@ -203,8 +197,6 @@ // Ensure that |backend_| destroyed inside Sync sequence, not inside current // one. sync_task_runner_->ReleaseSoon(FROM_HERE, std::move(backend_)); - DCHECK(!backend_); - registrar_ = nullptr; } void SyncEngineImpl::ConfigureDataTypes(ConfigureParams params) { @@ -219,9 +211,6 @@ void SyncEngineImpl::ActivateDataType( ModelType type, std::unique_ptr<DataTypeActivationResponse> activation_response) { - registrar_->RegisterDataType(type); - if (activation_response->model_type_state.initial_sync_done()) - registrar_->AddRestoredDataType(type); model_type_connector_->ConnectDataType(type, std::move(activation_response)); }
diff --git a/components/sync/driver/glue/sync_engine_impl.h b/components/sync/driver/glue/sync_engine_impl.h index 631dfeb..ea233d1 100644 --- a/components/sync/driver/glue/sync_engine_impl.h +++ b/components/sync/driver/glue/sync_engine_impl.h
@@ -24,10 +24,12 @@ #include "components/sync/base/model_type.h" #include "components/sync/base/weak_handle.h" #include "components/sync/engine/configure_reason.h" +#include "components/sync/engine/connection_status.h" #include "components/sync/engine/cycle/sync_cycle_snapshot.h" #include "components/sync/engine/model_type_configurer.h" #include "components/sync/engine/sync_credentials.h" #include "components/sync/engine/sync_engine.h" +#include "components/sync/engine/sync_status.h" #include "components/sync/invalidations/invalidations_listener.h" #include "components/sync/protocol/encryption.pb.h" #include "components/sync/protocol/sync_protocol_error.h" @@ -38,7 +40,10 @@ namespace syncer { -class SyncBackendRegistrar; +class DataTypeDebugInfoListener; +class JsBackend; +class ModelTypeConnector; +class ProtocolEvent; class SyncEngineBackend; class SyncInvalidationsService; class SyncPrefs; @@ -186,9 +191,6 @@ // out in StopSyncingForShutdown(). SyncEngineHost* host_ = nullptr; - // A pointer to the registrar; owned by |backend_|. - SyncBackendRegistrar* registrar_ = nullptr; - invalidation::InvalidationService* invalidator_ = nullptr; bool invalidation_handler_registered_ = false;
diff --git a/components/sync/driver/glue/sync_engine_impl_unittest.cc b/components/sync/driver/glue/sync_engine_impl_unittest.cc index c7f2de3..b5e3081 100644 --- a/components/sync/driver/glue/sync_engine_impl_unittest.cc +++ b/components/sync/driver/glue/sync_engine_impl_unittest.cc
@@ -31,6 +31,7 @@ #include "components/invalidation/public/invalidation_service.h" #include "components/invalidation/public/invalidation_util.h" #include "components/invalidation/public/invalidator_state.h" +#include "components/prefs/testing_pref_service.h" #include "components/sync/base/invalidation_helper.h" #include "components/sync/base/model_type.h" #include "components/sync/base/sync_prefs.h" @@ -44,8 +45,6 @@ #include "components/sync/invalidations/sync_invalidations_service.h" #include "components/sync/protocol/sync_invalidations_payload.pb.h" #include "components/sync/test/callback_counter.h" -#include "components/sync_preferences/pref_service_syncable.h" -#include "components/sync_preferences/testing_pref_service_syncable.h" #include "services/network/public/cpp/shared_url_loader_factory.h" #include "services/network/test/test_network_connection_tracker.h" #include "testing/gmock/include/gmock/gmock.h" @@ -237,7 +236,6 @@ SyncEngine::InitParams params; params.host = &host_; - params.registrar = std::make_unique<SyncBackendRegistrar>(std::string()); params.http_factory_getter = base::BindOnce(&CreateHttpBridgeFactory); params.authenticated_account_id = CoreAccountId("account_id"); params.sync_manager_factory = std::move(fake_manager_factory_); @@ -264,7 +262,6 @@ ModelTypeConfigurer::ConfigureParams params; params.reason = CONFIGURE_REASON_RECONFIGURATION; params.enabled_types = Difference(enabled_types_, unready_types); - params.disabled_types = Union(disabled_types, unready_types); params.to_download = Difference(params.enabled_types, engine_types_); if (!params.to_download.Empty()) { params.to_download.Put(NIGORI); @@ -309,7 +306,7 @@ base::test::TaskEnvironment task_environment_; base::ScopedTempDir temp_dir_; - sync_preferences::TestingPrefServiceSyncable pref_service_; + TestingPrefServiceSimple pref_service_; TestSyncEngineHost host_; std::unique_ptr<SyncPrefs> sync_prefs_; std::unique_ptr<SyncEngineImpl> backend_;
diff --git a/components/sync/driver/model_association_manager.cc b/components/sync/driver/model_association_manager.cc index c790598..c7c9c2a 100644 --- a/components/sync/driver/model_association_manager.cc +++ b/components/sync/driver/model_association_manager.cc
@@ -56,7 +56,6 @@ : controllers_(controllers), delegate_(processor), state_(IDLE), - configure_status_(DataTypeManager::UNKNOWN), notified_about_ready_for_configure_(false) {} ModelAssociationManager::~ModelAssociationManager() = default; @@ -199,17 +198,12 @@ DVLOG(1) << "Starting association for " << ModelTypeSetToString(types_to_associate); - requested_types_ = types_to_associate; - ModelTypeSet associating_types = types_to_associate; associating_types.RetainAll(desired_types_); associating_types.RemoveAll(associated_types_); DCHECK(loaded_types_.HasAll(associating_types)); - // Assume success. - configure_status_ = DataTypeManager::OK; - // Associate types in specified order. for (ModelType type : kStartOrder) { if (associating_types.Has(type)) { @@ -221,7 +215,8 @@ } } DCHECK(associating_types.Empty()); - ModelAssociationDone(INITIALIZED); + + delegate_->OnModelAssociationDone(types_to_associate); } void ModelAssociationManager::Stop(ShutdownReason shutdown_reason) { @@ -244,7 +239,6 @@ loaded_types_.Clear(); associated_types_.Clear(); - DCHECK(requested_types_.Empty()); state_ = IDLE; } @@ -272,20 +266,6 @@ NotifyDelegateIfReadyForConfigure(); } -void ModelAssociationManager::ModelAssociationDone(State new_state) { - DVLOG(1) << "Model association complete for " - << ModelTypeSetToString(requested_types_); - - DataTypeManager::ConfigureResult result(configure_status_, requested_types_); - - // Need to reset state before invoking delegate in order to avoid re-entrancy - // issues (delegate may trigger a reconfiguration). - requested_types_.Clear(); - state_ = new_state; - - delegate_->OnModelAssociationDone(result); -} - void ModelAssociationManager::NotifyDelegateIfReadyForConfigure() { if (notified_about_ready_for_configure_) return;
diff --git a/components/sync/driver/model_association_manager.h b/components/sync/driver/model_association_manager.h index 0745656..651d35e6 100644 --- a/components/sync/driver/model_association_manager.h +++ b/components/sync/driver/model_association_manager.h
@@ -9,7 +9,6 @@ #include "base/memory/weak_ptr.h" #include "components/sync/driver/configure_context.h" #include "components/sync/driver/data_type_controller.h" -#include "components/sync/driver/data_type_manager.h" #include "components/sync/engine/shutdown_reason.h" namespace syncer { @@ -39,8 +38,7 @@ // Called when the ModelAssociationManager has tried to perform model // association for all desired types and has nothing left to do. - virtual void OnModelAssociationDone( - const DataTypeManager::ConfigureResult& result) = 0; + virtual void OnModelAssociationDone(const ModelTypeSet& types) = 0; virtual ~ModelAssociationManagerDelegate() = default; }; @@ -100,11 +98,6 @@ // This callback is passed to |LoadModels| function. void ModelLoadCallback(ModelType type, const SyncError& error); - // Called when all requested types are associated or association times out. - // Will clean up any unfinished types, and update |state_| to be |new_state| - // Finally, it will notify |delegate_| of the configuration result. - void ModelAssociationDone(State new_state); - // A helper to stop an individual datatype. void StopDatatypeImpl(const SyncError& error, ShutdownReason shutdown_reason, @@ -129,10 +122,6 @@ // Data types that are enabled. ModelTypeSet desired_types_; - // Data types that are requested to associate. Non-empty iff |state_| is - // ASSOCIATING. - ModelTypeSet requested_types_; - // Data types that are loaded, i.e. ready to associate. ModelTypeSet loaded_types_; @@ -140,8 +129,6 @@ // reconfiguration if not disabled. ModelTypeSet associated_types_; - DataTypeManager::ConfigureStatus configure_status_; - bool notified_about_ready_for_configure_; base::WeakPtrFactory<ModelAssociationManager> weak_ptr_factory_{this};
diff --git a/components/sync/driver/model_association_manager_unittest.cc b/components/sync/driver/model_association_manager_unittest.cc index cf059be..4370a3f 100644 --- a/components/sync/driver/model_association_manager_unittest.cc +++ b/components/sync/driver/model_association_manager_unittest.cc
@@ -45,29 +45,13 @@ (override)); MOCK_METHOD(void, OnModelAssociationDone, - (const DataTypeManager::ConfigureResult& result), + (const ModelTypeSet& result), (override)); }; -MATCHER_P2(MatchesResult, status, requested_types, "") { - if (arg.status != status) { - *result_listener << "Expected status " << status << " but actual is " - << arg.status; - return false; - } - if (arg.requested_types != requested_types) { - *result_listener << "Expected requested types are " - << ModelTypeSetToString(requested_types) - << " but actual types are " - << ModelTypeSetToString(arg.requested_types); - return false; - } - return true; -} - class SyncModelAssociationManagerTest : public testing::Test { public: - SyncModelAssociationManagerTest() {} + SyncModelAssociationManagerTest() = default; FakeDataTypeController* GetController(ModelType model_type) { auto it = controllers_.find(model_type); @@ -92,8 +76,7 @@ ModelAssociationManager model_association_manager(&controllers_, &delegate_); ModelTypeSet types(BOOKMARKS, APPS); EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); - EXPECT_CALL(delegate_, OnModelAssociationDone( - MatchesResult(DataTypeManager::OK, types))); + EXPECT_CALL(delegate_, OnModelAssociationDone(types)); EXPECT_EQ(GetController(BOOKMARKS)->state(), DataTypeController::NOT_RUNNING); EXPECT_EQ(GetController(APPS)->state(), DataTypeController::NOT_RUNNING); @@ -116,8 +99,7 @@ ModelAssociationManager model_association_manager(&controllers_, &delegate_); ModelTypeSet types; types.Put(BOOKMARKS); - EXPECT_CALL(delegate_, OnModelAssociationDone( - MatchesResult(DataTypeManager::OK, types))); + EXPECT_CALL(delegate_, OnModelAssociationDone(types)); EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); model_association_manager.Initialize(/*desired_types=*/types, @@ -143,8 +125,7 @@ ModelTypeSet types; types.Put(BOOKMARKS); EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); - EXPECT_CALL(delegate_, OnModelAssociationDone( - MatchesResult(DataTypeManager::OK, types))); + EXPECT_CALL(delegate_, OnModelAssociationDone(types)); model_association_manager.Initialize(/*desired_types=*/types, /*preferred_types=*/types, @@ -161,8 +142,7 @@ ModelAssociationManager model_association_manager(&controllers_, &delegate_); ModelTypeSet types; types.Put(BOOKMARKS); - EXPECT_CALL(delegate_, OnModelAssociationDone( - MatchesResult(DataTypeManager::OK, types))); + EXPECT_CALL(delegate_, OnModelAssociationDone(types)); model_association_manager.Initialize(/*desired_types=*/types, /*preferred_types=*/types, @@ -384,8 +364,7 @@ EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); EXPECT_CALL(delegate_, OnSingleDataTypeAssociationDone(BOOKMARKS)); EXPECT_CALL(delegate_, OnSingleDataTypeAssociationDone(APPS)); - EXPECT_CALL(delegate_, OnModelAssociationDone(MatchesResult( - DataTypeManager::OK, desired_types))); + EXPECT_CALL(delegate_, OnModelAssociationDone(desired_types)); model_association_manager.Initialize(desired_types, preferred_types, BuildConfigureContext()); @@ -424,8 +403,7 @@ EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); EXPECT_CALL(delegate_, OnSingleDataTypeAssociationDone(BOOKMARKS)); EXPECT_CALL(delegate_, OnSingleDataTypeAssociationDone(APPS)); - EXPECT_CALL(delegate_, OnModelAssociationDone(MatchesResult( - DataTypeManager::OK, desired_types))); + EXPECT_CALL(delegate_, OnModelAssociationDone(desired_types)); model_association_manager.Initialize(desired_types, preferred_types, BuildConfigureContext()); @@ -471,8 +449,7 @@ EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); EXPECT_CALL(delegate_, OnSingleDataTypeAssociationDone(BOOKMARKS)); EXPECT_CALL(delegate_, OnSingleDataTypeAssociationDone(APPS)); - EXPECT_CALL(delegate_, OnModelAssociationDone(MatchesResult( - DataTypeManager::OK, desired_types))); + EXPECT_CALL(delegate_, OnModelAssociationDone(desired_types)); model_association_manager.Initialize(desired_types, preferred_types, configure_context); @@ -493,8 +470,7 @@ EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); EXPECT_CALL(delegate_, OnSingleDataTypeAssociationDone(BOOKMARKS)); - EXPECT_CALL(delegate_, OnModelAssociationDone(MatchesResult( - DataTypeManager::OK, desired_types))); + EXPECT_CALL(delegate_, OnModelAssociationDone(desired_types)); model_association_manager.Initialize(desired_types, preferred_types, configure_context); @@ -527,8 +503,7 @@ EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); EXPECT_CALL(delegate_, OnSingleDataTypeAssociationDone(BOOKMARKS)); EXPECT_CALL(delegate_, OnSingleDataTypeAssociationDone(APPS)); - EXPECT_CALL(delegate_, OnModelAssociationDone(MatchesResult( - DataTypeManager::OK, desired_types))); + EXPECT_CALL(delegate_, OnModelAssociationDone(desired_types)); model_association_manager.Initialize(desired_types, preferred_types, configure_context); @@ -549,8 +524,7 @@ EXPECT_CALL(delegate_, OnSingleDataTypeWillStop(BOOKMARKS, _)); EXPECT_CALL(delegate_, OnAllDataTypesReadyForConfigure()); EXPECT_CALL(delegate_, OnSingleDataTypeAssociationDone(BOOKMARKS)); - EXPECT_CALL(delegate_, OnModelAssociationDone(MatchesResult( - DataTypeManager::OK, desired_types))); + EXPECT_CALL(delegate_, OnModelAssociationDone(desired_types)); model_association_manager.Initialize(desired_types, preferred_types, configure_context);
diff --git a/components/sync/driver/profile_sync_service.cc b/components/sync/driver/profile_sync_service.cc index 985e174..f0be3471 100644 --- a/components/sync/driver/profile_sync_service.cc +++ b/components/sync/driver/profile_sync_service.cc
@@ -534,7 +534,6 @@ SyncEngine::InitParams params; params.host = this; - params.registrar = std::make_unique<SyncBackendRegistrar>(debug_identifier_); params.encryption_observer_proxy = crypto_.GetEncryptionObserverProxy(); params.extensions_activity = sync_client_->GetExtensionsActivity();
diff --git a/components/sync/driver/profile_sync_service_bundle.cc b/components/sync/driver/profile_sync_service_bundle.cc index 2dd168a3a..dbf4af90 100644 --- a/components/sync/driver/profile_sync_service_bundle.cc +++ b/components/sync/driver/profile_sync_service_bundle.cc
@@ -21,7 +21,7 @@ using testing::Return; ProfileSyncServiceBundle::ProfileSyncServiceBundle() - : identity_test_env_(&test_url_loader_factory_, &pref_service_) { + : identity_test_env_(&test_url_loader_factory_) { SyncPrefs::RegisterProfilePrefs(pref_service_.registry()); identity_test_env_.SetAutomaticIssueOfAccessTokens(true); identity_provider_ = std::make_unique<invalidation::ProfileIdentityProvider>(
diff --git a/components/sync/driver/profile_sync_service_bundle.h b/components/sync/driver/profile_sync_service_bundle.h index 194e26b..0328761e 100644 --- a/components/sync/driver/profile_sync_service_bundle.h +++ b/components/sync/driver/profile_sync_service_bundle.h
@@ -11,13 +11,13 @@ #include "base/macros.h" #include "base/memory/ref_counted.h" #include "components/invalidation/impl/profile_identity_provider.h" +#include "components/prefs/testing_pref_service.h" #include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/sync/driver/profile_sync_service.h" #include "components/sync/driver/sync_api_component_factory_mock.h" #include "components/sync/driver/sync_client_mock.h" #include "components/sync/invalidations/mock_sync_invalidations_service.h" #include "components/sync/invalidations/switches.h" -#include "components/sync_preferences/testing_pref_service_syncable.h" #include "services/network/test/test_url_loader_factory.h" namespace syncer { @@ -43,9 +43,7 @@ // Accessors - sync_preferences::TestingPrefServiceSyncable* pref_service() { - return &pref_service_; - } + TestingPrefServiceSimple* pref_service() { return &pref_service_; } signin::IdentityTestEnvironment* identity_test_env() { return &identity_test_env_; @@ -72,7 +70,7 @@ } private: - sync_preferences::TestingPrefServiceSyncable pref_service_; + TestingPrefServiceSimple pref_service_; network::TestURLLoaderFactory test_url_loader_factory_; signin::IdentityTestEnvironment identity_test_env_; testing::NiceMock<SyncApiComponentFactoryMock> component_factory_;
diff --git a/components/sync/driver/profile_sync_service_unittest.cc b/components/sync/driver/profile_sync_service_unittest.cc index 28b0edf..a48419c4 100644 --- a/components/sync/driver/profile_sync_service_unittest.cc +++ b/components/sync/driver/profile_sync_service_unittest.cc
@@ -17,6 +17,7 @@ #include "base/test/task_environment.h" #include "base/time/time.h" #include "base/values.h" +#include "components/prefs/testing_pref_service.h" #include "components/signin/public/identity_manager/account_info.h" #include "components/signin/public/identity_manager/identity_test_environment.h" #include "components/signin/public/identity_manager/identity_test_utils.h" @@ -35,7 +36,6 @@ #include "components/sync/driver/sync_token_status.h" #include "components/sync/engine/fake_sync_engine.h" #include "components/sync/invalidations/switches.h" -#include "components/sync_preferences/testing_pref_service_syncable.h" #include "components/version_info/version_info_values.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -303,7 +303,7 @@ SyncClientMock* sync_client() { return sync_client_; } - sync_preferences::TestingPrefServiceSyncable* prefs() { + TestingPrefServiceSimple* prefs() { return profile_sync_service_bundle_.pref_service(); }
diff --git a/components/sync/driver/sync_user_settings_unittest.cc b/components/sync/driver/sync_user_settings_unittest.cc index 59ff7c4..fc2cf7c 100644 --- a/components/sync/driver/sync_user_settings_unittest.cc +++ b/components/sync/driver/sync_user_settings_unittest.cc
@@ -8,13 +8,14 @@ #include "base/bind_helpers.h" #include "base/callback.h" +#include "components/prefs/pref_registry_simple.h" +#include "components/prefs/testing_pref_service.h" #include "components/sync/base/model_type.h" #include "components/sync/base/pref_names.h" #include "components/sync/base/sync_prefs.h" #include "components/sync/base/user_selectable_type.h" #include "components/sync/driver/sync_service_crypto.h" #include "components/sync/engine/configure_reason.h" -#include "components/sync_preferences/testing_pref_service_syncable.h" #include "testing/gtest/include/gtest/gtest.h" #if defined(OS_CHROMEOS) @@ -75,7 +76,7 @@ // The order of fields matters because it determines destruction order and // fields are dependent. - sync_preferences::TestingPrefServiceSyncable pref_service_; + TestingPrefServiceSimple pref_service_; std::unique_ptr<SyncPrefs> sync_prefs_; std::unique_ptr<SyncServiceCrypto> sync_service_crypto_; };
diff --git a/components/sync/engine/fake_sync_engine.h b/components/sync/engine/fake_sync_engine.h index 886effd..cea08ce 100644 --- a/components/sync/engine/fake_sync_engine.h +++ b/components/sync/engine/fake_sync_engine.h
@@ -13,6 +13,7 @@ #include "base/compiler_specific.h" #include "components/sync/base/weak_handle.h" #include "components/sync/engine/sync_engine.h" +#include "components/sync/engine/sync_status.h" namespace syncer {
diff --git a/components/sync/engine/fake_sync_manager.cc b/components/sync/engine/fake_sync_manager.cc index 629bca5..e61886e2 100644 --- a/components/sync/engine/fake_sync_manager.cc +++ b/components/sync/engine/fake_sync_manager.cc
@@ -80,6 +80,10 @@ return initial_sync_ended_types_; } +ModelTypeSet FakeSyncManager::GetEnabledTypes() { + return progress_marker_types_; +} + void FakeSyncManager::UpdateCredentials(const SyncCredentials& credentials) { NOTIMPLEMENTED(); }
diff --git a/components/sync/engine/fake_sync_manager.h b/components/sync/engine/fake_sync_manager.h index 42ec5e2f..7fbfdece 100644 --- a/components/sync/engine/fake_sync_manager.h +++ b/components/sync/engine/fake_sync_manager.h
@@ -69,6 +69,7 @@ // loop for purposes of callbacks. void Init(InitArgs* args) override; ModelTypeSet InitialSyncEndedTypes() override; + ModelTypeSet GetEnabledTypes() override; void UpdateCredentials(const SyncCredentials& credentials) override; void InvalidateCredentials() override; void StartSyncingNormally(base::Time last_poll_time) override;
diff --git a/components/sync/engine/mock_sync_engine.h b/components/sync/engine/mock_sync_engine.h index 8c762c73..dec820bd 100644 --- a/components/sync/engine/mock_sync_engine.h +++ b/components/sync/engine/mock_sync_engine.h
@@ -11,6 +11,7 @@ #include "components/sync/engine/data_type_activation_response.h" #include "components/sync/engine/sync_engine.h" +#include "components/sync/engine/sync_status.h" #include "testing/gmock/include/gmock/gmock.h" namespace syncer {
diff --git a/components/sync/engine/model_type_configurer.h b/components/sync/engine/model_type_configurer.h index d845732..8c1c5c7 100644 --- a/components/sync/engine/model_type_configurer.h +++ b/components/sync/engine/model_type_configurer.h
@@ -29,7 +29,6 @@ ConfigureReason reason; ModelTypeSet enabled_types; - ModelTypeSet disabled_types; ModelTypeSet to_download; ModelTypeSet to_purge; // Run when configuration is done with the set of all types that failed
diff --git a/components/sync/engine/sync_backend_registrar.cc b/components/sync/engine/sync_backend_registrar.cc deleted file mode 100644 index 35fc49b..0000000 --- a/components/sync/engine/sync_backend_registrar.cc +++ /dev/null
@@ -1,127 +0,0 @@ -// Copyright 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "components/sync/engine/sync_backend_registrar.h" - -#include <algorithm> -#include <cstddef> -#include <utility> - -#include "base/logging.h" - -namespace syncer { - -SyncBackendRegistrar::SyncBackendRegistrar(const std::string& name) - : name_(name) {} - -void SyncBackendRegistrar::RegisterDataType(ModelType type) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - base::AutoLock lock(lock_); - // There may have been a previously successful sync of a type which used to - // be in GROUP_PASSIVE, but is now in GROUP_NON_BLOCKING. We're not sure what - // order these two sets of types are being registered in, so guard against - // SetInitialTypes(...) having been already called by undoing everything to - // these types. - if (routing_info_.find(type) != routing_info_.end() && - routing_info_[type] != GROUP_NON_BLOCKING) { - routing_info_.erase(type); - last_configured_types_.Remove(type); - } - registered_types_.Put(type); -} - -void SyncBackendRegistrar::SetInitialTypes(ModelTypeSet initial_types) { - base::AutoLock lock(lock_); - - // This function should be called only once, shortly after construction. The - // routing info at that point is expected to be empty. - DCHECK(routing_info_.empty()); - - // Set our initial state to reflect the current status of the sync Directory. - // This will ensure that our calculations in ConfigureDataTypes() will always - // return correct results. - for (ModelType type : initial_types) { - // If this type is also registered as GROUP_NON_BLOCKING, assume that it - // shouldn't be registered as GROUP_PASSIVE. The GROUP_NON_BLOCKING path - // will eventually take care of adding to routing_info_ later on. - if (!registered_types_.Has(type)) { - routing_info_[type] = GROUP_PASSIVE; - } - } - - // Although this can re-set types in GROUP_NON_BLOCKING, this should be - // idempotent. - last_configured_types_ = GetTypesWithRoutingInfoNoLock(); -} - -void SyncBackendRegistrar::AddRestoredDataType(ModelType type) { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - base::AutoLock lock(lock_); - DCHECK(registered_types_.Has(type)) << syncer::ModelTypeToString(type); - DCHECK(routing_info_.find(type) == routing_info_.end() || - routing_info_[type] == GROUP_NON_BLOCKING) - << syncer::ModelTypeToString(type); - routing_info_[type] = GROUP_NON_BLOCKING; - last_configured_types_.Put(type); -} - -bool SyncBackendRegistrar::IsNigoriEnabled() const { - DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - base::AutoLock lock(lock_); - return routing_info_.find(NIGORI) != routing_info_.end(); -} - -ModelTypeSet SyncBackendRegistrar::ConfigureDataTypes( - ModelTypeSet types_to_add, - ModelTypeSet types_to_remove) { - DCHECK(Intersection(types_to_add, types_to_remove).Empty()); - - base::AutoLock lock(lock_); - ModelTypeSet newly_added_types; - for (ModelType type : types_to_add) { - // Add a newly specified data type corresponding initial group into the - // routing_info, if it does not already exist. - if (routing_info_.count(type) == 0) { - routing_info_[type] = GetInitialGroupForType(type); - newly_added_types.Put(type); - } - } - for (ModelType type : types_to_remove) { - routing_info_.erase(type); - } - - DVLOG(1) << name_ << ": Adding types " << ModelTypeSetToString(types_to_add) - << " (with newly-added types " - << ModelTypeSetToString(newly_added_types) << ") and removing types " - << ModelTypeSetToString(types_to_remove); - last_configured_types_ = GetTypesWithRoutingInfoNoLock(); - - return newly_added_types; -} - -ModelTypeSet SyncBackendRegistrar::GetLastConfiguredTypes() const { - return last_configured_types_; -} - -ModelTypeSet SyncBackendRegistrar::GetTypesWithRoutingInfo() const { - base::AutoLock lock(lock_); - return GetTypesWithRoutingInfoNoLock(); -} - -ModelTypeSet SyncBackendRegistrar::GetTypesWithRoutingInfoNoLock() const { - ModelTypeSet types; - for (const auto& model_type_and_group : routing_info_) { - types.Put(model_type_and_group.first); - } - return types; -} - -SyncBackendRegistrar::ModelSafeGroup -SyncBackendRegistrar::GetInitialGroupForType(ModelType type) const { - return registered_types_.Has(type) ? GROUP_NON_BLOCKING : GROUP_PASSIVE; -} - -SyncBackendRegistrar::~SyncBackendRegistrar() {} - -} // namespace syncer
diff --git a/components/sync/engine/sync_backend_registrar.h b/components/sync/engine/sync_backend_registrar.h deleted file mode 100644 index 6ca64e4..0000000 --- a/components/sync/engine/sync_backend_registrar.h +++ /dev/null
@@ -1,115 +0,0 @@ -// Copyright 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef COMPONENTS_SYNC_ENGINE_SYNC_BACKEND_REGISTRAR_H_ -#define COMPONENTS_SYNC_ENGINE_SYNC_BACKEND_REGISTRAR_H_ - -#include <stdint.h> - -#include <map> -#include <memory> -#include <string> -#include <vector> - -#include "base/callback.h" -#include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "base/sequence_checker.h" -#include "base/synchronization/lock.h" -#include "components/sync/base/model_type.h" -#include "components/sync/engine/sync_manager.h" - -namespace syncer { - -// A class that keep track of the routing info for the enabled sync types. -// TODO(crbug.com/1138132): This class is a remainder from the old Directory -// implementation and should be removed. -class SyncBackendRegistrar { - public: - // |name| is used for debugging. Must be created on the UI thread. - explicit SyncBackendRegistrar(const std::string& name); - - // A SyncBackendRegistrar is owned by a SyncEngineImpl. It is destroyed by - // SyncEngineImpl::Shutdown() which performs the following operations on the - // UI thread: - // - // 1) Post a SyncEngineBackend::DoShutdown() task to the sync thread. This - // task destroys SyncManager which holds a SyncBackendRegistrar pointer. - // 2) Take ownership of the sync thread. - // 3) Post a task to delete the SyncBackendRegistrar on the sync thread. - // When this task runs, there are no remaining pointers to the - // SyncBackendRegistrar. - ~SyncBackendRegistrar(); - - // Adds |type| to the set of registered types. - void RegisterDataType(ModelType type); - - // Informs the SyncBackendRegistrar of the currently enabled set of types. - // These types will be placed in the passive group. This function should be - // called exactly once during startup. - void SetInitialTypes(ModelTypeSet initial_types); - - // Informs SyncBackendRegistrar about a type loaded from local storage. - // Initial sync was already performed for this type, therefore its data - // shouldn't be downloaded as part of configuration. - void AddRestoredDataType(ModelType type); - - // Returns whether or not we are currently syncing encryption keys. - // Must be called on the UI thread. - bool IsNigoriEnabled() const; - - // Removes all types in |types_to_remove| from the routing info and - // adds all the types in |types_to_add| to the routing info that are - // not already there (initially put in the passive group). - // |types_to_remove| and |types_to_add| must be disjoint. Returns - // the set of newly-added types. Must be called on the UI thread. - ModelTypeSet ConfigureDataTypes(ModelTypeSet types_to_add, - ModelTypeSet types_to_remove); - - // Returns the set of enabled types as of the last configuration. Note that - // this might be different from the current types in the routing info due - // to DeactiveDataType being called separately from ConfigureDataTypes. - ModelTypeSet GetLastConfiguredTypes() const; - - // Returns the set of currently enabled types. - ModelTypeSet GetTypesWithRoutingInfo() const; - - private: - // Legacy concept of model-safe groups, no longer relevant as of 2020. - // TODO(crbug.com/1138132): Delete this enum. - enum ModelSafeGroup { GROUP_PASSIVE, GROUP_NON_BLOCKING }; - - // Same as GetTypesWithRoutingInfo() but callers are responsible for holding - // |lock_|. - ModelTypeSet GetTypesWithRoutingInfoNoLock() const; - - // Returns model safe group that should be assigned to type when it is first - // configured (before activation). - ModelSafeGroup GetInitialGroupForType(ModelType type) const; - - // Name used for debugging. - const std::string name_; - - // Checker for the UI thread (where this object is constructed). - SEQUENCE_CHECKER(sequence_checker_); - - // Protects all variables below. - mutable base::Lock lock_; - - // Maps ModelType to ModelSafeGroup. - std::map<ModelType, ModelSafeGroup> routing_info_; - - // The types that were enabled as of the last configuration. Updated on each - // call to ConfigureDataTypes as well as SetInitialTypes. - ModelTypeSet last_configured_types_; - - // Set of registered types. - ModelTypeSet registered_types_; - - DISALLOW_COPY_AND_ASSIGN(SyncBackendRegistrar); -}; - -} // namespace syncer - -#endif // COMPONENTS_SYNC_ENGINE_SYNC_BACKEND_REGISTRAR_H_
diff --git a/components/sync/engine/sync_backend_registrar_unittest.cc b/components/sync/engine/sync_backend_registrar_unittest.cc deleted file mode 100644 index 703dd80..0000000 --- a/components/sync/engine/sync_backend_registrar_unittest.cc +++ /dev/null
@@ -1,128 +0,0 @@ -// Copyright 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "components/sync/engine/sync_backend_registrar.h" - -#include "base/bind.h" -#include "base/location.h" -#include "base/run_loop.h" -#include "base/sequenced_task_runner.h" -#include "base/test/task_environment.h" -#include "base/threading/thread.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace syncer { - -namespace { - -class SyncBackendRegistrarTest : public testing::Test { - public: - SyncBackendRegistrarTest() - : db_thread_("DBThreadForTest"), - sync_thread_("SyncThreadForTest") {} - - void SetUp() override { - db_thread_.StartAndWaitForTesting(); - sync_thread_.StartAndWaitForTesting(); - registrar_ = std::make_unique<SyncBackendRegistrar>("test"); - } - - void TearDown() override { - sync_thread_.task_runner()->DeleteSoon(FROM_HERE, registrar_.release()); - sync_thread_.FlushForTesting(); - } - - void ExpectRoutingInfo(ModelTypeSet expected_routing_info_types) { - EXPECT_EQ(expected_routing_info_types, - registrar_->GetTypesWithRoutingInfo()); - } - - SyncBackendRegistrar* registrar() { return registrar_.get(); } - scoped_refptr<base::SequencedTaskRunner> db_task_runner() { - return db_thread_.task_runner(); - } - - private: - base::test::SingleThreadTaskEnvironment task_environment_; - base::Thread db_thread_; - base::Thread sync_thread_; - std::unique_ptr<SyncBackendRegistrar> registrar_; -}; - -TEST_F(SyncBackendRegistrarTest, ConstructorEmpty) { - registrar()->SetInitialTypes(ModelTypeSet()); - EXPECT_FALSE(registrar()->IsNigoriEnabled()); - ExpectRoutingInfo(ModelTypeSet()); -} - -TEST_F(SyncBackendRegistrarTest, ConstructorNonEmpty) { - registrar()->RegisterDataType(BOOKMARKS); - registrar()->SetInitialTypes(ModelTypeSet(BOOKMARKS, NIGORI)); - EXPECT_TRUE(registrar()->IsNigoriEnabled()); - EXPECT_EQ(ModelTypeSet(NIGORI), registrar()->GetLastConfiguredTypes()); - // Bookmarks dropped because it's nonblocking. - // Passwords dropped because of no password store. - ExpectRoutingInfo({NIGORI}); -} - -TEST_F(SyncBackendRegistrarTest, ConstructorNonEmptyReversedInitialization) { - registrar()->SetInitialTypes(ModelTypeSet(BOOKMARKS, NIGORI)); - registrar()->RegisterDataType(BOOKMARKS); - EXPECT_TRUE(registrar()->IsNigoriEnabled()); - EXPECT_EQ(ModelTypeSet(NIGORI), registrar()->GetLastConfiguredTypes()); - // Bookmarks dropped because it's nonblocking. - // Passwords dropped because of no password store. - ExpectRoutingInfo({NIGORI}); -} - -TEST_F(SyncBackendRegistrarTest, ConfigureDataTypes) { - registrar()->RegisterDataType(BOOKMARKS); - registrar()->SetInitialTypes(ModelTypeSet()); - - // Add. - const ModelTypeSet types1(BOOKMARKS, NIGORI, AUTOFILL); - EXPECT_EQ(types1, registrar()->ConfigureDataTypes(types1, ModelTypeSet())); - ExpectRoutingInfo({BOOKMARKS, NIGORI, AUTOFILL}); - EXPECT_EQ(types1, registrar()->GetLastConfiguredTypes()); - - // Add and remove. - const ModelTypeSet types2(PREFERENCES, THEMES); - EXPECT_EQ(types2, registrar()->ConfigureDataTypes(types2, types1)); - - ExpectRoutingInfo({PREFERENCES, THEMES}); - EXPECT_EQ(types2, registrar()->GetLastConfiguredTypes()); - - // Remove. - EXPECT_TRUE(registrar()->ConfigureDataTypes(ModelTypeSet(), types2).Empty()); - ExpectRoutingInfo(ModelTypeSet()); - EXPECT_EQ(ModelTypeSet(), registrar()->GetLastConfiguredTypes()); -} - -// Tests that registration and configuration of sync data types is -// handled correctly in SyncBackendRegistrar. -TEST_F(SyncBackendRegistrarTest, ConfigureDataType) { - registrar()->RegisterDataType(AUTOFILL); - registrar()->RegisterDataType(BOOKMARKS); - - ExpectRoutingInfo(ModelTypeSet()); - // Simulate that initial sync was already done for AUTOFILL. - registrar()->AddRestoredDataType(AUTOFILL); - // It should be added to routing info and set of configured types. - EXPECT_EQ(ModelTypeSet(AUTOFILL), registrar()->GetLastConfiguredTypes()); - ExpectRoutingInfo({AUTOFILL}); - - // Configure two data types. Initial sync wasn't done for BOOKMARKS so - // it should be included in types to be downloaded. - ModelTypeSet types_to_add(AUTOFILL, BOOKMARKS); - ModelTypeSet newly_added_types = - registrar()->ConfigureDataTypes(types_to_add, ModelTypeSet()); - EXPECT_EQ(ModelTypeSet(BOOKMARKS), newly_added_types); - EXPECT_EQ(types_to_add, registrar()->GetLastConfiguredTypes()); - ExpectRoutingInfo({AUTOFILL, BOOKMARKS}); -} - -} // namespace - -} // namespace syncer
diff --git a/components/sync/engine/sync_engine.cc b/components/sync/engine/sync_engine.cc index 33beacf..0143e49 100644 --- a/components/sync/engine/sync_engine.cc +++ b/components/sync/engine/sync_engine.cc
@@ -4,6 +4,8 @@ #include "components/sync/engine/sync_engine.h" +#include "components/sync/engine/engine_components_factory.h" + namespace syncer { SyncEngine::InitParams::InitParams() = default;
diff --git a/components/sync/engine/sync_engine.h b/components/sync/engine/sync_engine.h index 5a4d81a..6adadf3 100644 --- a/components/sync/engine/sync_engine.h +++ b/components/sync/engine/sync_engine.h
@@ -23,15 +23,18 @@ #include "components/sync/engine/cycle/sync_cycle_snapshot.h" #include "components/sync/engine/model_type_configurer.h" #include "components/sync/engine/shutdown_reason.h" -#include "components/sync/engine/sync_backend_registrar.h" #include "components/sync/engine/sync_credentials.h" +#include "components/sync/engine/sync_encryption_handler.h" #include "components/sync/engine/sync_manager_factory.h" #include "url/gurl.h" namespace syncer { +class EngineComponentsFactory; class HttpPostProviderFactory; +class JsEventHandler; class SyncEngineHost; +struct SyncStatus; // The interface into the sync engine, which is the part of sync that performs // communication between model types and the sync server. In prod the engine @@ -51,7 +54,6 @@ ~InitParams(); SyncEngineHost* host = nullptr; - std::unique_ptr<SyncBackendRegistrar> registrar; std::unique_ptr<SyncEncryptionHandler::Observer> encryption_observer_proxy; scoped_refptr<ExtensionsActivity> extensions_activity; WeakHandle<JsEventHandler> event_handler;
diff --git a/components/sync/engine/sync_manager.h b/components/sync/engine/sync_manager.h index a4d300e..9b388246 100644 --- a/components/sync/engine/sync_manager.h +++ b/components/sync/engine/sync_manager.h
@@ -154,6 +154,8 @@ virtual ModelTypeSet InitialSyncEndedTypes() = 0; + virtual ModelTypeSet GetEnabledTypes() = 0; + // Update tokens that we're using in Sync. Email must stay the same. virtual void UpdateCredentials(const SyncCredentials& credentials) = 0;
diff --git a/components/sync/engine_impl/model_type_registry.cc b/components/sync/engine_impl/model_type_registry.cc index b8f61e4..3680d4d0 100644 --- a/components/sync/engine_impl/model_type_registry.cc +++ b/components/sync/engine_impl/model_type_registry.cc
@@ -140,6 +140,14 @@ return result; } +ModelTypeSet ModelTypeRegistry::GetEnabledDataTypes() const { + ModelTypeSet enabled_types; + for (const auto& worker : model_type_workers_) { + enabled_types.Put(worker->GetModelType()); + } + return enabled_types; +} + const UpdateHandler* ModelTypeRegistry::GetUpdateHandler(ModelType type) const { auto it = update_handler_map_.find(type); return it == update_handler_map_.end() ? nullptr : it->second; @@ -234,12 +242,4 @@ } } -ModelTypeSet ModelTypeRegistry::GetEnabledDataTypes() const { - ModelTypeSet enabled_types; - for (const auto& worker : model_type_workers_) { - enabled_types.Put(worker->GetModelType()); - } - return enabled_types; -} - } // namespace syncer
diff --git a/components/sync/engine_impl/model_type_registry.h b/components/sync/engine_impl/model_type_registry.h index ce3e5c7..6ae83a5 100644 --- a/components/sync/engine_impl/model_type_registry.h +++ b/components/sync/engine_impl/model_type_registry.h
@@ -70,6 +70,9 @@ // applied. ModelTypeSet GetInitialSyncEndedTypes() const; + // Returns set of enabled types, i.e. types that has alive ModelTypeWorker. + ModelTypeSet GetEnabledDataTypes() const; + // Returns the update handler for |type|. const UpdateHandler* GetUpdateHandler(ModelType type) const; @@ -85,8 +88,6 @@ private: void OnEncryptionStateChanged(); - ModelTypeSet GetEnabledDataTypes() const; - // Enabled proxy types, which don't have a worker. ModelTypeSet enabled_proxy_types_;
diff --git a/components/sync/engine_impl/sync_manager_impl.cc b/components/sync/engine_impl/sync_manager_impl.cc index 1edc0ea..68dcaadd 100644 --- a/components/sync/engine_impl/sync_manager_impl.cc +++ b/components/sync/engine_impl/sync_manager_impl.cc
@@ -115,6 +115,11 @@ return model_type_registry_->GetInitialSyncEndedTypes(); } +ModelTypeSet SyncManagerImpl::GetEnabledTypes() { + DCHECK(initialized_); + return model_type_registry_->GetEnabledDataTypes(); +} + void SyncManagerImpl::ConfigureSyncer(ConfigureReason reason, ModelTypeSet to_download, SyncFeatureState sync_feature_state,
diff --git a/components/sync/engine_impl/sync_manager_impl.h b/components/sync/engine_impl/sync_manager_impl.h index 7d0186e..9de4134 100644 --- a/components/sync/engine_impl/sync_manager_impl.h +++ b/components/sync/engine_impl/sync_manager_impl.h
@@ -57,6 +57,7 @@ // SyncManager implementation. void Init(InitArgs* args) override; ModelTypeSet InitialSyncEndedTypes() override; + ModelTypeSet GetEnabledTypes() override; void UpdateCredentials(const SyncCredentials& credentials) override; void InvalidateCredentials() override; void StartSyncingNormally(base::Time last_poll_time) override;
diff --git a/components/sync/invalidations/fcm_handler.cc b/components/sync/invalidations/fcm_handler.cc index 26b155e..f85d5ad2 100644 --- a/components/sync/invalidations/fcm_handler.cc +++ b/components/sync/invalidations/fcm_handler.cc
@@ -18,8 +18,6 @@ namespace syncer { -const char kPayloadKey[] = "payload"; - // Lower bound time between two token validations when listening. const int kTokenValidationPeriodMinutesDefault = 60 * 24; @@ -109,14 +107,8 @@ DCHECK_EQ(app_id, app_id_); DCHECK(base::FeatureList::IsEnabled(switches::kUseSyncInvalidations)); - auto it = message.data.find(kPayloadKey); - std::string payload; - if (it != message.data.end()) { - payload = it->second; - } - for (InvalidationsListener& listener : listeners_) { - listener.OnInvalidationReceived(payload); + listener.OnInvalidationReceived(message.raw_data); } }
diff --git a/components/sync/invalidations/fcm_handler_unittest.cc b/components/sync/invalidations/fcm_handler_unittest.cc index 01f19d4c..5a26a29 100644 --- a/components/sync/invalidations/fcm_handler_unittest.cc +++ b/components/sync/invalidations/fcm_handler_unittest.cc
@@ -36,7 +36,6 @@ const char kDefaultSenderId[] = "fake_sender_id"; const char kSyncInvalidationsAppId[] = "com.google.chrome.sync.invalidations"; -const char kPayloadKey[] = "payload"; const int kTokenValidationPeriodMinutesDefault = 60 * 24; @@ -150,7 +149,7 @@ fcm_handler_.AddListener(&mock_listener); gcm::IncomingMessage gcm_message; - gcm_message.data[kPayloadKey] = kPayloadValue; + gcm_message.raw_data = kPayloadValue; EXPECT_CALL(mock_listener, OnInvalidationReceived(kPayloadValue)); fcm_handler_.OnMessage(kSyncInvalidationsAppId, gcm_message);
diff --git a/components/variations/net/variations_http_headers_unittest.cc b/components/variations/net/variations_http_headers_unittest.cc index fd3f1d39f4..555ea0c 100644 --- a/components/variations/net/variations_http_headers_unittest.cc +++ b/components/variations/net/variations_http_headers_unittest.cc
@@ -44,7 +44,7 @@ return request; request.trusted_params->isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, + net::IsolationInfo::RequestType::kOther, url::Origin::Create(GURL(isolation_info_top_frame_origin_url)), url::Origin::Create(GURL(isolation_info_frame_origin_url)), net::SiteForCookies());
diff --git a/components/viz/service/display/direct_renderer.cc b/components/viz/service/display/direct_renderer.cc index 5b09462..e356f1a 100644 --- a/components/viz/service/display/direct_renderer.cc +++ b/components/viz/service/display/direct_renderer.cc
@@ -368,11 +368,12 @@ // If we promote any quad to an underlay then the main plane must support // alpha. - // TODO(ccameron): We should update - // |root_render_pass->has_transparent_background|, |frame_color_space|, and + // TODO(ccameron): We should update |frame_color_space|, and // |frame_buffer_format| based on the change in |frame_has_alpha|. - if (current_frame()->output_surface_plane) + if (current_frame()->output_surface_plane) { frame_has_alpha |= current_frame()->output_surface_plane->enable_blending; + root_render_pass->has_transparent_background = frame_has_alpha; + } overlay_processor_->AdjustOutputSurfaceOverlay( &(current_frame()->output_surface_plane));
diff --git a/components/viz/service/display_embedder/output_presenter.cc b/components/viz/service/display_embedder/output_presenter.cc index 48710f3b..ba55af0a4 100644 --- a/components/viz/service/display_embedder/output_presenter.cc +++ b/components/viz/service/display_embedder/output_presenter.cc
@@ -115,4 +115,14 @@ } } +std::unique_ptr<OutputPresenter::Image> +OutputPresenter::AllocateBackgroundImage(gfx::ColorSpace color_space, + gfx::Size image_size) { + return nullptr; +} + +void OutputPresenter::ScheduleBackground(Image* image) { + NOTREACHED(); +} + } // namespace viz
diff --git a/components/viz/service/display_embedder/output_presenter.h b/components/viz/service/display_embedder/output_presenter.h index 52b9ed3..7916c94 100644 --- a/components/viz/service/display_embedder/output_presenter.h +++ b/components/viz/service/display_embedder/output_presenter.h
@@ -86,6 +86,9 @@ gfx::ColorSpace color_space, gfx::Size image_size, size_t num_images) = 0; + virtual std::unique_ptr<Image> AllocateBackgroundImage( + gfx::ColorSpace color_space, + gfx::Size image_size); virtual void SwapBuffers(SwapCompletionCallback completion_callback, BufferPresentedCallback presentation_callback) = 0; virtual void PostSubBuffer(const gfx::Rect& rect, @@ -102,6 +105,7 @@ gpu::SharedImageRepresentationOverlay::ScopedReadAccess; virtual void ScheduleOverlays(SkiaOutputSurface::OverlayList overlays, std::vector<ScopedOverlayAccess*> accesses) = 0; + virtual void ScheduleBackground(Image* image); }; } // namespace viz
diff --git a/components/viz/service/display_embedder/output_presenter_gl.cc b/components/viz/service/display_embedder/output_presenter_gl.cc index d587bf4..d1ef91a 100644 --- a/components/viz/service/display_embedder/output_presenter_gl.cc +++ b/components/viz/service/display_embedder/output_presenter_gl.cc
@@ -17,6 +17,7 @@ #include "ui/display/types/display_snapshot.h" #include "ui/gfx/buffer_format_util.h" #include "ui/gfx/geometry/rect_conversions.h" +#include "ui/gfx/overlay_transform.h" #include "ui/gl/gl_fence.h" #include "ui/gl/gl_surface.h" @@ -282,6 +283,20 @@ return images; } +std::unique_ptr<OutputPresenter::Image> +OutputPresenterGL::AllocateBackgroundImage(gfx::ColorSpace color_space, + gfx::Size image_size) { + auto image = std::make_unique<PresenterImageGL>(); + if (!image->Initialize(shared_image_factory_, + shared_image_representation_factory_, image_size, + color_space, image_format_, dependency_, + shared_image_usage_)) { + DLOG(ERROR) << "Failed to initialize image."; + return nullptr; + } + return image; +} + void OutputPresenterGL::SwapBuffers( SwapCompletionCallback completion_callback, BufferPresentedCallback presentation_callback) { @@ -329,6 +344,22 @@ plane.enable_blending, std::move(fence)); } +void OutputPresenterGL::ScheduleBackground(Image* image) { + // Background is not seen by user, and is created before buffer queue buffers. + // So fence is not needed. + auto* gl_image = + reinterpret_cast<PresenterImageGL*>(image)->GetGLImage(nullptr); + + // Background is also z-order 0. + constexpr int kPlaneZOrder = INT32_MIN; + // Background always uses the full texture. + constexpr gfx::RectF kUVRect(0.f, 0.f, 1.0f, 1.0f); + gl_surface_->ScheduleOverlayPlane( + kPlaneZOrder, gfx::OVERLAY_TRANSFORM_NONE, gl_image, gfx::Rect(), + /*crop_rect=*/kUVRect, + /*enable_blend=*/false, /*gpu_fence=*/nullptr); +} + void OutputPresenterGL::CommitOverlayPlanes( SwapCompletionCallback completion_callback, BufferPresentedCallback presentation_callback) {
diff --git a/components/viz/service/display_embedder/output_presenter_gl.h b/components/viz/service/display_embedder/output_presenter_gl.h index 4cb0ef9a..7bf8c8b7 100644 --- a/components/viz/service/display_embedder/output_presenter_gl.h +++ b/components/viz/service/display_embedder/output_presenter_gl.h
@@ -49,6 +49,8 @@ gfx::ColorSpace color_space, gfx::Size image_size, size_t num_images) final; + std::unique_ptr<Image> AllocateBackgroundImage(gfx::ColorSpace color_space, + gfx::Size image_size) final; void SwapBuffers(SwapCompletionCallback completion_callback, BufferPresentedCallback presentation_callback) final; void PostSubBuffer(const gfx::Rect& rect, @@ -62,6 +64,7 @@ bool is_submitted) final; void ScheduleOverlays(SkiaOutputSurface::OverlayList overlays, std::vector<ScopedOverlayAccess*> accesses) final; + void ScheduleBackground(Image* image) final; private: scoped_refptr<gl::GLSurface> gl_surface_;
diff --git a/components/viz/service/display_embedder/skia_output_device_buffer_queue.cc b/components/viz/service/display_embedder/skia_output_device_buffer_queue.cc index 8e6e375..2d18278 100644 --- a/components/viz/service/display_embedder/skia_output_device_buffer_queue.cc +++ b/components/viz/service/display_embedder/skia_output_device_buffer_queue.cc
@@ -102,13 +102,15 @@ SkiaOutputSurfaceDependency* deps, gpu::SharedImageRepresentationFactory* representation_factory, gpu::MemoryTracker* memory_tracker, - const DidSwapBufferCompleteCallback& did_swap_buffer_complete_callback) + const DidSwapBufferCompleteCallback& did_swap_buffer_complete_callback, + bool needs_background_image) : SkiaOutputDevice(deps->GetSharedContextState()->gr_context(), memory_tracker, did_swap_buffer_complete_callback), presenter_(std::move(presenter)), dependency_(deps), - representation_factory_(representation_factory) { + representation_factory_(representation_factory), + needs_background_image_(needs_background_image) { capabilities_.uses_default_gl_framebuffer = false; capabilities_.preserve_buffer_content = true; capabilities_.only_invalidates_damage_rect = false; @@ -180,6 +182,21 @@ void SkiaOutputDeviceBufferQueue::SchedulePrimaryPlane( const base::Optional<OverlayProcessorInterface::OutputSurfaceOverlayPlane>& plane) { + if (background_image_) { + if (!background_image_is_scheduled_) + background_image_->BeginPresent(); + + // WaylandWindow can attach a null wl_buffer to its surface to hide its + // content so needs to reschedule |background_image_| so that + // the wl_surface has a non-null wl_buffer when the window re-appears. + // + // TODO(fangzhoug): It should not be necessary to schedule + // |background_image_| every frame. Make this a responsibility of + // WaylandWindow instead. + presenter_->ScheduleBackground(background_image_.get()); + background_image_is_scheduled_ = true; + } + if (plane) { // If the current_image_ is nullptr, it means there is no change on the // primary plane. So we just need to schedule the last submitted image. @@ -428,6 +445,12 @@ overlay_transform_ = transform; FreeAllSurfaces(); + if (needs_background_image_ && !background_image_) { + background_image_ = + presenter_->AllocateBackgroundImage(color_space_, gfx::Size(4, 4)); + background_image_is_scheduled_ = false; + } + images_ = presenter_->AllocateImages(color_space_, image_size_, capabilities_.number_of_buffers); if (images_.empty())
diff --git a/components/viz/service/display_embedder/skia_output_device_buffer_queue.h b/components/viz/service/display_embedder/skia_output_device_buffer_queue.h index 402f39c1..1f2ea75f2 100644 --- a/components/viz/service/display_embedder/skia_output_device_buffer_queue.h +++ b/components/viz/service/display_embedder/skia_output_device_buffer_queue.h
@@ -30,7 +30,8 @@ SkiaOutputSurfaceDependency* deps, gpu::SharedImageRepresentationFactory* representation_factory, gpu::MemoryTracker* memory_tracker, - const DidSwapBufferCompleteCallback& did_swap_buffer_complete_callback); + const DidSwapBufferCompleteCallback& did_swap_buffer_complete_callback, + bool needs_background_image); ~SkiaOutputDeviceBufferQueue() override; @@ -126,6 +127,13 @@ // Set to true if no image is to be used for the primary plane of this frame. bool current_frame_has_no_primary_plane_ = false; + // Whether the platform needs an occluded background image. Wayland needs it + // for opaque accelerated widgets and event wiring. + bool needs_background_image_ = false; + // A 4x4 small image that will be scaled to cover an opaque region. + std::unique_ptr<OutputPresenter::Image> background_image_ = nullptr; + // Set to true if background has been scheduled in a frame. + bool background_image_is_scheduled_ = false; }; } // namespace viz
diff --git a/components/viz/service/display_embedder/skia_output_device_buffer_queue_unittest.cc b/components/viz/service/display_embedder/skia_output_device_buffer_queue_unittest.cc index 28ef78e..2220f339 100644 --- a/components/viz/service/display_embedder/skia_output_device_buffer_queue_unittest.cc +++ b/components/viz/service/display_embedder/skia_output_device_buffer_queue_unittest.cc
@@ -290,7 +290,7 @@ gl_surface_, dependency_.get(), shared_image_factory_.get(), shared_image_representation_factory_.get()), dependency_.get(), shared_image_representation_factory_.get(), - memory_tracker_.get(), present_callback); + memory_tracker_.get(), present_callback, false); } void TearDownOnGpu() override {
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc index 51cb927..829b4df 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc +++ b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.cc
@@ -1120,16 +1120,26 @@ if (MakeCurrent(/*need_framebuffer=*/true)) { if (gl_surface_->IsSurfaceless()) { +#if defined(USE_OZONE) + bool needs_background_image = ui::OzonePlatform::GetInstance() + ->GetPlatformProperties() + .needs_background_image; +#else // defined(USE_OZONE) + bool needs_background_image = false; +#endif // !defined(USE_OZONE) + #if !defined(OS_WIN) output_device_ = std::make_unique<SkiaOutputDeviceBufferQueue>( std::make_unique<OutputPresenterGL>( gl_surface_, dependency_, shared_image_factory_.get(), shared_image_representation_factory_.get()), dependency_, shared_image_representation_factory_.get(), - memory_tracker_, GetDidSwapBuffersCompleteCallback()); -#else + memory_tracker_, GetDidSwapBuffersCompleteCallback(), + needs_background_image); +#else // !defined(OS_WIN) NOTIMPLEMENTED(); -#endif + (void)needs_background_image; +#endif // defined(OS_WIN) } else { if (dependency_->NeedsSupportForExternalStencil()) { output_device_ = std::make_unique<SkiaOutputDeviceWebView>( @@ -1181,6 +1191,14 @@ } #endif // defined(USE_X11) +#if defined(USE_OZONE) + bool needs_background_image = ui::OzonePlatform::GetInstance() + ->GetPlatformProperties() + .needs_background_image; +#else // defined(USE_OZONE) + bool needs_background_image = false; +#endif // !defined(USE_OZONE) + #if !defined(OS_WIN) #if defined(OS_FUCHSIA) auto output_presenter = OutputPresenterFuchsia::Create( @@ -1199,10 +1217,11 @@ output_device_ = std::make_unique<SkiaOutputDeviceBufferQueue>( std::move(output_presenter), dependency_, shared_image_representation_factory_.get(), memory_tracker_, - GetDidSwapBuffersCompleteCallback()); + GetDidSwapBuffersCompleteCallback(), needs_background_image); return true; } #endif // !defined(OS_WIN) + (void)needs_background_image; auto output_device = SkiaOutputDeviceVulkan::Create( vulkan_context_provider_, dependency_->GetSurfaceHandle(),
diff --git a/content/browser/BUILD.gn b/content/browser/BUILD.gn index 473f508..4cb472ff 100644 --- a/content/browser/BUILD.gn +++ b/content/browser/BUILD.gn
@@ -159,9 +159,6 @@ "//services/audio/public/cpp", "//services/audio/public/mojom", "//services/cert_verifier:lib", - "//services/content:impl", - "//services/content/public/cpp", - "//services/content/public/mojom", "//services/data_decoder/public/cpp", "//services/data_decoder/public/mojom", "//services/device:lib", @@ -220,6 +217,7 @@ "//third_party/re2", "//third_party/sqlite", "//third_party/webrtc_overrides:webrtc_component", + "//third_party/wtl", "//third_party/zlib", "//third_party/zlib/google:zip", "//ui/accessibility", @@ -626,8 +624,6 @@ "content_index/content_index_metrics.h", "content_index/content_index_service_impl.cc", "content_index/content_index_service_impl.h", - "content_service_delegate_impl.cc", - "content_service_delegate_impl.h", "conversions/conversion_host.cc", "conversions/conversion_host.h", "conversions/conversion_internals_handler_impl.cc",
diff --git a/content/browser/DEPS b/content/browser/DEPS index 9e3aa27..d1f0b17 100644 --- a/content/browser/DEPS +++ b/content/browser/DEPS
@@ -66,8 +66,6 @@ # dependency. "+services", "-services/content", - "+services/content/public", - "+services/content/navigable_contents_delegate.h", "+services/content/service.h", "+services/content/service_delegate.h", "-services/network",
diff --git a/content/browser/browser_context.cc b/content/browser/browser_context.cc index 13837eb3..a785e252 100644 --- a/content/browser/browser_context.cc +++ b/content/browser/browser_context.cc
@@ -36,7 +36,6 @@ #include "content/browser/blob_storage/chrome_blob_storage_context.h" #include "content/browser/browsing_data/browsing_data_remover_impl.h" #include "content/browser/child_process_security_policy_impl.h" -#include "content/browser/content_service_delegate_impl.h" #include "content/browser/download/download_manager_impl.h" #include "content/browser/media/browser_feature_provider.h" #include "content/browser/permissions/permission_controller_impl.h" @@ -60,7 +59,6 @@ #include "media/learning/common/media_learning_tasks.h" #include "media/learning/impl/learning_session_impl.h" #include "media/mojo/services/video_decode_perf_history.h" -#include "services/content/service.h" #include "storage/browser/blob/blob_storage_context.h" #include "storage/browser/database/database_tracker.h" #include "storage/browser/file_system/external_mount_points.h" @@ -73,19 +71,11 @@ class ContentServiceHolder : public base::SupportsUserData::Data { public: - explicit ContentServiceHolder(BrowserContext* browser_context) - : delegate_(browser_context) { - delegate_.AddService(&service_); - } + explicit ContentServiceHolder(BrowserContext* browser_context) {} ~ContentServiceHolder() override = default; - content::Service& service() { return service_; } - private: - ContentServiceDelegateImpl delegate_; - content::Service service_{&delegate_}; - DISALLOW_COPY_AND_ASSIGN(ContentServiceHolder); }; @@ -544,19 +534,6 @@ return unique_id_; } -void BrowserContext::BindNavigableContentsFactory( - mojo::PendingReceiver<content::mojom::NavigableContentsFactory> receiver) { - auto* service_holder = - static_cast<ContentServiceHolder*>(GetUserData(kContentServiceKey)); - if (!service_holder) { - auto new_holder = std::make_unique<ContentServiceHolder>(this); - service_holder = new_holder.get(); - SetUserData(kContentServiceKey, std::move(new_holder)); - } - - service_holder->service().BindNavigableContentsFactory(std::move(receiver)); -} - media::VideoDecodePerfHistory* BrowserContext::GetVideoDecodePerfHistory() { media::VideoDecodePerfHistory* decode_history = static_cast<media::VideoDecodePerfHistory*>(
diff --git a/content/browser/browser_main_loop.cc b/content/browser/browser_main_loop.cc index d49cc3c..f580c3b 100644 --- a/content/browser/browser_main_loop.cc +++ b/content/browser/browser_main_loop.cc
@@ -133,7 +133,6 @@ #include "net/ssl/ssl_config_service.h" #include "ppapi/buildflags/buildflags.h" #include "services/audio/service.h" -#include "services/content/public/cpp/navigable_contents_view.h" #include "services/data_decoder/public/cpp/service_provider.h" #include "services/network/transitional_url_loader_factory_owner.h" #include "skia/ext/event_tracer_impl.h" @@ -1471,10 +1470,6 @@ mojo::SyncCallRestrictions::DisallowSyncCall(); } - // Ensure that any NavigableContentsViews constructed in the browser process - // know they're running in the same process as the service. - content::NavigableContentsView::SetClientRunningInServiceProcess(); - // Start startup tracing through TracingController's interface. TraceLog has // been enabled in content_main_runner where threads are not available. Now We // need to start tracing for all other tracing agents, which require threads.
diff --git a/content/browser/content_service_browsertest.cc b/content/browser/content_service_browsertest.cc deleted file mode 100644 index 91947ca2..0000000 --- a/content/browser/content_service_browsertest.cc +++ /dev/null
@@ -1,223 +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 "base/files/file_path.h" -#include "base/macros.h" -#include "base/path_service.h" -#include "base/run_loop.h" -#include "base/test/bind_test_util.h" -#include "content/public/browser/browser_context.h" -#include "content/public/browser/web_contents.h" -#include "content/public/common/content_paths.h" -#include "content/public/test/browser_test.h" -#include "content/public/test/content_browser_test.h" -#include "content/shell/browser/shell.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "services/content/public/cpp/navigable_contents.h" -#include "services/content/public/mojom/navigable_contents_factory.mojom.h" - -namespace content { -namespace { - -class ContentServiceBrowserTest : public ContentBrowserTest { - public: - ContentServiceBrowserTest() = default; - ~ContentServiceBrowserTest() override = default; - - void SetUpOnMainThread() override { - ContentBrowserTest::SetUpOnMainThread(); - - base::FilePath test_data_path; - CHECK(base::PathService::Get(DIR_TEST_DATA, &test_data_path)); - embedded_test_server()->ServeFilesFromDirectory(test_data_path); - CHECK(embedded_test_server()->Start()); - } - - protected: - content::mojom::NavigableContentsFactory* GetFactory() { - if (!factory_.is_bound()) { - shell() - ->web_contents() - ->GetBrowserContext() - ->BindNavigableContentsFactory(factory_.BindNewPipeAndPassReceiver()); - } - return factory_.get(); - } - - private: - mojo::Remote<content::mojom::NavigableContentsFactory> factory_; - - DISALLOW_COPY_AND_ASSIGN(ContentServiceBrowserTest); -}; - -class StopLoadingObserver : public content::NavigableContentsObserver { - public: - StopLoadingObserver() = default; - ~StopLoadingObserver() override = default; - - void CallOnNextStopLoading(base::OnceClosure callback) { - callback_ = std::move(callback); - } - - private: - // content::NavigableContentsObserver: - void DidStopLoading() override { - if (callback_) - std::move(callback_).Run(); - } - - base::OnceClosure callback_; - - DISALLOW_COPY_AND_ASSIGN(StopLoadingObserver); -}; - -class NavigationObserver : public content::NavigableContentsObserver { - public: - NavigationObserver() = default; - ~NavigationObserver() override = default; - - void CallOnNextNavigation(base::OnceClosure callback) { - callback_ = std::move(callback); - } - - size_t navigations_finished() const { return navigations_finished_; } - const GURL& last_url() const { return last_url_; } - - private: - void DidFinishNavigation( - const GURL& url, - bool is_main_frame, - bool is_error_page, - const net::HttpResponseHeaders* response_headers) override { - ++navigations_finished_; - last_url_ = url; - if (callback_) - std::move(callback_).Run(); - } - - base::OnceClosure callback_; - size_t navigations_finished_ = 0; - GURL last_url_; - - DISALLOW_COPY_AND_ASSIGN(NavigationObserver); -}; - -class NavigationSuppressedObserver : public content::NavigableContentsObserver { - public: - NavigationSuppressedObserver() = default; - ~NavigationSuppressedObserver() override = default; - - void CallOnNextNavigationSuppression(base::OnceClosure callback) { - callback_ = std::move(callback); - } - - size_t navigations_suppressed() const { return navigations_suppressed_; } - const GURL& last_url() const { return last_url_; } - - private: - void DidSuppressNavigation(const GURL& url, - WindowOpenDisposition disposition, - bool from_user_gesture) override { - ++navigations_suppressed_; - last_url_ = url; - if (callback_) - std::move(callback_).Run(); - } - - base::OnceClosure callback_; - size_t navigations_suppressed_ = 0; - GURL last_url_; - - DISALLOW_COPY_AND_ASSIGN(NavigationSuppressedObserver); -}; - -// Verifies that the embedded Content Service is reachable. Does a basic -// end-to-end sanity check to also verify that a NavigableContents is backed by -// a WebContents instance in the browser. -IN_PROC_BROWSER_TEST_F(ContentServiceBrowserTest, EmbeddedContentService) { - auto contents = std::make_unique<NavigableContents>(GetFactory()); - - const GURL kTestUrl = embedded_test_server()->GetURL("/hello.html"); - StopLoadingObserver observer; - base::RunLoop loop; - observer.CallOnNextStopLoading(loop.QuitClosure()); - contents->AddObserver(&observer); - contents->Navigate(kTestUrl); - loop.Run(); - contents->RemoveObserver(&observer); -} - -IN_PROC_BROWSER_TEST_F(ContentServiceBrowserTest, DidFinishNavigation) { - auto contents = std::make_unique<NavigableContents>(GetFactory()); - - const GURL kTestUrl = embedded_test_server()->GetURL("/hello.html"); - NavigationObserver observer; - base::RunLoop loop; - observer.CallOnNextNavigation(loop.QuitClosure()); - contents->AddObserver(&observer); - contents->Navigate(kTestUrl); - - EXPECT_EQ(0u, observer.navigations_finished()); - - loop.Run(); - contents->RemoveObserver(&observer); - - EXPECT_EQ(1u, observer.navigations_finished()); - EXPECT_EQ(kTestUrl, observer.last_url()); -} - -IN_PROC_BROWSER_TEST_F(ContentServiceBrowserTest, SuppressNavigations) { - auto params = mojom::NavigableContentsParams::New(); - params->suppress_navigations = true; - auto contents = - std::make_unique<NavigableContents>(GetFactory(), std::move(params)); - - NavigationObserver navigation_observer; - - NavigationSuppressedObserver suppressed_observer; - base::RunLoop suppressed_loop; - suppressed_observer.CallOnNextNavigationSuppression( - suppressed_loop.QuitClosure()); - - contents->AddObserver(&navigation_observer); - contents->AddObserver(&suppressed_observer); - - // This URL is expected to elicit an automatic navigation on load, which - // should be suppressed because |suppress_navigations| is |true|. - const GURL kTestUrl = - embedded_test_server()->GetURL("/navigate_on_load.html"); - contents->Navigate(kTestUrl); - - EXPECT_EQ(0u, navigation_observer.navigations_finished()); - EXPECT_EQ(0u, suppressed_observer.navigations_suppressed()); - - suppressed_loop.Run(); - - EXPECT_EQ(1u, navigation_observer.navigations_finished()); - EXPECT_EQ(1u, suppressed_observer.navigations_suppressed()); - - EXPECT_EQ(kTestUrl, navigation_observer.last_url()); - EXPECT_EQ(embedded_test_server()->GetURL("/hello.html"), - suppressed_observer.last_url()); - - // Now force a navigation on the same contents. It should complete and we can - // verify that only two navigations (the initial explicit navigation above, - // and the one we do here) were completed. This effectively confirms that the - // scripted navigation to "/hello.html" was fully suppressed. - const GURL kTestUrl2 = embedded_test_server()->GetURL("/title1.html"); - contents->Navigate(kTestUrl2); - - base::RunLoop navigation_loop; - navigation_observer.CallOnNextNavigation(navigation_loop.QuitClosure()); - navigation_loop.Run(); - - contents->RemoveObserver(&navigation_observer); - contents->RemoveObserver(&suppressed_observer); - - EXPECT_EQ(2u, navigation_observer.navigations_finished()); - EXPECT_EQ(kTestUrl2, navigation_observer.last_url()); -} - -} // namespace -} // namespace content
diff --git a/content/browser/content_service_delegate_impl.cc b/content/browser/content_service_delegate_impl.cc deleted file mode 100644 index 3bb64b9..0000000 --- a/content/browser/content_service_delegate_impl.cc +++ /dev/null
@@ -1,251 +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 "content/browser/content_service_delegate_impl.h" - -#include "base/macros.h" -#include "base/optional.h" -#include "content/public/browser/focused_node_details.h" -#include "content/public/browser/navigation_handle.h" -#include "content/public/browser/render_view_host.h" -#include "content/public/browser/render_widget_host.h" -#include "content/public/browser/render_widget_host_view.h" -#include "content/public/browser/web_contents.h" -#include "content/public/browser/web_contents_delegate.h" -#include "content/public/browser/web_contents_observer.h" -#include "services/content/navigable_contents_delegate.h" -#include "services/content/service.h" -#include "third_party/blink/public/mojom/renderer_preferences.mojom.h" -#include "third_party/skia/include/core/SkColor.h" - -namespace content { - -namespace { - -// Bridge between Content Service navigable contents delegation API and a -// WebContentsImpl. -class NavigableContentsDelegateImpl : public content::NavigableContentsDelegate, - public WebContentsDelegate, - public WebContentsObserver { - public: - explicit NavigableContentsDelegateImpl( - BrowserContext* browser_context, - const mojom::NavigableContentsParams& params, - mojom::NavigableContentsClient* client) - : client_(client), - enable_view_auto_resize_(params.enable_view_auto_resize), - auto_resize_min_size_( - params.auto_resize_min_size.value_or(gfx::Size(1, 1))), - auto_resize_max_size_( - params.auto_resize_max_size.value_or(gfx::Size(INT_MAX, INT_MAX))), - background_color_(params.override_background_color - ? base::make_optional(params.background_color) - : base::nullopt) { - WebContents::CreateParams create_params(browser_context); - web_contents_ = WebContents::Create(create_params); - WebContentsObserver::Observe(web_contents_.get()); - web_contents_->SetDelegate(this); - - blink::mojom::RendererPreferences* renderer_prefs = - web_contents_->GetMutableRendererPrefs(); - renderer_prefs->can_accept_load_drops = false; - renderer_prefs->browser_handles_all_top_level_requests = - params.suppress_navigations; - web_contents_->SyncRendererPrefs(); - } - - ~NavigableContentsDelegateImpl() override { - WebContentsObserver::Observe(nullptr); - } - - bool TakeFocus(WebContents* source, bool reverse) override { - client_->ClearViewFocus(); - return true; - } - - private: - void NotifyAXTreeChange() { - auto* rfh = web_contents_->GetMainFrame(); - if (rfh) - client_->UpdateContentAXTree(rfh->GetAXTreeID()); - else - client_->UpdateContentAXTree(ui::AXTreeIDUnknown()); - } - - // content::NavigableContentsDelegate: - gfx::NativeView GetNativeView() override { - return web_contents_->GetNativeView(); - } - - void Navigate(const GURL& url, - content::mojom::NavigateParamsPtr params) override { - NavigationController::LoadURLParams load_url_params(url); - load_url_params.transition_type = ui::PAGE_TRANSITION_AUTO_TOPLEVEL; - load_url_params.should_clear_history_list = - params->should_clear_session_history; - web_contents_->GetController().LoadURLWithParams(load_url_params); - } - - void GoBack( - content::mojom::NavigableContents::GoBackCallback callback) override { - content::NavigationController& controller = web_contents_->GetController(); - if (controller.CanGoBack()) { - std::move(callback).Run(/*success=*/true); - controller.GoBack(); - } else { - std::move(callback).Run(/*success=*/false); - } - } - - void Focus() override { web_contents_->Focus(); } - - void FocusThroughTabTraversal(bool reverse) override { - web_contents_->FocusThroughTabTraversal(reverse); - } - - // WebContentsDelegate: - bool IsWebContentsCreationOverridden( - content::SiteInstance* source_site_instance, - content::mojom::WindowContainerType window_container_type, - const GURL& opener_url, - const std::string& frame_name, - const GURL& target_url) override { - // This method is invoked when attempting to open links in a new tab, e.g.: - // <a href="https://www.google.com/" target="_blank">Link</a> - client_->DidSuppressNavigation(target_url, - WindowOpenDisposition::NEW_FOREGROUND_TAB, - /*from_user_gesture=*/true); - return true; - } - - WebContents* OpenURLFromTab(WebContents* source, - const OpenURLParams& params) override { - client_->DidSuppressNavigation(params.url, params.disposition, - params.user_gesture); - return nullptr; - } - - void ResizeDueToAutoResize(WebContents* web_contents, - const gfx::Size& new_size) override { - DCHECK_EQ(web_contents, web_contents_.get()); - client_->DidAutoResizeView(new_size); - } - - void NavigationStateChanged(WebContents* source, - InvalidateTypes changed_flags) override { - MaybeNotifyCanGoBack(); - } - - // WebContentsObserver: - void RenderViewReady() override { - if (background_color_) { - web_contents_->GetRenderViewHost() - ->GetWidget() - ->GetView() - ->SetBackgroundColor(background_color_.value()); - } - } - - void RenderViewCreated(RenderViewHost* render_view_host) override { - if (background_color_) { - render_view_host->GetWidget()->GetView()->SetBackgroundColor( - background_color_.value()); - } - } - - void RenderViewHostChanged(RenderViewHost* old_host, - RenderViewHost* new_host) override { - if (enable_view_auto_resize_ && web_contents_->GetRenderWidgetHostView()) { - web_contents_->GetRenderWidgetHostView()->EnableAutoResize( - auto_resize_min_size_, auto_resize_max_size_); - } - - if (background_color_) { - new_host->GetWidget()->GetView()->SetBackgroundColor( - background_color_.value()); - } - - NotifyAXTreeChange(); - } - - void DidFinishNavigation(NavigationHandle* navigation_handle) override { - client_->DidFinishNavigation( - navigation_handle->GetURL(), navigation_handle->IsInMainFrame(), - navigation_handle->IsErrorPage(), - navigation_handle->GetResponseHeaders() - ? base::MakeRefCounted<net::HttpResponseHeaders>( - navigation_handle->GetResponseHeaders()->raw_headers()) - : nullptr); - } - - void DidStopLoading() override { client_->DidStopLoading(); } - - void NavigationEntriesDeleted() override { MaybeNotifyCanGoBack(); } - - // Notifies the client whether the web contents can navigate back in its - // history stack. - void MaybeNotifyCanGoBack() { - const bool can_go_back = web_contents_->GetController().CanGoBack(); - if (can_go_back_ == can_go_back) - return; - - can_go_back_ = can_go_back; - client_->UpdateCanGoBack(can_go_back); - } - - void OnFocusChangedInPage(FocusedNodeDetails* details) override { - client_->FocusedNodeChanged(details->is_editable_node, - details->node_bounds_in_screen); - } - - std::unique_ptr<WebContents> web_contents_; - mojom::NavigableContentsClient* const client_; - - const bool enable_view_auto_resize_; - const gfx::Size auto_resize_min_size_; - const gfx::Size auto_resize_max_size_; - const base::Optional<SkColor> background_color_; - - bool can_go_back_ = false; - - DISALLOW_COPY_AND_ASSIGN(NavigableContentsDelegateImpl); -}; - -} // namespace - -ContentServiceDelegateImpl::ContentServiceDelegateImpl( - BrowserContext* browser_context) - : browser_context_(browser_context) {} - -ContentServiceDelegateImpl::~ContentServiceDelegateImpl() { - // This delegate is destroyed immediately before |browser_context_| is - // destroyed. We force-kill any Content Service instances which depend on - // |this|, since they will no longer be functional anyway. - std::set<content::Service*> instances; - std::swap(instances, service_instances_); - for (content::Service* service : instances) { - // Eventually destroys |service|. Ensures that no more calls into |this| - // will occur. - service->ForceQuit(); - } -} - -void ContentServiceDelegateImpl::AddService(content::Service* service) { - service_instances_.insert(service); -} - -void ContentServiceDelegateImpl::WillDestroyServiceInstance( - content::Service* service) { - service_instances_.erase(service); -} - -std::unique_ptr<content::NavigableContentsDelegate> -ContentServiceDelegateImpl::CreateNavigableContentsDelegate( - const mojom::NavigableContentsParams& params, - mojom::NavigableContentsClient* client) { - return std::make_unique<NavigableContentsDelegateImpl>(browser_context_, - params, client); -} - -} // namespace content
diff --git a/content/browser/content_service_delegate_impl.h b/content/browser/content_service_delegate_impl.h deleted file mode 100644 index 4515c7f4..0000000 --- a/content/browser/content_service_delegate_impl.h +++ /dev/null
@@ -1,57 +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 CONTENT_BROWSER_CONTENT_SERVICE_DELEGATE_IMPL_H_ -#define CONTENT_BROWSER_CONTENT_SERVICE_DELEGATE_IMPL_H_ - -#include <memory> -#include <set> - -#include "base/macros.h" -#include "services/content/service_delegate.h" - -namespace content { - -class BrowserContext; - -// Implementation of the main delegate interface for the Content Service. This -// is used to support the Content Service implementation with content/browser -// details, without the Content Service having any build dependencies on -// src/content. There is one instance of this delegate per BrowserContext, -// shared by any ContentService instance instantiated on behalf of that -// BrowserContext. -class ContentServiceDelegateImpl : public content::ServiceDelegate { - public: - // Constructs a new ContentServiceDelegateImpl for |browser_context|. - // |browser_context| must outlive |this|. - explicit ContentServiceDelegateImpl(BrowserContext* browser_context); - ~ContentServiceDelegateImpl() override; - - // Registers |service| with this delegate. Must be called for any |service| - // using |this| as its ContentServiceDelegate. Automatically balanced by - // |WillDestroyServiceInstance()|. - void AddService(content::Service* service); - - private: - // content::ContentServiceDelegate: - void WillDestroyServiceInstance(content::Service* service) override; - std::unique_ptr<NavigableContentsDelegate> CreateNavigableContentsDelegate( - const mojom::NavigableContentsParams& params, - mojom::NavigableContentsClient* client) override; - - BrowserContext* const browser_context_; - - // Tracks ContentService instances currently using this delegate. Necessary - // because the lifetime of |this| is tied to the lifetime of - // |browser_context_|; on destruction of |this|, we need to force all of these - // ContentService instances to terminate, since they cannot operate without - // their delegate. - std::set<content::Service*> service_instances_; - - DISALLOW_COPY_AND_ASSIGN(ContentServiceDelegateImpl); -}; - -} // namespace content - -#endif // CONTENT_BROWSER_CONTENT_SERVICE_DELEGATE_IMPL_H_
diff --git a/content/browser/devtools/service_worker_devtools_agent_host.cc b/content/browser/devtools/service_worker_devtools_agent_host.cc index 589660b3..5d7c46f 100644 --- a/content/browser/devtools/service_worker_devtools_agent_host.cc +++ b/content/browser/devtools/service_worker_devtools_agent_host.cc
@@ -262,9 +262,9 @@ const url::Origin origin = url::Origin::Create(url_); auto factory = URLLoaderFactoryParamsHelper::CreateForWorker( rph, origin, - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, origin, origin, - net::SiteForCookies::FromOrigin(origin)), + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther, + origin, origin, + net::SiteForCookies::FromOrigin(origin)), /*coep_reporter=*/mojo::NullRemote()); return {url::Origin::Create(GetURL()), net::SiteForCookies::FromUrl(GetURL()), std::move(factory)};
diff --git a/content/browser/download/download_browsertest.cc b/content/browser/download/download_browsertest.cc index 02f5dbbd..e88ea947 100644 --- a/content/browser/download/download_browsertest.cc +++ b/content/browser/download/download_browsertest.cc
@@ -3590,7 +3590,7 @@ // The IsolationInfo after the cross-site redirect should be the same as // if there were a top-level navigation to the final URL. net::IsolationInfo expected_isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, final_url_origin, + net::IsolationInfo::RequestType::kMainFrame, final_url_origin, final_url_origin, net::SiteForCookies::FromOrigin(final_url_origin)); // <origin_one>/download-attribute.html initiates a download of @@ -4066,7 +4066,7 @@ kOriginTwo, SlowDownloadHttpResponse::kKnownSizeUrl); url::Origin download_origin = url::Origin::Create(slow_download_url); net::IsolationInfo expected_isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, download_origin, + net::IsolationInfo::RequestType::kMainFrame, download_origin, download_origin, net::SiteForCookies::FromOrigin(download_origin)); GURL frame_url = embedded_test_server()->GetURL( @@ -4135,7 +4135,7 @@ // The IsolationInfo of the download should be the same as that of a top-level // navigation to the download. net::IsolationInfo expected_isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateFrameOnly, download_origin, + net::IsolationInfo::RequestType::kSubFrame, download_origin, download_origin, net::SiteForCookies::FromOrigin(download_origin)); GURL frame_url = origin_one.GetURL("/download-attribute.html?target=" +
diff --git a/content/browser/loader/navigation_url_loader_impl_unittest.cc b/content/browser/loader/navigation_url_loader_impl_unittest.cc index 4ba596326..2249303 100644 --- a/content/browser/loader/navigation_url_loader_impl_unittest.cc +++ b/content/browser/loader/navigation_url_loader_impl_unittest.cc
@@ -205,8 +205,8 @@ new NavigationRequestInfo( std::move(common_params), std::move(begin_params), net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, origin, - origin, net::SiteForCookies::FromUrl(url)), + net::IsolationInfo::RequestType::kMainFrame, origin, origin, + net::SiteForCookies::FromUrl(url)), is_main_frame, false /* parent_is_main_frame */, false /* are_ancestors_secure */, -1 /* frame_tree_node_id */, false /* is_for_guests_only */, false /* report_raw_headers */, @@ -326,9 +326,9 @@ ASSERT_TRUE(most_recent_resource_request_); ASSERT_TRUE(most_recent_resource_request_->trusted_params); EXPECT_TRUE( - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, origin, origin, - net::SiteForCookies::FromOrigin(origin)) + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kMainFrame, + origin, origin, + net::SiteForCookies::FromOrigin(origin)) .IsEqualForTesting( most_recent_resource_request_->trusted_params->isolation_info)); } @@ -345,9 +345,9 @@ ASSERT_TRUE(most_recent_resource_request_->trusted_params); EXPECT_TRUE( - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, origin, origin, - net::SiteForCookies::FromOrigin(origin)) + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kMainFrame, + origin, origin, + net::SiteForCookies::FromOrigin(origin)) .IsEqualForTesting( most_recent_resource_request_->trusted_params->isolation_info)); }
diff --git a/content/browser/loader/navigation_url_loader_unittest.cc b/content/browser/loader/navigation_url_loader_unittest.cc index 1d01369f..222090f 100644 --- a/content/browser/loader/navigation_url_loader_unittest.cc +++ b/content/browser/loader/navigation_url_loader_unittest.cc
@@ -81,8 +81,8 @@ new NavigationRequestInfo( std::move(common_params), std::move(begin_params), net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, origin, - origin, net::SiteForCookies::FromUrl(url)), + net::IsolationInfo::RequestType::kMainFrame, origin, origin, + net::SiteForCookies::FromUrl(url)), true /* is_main_frame */, false /* parent_is_main_frame */, false /* are_ancestors_secure */, -1 /* frame_tree_node_id */, false /* is_for_guests_only */, false /* report_raw_headers */,
diff --git a/content/browser/loader/prefetch_browsertest.cc b/content/browser/loader/prefetch_browsertest.cc index 70a7bd9f..6f25b815 100644 --- a/content/browser/loader/prefetch_browsertest.cc +++ b/content/browser/loader/prefetch_browsertest.cc
@@ -191,8 +191,8 @@ ASSERT_TRUE(request->trusted_params); url::Origin cross_origin = url::Origin::Create(cross_origin_target_url); EXPECT_TRUE(net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, - cross_origin, cross_origin, net::SiteForCookies()) + net::IsolationInfo::RequestType::kOther, cross_origin, + cross_origin, net::SiteForCookies()) .IsEqualForTesting(request->trusted_params->isolation_info)); } @@ -701,8 +701,8 @@ ASSERT_TRUE(request->trusted_params); url::Origin cross_origin = url::Origin::Create(cross_origin_target_url); EXPECT_TRUE(net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, - cross_origin, cross_origin, net::SiteForCookies()) + net::IsolationInfo::RequestType::kOther, cross_origin, + cross_origin, net::SiteForCookies()) .IsEqualForTesting(request->trusted_params->isolation_info)); }
diff --git a/content/browser/loader/prefetch_url_loader_service.cc b/content/browser/loader/prefetch_url_loader_service.cc index 2f85208..ad8b9264 100644 --- a/content/browser/loader/prefetch_url_loader_service.cc +++ b/content/browser/loader/prefetch_url_loader_service.cc
@@ -5,6 +5,7 @@ #include "content/browser/loader/prefetch_url_loader_service.h" #include "base/bind.h" +#include "base/debug/dump_without_crashing.h" #include "base/feature_list.h" #include "base/time/default_tick_clock.h" #include "content/browser/loader/prefetch_url_loader.h" @@ -27,6 +28,14 @@ #include "third_party/blink/public/mojom/loader/resource_load_info.mojom-shared.h" #include "third_party/blink/public/mojom/renderer_preferences.mojom.h" +namespace { +void DumpWithoutCrashing(const network::ResourceRequest& request) { + DEBUG_ALIAS_FOR_GURL(prefetch_buf, request.url); + DEBUG_ALIAS_FOR_GURL(initiator_buf, request.request_initiator->GetURL()); + base::debug::DumpWithoutCrashing(); +} +} // namespace + namespace content { struct PrefetchURLLoaderService::BindContext { @@ -154,16 +163,25 @@ url::Origin destination_origin = url::Origin::Create(resource_request.url); resource_request.trusted_params = network::ResourceRequest::TrustedParams(); resource_request.trusted_params->isolation_info = - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, - destination_origin, destination_origin, net::SiteForCookies()); + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther, + destination_origin, destination_origin, + net::SiteForCookies()); } // Recursive prefetch from a cross-origin main resource prefetch. if (resource_request.recursive_prefetch_token) { - // TODO(crbug.com/1123715): Figure out why we're seeing this condition hold - // true in the field. + // A request's |recursive_prefetch_token| is only provided if the request is + // a recursive prefetch. This means it is expected that the current + // context's |cross_origin_factory| was already created. if (!current_context.cross_origin_factory) { + // This could happen due to a compromised renderer passing in a recursive + // prefetch token for a request that's not a recursive prefetch. Cancel + // the request. + DVLOG(1) << "Recursive prefetch token unexpectedly set."; + DumpWithoutCrashing(resource_request); + mojo::Remote<network::mojom::URLLoaderClient>(std::move(client)) + ->OnComplete( + network::URLLoaderCompletionStatus(net::ERR_INVALID_ARGUMENT)); return; } @@ -177,6 +195,8 @@ // a request in a special way. We'll cancel the request. if (isolation_info_iterator == current_context.prefetch_isolation_infos.end()) { + DVLOG(1) << "Recursive prefetch request is missing prefetch isolation"; + DumpWithoutCrashing(resource_request); mojo::Remote<network::mojom::URLLoaderClient>(std::move(client)) ->OnComplete( network::URLLoaderCompletionStatus(net::ERR_INVALID_ARGUMENT)); @@ -328,7 +348,7 @@ // Create IsolationInfo. url::Origin destination_origin = url::Origin::Create(request.url); net::IsolationInfo preload_isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, destination_origin, + net::IsolationInfo::RequestType::kOther, destination_origin, destination_origin, net::SiteForCookies()); // Generate token.
diff --git a/content/browser/navigation_browsertest.cc b/content/browser/navigation_browsertest.cc index 7fefdec1f..160b983 100644 --- a/content/browser/navigation_browsertest.cc +++ b/content/browser/navigation_browsertest.cc
@@ -865,8 +865,8 @@ monitor.GetRequestInfo(url); ASSERT_TRUE(request->trusted_params); EXPECT_TRUE(net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, origin, - origin, net::SiteForCookies::FromOrigin(origin)) + net::IsolationInfo::RequestType::kMainFrame, origin, origin, + net::SiteForCookies::FromOrigin(origin)) .IsEqualForTesting(request->trusted_params->isolation_info)); } @@ -883,8 +883,8 @@ monitor.GetRequestInfo(url); ASSERT_TRUE(request->trusted_params); EXPECT_TRUE(net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, origin, - origin, net::SiteForCookies::FromOrigin(origin)) + net::IsolationInfo::RequestType::kMainFrame, origin, origin, + net::SiteForCookies::FromOrigin(origin)) .IsEqualForTesting(request->trusted_params->isolation_info)); } @@ -903,8 +903,8 @@ ASSERT_TRUE(main_frame_request.has_value()); ASSERT_TRUE(main_frame_request->trusted_params); EXPECT_TRUE(net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, origin, - origin, net::SiteForCookies::FromOrigin(origin)) + net::IsolationInfo::RequestType::kMainFrame, origin, origin, + net::SiteForCookies::FromOrigin(origin)) .IsEqualForTesting( main_frame_request->trusted_params->isolation_info)); @@ -912,9 +912,9 @@ monitor.GetRequestInfo(iframe_document); ASSERT_TRUE(iframe_request->trusted_params); EXPECT_TRUE( - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateFrameOnly, origin, - iframe_origin, net::SiteForCookies::FromOrigin(origin)) + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kSubFrame, + origin, iframe_origin, + net::SiteForCookies::FromOrigin(origin)) .IsEqualForTesting(iframe_request->trusted_params->isolation_info)); }
diff --git a/content/browser/renderer_host/navigator_unittest.cc b/content/browser/renderer_host/navigator_unittest.cc index 38141d7..8efe3f0 100644 --- a/content/browser/renderer_host/navigator_unittest.cc +++ b/content/browser/renderer_host/navigator_unittest.cc
@@ -303,10 +303,10 @@ EXPECT_EQ(kUrl2, subframe_request->common_params().url); EXPECT_EQ(kUrl2, subframe_loader->request_info()->common_params->url); EXPECT_TRUE( - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateFrameOnly, - url::Origin::Create(kUrl1), url::Origin::Create(kUrl2), - net::SiteForCookies::FromUrl(kUrl1)) + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kSubFrame, + url::Origin::Create(kUrl1), + url::Origin::Create(kUrl2), + net::SiteForCookies::FromUrl(kUrl1)) .IsEqualForTesting(subframe_loader->request_info()->isolation_info)); EXPECT_FALSE(subframe_loader->request_info()->is_main_frame); @@ -344,10 +344,10 @@ EXPECT_EQ(kUrl3, main_request->common_params().url); EXPECT_EQ(kUrl3, main_loader->request_info()->common_params->url); EXPECT_TRUE( - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, - url::Origin::Create(kUrl3), url::Origin::Create(kUrl3), - net::SiteForCookies::FromUrl(kUrl3)) + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kMainFrame, + url::Origin::Create(kUrl3), + url::Origin::Create(kUrl3), + net::SiteForCookies::FromUrl(kUrl3)) .IsEqualForTesting(main_loader->request_info()->isolation_info)); EXPECT_TRUE(main_loader->request_info()->is_main_frame); EXPECT_FALSE(main_loader->request_info()->parent_is_main_frame);
diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc index 5119fbc..36316e0 100644 --- a/content/browser/renderer_host/render_frame_host_impl.cc +++ b/content/browser/renderer_host/render_frame_host_impl.cc
@@ -2569,12 +2569,12 @@ net::IsolationInfo RenderFrameHostImpl::ComputeIsolationInfoForNavigation( const GURL& destination) const { - net::IsolationInfo::RedirectMode redirect_mode = + net::IsolationInfo::RequestType request_type = frame_tree_node_->IsMainFrame() - ? net::IsolationInfo::RedirectMode::kUpdateTopFrame - : net::IsolationInfo::RedirectMode::kUpdateFrameOnly; + ? net::IsolationInfo::RequestType::kMainFrame + : net::IsolationInfo::RequestType::kSubFrame; return ComputeIsolationInfoInternal(url::Origin::Create(destination), - redirect_mode); + request_type); } net::SiteForCookies RenderFrameHostImpl::ComputeSiteForCookies() { @@ -2583,7 +2583,7 @@ net::IsolationInfo RenderFrameHostImpl::ComputeIsolationInfoInternal( const url::Origin& frame_origin, - net::IsolationInfo::RedirectMode redirect_mode) const { + net::IsolationInfo::RequestType request_type) const { url::Origin top_frame_origin = ComputeTopFrameOrigin(frame_origin); net::SiteForCookies candidate_site_for_cookies = @@ -2594,7 +2594,7 @@ ->ShouldTreatURLSchemeAsFirstPartyWhenTopLevel( top_frame_origin.scheme(), GURL::SchemeIsCryptographic(frame_origin.scheme()))) { - return net::IsolationInfo::Create(redirect_mode, top_frame_origin, + return net::IsolationInfo::Create(request_type, top_frame_origin, frame_origin, candidate_site_for_cookies); } @@ -2606,23 +2606,23 @@ rfh = rfh->parent_) { if (!candidate_site_for_cookies.IsEquivalent( net::SiteForCookies::FromOrigin(rfh->last_committed_origin_))) { - return net::IsolationInfo::Create(redirect_mode, top_frame_origin, + return net::IsolationInfo::Create(request_type, top_frame_origin, frame_origin, net::SiteForCookies()); } candidate_site_for_cookies.MarkIfCrossScheme(rfh->last_committed_origin_); } - // If |redirect_mode| is kUpdateNothing, then IsolationInfo is being computed + // If |request_type| is kOther, then IsolationInfo is being computed // for subresource requests. In that case, also need to check the // SiteForCookies against the frame origin. - if (redirect_mode == net::IsolationInfo::RedirectMode::kUpdateNothing && + if (request_type == net::IsolationInfo::RequestType::kOther && !candidate_site_for_cookies.IsEquivalent( net::SiteForCookies::FromOrigin(frame_origin))) { - return net::IsolationInfo::Create(redirect_mode, top_frame_origin, + return net::IsolationInfo::Create(request_type, top_frame_origin, frame_origin, net::SiteForCookies()); } - return net::IsolationInfo::Create(redirect_mode, top_frame_origin, + return net::IsolationInfo::Create(request_type, top_frame_origin, frame_origin, candidate_site_for_cookies); } @@ -2643,7 +2643,7 @@ ? new_frame_creator.DeriveNewOpaqueOrigin() : new_frame_creator; isolation_info_ = ComputeIsolationInfoInternal( - new_frame_origin, net::IsolationInfo::RedirectMode::kUpdateNothing); + new_frame_origin, net::IsolationInfo::RequestType::kOther); SetLastCommittedOrigin(new_frame_origin); // Construct the frame's feature policy only once we know its initial @@ -6124,9 +6124,9 @@ // for opaque origin same document navigations, a new origin should not be // created as that would be different from the original. if (!is_same_document) { - isolation_info_ = ComputeIsolationInfoInternal( - main_world_origin_for_url_loader_factory, - net::IsolationInfo::RedirectMode::kUpdateNothing); + isolation_info_ = + ComputeIsolationInfoInternal(main_world_origin_for_url_loader_factory, + net::IsolationInfo::RequestType::kOther); } DCHECK(!isolation_info_.IsEmpty());
diff --git a/content/browser/renderer_host/render_frame_host_impl.h b/content/browser/renderer_host/render_frame_host_impl.h index 8c48f77f..2e8077b 100644 --- a/content/browser/renderer_host/render_frame_host_impl.h +++ b/content/browser/renderer_host/render_frame_host_impl.h
@@ -1999,7 +1999,7 @@ // subresources, |frame_origin| is the value of |last_committed_origin_|. net::IsolationInfo ComputeIsolationInfoInternal( const url::Origin& frame_origin, - net::IsolationInfo::RedirectMode redirect_mode) const; + net::IsolationInfo::RequestType request_type) const; #if defined(OS_ANDROID) void ForwardGetInterfaceToRenderFrame(const std::string& interface_name,
diff --git a/content/browser/renderer_host/render_process_host_impl.cc b/content/browser/renderer_host/render_process_host_impl.cc index b596fff0..58057f66 100644 --- a/content/browser/renderer_host/render_process_host_impl.cc +++ b/content/browser/renderer_host/render_process_host_impl.cc
@@ -2158,9 +2158,9 @@ mojo::MakeSelfOwnedReceiver( std::make_unique<WebSocketConnectorImpl>( GetID(), MSG_ROUTING_NONE, origin, - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, origin, origin, - net::SiteForCookies::FromOrigin(origin))), + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther, + origin, origin, + net::SiteForCookies::FromOrigin(origin))), std::move(receiver)); }
diff --git a/content/browser/service_worker/embedded_worker_instance.cc b/content/browser/service_worker/embedded_worker_instance.cc index f2a5b2b..18bc53c 100644 --- a/content/browser/service_worker/embedded_worker_instance.cc +++ b/content/browser/service_worker/embedded_worker_instance.cc
@@ -1219,9 +1219,9 @@ network::mojom::URLLoaderFactoryParamsPtr factory_params = URLLoaderFactoryParamsHelper::CreateForWorker( rph, origin, - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, origin, origin, - net::SiteForCookies::FromOrigin(origin)), + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther, + origin, origin, + net::SiteForCookies::FromOrigin(origin)), std::move(coep_reporter)); bool bypass_redirect_checks = false;
diff --git a/content/browser/service_worker/service_worker_single_script_update_checker.cc b/content/browser/service_worker/service_worker_single_script_update_checker.cc index 0c23898d..928f8e1 100644 --- a/content/browser/service_worker/service_worker_single_script_update_checker.cc +++ b/content/browser/service_worker/service_worker_single_script_update_checker.cc
@@ -158,7 +158,7 @@ // shared network resources like the http cache. resource_request.trusted_params = network::ResourceRequest::TrustedParams(); resource_request.trusted_params->isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, origin, origin, + net::IsolationInfo::RequestType::kOther, origin, origin, net::SiteForCookies::FromOrigin(origin)); if (is_main_script_) {
diff --git a/content/browser/web_package/signed_exchange_loader.cc b/content/browser/web_package/signed_exchange_loader.cc index a71f17b..9b51a9a 100644 --- a/content/browser/web_package/signed_exchange_loader.cc +++ b/content/browser/web_package/signed_exchange_loader.cc
@@ -151,7 +151,7 @@ (outer_request_.trusted_params && !outer_request_.trusted_params->isolation_info.IsEmpty()) ? net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, + net::IsolationInfo::RequestType::kOther, *outer_request_.trusted_params->isolation_info .top_frame_origin(), *outer_request_.trusted_params->isolation_info.frame_origin(),
diff --git a/content/browser/worker_host/shared_worker_host.cc b/content/browser/worker_host/shared_worker_host.cc index 70c9e83..2ab9af7 100644 --- a/content/browser/worker_host/shared_worker_host.cc +++ b/content/browser/worker_host/shared_worker_host.cc
@@ -303,9 +303,9 @@ network::mojom::URLLoaderFactoryParamsPtr factory_params = URLLoaderFactoryParamsHelper::CreateForWorker( worker_process_host_, instance_.constructor_origin(), - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, origin, origin, - net::SiteForCookies::FromOrigin(origin)), + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther, + origin, origin, + net::SiteForCookies::FromOrigin(origin)), /*coep_reporter=*/mojo::NullRemote()); return factory_params; }
diff --git a/content/browser/worker_host/shared_worker_service_impl.cc b/content/browser/worker_host/shared_worker_service_impl.cc index 5cc3fb6..ddf7709 100644 --- a/content/browser/worker_host/shared_worker_service_impl.cc +++ b/content/browser/worker_host/shared_worker_service_impl.cc
@@ -326,8 +326,8 @@ creator_render_frame_host, net::SiteForCookies::FromOrigin(worker_origin), host->instance().constructor_origin(), net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, worker_origin, - worker_origin, net::SiteForCookies::FromOrigin(worker_origin)), + net::IsolationInfo::RequestType::kOther, worker_origin, worker_origin, + net::SiteForCookies::FromOrigin(worker_origin)), credentials_mode, std::move(outside_fetch_client_settings_object), blink::mojom::ResourceType::kSharedWorker, service_worker_context_, service_worker_handle_raw, std::move(appcache_host),
diff --git a/content/browser/worker_host/worker_script_loader_factory_unittest.cc b/content/browser/worker_host/worker_script_loader_factory_unittest.cc index 8af70181..f778bb3 100644 --- a/content/browser/worker_host/worker_script_loader_factory_unittest.cc +++ b/content/browser/worker_host/worker_script_loader_factory_unittest.cc
@@ -70,9 +70,8 @@ resource_request.trusted_params = network::ResourceRequest::TrustedParams(); resource_request.trusted_params->isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, - url::Origin::Create(url), url::Origin::Create(url), - net::SiteForCookies()); + net::IsolationInfo::RequestType::kOther, url::Origin::Create(url), + url::Origin::Create(url), net::SiteForCookies()); resource_request.resource_type = static_cast<int>(blink::mojom::ResourceType::kSharedWorker); factory->CreateLoaderAndStart(
diff --git a/content/public/browser/BUILD.gn b/content/public/browser/BUILD.gn index 6344efce..9b2579c 100644 --- a/content/public/browser/BUILD.gn +++ b/content/public/browser/BUILD.gn
@@ -423,7 +423,6 @@ "//mojo/public/cpp/system", "//services/audio/public/mojom", "//services/cert_verifier/public/mojom", - "//services/content/public/mojom", "//services/data_decoder/public/mojom", "//services/device/public/mojom:device_service", "//services/device/public/mojom:usb",
diff --git a/content/public/browser/DEPS b/content/public/browser/DEPS index de8d3de..a1752b56 100644 --- a/content/public/browser/DEPS +++ b/content/public/browser/DEPS
@@ -10,7 +10,6 @@ "+device/vr/public/cpp", "+device/vr/public/mojom", "+services/audio/public", - "+services/content/public", "+services/data_decoder/public", "+services/device/public", "+services/media_session/public",
diff --git a/content/public/browser/browser_context.h b/content/public/browser/browser_context.h index 506ae1b..4e55b1a7 100644 --- a/content/public/browser/browser_context.h +++ b/content/public/browser/browser_context.h
@@ -21,7 +21,6 @@ #include "content/common/content_export.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" -#include "services/content/public/mojom/navigable_contents_factory.mojom-forward.h" #include "services/network/public/mojom/cors_origin_pattern.mojom-forward.h" #include "services/network/public/mojom/network_context.mojom-forward.h" #include "third_party/blink/public/mojom/blob/blob.mojom-forward.h" @@ -322,11 +321,6 @@ // Returns a SharedCorsOriginAccessList instance. virtual SharedCorsOriginAccessList* GetSharedCorsOriginAccessList(); - // Binds a NavigableContentsFactory interface receiver to this browser - // context. - virtual void BindNavigableContentsFactory( - mojo::PendingReceiver<content::mojom::NavigableContentsFactory> receiver); - // Returns a unique string associated with this browser context. virtual const std::string& UniqueId();
diff --git a/content/public/test/render_view_test.cc b/content/public/test/render_view_test.cc index 02f113f58..4166b1a9 100644 --- a/content/public/test/render_view_test.cc +++ b/content/public/test/render_view_test.cc
@@ -236,8 +236,7 @@ return std::make_unique<MockAgentSchedulingGroup>( render_thread, std::move(agent_scheduling_group_host), - std::move(agent_scheduling_group_receiver), - base::OnceCallback<void(const AgentSchedulingGroup*)>()); + std::move(agent_scheduling_group_receiver)); } } // namespace @@ -285,8 +284,7 @@ } RenderViewTest::RendererBlinkPlatformImplTestOverride:: - ~RendererBlinkPlatformImplTestOverride() { -} + ~RendererBlinkPlatformImplTestOverride() = default; RendererBlinkPlatformImpl* RenderViewTest::RendererBlinkPlatformImplTestOverride::Get() const { @@ -696,7 +694,6 @@ base::DoNothing()); } - bool RenderViewTest::SimulateElementRightClick(const std::string& element_id) { gfx::Rect bounds = GetElementBounds(element_id); if (bounds.IsEmpty()) @@ -761,8 +758,7 @@ blink::DocumentUpdateReason::kTest); } -void RenderViewTest::Resize(gfx::Size new_size, - bool is_fullscreen_granted) { +void RenderViewTest::Resize(gfx::Size new_size, bool is_fullscreen_granted) { blink::VisualProperties visual_properties; visual_properties.screen_info = blink::ScreenInfo(); visual_properties.new_size = new_size;
diff --git a/content/renderer/agent_scheduling_group.cc b/content/renderer/agent_scheduling_group.cc index e0dd2a3e..865c929 100644 --- a/content/renderer/agent_scheduling_group.cc +++ b/content/renderer/agent_scheduling_group.cc
@@ -34,28 +34,18 @@ // MaybeAssociatedReceiver: AgentSchedulingGroup::MaybeAssociatedReceiver::MaybeAssociatedReceiver( AgentSchedulingGroup& impl, - PendingReceiver<mojom::AgentSchedulingGroup> receiver, - base::OnceClosure disconnect_handler) + PendingReceiver<mojom::AgentSchedulingGroup> receiver) : receiver_(absl::in_place_type<Receiver<mojom::AgentSchedulingGroup>>, &impl, - std::move(receiver)) { - if (disconnect_handler) - absl::get<Receiver<mojom::AgentSchedulingGroup>>(receiver_) - .set_disconnect_handler(std::move(disconnect_handler)); -} + std::move(receiver)) {} AgentSchedulingGroup::MaybeAssociatedReceiver::MaybeAssociatedReceiver( AgentSchedulingGroup& impl, - PendingAssociatedReceiver<mojom::AgentSchedulingGroup> receiver, - base::OnceClosure disconnect_handler) + PendingAssociatedReceiver<mojom::AgentSchedulingGroup> receiver) : receiver_( absl::in_place_type<AssociatedReceiver<mojom::AgentSchedulingGroup>>, &impl, - std::move(receiver)) { - if (disconnect_handler) - absl::get<AssociatedReceiver<mojom::AgentSchedulingGroup>>(receiver_) - .set_disconnect_handler(std::move(disconnect_handler)); -} + std::move(receiver)) {} AgentSchedulingGroup::MaybeAssociatedReceiver::~MaybeAssociatedReceiver() = default; @@ -83,17 +73,11 @@ AgentSchedulingGroup::AgentSchedulingGroup( RenderThread& render_thread, PendingRemote<mojom::AgentSchedulingGroupHost> host_remote, - PendingReceiver<mojom::AgentSchedulingGroup> receiver, - base::OnceCallback<void(const AgentSchedulingGroup*)> - mojo_disconnect_handler) + PendingReceiver<mojom::AgentSchedulingGroup> receiver) // TODO(crbug.com/1111231): Mojo interfaces should be associated with // per-ASG task runners instead of default. : render_thread_(render_thread), - receiver_(*this, - std::move(receiver), - mojo_disconnect_handler - ? base::BindOnce(std::move(mojo_disconnect_handler), this) - : base::OnceClosure()), + receiver_(*this, std::move(receiver)), host_remote_(std::move(host_remote)) { DCHECK(base::FeatureList::IsEnabled( features::kMbiDetachAgentSchedulingGroupFromChannel)); @@ -102,17 +86,11 @@ AgentSchedulingGroup::AgentSchedulingGroup( RenderThread& render_thread, PendingAssociatedRemote<mojom::AgentSchedulingGroupHost> host_remote, - PendingAssociatedReceiver<mojom::AgentSchedulingGroup> receiver, - base::OnceCallback<void(const AgentSchedulingGroup*)> - mojo_disconnect_handler) + PendingAssociatedReceiver<mojom::AgentSchedulingGroup> receiver) // TODO(crbug.com/1111231): Mojo interfaces should be associated with // per-ASG task runners instead of default. : render_thread_(render_thread), - receiver_(*this, - std::move(receiver), - mojo_disconnect_handler - ? base::BindOnce(std::move(mojo_disconnect_handler), this) - : base::OnceClosure()), + receiver_(*this, std::move(receiver)), host_remote_(std::move(host_remote)) { DCHECK(!base::FeatureList::IsEnabled( features::kMbiDetachAgentSchedulingGroupFromChannel));
diff --git a/content/renderer/agent_scheduling_group.h b/content/renderer/agent_scheduling_group.h index 033182af..d22e19c 100644 --- a/content/renderer/agent_scheduling_group.h +++ b/content/renderer/agent_scheduling_group.h
@@ -5,7 +5,6 @@ #ifndef CONTENT_RENDERER_AGENT_SCHEDULING_GROUP_H_ #define CONTENT_RENDERER_AGENT_SCHEDULING_GROUP_H_ -#include "base/callback.h" #include "content/common/agent_scheduling_group.mojom.h" #include "content/common/associated_interfaces.mojom.h" #include "content/common/content_export.h" @@ -36,21 +35,15 @@ public mojom::RouteProvider, public blink::mojom::AssociatedInterfaceProvider { public: - // |mojo_disconnect_handler| is an optional callback that will be called with - // |this| when |receiver| is disconnected. AgentSchedulingGroup( RenderThread& render_thread, mojo::PendingRemote<mojom::AgentSchedulingGroupHost> host_remote, - mojo::PendingReceiver<mojom::AgentSchedulingGroup> receiver, - base::OnceCallback<void(const AgentSchedulingGroup*)> - mojo_disconnect_handler); + mojo::PendingReceiver<mojom::AgentSchedulingGroup> receiver); AgentSchedulingGroup( RenderThread& render_thread, mojo::PendingAssociatedRemote<mojom::AgentSchedulingGroupHost> host_remote, - mojo::PendingAssociatedReceiver<mojom::AgentSchedulingGroup> receiver, - base::OnceCallback<void(const AgentSchedulingGroup*)> - mojo_disconnect_handler); + mojo::PendingAssociatedReceiver<mojom::AgentSchedulingGroup> receiver); ~AgentSchedulingGroup() override; AgentSchedulingGroup(const AgentSchedulingGroup&) = delete; @@ -79,12 +72,10 @@ public: MaybeAssociatedReceiver( AgentSchedulingGroup& impl, - mojo::PendingReceiver<mojom::AgentSchedulingGroup> receiver, - base::OnceClosure disconnect_handler); + mojo::PendingReceiver<mojom::AgentSchedulingGroup> receiver); MaybeAssociatedReceiver( AgentSchedulingGroup& impl, - mojo::PendingAssociatedReceiver<mojom::AgentSchedulingGroup> receiver, - base::OnceClosure disconnect_handler); + mojo::PendingAssociatedReceiver<mojom::AgentSchedulingGroup> receiver); ~MaybeAssociatedReceiver(); private:
diff --git a/content/renderer/mock_agent_scheduling_group.cc b/content/renderer/mock_agent_scheduling_group.cc index 28f240ca..59cd28f 100644 --- a/content/renderer/mock_agent_scheduling_group.cc +++ b/content/renderer/mock_agent_scheduling_group.cc
@@ -12,13 +12,10 @@ MockAgentSchedulingGroup::MockAgentSchedulingGroup( RenderThread& render_thread, mojo::PendingAssociatedRemote<mojom::AgentSchedulingGroupHost> host_remote, - mojo::PendingAssociatedReceiver<mojom::AgentSchedulingGroup> receiver, - base::OnceCallback<void(const AgentSchedulingGroup*)> - mojo_disconnect_handler) + mojo::PendingAssociatedReceiver<mojom::AgentSchedulingGroup> receiver) : AgentSchedulingGroup(render_thread, std::move(host_remote), - std::move(receiver), - std::move(mojo_disconnect_handler)) {} + std::move(receiver)) {} mojom::RouteProvider* MockAgentSchedulingGroup::GetRemoteRouteProvider() { DCHECK(!RenderThreadImpl::current());
diff --git a/content/renderer/mock_agent_scheduling_group.h b/content/renderer/mock_agent_scheduling_group.h index f927d8d..3082a40 100644 --- a/content/renderer/mock_agent_scheduling_group.h +++ b/content/renderer/mock_agent_scheduling_group.h
@@ -28,9 +28,7 @@ RenderThread& render_thread, mojo::PendingAssociatedRemote<mojom::AgentSchedulingGroupHost> host_remote, - mojo::PendingAssociatedReceiver<mojom::AgentSchedulingGroup> receiver, - base::OnceCallback<void(const AgentSchedulingGroup*)> - mojo_disconnect_handler); + mojo::PendingAssociatedReceiver<mojom::AgentSchedulingGroup> receiver); mojom::RouteProvider* GetRemoteRouteProvider() override; };
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc index 0a63771..aa587df 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc
@@ -575,10 +575,6 @@ void RenderThreadImpl::Init() { TRACE_EVENT0("startup", "RenderThreadImpl::Init"); - remove_agent_scheduling_group_callback_ = - base::BindRepeating(&RenderThreadImpl::RemoveAgentSchedulingGroup, - weak_factory_.GetWeakPtr()); - GetContentClient()->renderer()->PostIOThreadCreated(GetIOTaskRunner().get()); base::trace_event::TraceLog::GetInstance()->SetThreadSortIndex( @@ -1709,22 +1705,13 @@ params->has_committed_real_load); } -void RenderThreadImpl::RemoveAgentSchedulingGroup( - const AgentSchedulingGroup* agent_scheduling_group) { - DCHECK(agent_scheduling_group); - DCHECK(base::Contains(agent_scheduling_groups_, agent_scheduling_group)); - auto it = agent_scheduling_groups_.find(agent_scheduling_group); - agent_scheduling_groups_.erase(it); -} - void RenderThreadImpl::CreateAgentSchedulingGroup( mojo::PendingRemote<mojom::AgentSchedulingGroupHost> agent_scheduling_group_host, mojo::PendingReceiver<mojom::AgentSchedulingGroup> agent_scheduling_group) { agent_scheduling_groups_.emplace(std::make_unique<AgentSchedulingGroup>( *this, std::move(agent_scheduling_group_host), - std::move(agent_scheduling_group), - remove_agent_scheduling_group_callback_)); + std::move(agent_scheduling_group))); } void RenderThreadImpl::CreateAssociatedAgentSchedulingGroup( @@ -1734,8 +1721,7 @@ agent_scheduling_group) { agent_scheduling_groups_.emplace(std::make_unique<AgentSchedulingGroup>( *this, std::move(agent_scheduling_group_host), - std::move(agent_scheduling_group), - remove_agent_scheduling_group_callback_)); + std::move(agent_scheduling_group))); } void RenderThreadImpl::CreateFrameProxy(
diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h index b741979..a2427ff6 100644 --- a/content/renderer/render_thread_impl.h +++ b/content/renderer/render_thread_impl.h
@@ -514,11 +514,6 @@ void OnRendererInterfaceReceiver( mojo::PendingAssociatedReceiver<mojom::Renderer> receiver); - void RemoveAgentSchedulingGroup( - const AgentSchedulingGroup* agent_scheduling_group); - base::RepeatingCallback<void(const AgentSchedulingGroup*)> - remove_agent_scheduling_group_callback_; - std::unique_ptr<discardable_memory::ClientDiscardableSharedMemoryManager> discardable_memory_allocator_;
diff --git a/content/test/BUILD.gn b/content/test/BUILD.gn index 33b3f3fb..4ab7b22c 100644 --- a/content/test/BUILD.gn +++ b/content/test/BUILD.gn
@@ -969,7 +969,6 @@ "../browser/child_process_launcher_browsertest.cc", "../browser/child_process_security_policy_browsertest.cc", "../browser/content_index/content_index_browsertest.cc", - "../browser/content_service_browsertest.cc", "../browser/conversions/conversion_internals_browsertest.cc", "../browser/conversions/conversion_registration_browsertest.cc", "../browser/conversions/conversions_browsertest.cc", @@ -1274,8 +1273,6 @@ "//ppapi/buildflags", "//ppapi/c:c", "//services/audio/public/cpp", - "//services/content/public/cpp", - "//services/content/public/mojom", "//services/data_decoder/public/cpp", "//services/data_decoder/public/cpp:test_support", "//services/data_decoder/public/mojom",
diff --git a/device/bluetooth/strings/bluetooth_strings_af.xtb b/device/bluetooth/strings/bluetooth_strings_af.xtb index 695e6cf..2be549d 100644 --- a/device/bluetooth/strings/bluetooth_strings_af.xtb +++ b/device/bluetooth/strings/bluetooth_strings_af.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, videotoestel</translation> <translation id="5271696982761495740">Tablet (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">Onbekende of ongesteunde toestel (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, modem</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />, motoroudiotoestel</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, sleutelbord</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_ar.xtb b/device/bluetooth/strings/bluetooth_strings_ar.xtb index bc67dcd..b8e3705 100644 --- a/device/bluetooth/strings/bluetooth_strings_ar.xtb +++ b/device/bluetooth/strings/bluetooth_strings_ar.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />، جهاز فيديو</translation> <translation id="5271696982761495740">الجهاز اللوحي (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">جهاز غير معروف أو غير متوافق (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />، مودم</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />، جهاز صوت سيارة</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />، لوحة مفاتيح</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_be.xtb b/device/bluetooth/strings/bluetooth_strings_be.xtb index b1d5782c..61f95ca 100644 --- a/device/bluetooth/strings/bluetooth_strings_be.xtb +++ b/device/bluetooth/strings/bluetooth_strings_be.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173">Відэапрылада (<ph name="DEVICE_NAME" />)</translation> <translation id="5271696982761495740">Планшэт (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">Прылада невядомая або не падтрымліваецца (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618">Мадэм (<ph name="DEVICE_NAME" />)</translation> <translation id="6459740836740815150">Аўтамабільная аўдыясістэма (<ph name="DEVICE_NAME" />)</translation> <translation id="6542922424766292144">Клавіятура (<ph name="DEVICE_NAME" />)</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_bg.xtb b/device/bluetooth/strings/bluetooth_strings_bg.xtb index 7413c7c..167f88c 100644 --- a/device/bluetooth/strings/bluetooth_strings_bg.xtb +++ b/device/bluetooth/strings/bluetooth_strings_bg.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, видеоустройство</translation> <translation id="5271696982761495740">Таблет (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">Неизвестно или неподдържано устройство (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, модем</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />, автомобилна аудиосистема</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, клавиатура</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_es-419.xtb b/device/bluetooth/strings/bluetooth_strings_es-419.xtb index 2c601ce..d16dad95 100644 --- a/device/bluetooth/strings/bluetooth_strings_es-419.xtb +++ b/device/bluetooth/strings/bluetooth_strings_es-419.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, dispositivo de video</translation> <translation id="5271696982761495740">Tablet (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">Dispositivo desconocido o no compatible (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, módem</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />, dispositivo de audio del automóvil</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, teclado</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_eu.xtb b/device/bluetooth/strings/bluetooth_strings_eu.xtb index aad526f4..449070d1c 100644 --- a/device/bluetooth/strings/bluetooth_strings_eu.xtb +++ b/device/bluetooth/strings/bluetooth_strings_eu.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173">Bideo-gailua (<ph name="DEVICE_NAME" />)</translation> <translation id="5271696982761495740">Tableta (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">Gailu ezezaguna edo bateraezina (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618">Modema (<ph name="DEVICE_NAME" />)</translation> <translation id="6459740836740815150">Autorako audio-gailua (<ph name="DEVICE_NAME" />)</translation> <translation id="6542922424766292144">Teklatua (<ph name="DEVICE_NAME" />)</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_fa.xtb b/device/bluetooth/strings/bluetooth_strings_fa.xtb index a2f8df0e..7b49647 100644 --- a/device/bluetooth/strings/bluetooth_strings_fa.xtb +++ b/device/bluetooth/strings/bluetooth_strings_fa.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />، دستگاه ویدیو</translation> <translation id="5271696982761495740">رایانهٔ لوحی (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">دستگاه ناشناس یا پشتیبانی نشده (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /><ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />، مودم</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />، دستگاه صوتی خودرو</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />، صفحهکلید</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_fi.xtb b/device/bluetooth/strings/bluetooth_strings_fi.xtb index 2101dbe..23a277b8 100644 --- a/device/bluetooth/strings/bluetooth_strings_fi.xtb +++ b/device/bluetooth/strings/bluetooth_strings_fi.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, videolaite</translation> <translation id="5271696982761495740">Tabletti (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">Tuntematon tai ei-tuettu laite (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, modeemi</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />, auton äänilaite</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, näppäimistö</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_fr-CA.xtb b/device/bluetooth/strings/bluetooth_strings_fr-CA.xtb index 72dfaab..7f0326b 100644 --- a/device/bluetooth/strings/bluetooth_strings_fr-CA.xtb +++ b/device/bluetooth/strings/bluetooth_strings_fr-CA.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, appareil vidéo</translation> <translation id="5271696982761495740">Tablette (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">Appareil inconnu ou non pris en charge (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, modem</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />, appareil audio de voiture</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, clavier</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_hu.xtb b/device/bluetooth/strings/bluetooth_strings_hu.xtb index b5184ec0..1cd2fa9 100644 --- a/device/bluetooth/strings/bluetooth_strings_hu.xtb +++ b/device/bluetooth/strings/bluetooth_strings_hu.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, videoeszköz</translation> <translation id="5271696982761495740">Táblagép (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">Ismeretlen vagy nem támogatott eszköz (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, modem</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />, autós audioeszköz</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, billentyűzet</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_hy.xtb b/device/bluetooth/strings/bluetooth_strings_hy.xtb index 37c8a21..239067169f 100644 --- a/device/bluetooth/strings/bluetooth_strings_hy.xtb +++ b/device/bluetooth/strings/bluetooth_strings_hy.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, տեսասարք</translation> <translation id="5271696982761495740">Պլանշետ (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">Անհայտ կամ չաջակցվող սարք (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, մոդեմ</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />, ավտոմեքենայի աուդիո սարք</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, ստեղնաշար</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_iw.xtb b/device/bluetooth/strings/bluetooth_strings_iw.xtb index 5cbb266..2c87d602 100644 --- a/device/bluetooth/strings/bluetooth_strings_iw.xtb +++ b/device/bluetooth/strings/bluetooth_strings_iw.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, מכשיר וידאו</translation> <translation id="5271696982761495740">טאבלט (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">מכשיר לא ידוע או שאינו נתמך (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, מודם</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />, מערכת שמע ברכב</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, מקלדת</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_ja.xtb b/device/bluetooth/strings/bluetooth_strings_ja.xtb index 05304793..83a40c51 100644 --- a/device/bluetooth/strings/bluetooth_strings_ja.xtb +++ b/device/bluetooth/strings/bluetooth_strings_ja.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />、ビデオ機器</translation> <translation id="5271696982761495740">タブレット(<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">不明またはサポートされていないデバイス(<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />、モデム</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />、カーオーディオ機器</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />、キーボード</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_ml.xtb b/device/bluetooth/strings/bluetooth_strings_ml.xtb index e38cbe2..fad69da 100644 --- a/device/bluetooth/strings/bluetooth_strings_ml.xtb +++ b/device/bluetooth/strings/bluetooth_strings_ml.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, വീഡിയോ ഉപകരണം</translation> <translation id="5271696982761495740">ടാബ്ലെറ്റ് (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">പരിചിതമല്ലാത്തതോ പിന്തുണയ്ക്കാത്തതോ ആയ ഉപകരണം (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, മോഡം</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />, കാർ ഓഡിയോ ഉപകരണം</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, കീബോർഡ്</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_ru.xtb b/device/bluetooth/strings/bluetooth_strings_ru.xtb index b3ccef3..0fa87ee 100644 --- a/device/bluetooth/strings/bluetooth_strings_ru.xtb +++ b/device/bluetooth/strings/bluetooth_strings_ru.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, видеоустройство</translation> <translation id="5271696982761495740">Планшетный ПК (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">Неизвестное или неподдерживаемое устройство (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> (<ph name="CONNECTION_STATUS" />)</translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, модем</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />, автомобильное аудиоустройство</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, клавиатура</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_si.xtb b/device/bluetooth/strings/bluetooth_strings_si.xtb index 1c9e907..6afd0b9 100644 --- a/device/bluetooth/strings/bluetooth_strings_si.xtb +++ b/device/bluetooth/strings/bluetooth_strings_si.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, වීඩියෝ උපාංගය</translation> <translation id="5271696982761495740">ටැබ්ලට් (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">නොදන්නා හෝ සහාය නොදක්වන උපාංග (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, මොඩමය</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />, මෝටර් රථ ශ්රව්ය උපාංගය</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, යතුරු පුවරුව</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_sk.xtb b/device/bluetooth/strings/bluetooth_strings_sk.xtb index 04fb6e9..d7cac71 100644 --- a/device/bluetooth/strings/bluetooth_strings_sk.xtb +++ b/device/bluetooth/strings/bluetooth_strings_sk.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, videozariadenie</translation> <translation id="5271696982761495740">Tablet (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">Neznáme alebo nepodporované zariadenie (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, modem</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />, audio zariadenie do auta</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, klávesnica</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_sl.xtb b/device/bluetooth/strings/bluetooth_strings_sl.xtb index 17f3fdd2..2096d4a 100644 --- a/device/bluetooth/strings/bluetooth_strings_sl.xtb +++ b/device/bluetooth/strings/bluetooth_strings_sl.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, video naprava</translation> <translation id="5271696982761495740">Tablični računalnik (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">Neznana ali nepodprta naprava (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, modem</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />, naprava za zvok v avtomobilu</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, tipkovnica</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_sw.xtb b/device/bluetooth/strings/bluetooth_strings_sw.xtb index 95a3904..962d4338 100644 --- a/device/bluetooth/strings/bluetooth_strings_sw.xtb +++ b/device/bluetooth/strings/bluetooth_strings_sw.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, Kifaa cha video</translation> <translation id="5271696982761495740">Kompyuta ndogo (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">Kifaa Kisichojulikana au Kisichohimiliwa (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="CONNECTION_STATUS" /> <ph name="DEVICE_NAME_AND_TYPE" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, Modemu</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" /> - kifaa cha sauti kwenye gari</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, Kibodi</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_ta.xtb b/device/bluetooth/strings/bluetooth_strings_ta.xtb index 6580ee8..68f7be6c 100644 --- a/device/bluetooth/strings/bluetooth_strings_ta.xtb +++ b/device/bluetooth/strings/bluetooth_strings_ta.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, வீடியோ சாதனம்</translation> <translation id="5271696982761495740">டேப்லெட் (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">அறியாத அல்லது ஆதரிக்கப்படாத சாதனம் (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, மோடம்</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />, கார் ஆடியோ சாதனம்</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, கீபோர்டு</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_tr.xtb b/device/bluetooth/strings/bluetooth_strings_tr.xtb index 9476c2413..a76e4e3 100644 --- a/device/bluetooth/strings/bluetooth_strings_tr.xtb +++ b/device/bluetooth/strings/bluetooth_strings_tr.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, Video cihazı</translation> <translation id="5271696982761495740">Tablet (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">Bilinmeyen veya Desteklenmeyen Cihaz (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, Modem</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />, Araba ses sistemi</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, Klavye</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_vi.xtb b/device/bluetooth/strings/bluetooth_strings_vi.xtb index 90c0d2b..5bf11567 100644 --- a/device/bluetooth/strings/bluetooth_strings_vi.xtb +++ b/device/bluetooth/strings/bluetooth_strings_vi.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, Thiết bị video</translation> <translation id="5271696982761495740">Máy tính bảng (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">Thiết bị không xác định hoặc không được hỗ trợ (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, Modem</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />, thiết bị âm thanh của ô tô</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, Bàn phím</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_zh-CN.xtb b/device/bluetooth/strings/bluetooth_strings_zh-CN.xtb index d7a1d26..af47d92 100644 --- a/device/bluetooth/strings/bluetooth_strings_zh-CN.xtb +++ b/device/bluetooth/strings/bluetooth_strings_zh-CN.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />,视频设备</translation> <translation id="5271696982761495740">平板电脑 (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">未知或不支持的设备 (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />,调制解调器</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />,汽车音频设备</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />,键盘</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_zh-TW.xtb b/device/bluetooth/strings/bluetooth_strings_zh-TW.xtb index bfceb43..a32af43a 100644 --- a/device/bluetooth/strings/bluetooth_strings_zh-TW.xtb +++ b/device/bluetooth/strings/bluetooth_strings_zh-TW.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />,視訊裝置</translation> <translation id="5271696982761495740">平板電腦 (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">不明的或不支援的裝置 (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" />,<ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />,數據機</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />,汽車音訊裝置</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />,鍵盤</translation>
diff --git a/device/bluetooth/strings/bluetooth_strings_zu.xtb b/device/bluetooth/strings/bluetooth_strings_zu.xtb index 44b22aa..d18a722 100644 --- a/device/bluetooth/strings/bluetooth_strings_zu.xtb +++ b/device/bluetooth/strings/bluetooth_strings_zu.xtb
@@ -16,6 +16,7 @@ <translation id="4986357476502426173"><ph name="DEVICE_NAME" />, Idivayisi yevidiyo</translation> <translation id="5271696982761495740">Ithebhulethi (<ph name="ADDRESS" />)</translation> <translation id="5376363957846771741">Idivayisi engaziwa noma engasekelwe (<ph name="ADDRESS" />)</translation> +<translation id="571460437990229974"><ph name="DEVICE_NAME_AND_TYPE" /> <ph name="CONNECTION_STATUS" /></translation> <translation id="5716052956047449618"><ph name="DEVICE_NAME" />, imodemu</translation> <translation id="6459740836740815150"><ph name="DEVICE_NAME" />, idivayisi yomsindo wemoto</translation> <translation id="6542922424766292144"><ph name="DEVICE_NAME" />, Ikhibhodi</translation>
diff --git a/extensions/browser/extension_function_histogram_value.h b/extensions/browser/extension_function_histogram_value.h index a6f7803..b2b94fc 100644 --- a/extensions/browser/extension_function_histogram_value.h +++ b/extensions/browser/extension_function_histogram_value.h
@@ -1584,6 +1584,7 @@ AUTOTESTPRIVATE_ACTIVATEADJACENTDESKSTOTARGETINDEX = 1521, DECLARATIVENETREQUEST_GETAVAILABLESTATICRULECOUNT = 1522, CHROMEOSINFOPRIVATE_ISTABLETMODEENABLED = 1523, + FILEMANAGERPRIVATEINTERNAL_GETARCDOCUMENTSPROVIDERTHUMBNAIL = 1524, // Last entry: Add new entries above, then run: // python tools/metrics/histograms/update_extension_histograms.py ENUM_BOUNDARY
diff --git a/extensions/shell/browser/shell_desktop_controller_aura.cc b/extensions/shell/browser/shell_desktop_controller_aura.cc index ea1f2bcc..58a660ef9 100644 --- a/extensions/shell/browser/shell_desktop_controller_aura.cc +++ b/extensions/shell/browser/shell_desktop_controller_aura.cc
@@ -17,7 +17,7 @@ #include "ui/aura/window.h" #include "ui/aura/window_tree_host.h" #include "ui/base/cursor/cursor.h" -#include "ui/base/cursor/image_cursors.h" +#include "ui/base/cursor/cursor_loader.h" #include "ui/base/cursor/mojom/cursor_type.mojom-shared.h" #include "ui/base/ime/init/input_method_factory.h" #include "ui/base/ime/input_method.h" @@ -57,21 +57,21 @@ public: explicit ShellNativeCursorManager( ShellDesktopControllerAura* desktop_controller) - : desktop_controller_(desktop_controller), - image_cursors_(new ui::ImageCursors) {} + : desktop_controller_(desktop_controller) {} ~ShellNativeCursorManager() override {} // wm::NativeCursorManager overrides. void SetDisplay(const display::Display& display, wm::NativeCursorManagerDelegate* delegate) override { - if (image_cursors_->SetDisplay(display, display.device_scale_factor())) + if (cursor_loader_->SetDisplayData(display.panel_rotation(), + display.device_scale_factor())) SetCursor(delegate->GetCursor(), delegate); } void SetCursor(gfx::NativeCursor cursor, wm::NativeCursorManagerDelegate* delegate) override { - image_cursors_->SetPlatformCursor(&cursor); - cursor.set_image_scale_factor(image_cursors_->GetScale()); + cursor_loader_->SetPlatformCursor(&cursor); + cursor.set_image_scale_factor(cursor_loader_->scale()); delegate->CommitCursor(cursor); if (delegate->IsCursorVisible()) @@ -86,14 +86,14 @@ SetCursor(delegate->GetCursor(), delegate); } else { gfx::NativeCursor invisible_cursor(ui::mojom::CursorType::kNone); - image_cursors_->SetPlatformCursor(&invisible_cursor); + cursor_loader_->SetPlatformCursor(&invisible_cursor); SetCursorOnAllRootWindows(invisible_cursor); } } void SetCursorSize(ui::CursorSize cursor_size, wm::NativeCursorManagerDelegate* delegate) override { - image_cursors_->SetCursorSize(cursor_size); + cursor_loader_->set_size(cursor_size); delegate->CommitCursorSize(cursor_size); if (delegate->IsCursorVisible()) SetCursor(delegate->GetCursor(), delegate); @@ -115,7 +115,8 @@ ShellDesktopControllerAura* desktop_controller_; // Not owned. - std::unique_ptr<ui::ImageCursors> image_cursors_; + std::unique_ptr<ui::CursorLoader> cursor_loader_ = + ui::CursorLoader::Create(/*use_platform_cursors=*/false); DISALLOW_COPY_AND_ASSIGN(ShellNativeCursorManager); };
diff --git a/headless/lib/browser/headless_devtools_manager_delegate.cc b/headless/lib/browser/headless_devtools_manager_delegate.cc index e0447b0..d523098 100644 --- a/headless/lib/browser/headless_devtools_manager_delegate.cc +++ b/headless/lib/browser/headless_devtools_manager_delegate.cc
@@ -72,6 +72,8 @@ std::vector<content::BrowserContext*> HeadlessDevToolsManagerDelegate::GetBrowserContexts() { std::vector<content::BrowserContext*> contexts; + if (!browser_) + return contexts; for (auto* context : browser_->GetAllBrowserContexts()) { if (context != browser_->GetDefaultBrowserContext()) contexts.push_back(HeadlessBrowserContextImpl::From(context)); @@ -80,11 +82,15 @@ } content::BrowserContext* HeadlessDevToolsManagerDelegate::GetDefaultBrowserContext() { - return HeadlessBrowserContextImpl::From(browser_->GetDefaultBrowserContext()); + return browser_ ? HeadlessBrowserContextImpl::From( + browser_->GetDefaultBrowserContext()) + : nullptr; } content::BrowserContext* HeadlessDevToolsManagerDelegate::CreateBrowserContext() { + if (!browser_) + return nullptr; auto builder = browser_->CreateBrowserContextBuilder(); builder.SetIncognitoMode(true); HeadlessBrowserContext* browser_context = builder.Build();
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_es.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_es.xtb index 4bf978c..819d388 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_es.xtb
@@ -69,7 +69,7 @@ <translation id="8240981428553046115">Chromium no ha podido comprobar si hay actualizaciones. Prueba de nuevo más tarde.</translation> <translation id="8252885722420466166">Disfruta de una mejor experiencia en Chromium según tu ubicación.</translation> <translation id="8586442755830160949">Copyright <ph name="YEAR" /> Los creadores de Chromium. Todos los derechos reservados.</translation> -<translation id="8663480472502753423">Mantén Chrome actualizado</translation> +<translation id="8663480472502753423">Mantén Chromium actualizado</translation> <translation id="8776843108004031667">Se quitarán de Chromium esta cuenta y los datos sin guardar.</translation> <translation id="9022552996538154597">Iniciar sesión en Chromium</translation> <translation id="9089354809943900324">Chromium no está actualizado</translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb index 1f9192af..38c197a 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_iw.xtb
@@ -26,7 +26,7 @@ <translation id="3344973607274501920">Chromium לא הצליח לבדוק את הסיסמאות שלך. יש לבדוק את החיבור לאינטרנט.</translation> <translation id="3472200483164753384">אין תמיכה ב-Chromium Canary</translation> <translation id="3639997914391704523">Chromium יכול לבדוק את הסיסמאות כשנכנסים באמצעות חשבון Google.</translation> -<translation id="3805899903892079518">ל-Chromium אין גישה לתמונות או לסרטונים שלך. אפשר גישה ב'הגדרות iOS' > 'פרטיות' > 'תמונות'.</translation> +<translation id="3805899903892079518">ל-Chromium אין גישה לתמונות או לסרטונים שלך. יש להפעיל את הגישה ב'הגדרות iOS' > 'פרטיות' > 'תמונות'.</translation> <translation id="4099085513035183040">אין תמיכה ב-Chromium בטא</translation> <translation id="4166206055865952171">הגדרת Chromium כדפדפן ברירת המחדל</translation> <translation id="4555020257205549924">כשהתכונה הזו פועלת, Chromium יציע לתרגם באמצעות Google Translate דפים שנכתבו בשפות אחרות. <ph name="BEGIN_LINK" />למידע נוסף<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-TW.xtb index 20660d32..435cf81 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-TW.xtb
@@ -69,7 +69,7 @@ <translation id="8240981428553046115">Chromium 無法檢查更新,請稍後再試。</translation> <translation id="8252885722420466166">Chromium 可根據您的位置資訊提供更優質的 Google 服務。</translation> <translation id="8586442755830160949">Copyright <ph name="YEAR" /> The Chromium Authors. 保留所有權利。</translation> -<translation id="8663480472502753423">取得 Chromium 最新更新</translation> +<translation id="8663480472502753423">取得 Chromium 最新版本</translation> <translation id="8776843108004031667">系統會將這個帳戶和所有未儲存的資料從 Chromium 中移除。</translation> <translation id="9022552996538154597">登入 Chromium</translation> <translation id="9089354809943900324">Chromium 版本過舊</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb index 769cbcdd..da7f81e 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fr.xtb
@@ -55,7 +55,7 @@ <translation id="6648150602980899529">Vous vous connectez avec un compte géré par <ph name="DOMAIN" />, ce qui permettra à son administrateur de contrôler vos données Chrome. Celles-ci seront définitivement associées à ce compte. Si vous vous déconnectez de Chrome, vos données seront supprimées de cet appareil, mais elles seront conservées dans votre compte Google.</translation> <translation id="6676840375528380067">Supprimer vos données Chrome sur cet appareil ?</translation> <translation id="6822673484890854830">Chrome n'a pas pu vérifier tous les mots de passe. Réessayez plus tard.</translation> -<translation id="7124339256045485976">Garder Chrome à jour</translation> +<translation id="7124339256045485976">Pour garder Chrome à jour</translation> <translation id="7161390184744336561">La version de Google Chrome est obsolète</translation> <translation id="7165736900384873061">Commencer à utiliser le lecteur de code QR Google Chrome</translation> <translation id="7172660552945675509">Conseil : <ph name="BEGIN_LINK" />Placez Chrome dans le dock.<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-TW.xtb index 2966a872..1f7bcc7 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-TW.xtb
@@ -55,7 +55,7 @@ <translation id="6648150602980899529">您即將使用由 <ph name="DOMAIN" /> 所管理的帳戶登入,並授權該網域的管理員控管您的 Chrome 資料。您的資料會與這個帳戶建立永久連結。登出 Chrome 後,系統會將您的資料從這個裝置上刪除,但繼續保留在您的 Google 帳戶中。</translation> <translation id="6676840375528380067">要清除你在這個裝置上的 Chrome 資料嗎?</translation> <translation id="6822673484890854830">Chrome 無法檢查所有密碼,請稍後再試。</translation> -<translation id="7124339256045485976">取得 Chrome 最新更新</translation> +<translation id="7124339256045485976">取得 Chrome 最新版本</translation> <translation id="7161390184744336561">Google Chrome 版本過舊</translation> <translation id="7165736900384873061">開始使用 Google Chrome QR 掃描器</translation> <translation id="7172660552945675509">提示:<ph name="BEGIN_LINK" />將 Chrome 移至 Dock<ph name="END_LINK" /></translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fr.xtb b/ios/chrome/app/strings/resources/ios_strings_fr.xtb index 293b47c2..f7b213ca 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fr.xtb
@@ -62,7 +62,7 @@ <translation id="1545749641540134597">Scanner le code QR</translation> <translation id="1552525382687785070">Votre administrateur a désactivé la synchronisation</translation> <translation id="1554477036522844996">Nouvelle fenêtre</translation> -<translation id="1580715474678097352">Protégez-vous contre les sites Web dangereux</translation> +<translation id="1580715474678097352">Pour vous protéger contre les sites Web dangereux</translation> <translation id="1580783302095112590">E-mail envoyé.</translation> <translation id="1582732959743469162">Cette action arrêtera le téléchargement en cours.</translation> <translation id="1605405588277479165">Désactivée – Non recommandé</translation> @@ -730,7 +730,7 @@ <translation id="9087108903408689779">Mot de passe suggéré par Chrome :</translation> <translation id="9094033019050270033">Modifier le mot de passe</translation> <translation id="9100610230175265781">Veuillez saisir la phrase secrète.</translation> -<translation id="9107664647686727385">Rechercher des mots de passe compromis</translation> +<translation id="9107664647686727385">Pour vérifier la présence de mots de passe compromis</translation> <translation id="9137526406337347448">Google Services</translation> <translation id="9148126808321036104">Nouvelle connexion</translation> <translation id="9152539721251340337">Créer un code QR</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_iw.xtb b/ios/chrome/app/strings/resources/ios_strings_iw.xtb index 11ac5c4..6cb7c0f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_iw.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_iw.xtb
@@ -260,7 +260,7 @@ <translation id="3775743491439407556">הסינכרון לא פועל</translation> <translation id="3779810277399252432">אין חיבור לאינטרנט.</translation> <translation id="3783017676699494206">שמור תמונה</translation> -<translation id="3789841737615482174">התקן</translation> +<translation id="3789841737615482174">התקנה</translation> <translation id="3803696231112616155">הצגה של הצעה לתרגם את הדף הזה</translation> <translation id="385051799172605136">חזרה</translation> <translation id="3892144330757387737">ההיסטוריה זמינה כאן</translation> @@ -369,7 +369,7 @@ <translation id="5039804452771397117">זה בסדר</translation> <translation id="5056446788882570708">נמצאו בעיות <ph name="TIME" />.</translation> <translation id="5059136629401106827">אישור</translation> -<translation id="5062321486222145940">התקן את Google Drive</translation> +<translation id="5062321486222145940">התקנת Google Drive</translation> <translation id="5083464117946352670">גודל הקובץ אינו ידוע.</translation> <translation id="5094827893301452931">הציוץ בוצע.</translation> <translation id="5118764316110575523">כבויה</translation> @@ -512,7 +512,7 @@ <translation id="6482629121755362506"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> פריטים נמחקו</translation> <translation id="651505212789431520">לבטל את הסנכרון? אפשר להפעיל את הסנכרון בכל זמן דרך 'הגדרות'.</translation> <translation id="6561262006871132942">הגדלת התצוגה</translation> -<translation id="6585618849026997638">כדי לחזור אל דף חשוב עבורך אפשר להוסיף אותו לסימניות</translation> +<translation id="6585618849026997638">כדי לחזור אל דף שחשוב לך אפשר להוסיף אותו לסימניות</translation> <translation id="6610002944194042868">אפשרויות תרגום</translation> <translation id="6620279676667515405">ביטול</translation> <translation id="6624219055418309072">חסימה במצב אנונימי</translation> @@ -718,10 +718,10 @@ <translation id="8976382372951310360">עזרה</translation> <translation id="8981454092730389528">בחירת הפעילויות ב-Google</translation> <translation id="8985320356172329008">מחובר ל-Google בשם</translation> -<translation id="9034759925968272072">לא תבוצע יציאה מחשבון Google שלך. ייתכן שתוכל לגשת לסוגים אחרים של היסטוריית גלישה בחשבון Google בכתובת <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> +<translation id="9034759925968272072">לא תבוצע יציאה מחשבון Google שלך. ייתכן שיהיה באפשרותך לגשת לסוגים אחרים של היסטוריית גלישה בחשבון Google בכתובת <ph name="BEGIN_LINK" />history.google.com<ph name="END_LINK" />.</translation> <translation id="9037965129289936994">הצג מקור</translation> <translation id="9039373489628511875">רוחב פס</translation> -<translation id="9055772144595778347">לא מצליח להיכנס</translation> +<translation id="9055772144595778347">לא ניתן להיכנס</translation> <translation id="9065203028668620118">עריכה</translation> <translation id="9079935439869366234">סמן את הכול כ'לא נקרא'</translation> <translation id="9081058212938299310">לעדכן את הסיסמה של <ph name="USERNAME" />?</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_mr.xtb b/ios/chrome/app/strings/resources/ios_strings_mr.xtb index 1dd89a8..1170fa6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_mr.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_mr.xtb
@@ -79,7 +79,7 @@ <translation id="1687475363370981210">सर्व वाचले चिन्हांकित करा</translation> <translation id="1689333818294560261">टोपणनाव</translation> <translation id="1690731385917361335">कोणतेही आयटम नाहीत</translation> -<translation id="1692118695553449118">संकालन सुरू आहे</translation> +<translation id="1692118695553449118">सिंक सुरू आहे</translation> <translation id="1700629756560807968"><ph name="NUMBER_OF_SELECTED_BOOKMARKS" /> निवडले</translation> <translation id="1740468249224277719">इंस्टॉल करण्यासाठी दोनदा टॅप करा.</translation> <translation id="1746815479209538200">वेब ब्राउझ करण्यासाठी नवीन टॅब जोडा.</translation> @@ -250,7 +250,7 @@ खालील पायऱ्या फॉलो करा:</translation> <translation id="3603009562372709545">लिंक URL कॉपी करा</translation> <translation id="3607167657931203000">ऑटोफिल डेटा</translation> -<translation id="3609785682760573515">संकालन करत आहे...</translation> +<translation id="3609785682760573515">सिंक करत आहे...</translation> <translation id="3638472932233958418">वेबपृष्ठे प्रीलोड करा</translation> <translation id="3670030362669914947">नंबर</translation> <translation id="3691593122358196899"><ph name="FOLDER_TITLE" /> मध्ये बुकमार्क केले</translation> @@ -374,7 +374,7 @@ <translation id="5083464117946352670">फाईल आकार निर्धारित करू शकत नाही.</translation> <translation id="5094827893301452931">Tweet पूर्ण केले.</translation> <translation id="5118764316110575523">बंद</translation> -<translation id="5127805178023152808">संकालन बंद आहे</translation> +<translation id="5127805178023152808">सिंक बंद आहे</translation> <translation id="5132942445612118989">सर्व डिव्हाइसवर तुमचे पासवर्ड, इतिहास आणि बरेच काही सिंक करा</translation> <translation id="5140288047769711648">Chrome तुमच्यासाठी हा पासवर्ड लक्षात ठेवेल. तुम्हाला तो लक्षात ठेवण्याची गरज नाही.</translation> <translation id="5150492518600715772">तुमच्या डिव्हाइसवर पाठवा</translation> @@ -383,7 +383,7 @@ <translation id="5188482106078495165">तुमची कुकी सेटिंग्ज सर्व टॅबना लागू होतात. उघड्या टॅबवर नवीन सेटिंग लागू करण्यासाठी, टॅब रीलोड करा.</translation> <translation id="5190835502935405962">बुकमार्क बार</translation> <translation id="5197255632782567636">इंटरनेट</translation> -<translation id="5228579091201413441">संकालन सुरू करा</translation> +<translation id="5228579091201413441">सिंक सुरू करा</translation> <translation id="5234764350956374838">डिसमिस करा</translation> <translation id="5245322853195994030">सिंक रद्द करा</translation> <translation id="5271549068863921519">पासवर्ड सेव्ह करा</translation> @@ -397,7 +397,7 @@ <translation id="5409365236829784218">ही फाईल उघडू शकणारे कोणतेही ॲप्लिकेशन इंस्टॉल केलेले नाहीत.</translation> <translation id="5416022985862681400">मागील सात दिवस</translation> <translation id="543338862236136125">पासवर्ड संपादित करा</translation> -<translation id="5433691172869980887">वापरकर्तानाव कॉपी केले</translation> +<translation id="5433691172869980887">वापरकर्ता नाव कॉपी केले</translation> <translation id="54401264925851789">पृष्ठ सुरक्षितता माहिती</translation> <translation id="5443952882982198570">क्रेडिट कार्ड</translation> <translation id="5457226814769348910">ऑफलाइन आवृत्ती उघडा</translation> @@ -478,7 +478,7 @@ <translation id="6284652193729350524"><ph name="LANGUAGE" /> भाषांतरित करण्यासाठी ऑफर</translation> <translation id="6303969859164067831">साइन आउट करा आणि सिंक बंद करा</translation> <translation id="6308436439357671616">हे तुम्हाला फोटो घेऊ आणि अपलोड करू देते.</translation> -<translation id="6324528485781869530">संकालन खाते स्विच करा</translation> +<translation id="6324528485781869530">सिंक खाते स्विच करा</translation> <translation id="6324669097367352121">साइन इन सेटिंग्ज</translation> <translation id="6337234675334993532">एंक्रिप्शन</translation> <translation id="633809752005859102">खरोखर काहीतरी चूक झाली. आम्ही त्यावर कार्य करू.</translation> @@ -486,7 +486,7 @@ <translation id="6344783595350022745">मजकूर साफ करा</translation> <translation id="6346549652287021269">नवीन डाउनलोड सुरू करायचे?</translation> <translation id="6362362396625799311">कोणतेही गुप्त टॅब नाहीत</translation> -<translation id="6363526231572697780">वापरकर्तानाव नाही</translation> +<translation id="6363526231572697780">वापरकर्ता नाव नाही</translation> <translation id="6374469231428023295">पुन्हा प्रयत्न करा</translation> <translation id="6377118281273296434">साइट सुरक्षितता</translation> <translation id="6380866119319257197">तुमचा सांकेतिक पासफ्रेझ विसरल्यास किंवा हे सेटिंग बदलू इच्छित असल्यास, <ph name="BEGIN_LINK" />सिंक रीसेट करा<ph name="END_LINK" /></translation> @@ -546,7 +546,7 @@ <translation id="6873263987691478642">विभाजित दृश्य</translation> <translation id="6888009575607455378">तुम्हाला तुमचे बदल नक्की काढून टाकायचे आहेत का?</translation> <translation id="6896758677409633944">कॉपी करा</translation> -<translation id="6903907808598579934">संकालन सुरू करा</translation> +<translation id="6903907808598579934">सिंक सुरू करा</translation> <translation id="6914583639806229067">तुम्ही कॉपी केलेली इमेज शोधा</translation> <translation id="6914783257214138813">एक्सपोर्ट करण्यात आलेली फाइल दिसणार्या प्रत्येकाला, तुमचा पासवर्ड दिसेल.</translation> <translation id="6930799952781667037">ही भाषा बदलण्यासाठी टॅप करा.</translation> @@ -679,7 +679,7 @@ <translation id="8487667956631253959">सुरू करा</translation> <translation id="8487700953926739672">ऑफलाइन उपलब्ध</translation> <translation id="8490978609246021741">बदल सेव्ह करा</translation> -<translation id="8503813439785031346">वापरकर्तानाव</translation> +<translation id="8503813439785031346">वापरकर्ता नाव</translation> <translation id="850600235656508448">गुप्त प्रकारात उघडा</translation> <translation id="8510057420705599706">हे तुम्हाला साइन आउट करेल आणि सिंक बंद करेल पण तुमचे बुकमार्क, इतिहास, पासवर्ड आणि इतर Chrome डेटा या डिव्हाइसवर राहील.</translation> <translation id="8517375800490286174">मुक्त स्रोत परवाने</translation> @@ -695,7 +695,7 @@ <translation id="8591976964826315682">तृतीय पक्ष कुकी गुप्त मोडमध्ये ब्लॉक करा</translation> <translation id="8605219856220328675">टॅब बंद करा.</translation> <translation id="8620640915598389714">संपादित करा</translation> -<translation id="8636825310635137004">आपल्या इतर डिव्हाइसेस मधून तुमचे टॅब प्राप्त करण्यासाठी, संकालन सुरू करा</translation> +<translation id="8636825310635137004">आपल्या इतर डिव्हाइसेस मधून तुमचे टॅब प्राप्त करण्यासाठी, सिंक सुरू करा</translation> <translation id="8654802032646794042">रद्द करा</translation> <translation id="8668210798914567634">हे पृष्ठ आपल्या वाचन सूचीमध्ये सेव्ह केले गेले आहे.</translation> <translation id="8680787084697685621">खाते साइन-इन तपशील कालबाह्य झाला.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb index a4366be..e5d4fe1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -62,7 +62,7 @@ <translation id="1545749641540134597">掃描 QR 圖碼</translation> <translation id="1552525382687785070">你的管理員停用了同步功能</translation> <translation id="1554477036522844996">開啟新視窗</translation> -<translation id="1580715474678097352">妥善保護瀏覽體驗,有效防堵危險網站</translation> +<translation id="1580715474678097352">守護網頁瀏覽安全,有效防堵危險網站</translation> <translation id="1580783302095112590">已傳送郵件。</translation> <translation id="1582732959743469162">目前所有下載進度都會因此停止。</translation> <translation id="1605405588277479165">關閉 - 不建議</translation>
diff --git a/ios/chrome/browser/flags/about_flags.mm b/ios/chrome/browser/flags/about_flags.mm index feff53e..ca51f57 100644 --- a/ios/chrome/browser/flags/about_flags.mm +++ b/ios/chrome/browser/flags/about_flags.mm
@@ -651,6 +651,10 @@ flag_descriptions::kEditPasswordsInSettingsName, flag_descriptions::kEditPasswordsInSettingsDescription, flags_ui::kOsIos, FEATURE_VALUE_TYPE(password_manager::features::kEditPasswordsInSettings)}, + {"enable-incognito-authentication-ios", + flag_descriptions::kIncognitoAuthenticationName, + flag_descriptions::kIncognitoAuthenticationDescription, flags_ui::kOsIos, + FEATURE_VALUE_TYPE(kIncognitoAuthentication)}, }; bool SkipConditionalFeatureEntry(const flags_ui::FeatureEntry& entry) {
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc index 0ccf38c4..a27c1e5 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.cc
@@ -281,6 +281,12 @@ "When enabled, FullscreenController will be stored and retrieved using the " "Browser."; +const char kIncognitoAuthenticationName[] = + "Device Authentication for Incognito"; +extern const char kIncognitoAuthenticationDescription[] = + "When enabled, a setting appears to enable biometric authentication for " + "accessing incognito."; + const char kIllustratedEmptyStatesName[] = "Illustrated empty states"; const char kIllustratedEmptyStatesDescription[] = "Display new illustrations and layout on empty states.";
diff --git a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h index 5726cfb..4bcea15 100644 --- a/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h +++ b/ios/chrome/browser/flags/ios_chrome_flag_descriptions.h
@@ -240,6 +240,11 @@ extern const char kFullscreenControllerBrowserScopedName[]; extern const char kFullscreenControllerBrowserScopedDescription[]; +// Title and dscription for the flag to allow biometric authentication for +// accessing incognito. +extern const char kIncognitoAuthenticationName[]; +extern const char kIncognitoAuthenticationDescription[]; + // Title and description for the flag to enable new illustrations and // UI on empty states. extern const char kIllustratedEmptyStatesName[];
diff --git a/ios/chrome/browser/ui/ui_feature_flags.cc b/ios/chrome/browser/ui/ui_feature_flags.cc index 6d8d9bd..776ab11 100644 --- a/ios/chrome/browser/ui/ui_feature_flags.cc +++ b/ios/chrome/browser/ui/ui_feature_flags.cc
@@ -73,3 +73,6 @@ // finished. const base::Feature kModernTabStrip{"ModernTabStrip", base::FEATURE_DISABLED_BY_DEFAULT}; + +const base::Feature kIncognitoAuthentication{ + "enable-incognito-authentication-ios", base::FEATURE_DISABLED_BY_DEFAULT};
diff --git a/ios/chrome/browser/ui/ui_feature_flags.h b/ios/chrome/browser/ui/ui_feature_flags.h index d565c5f9..125efcc 100644 --- a/ios/chrome/browser/ui/ui_feature_flags.h +++ b/ios/chrome/browser/ui/ui_feature_flags.h
@@ -81,4 +81,7 @@ // finished. Flag to modernize the tabstrip without disturbing the existing one. extern const base::Feature kModernTabStrip; +// Adds a setting to enable biometric authentication for incognito tabs. +extern const base::Feature kIncognitoAuthentication; + #endif // IOS_CHROME_BROWSER_UI_UI_FEATURE_FLAGS_H_
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 index 572379b..5fd9c94 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -1f680fbbab50f44c76449e5022a77fba4961a132 \ No newline at end of file +82fc0ff2f874a6eac88a0456ba2d7380154b596a \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 index 76694b1..ae7f869 100644 --- a/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -dc5943fae05249fa492fec21eaeaec03561df72e \ No newline at end of file +5cf3ad372b7ed8b01e0b8fe71e7ffb9c11e6edc5 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 index 59a33de1..befae889 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -80cc1896cd49975ad43a9a39665bd0e4cab7519a \ No newline at end of file +7a392ecc7ec806519bf1fbdf51384ec5e88b416f \ No newline at end of file
diff --git a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 index 3d7108d..2f7c1f3 100644 --- a/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/chrome_sso_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -dd7ab34d65002b29bf398071b0c9a8ff02b5054f \ No newline at end of file +b3adb892ea0b540343e379083720a9af8c5a867d \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 index 94f17f8f6..80992ad 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -c2389a5d8d7c40af6f6ef959b764bc1877357e6e \ No newline at end of file +1967323339957a15d9759415c6d97cc25ed96966 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 index 613ae59..3722b1d9 100644 --- a/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_dogfood_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -d7ffaa126dbbee2b0919a96cfa2efa681d18debf \ No newline at end of file +98ea6d9a2ea485d5134ca7b0f4440287b27f9206 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 index 1c4e65a..ab02f65 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -b23a3ab268cd3f10309434686bef7f63b632347b \ No newline at end of file +b2954985deaa918a12cc3f8e4e33174ddd5541d0 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 index ba1671bd..add11385 100644 --- a/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/remoting_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -aeda606a75ab04bb20400240cd0ee7fb235aa1cd \ No newline at end of file +58c2a53fbf5fe9dcd4c7abcc4afbafec0bafd358 \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 index 52a6119..8437be4b2 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.arm64.zip.sha1
@@ -1 +1 @@ -4ad0f29682bdf92baad4670e55edd21329d03738 \ No newline at end of file +36b07ad2b3ee49be34dc667874d551438918e60e \ No newline at end of file
diff --git a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 index f62fa6bd..31484c9 100644 --- a/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1 +++ b/ios/google_internal/frameworks/web_view_shell_internal_dynamic_framework.x64.zip.sha1
@@ -1 +1 @@ -e9554655059365ffd69e9a168ddef5e5f4efef04 \ No newline at end of file +2d764dc65079dffe9792ce21e95b5acf4495b46c \ No newline at end of file
diff --git a/ios/web_view/BUILD.gn b/ios/web_view/BUILD.gn index c1844bf8..998ce83a 100644 --- a/ios/web_view/BUILD.gn +++ b/ios/web_view/BUILD.gn
@@ -634,8 +634,8 @@ outputs = [ _output ] - args = [ rebase_path(_output, root_out_dir) ] + - rebase_path(_dsyms, root_out_dir) + args = [ rebase_path(_output, root_build_dir) ] + + rebase_path(_dsyms, root_build_dir) deps = [ ":web_view" ] }
diff --git a/mojo/public/js/bindings_lite.js b/mojo/public/js/bindings_lite.js index 1821540..bfa31b0 100644 --- a/mojo/public/js/bindings_lite.js +++ b/mojo/public/js/bindings_lite.js
@@ -58,7 +58,7 @@ /** * @param {!DataView} dataView * @param {number} byteOffset - * @param {number|bigint} value + * @param {number} value */ mojo.internal.setInt64 = function(dataView, byteOffset, value) { if (mojo.internal.kHostLittleEndian) { @@ -66,12 +66,11 @@ byteOffset, Number(BigInt(value) & BigInt(0xffffffff)), mojo.internal.kHostLittleEndian); dataView.setInt32( - byteOffset + 4, - Number((BigInt(value) >> BigInt(32)) & BigInt(0xffffffff)), + byteOffset + 4, Number(BigInt(value) >> BigInt(32)), mojo.internal.kHostLittleEndian); } else { dataView.setInt32( - byteOffset, Number((BigInt(value) >> BigInt(32)) & BigInt(0xffffffff)), + byteOffset, Number(BigInt(value) >> BigInt(32)), mojo.internal.kHostLittleEndian); dataView.setUint32( byteOffset + 4, Number(BigInt(value) & BigInt(0xffffffff)), @@ -82,7 +81,7 @@ /** * @param {!DataView} dataView * @param {number} byteOffset - * @param {number|bigint} value + * @param {number} value */ mojo.internal.setUint64 = function(dataView, byteOffset, value) { if (mojo.internal.kHostLittleEndian) { @@ -90,12 +89,11 @@ byteOffset, Number(BigInt(value) & BigInt(0xffffffff)), mojo.internal.kHostLittleEndian); dataView.setUint32( - byteOffset + 4, - Number((BigInt(value) >> BigInt(32)) & BigInt(0xffffffff)), + byteOffset + 4, Number(BigInt(value) >> BigInt(32)), mojo.internal.kHostLittleEndian); } else { dataView.setUint32( - byteOffset, Number((BigInt(value) >> BigInt(32)) & BigInt(0xffffffff)), + byteOffset, Number(BigInt(value) >> BigInt(32)), mojo.internal.kHostLittleEndian); dataView.setUint32( byteOffset + 4, Number(BigInt(value) & BigInt(0xffffffff)), @@ -106,7 +104,7 @@ /** * @param {!DataView} dataView * @param {number} byteOffset - * @return {bigint} + * @return {bigint|number} */ mojo.internal.getInt64 = function(dataView, byteOffset) { let low, high; @@ -117,24 +115,12 @@ low = dataView.getUint32(byteOffset + 4, mojo.internal.kHostLittleEndian); high = dataView.getInt32(byteOffset, mojo.internal.kHostLittleEndian); } - return (BigInt(high) << BigInt(32)) | BigInt(low); -}; - -/** - * @param {!DataView} dataView - * @param {number} byteOffset - * @return {bigint} - */ -mojo.internal.getUint64 = function(dataView, byteOffset) { - let low, high; - if (mojo.internal.kHostLittleEndian) { - low = dataView.getUint32(byteOffset, mojo.internal.kHostLittleEndian); - high = dataView.getUint32(byteOffset + 4, mojo.internal.kHostLittleEndian); - } else { - low = dataView.getUint32(byteOffset + 4, mojo.internal.kHostLittleEndian); - high = dataView.getUint32(byteOffset, mojo.internal.kHostLittleEndian); + const value = (BigInt(high) << BigInt(32)) | BigInt(low); + if (value <= BigInt(Number.MAX_SAFE_INTEGER) && + value >= BigInt(Number.MIN_SAFE_INTEGER)) { + return Number(value); } - return (BigInt(high) << BigInt(32)) | BigInt(low); + return value; }; /** @@ -236,6 +222,26 @@ return totalSize; }; +/** + * @param {!DataView} dataView + * @param {number} byteOffset + * @return {bigint|number} + */ +mojo.internal.getUint64 = function(dataView, byteOffset) { + let low, high; + if (mojo.internal.kHostLittleEndian) { + low = dataView.getUint32(byteOffset, mojo.internal.kHostLittleEndian); + high = dataView.getUint32(byteOffset + 4, mojo.internal.kHostLittleEndian); + } else { + low = dataView.getUint32(byteOffset + 4, mojo.internal.kHostLittleEndian); + high = dataView.getUint32(byteOffset, mojo.internal.kHostLittleEndian); + } + const value = (BigInt(high) << BigInt(32)) | BigInt(low); + if (value <= BigInt(Number.MAX_SAFE_INTEGER)) + return Number(value); + return value; +}; + /** Owns an outgoing message buffer and facilitates serialization. */ mojo.internal.Message = class { /** @@ -650,9 +656,7 @@ const relativeOffset = this.decodeUint64(offset); if (relativeOffset == 0) return 0; - if (relativeOffset > BigInt(Number.MAX_SAFE_INTEGER)) - throw new Error('Mesage offset too large'); - return this.data_.byteOffset + offset + Number(relativeOffset); + return this.data_.byteOffset + offset + relativeOffset; } /**
diff --git a/mojo/public/tools/bindings/generators/js_templates/lite/interface_definition_for_module.tmpl b/mojo/public/tools/bindings/generators/js_templates/lite/interface_definition_for_module.tmpl index bc000ba..141b3c3 100644 --- a/mojo/public/tools/bindings/generators/js_templates/lite/interface_definition_for_module.tmpl +++ b/mojo/public/tools/bindings/generators/js_templates/lite/interface_definition_for_module.tmpl
@@ -1,7 +1,7 @@ {% macro generateMethodAnnotation(method) %} /** {%- for param in method.parameters %} - * @param { {{param.kind|param_type_in_js_module}} } {{param.name|sanitize_identifier}} + * @param { {{param.kind|type_in_js_module_with_nullability}} } {{param.name|sanitize_identifier}} {%- endfor -%} {%- if method.response_parameters != None %} {%- if method.response_parameters|length == 0 %} @@ -9,7 +9,7 @@ {%- else %} * @return {!Promise<{ {%- for response_parameter in method.response_parameters %} - {{response_parameter.name}}: {{response_parameter.kind|param_type_in_js_module}}, + {{response_parameter.name}}: {{response_parameter.kind|type_in_js_module_with_nullability}}, {%- endfor %} * }>} {%- endif %}
diff --git a/mojo/public/tools/bindings/generators/js_templates/lite/module_definition.tmpl b/mojo/public/tools/bindings/generators/js_templates/lite/module_definition.tmpl index 99422f42..e8124d4 100644 --- a/mojo/public/tools/bindings/generators/js_templates/lite/module_definition.tmpl +++ b/mojo/public/tools/bindings/generators/js_templates/lite/module_definition.tmpl
@@ -8,7 +8,8 @@ * @const { {{constant.kind|lite_closure_type_with_nullability}} } * @export */ -{{module.namespace}}.{{constant.name}} = {{constant|constant_value}}; +{{module.namespace}}.{{constant.name}} = + {{constant.value|expression_to_text_lite}}; {%- endfor %} {#--- Enums #}
diff --git a/mojo/public/tools/bindings/generators/js_templates/lite/mojom.m.js.tmpl b/mojo/public/tools/bindings/generators/js_templates/lite/mojom.m.js.tmpl index 6576073..af5f191 100644 --- a/mojo/public/tools/bindings/generators/js_templates/lite/mojom.m.js.tmpl +++ b/mojo/public/tools/bindings/generators/js_templates/lite/mojom.m.js.tmpl
@@ -22,7 +22,8 @@ /** * @const { {{constant.kind|type_in_js_module_with_nullability}} } */ -export const {{constant.name}} = {{constant|constant_value_in_js_module}}; +export const {{constant.name}} = + {{constant.value|expression_to_text_lite}}; {% endfor -%}
diff --git a/mojo/public/tools/bindings/generators/js_templates/lite/struct_definition.tmpl b/mojo/public/tools/bindings/generators/js_templates/lite/struct_definition.tmpl index 2e4eb95..8b3e45a 100644 --- a/mojo/public/tools/bindings/generators/js_templates/lite/struct_definition.tmpl +++ b/mojo/public/tools/bindings/generators/js_templates/lite/struct_definition.tmpl
@@ -4,7 +4,7 @@ * @export */ {{module.namespace}}.{{struct.name}}_{{constant.name}} = - {{constant|constant_value}}; + {{constant.value|expression_to_text_lite}}; {% endfor %} {%- from "lite/enum_definition.tmpl" import enum_def with context %}
diff --git a/mojo/public/tools/bindings/generators/js_templates/lite/struct_definition_for_module.tmpl b/mojo/public/tools/bindings/generators/js_templates/lite/struct_definition_for_module.tmpl index b6ef382..f4cfe64 100644 --- a/mojo/public/tools/bindings/generators/js_templates/lite/struct_definition_for_module.tmpl +++ b/mojo/public/tools/bindings/generators/js_templates/lite/struct_definition_for_module.tmpl
@@ -3,7 +3,7 @@ * @const { {{constant.kind|type_in_js_module_with_nullability}} } */ export const {{struct.name}}_{{constant.name}} = - {{constant|constant_value_in_js_module}}; + {{constant.value|expression_to_text_lite}}; {% endfor %} {%- from "lite/enum_definition_for_module.tmpl" import enum_def with context %}
diff --git a/mojo/public/tools/bindings/generators/mojom_js_generator.py b/mojo/public/tools/bindings/generators/mojom_js_generator.py index 6c04680..f5a46d82 100644 --- a/mojo/public/tools/bindings/generators/mojom_js_generator.py +++ b/mojo/public/tools/bindings/generators/mojom_js_generator.py
@@ -318,13 +318,12 @@ def GetFilters(self): js_filters = { "closure_type": self._ClosureType, - "constant_value": self._GetConstantValue, - "constant_value_in_js_module": self._GetConstantValueInJsModule, "decode_snippet": self._JavaScriptDecodeSnippet, "default_value": self._JavaScriptDefaultValue, "default_value_in_js_module": self._DefaultValueInJsModule, "encode_snippet": self._JavaScriptEncodeSnippet, "expression_to_text": self._ExpressionToText, + "expression_to_text_lite": self._ExpressionToTextLite, "field_offset": JavaScriptFieldOffset, "field_type_in_js_module": self._GetFieldTypeInJsModule, "get_relative_url": GetRelativeUrl, @@ -508,10 +507,6 @@ # Indicates whether a kind of suitable to stringify and use as an Object # property name. This is checked for map key types to allow most kinds of # mojom maps to be represented as either a Map or an Object. - if kind == mojom.INT64 or kind == mojom.UINT64: - # JS BigInts are not stringable and cannot be used as Object property - # names. - return False return (mojom.IsIntegralKind(kind) or mojom.IsFloatKind(kind) or mojom.IsDoubleKind(kind) or mojom.IsStringKind(kind) or mojom.IsEnumKind(kind)) @@ -526,8 +521,6 @@ for_module=for_module) def get_type_name(kind): - if kind == mojom.INT64 or kind == mojom.UINT64: - return "bigint" if kind in mojom.PRIMITIVES: return _kind_to_closure_type[kind] if mojom.IsArrayKind(kind): @@ -785,8 +778,6 @@ assert field.default == "default" return "null" return self._ExpressionToTextLite(field.default, for_module=for_module) - if field.kind == mojom.INT64 or field.kind == mojom.UINT64: - return "BigInt(0)" if field.kind in mojom.PRIMITIVES: return _kind_to_javascript_default_value[field.kind] if mojom.IsEnumKind(field.kind): @@ -988,16 +979,6 @@ return self._ExpressionToText(token) - def _GetConstantValue(self, constant, for_module=False): - assert isinstance(constant, mojom.Constant) - text = self._ExpressionToTextLite(constant.value, for_module=for_module) - if constant.kind == mojom.INT64 or constant.kind == mojom.UINT64: - return "BigInt('{}')".format(text) - return text - - def _GetConstantValueInJsModule(self, constant): - return self._GetConstantValue(constant, for_module=True) - def _GenerateHtmlImports(self): result = [] for full_import in self.module.imports:
diff --git a/mojo/public/tools/bindings/mojom.gni b/mojo/public/tools/bindings/mojom.gni index 7db2927..83b91a22 100644 --- a/mojo/public/tools/bindings/mojom.gni +++ b/mojo/public/tools/bindings/mojom.gni
@@ -77,6 +77,7 @@ "$_mojom_library_root/__init__.py", "$_mojom_library_root/error.py", "$_mojom_library_root/generate/__init__.py", + "$_mojom_library_root/generate/constant_resolver.py", "$_mojom_library_root/generate/generator.py", "$_mojom_library_root/generate/module.py", "$_mojom_library_root/generate/pack.py",
diff --git a/mojo/public/tools/mojom/mojom/BUILD.gn b/mojo/public/tools/mojom/mojom/BUILD.gn index 51facc0..7416ef1 100644 --- a/mojo/public/tools/mojom/mojom/BUILD.gn +++ b/mojo/public/tools/mojom/mojom/BUILD.gn
@@ -8,6 +8,7 @@ "error.py", "fileutil.py", "generate/__init__.py", + "generate/constant_resolver.py", "generate/generator.py", "generate/module.py", "generate/pack.py",
diff --git a/mojo/public/tools/mojom/mojom/generate/constant_resolver.py b/mojo/public/tools/mojom/mojom/generate/constant_resolver.py new file mode 100644 index 0000000..0dfd996 --- /dev/null +++ b/mojo/public/tools/mojom/mojom/generate/constant_resolver.py
@@ -0,0 +1,93 @@ +# Copyright 2015 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. +"""Resolves the values used for constants and enums.""" + +from itertools import ifilter + +from mojom.generate import module as mojom + + +def ResolveConstants(module, expression_to_text): + in_progress = set() + computed = set() + + def GetResolvedValue(named_value): + assert isinstance(named_value, (mojom.EnumValue, mojom.ConstantValue)) + if isinstance(named_value, mojom.EnumValue): + field = next( + ifilter(lambda field: field.name == named_value.name, + named_value.enum.fields), None) + if not field: + raise RuntimeError( + 'Unable to get computed value for field %s of enum %s' % + (named_value.name, named_value.enum.name)) + if field not in computed: + ResolveEnum(named_value.enum) + return field.resolved_value + else: + ResolveConstant(named_value.constant) + named_value.resolved_value = named_value.constant.resolved_value + return named_value.resolved_value + + def ResolveConstant(constant): + if constant in computed: + return + if constant in in_progress: + raise RuntimeError('Circular dependency for constant: %s' % constant.name) + in_progress.add(constant) + if isinstance(constant.value, (mojom.EnumValue, mojom.ConstantValue)): + resolved_value = GetResolvedValue(constant.value) + else: + resolved_value = expression_to_text(constant.value) + constant.resolved_value = resolved_value + in_progress.remove(constant) + computed.add(constant) + + def ResolveEnum(enum): + def ResolveEnumField(enum, field, default_value): + if field in computed: + return + if field in in_progress: + raise RuntimeError('Circular dependency for enum: %s' % enum.name) + in_progress.add(field) + if field.value: + if isinstance(field.value, mojom.EnumValue): + resolved_value = GetResolvedValue(field.value) + elif isinstance(field.value, str): + resolved_value = int(field.value, 0) + else: + raise RuntimeError('Unexpected value: %s' % field.value) + else: + resolved_value = default_value + field.resolved_value = resolved_value + in_progress.remove(field) + computed.add(field) + + current_value = 0 + for field in enum.fields: + ResolveEnumField(enum, field, current_value) + current_value = field.resolved_value + 1 + + for constant in module.constants: + ResolveConstant(constant) + + for enum in module.enums: + ResolveEnum(enum) + + for struct in module.structs: + for constant in struct.constants: + ResolveConstant(constant) + for enum in struct.enums: + ResolveEnum(enum) + for field in struct.fields: + if isinstance(field.default, (mojom.ConstantValue, mojom.EnumValue)): + field.default.resolved_value = GetResolvedValue(field.default) + + for interface in module.interfaces: + for constant in interface.constants: + ResolveConstant(constant) + for enum in interface.enums: + ResolveEnum(enum) + + return module
diff --git a/net/base/isolation_info.cc b/net/base/isolation_info.cc index 115313e..0980f71 100644 --- a/net/base/isolation_info.cc +++ b/net/base/isolation_info.cc
@@ -36,14 +36,14 @@ // descriptions of consistent sets of values. Also allows values used by the // 0-argument constructor. Additionally, |opaque_and_non_transient| can only be // true if both origins are opaque and |site_for_cookies| is null. -bool IsConsistent(IsolationInfo::RedirectMode redirect_mode, +bool IsConsistent(IsolationInfo::RequestType request_type, const base::Optional<url::Origin>& top_frame_origin, const base::Optional<url::Origin>& frame_origin, const SiteForCookies& site_for_cookies, bool opaque_and_non_transient) { // Check for the default-constructed case. if (!top_frame_origin) { - return redirect_mode == IsolationInfo::RedirectMode::kUpdateNothing && + return request_type == IsolationInfo::RequestType::kOther && !frame_origin && site_for_cookies.IsNull() && !opaque_and_non_transient; } @@ -58,13 +58,13 @@ return false; if (opaque_and_non_transient) { - return (redirect_mode == IsolationInfo::RedirectMode::kUpdateNothing && + return (request_type == IsolationInfo::RequestType::kOther && top_frame_origin->opaque() && top_frame_origin == frame_origin && site_for_cookies.IsNull()); } - switch (redirect_mode) { - case IsolationInfo::RedirectMode::kUpdateTopFrame: + switch (request_type) { + case IsolationInfo::RequestType::kMainFrame: // TODO(https://crbug.com/1056706): Check that |top_frame_origin| and // |frame_origin| are the same, once the ViewSource code creates a // consistent IsolationInfo object. @@ -72,12 +72,12 @@ // TODO(https://crbug.com/1060631): Once CreatePartial() is removed, check // if SiteForCookies is non-null if the scheme is HTTP or HTTPS. return true; - case IsolationInfo::RedirectMode::kUpdateFrameOnly: + case IsolationInfo::RequestType::kSubFrame: // For subframe navigations, the subframe's origin may not be consistent // with the SiteForCookies, so SameSite cookies may be sent if there's a // redirect to main frames site. return true; - case IsolationInfo::RedirectMode::kUpdateNothing: + case IsolationInfo::RequestType::kOther: // SiteForCookies must consistent with the frame origin as well for // subresources. return ValidateSameSite(*frame_origin, site_for_cookies); @@ -87,7 +87,7 @@ } // namespace IsolationInfo::IsolationInfo() - : IsolationInfo(RedirectMode::kUpdateNothing, + : IsolationInfo(RequestType::kOther, base::nullopt, base::nullopt, SiteForCookies(), @@ -101,8 +101,7 @@ IsolationInfo IsolationInfo::CreateForInternalRequest( const url::Origin& top_frame_origin) { - return IsolationInfo(RedirectMode::kUpdateNothing, top_frame_origin, - top_frame_origin, + return IsolationInfo(RequestType::kOther, top_frame_origin, top_frame_origin, SiteForCookies::FromOrigin(top_frame_origin), false /* opaque_and_non_transient */); } @@ -113,21 +112,20 @@ IsolationInfo IsolationInfo::CreateOpaqueAndNonTransient() { url::Origin opaque_origin; - return IsolationInfo(RedirectMode::kUpdateNothing, opaque_origin, - opaque_origin, SiteForCookies(), - true /* opaque_and_non_transient */); + return IsolationInfo(RequestType::kOther, opaque_origin, opaque_origin, + SiteForCookies(), true /* opaque_and_non_transient */); } -IsolationInfo IsolationInfo::Create(RedirectMode redirect_mode, +IsolationInfo IsolationInfo::Create(RequestType request_type, const url::Origin& top_frame_origin, const url::Origin& frame_origin, const SiteForCookies& site_for_cookies) { - return IsolationInfo(redirect_mode, top_frame_origin, frame_origin, + return IsolationInfo(request_type, top_frame_origin, frame_origin, site_for_cookies, false /* opaque_and_non_transient */); } IsolationInfo IsolationInfo::CreatePartial( - RedirectMode redirect_mode, + RequestType request_type, const net::NetworkIsolationKey& network_isolation_key) { if (!network_isolation_key.IsFullyPopulated()) return IsolationInfo(); @@ -136,7 +134,7 @@ url::Origin frame_origin; if (network_isolation_key.GetFrameSite().has_value()) { frame_origin = *network_isolation_key.GetFrameSite(); - } else if (redirect_mode == RedirectMode::kUpdateTopFrame) { + } else if (request_type == RequestType::kMainFrame) { frame_origin = top_frame_origin; } else { frame_origin = url::Origin(); @@ -146,42 +144,42 @@ frame_origin.opaque() && !network_isolation_key.IsTransient(); - return IsolationInfo(redirect_mode, top_frame_origin, frame_origin, + return IsolationInfo(request_type, top_frame_origin, frame_origin, SiteForCookies(), opaque_and_non_transient); } base::Optional<IsolationInfo> IsolationInfo::CreateIfConsistent( - RedirectMode redirect_mode, + RequestType request_type, const base::Optional<url::Origin>& top_frame_origin, const base::Optional<url::Origin>& frame_origin, const SiteForCookies& site_for_cookies, bool opaque_and_non_transient) { - if (!IsConsistent(redirect_mode, top_frame_origin, frame_origin, + if (!IsConsistent(request_type, top_frame_origin, frame_origin, site_for_cookies, opaque_and_non_transient)) { return base::nullopt; } - return IsolationInfo(redirect_mode, top_frame_origin, frame_origin, + return IsolationInfo(request_type, top_frame_origin, frame_origin, site_for_cookies, opaque_and_non_transient); } IsolationInfo IsolationInfo::CreateForRedirect( const url::Origin& new_origin) const { - if (redirect_mode_ == RedirectMode::kUpdateNothing) + if (request_type_ == RequestType::kOther) return *this; - if (redirect_mode_ == RedirectMode::kUpdateFrameOnly) { - return IsolationInfo(redirect_mode_, top_frame_origin_, new_origin, + if (request_type_ == RequestType::kSubFrame) { + return IsolationInfo(request_type_, top_frame_origin_, new_origin, site_for_cookies_, opaque_and_non_transient_); } - DCHECK_EQ(RedirectMode::kUpdateTopFrame, redirect_mode_); - return IsolationInfo(redirect_mode_, new_origin, new_origin, + DCHECK_EQ(RequestType::kMainFrame, request_type_); + return IsolationInfo(request_type_, new_origin, new_origin, SiteForCookies::FromOrigin(new_origin), opaque_and_non_transient_); } bool IsolationInfo::IsEqualForTesting(const IsolationInfo& other) const { - return (redirect_mode_ == other.redirect_mode_ && + return (request_type_ == other.request_type_ && top_frame_origin_ == other.top_frame_origin_ && frame_origin_ == other.frame_origin_ && network_isolation_key_ == other.network_isolation_key_ && @@ -190,12 +188,12 @@ } IsolationInfo::IsolationInfo( - RedirectMode redirect_mode, + RequestType request_type, const base::Optional<url::Origin>& top_frame_origin, const base::Optional<url::Origin>& frame_origin, const SiteForCookies& site_for_cookies, bool opaque_and_non_transient) - : redirect_mode_(redirect_mode), + : request_type_(request_type), top_frame_origin_(top_frame_origin), frame_origin_(frame_origin), network_isolation_key_( @@ -205,7 +203,7 @@ opaque_and_non_transient)), site_for_cookies_(site_for_cookies), opaque_and_non_transient_(opaque_and_non_transient) { - DCHECK(IsConsistent(redirect_mode_, top_frame_origin_, frame_origin_, + DCHECK(IsConsistent(request_type_, top_frame_origin_, frame_origin_, site_for_cookies_, opaque_and_non_transient_)); }
diff --git a/net/base/isolation_info.h b/net/base/isolation_info.h index 65b13b3..f84076b 100644 --- a/net/base/isolation_info.h +++ b/net/base/isolation_info.h
@@ -29,32 +29,32 @@ public: // The update-on-redirect patterns. // - // In general, almost everything should use kUpdateNothing, as a - // kUpdateTopFrame request accidentally sent or redirected to an attacker - // allows cross-site tracking, and kUpdateFrameOnly allows information + // In general, almost everything should use kOther, as a + // kMainFrame request accidentally sent or redirected to an attacker + // allows cross-site tracking, and kSubFrame allows information // leaks between sites that iframe each other. Anything that uses - // kUpdateTopFrame should be user triggered and user visible, like a main + // kMainFrame should be user triggered and user visible, like a main // frame navigation or downloads. // - // The RedirectMode is a core part of an IsolationInfo, and using an + // The RequestType is a core part of an IsolationInfo, and using an // IsolationInfo with one value to create an IsolationInfo with another - // RedirectMode is generally not a good idea, unless the RedirectMode of the - // new IsolationInfo is kUpdateNothing. - enum class RedirectMode { - // Update top level origin, frame origin, and SiteForCookies on redirect. + // RequestType is generally not a good idea, unless the RequestType of the + // new IsolationInfo is kOther. + enum class RequestType { + // Updates top level origin, frame origin, and SiteForCookies on redirect. // These requests allow users to be recognized across sites on redirect, so // should not generally be used for anything other than navigations. - kUpdateTopFrame, + kMainFrame, - // Only update frame origin on redirect. - kUpdateFrameOnly, + // Only updates frame origin on redirect. + kSubFrame, - // Update nothing on redirect. - kUpdateNothing, + // Updates nothing on redirect. + kOther, }; // Default constructor returns an IsolationInfo with empty origins, a null - // SiteForCookies(), and a RedirectMode of kUpdateNothing. + // SiteForCookies(), and a RequestType of kOther. IsolationInfo(); IsolationInfo(const IsolationInfo&); IsolationInfo(IsolationInfo&&); @@ -64,8 +64,8 @@ IsolationInfo& operator=(IsolationInfo&&); // Simple constructor for internal requests. Sets |frame_origin| and - // |site_for_cookies| match |top_frame_origin|. Sets |redirect_mode| to - // kUpdateNothing. Will only send SameSite cookies to the site associated with + // |site_for_cookies| match |top_frame_origin|. Sets |request_type| to + // kOther. Will only send SameSite cookies to the site associated with // the passed in origin. static IsolationInfo CreateForInternalRequest( const url::Origin& top_frame_origin); @@ -82,19 +82,19 @@ // Creates an IsolationInfo with the provided parameters. If the parameters // are inconsistent, DCHECKs. In particular: - // * If |redirect_mode| is kUpdateTopFrame, |top_frame_origin| must equal + // * If |request_type| is kMainFrame, |top_frame_origin| must equal // |frame_origin|, and |site_for_cookies| must be either null or first party // with respect to them. - // * If |redirect_mode| is kUpdateFrameOnly, |top_frame_origin| must be + // * If |request_type| is kSubFrame, |top_frame_origin| must be // first party with respect to |site_for_cookies|, or |site_for_cookies| // must be null. - // * If |redirect_mode| is kUpdateNothing, |top_frame_origin| and + // * If |request_type| is kOther, |top_frame_origin| and // |frame_origin| must be first party with respect to |site_for_cookies|, or // |site_for_cookies| must be null. // // Note that the |site_for_cookies| consistency checks are skipped when // |site_for_cookies| is not HTTP/HTTPS. - static IsolationInfo Create(RedirectMode redirect_mode, + static IsolationInfo Create(RequestType request_type, const url::Origin& top_frame_origin, const url::Origin& frame_origin, const SiteForCookies& site_for_cookies); @@ -102,7 +102,7 @@ // Create an IsolationInfos that may not be fully correct - in particular, // the SiteForCookies will always set to null, and if the NetworkIsolationKey // only has a top frame origin, the frame origin will either be set to the top - // frame origin, in the kUpdateTopFrame case, or be replaced by an opaque + // frame origin, in the kMainFrame case, or be replaced by an opaque // origin in all other cases. If the NetworkIsolationKey is not fully // populated, will create an empty IsolationInfo. This is intended for use // while transitioning from NIKs being set on only some requests to @@ -110,7 +110,7 @@ // // TODO(https://crbug.com/1060631): Remove this once no longer needed. static IsolationInfo CreatePartial( - RedirectMode redirect_mode, + RequestType request_type, const net::NetworkIsolationKey& network_isolation_key); // Returns nullopt if the arguments are not consistent. Otherwise, returns a @@ -120,7 +120,7 @@ // // Intended for use by cross-process deserialization. static base::Optional<IsolationInfo> CreateIfConsistent( - RedirectMode redirect_mode, + RequestType request_type, const base::Optional<url::Origin>& top_frame_origin, const base::Optional<url::Origin>& frame_origin, const SiteForCookies& site_for_cookies, @@ -130,7 +130,7 @@ // unmodified. IsolationInfo CreateForRedirect(const url::Origin& new_origin) const; - RedirectMode redirect_mode() const { return redirect_mode_; } + RequestType request_type() const { return request_type_; } bool IsEmpty() const { return !top_frame_origin_; } @@ -164,13 +164,13 @@ bool IsEqualForTesting(const IsolationInfo& other) const; private: - IsolationInfo(RedirectMode redirect_mode, + IsolationInfo(RequestType request_type, const base::Optional<url::Origin>& top_frame_origin, const base::Optional<url::Origin>& frame_origin, const SiteForCookies& site_for_cookies, bool opaque_and_non_transient); - RedirectMode redirect_mode_; + RequestType request_type_; base::Optional<url::Origin> top_frame_origin_; base::Optional<url::Origin> frame_origin_;
diff --git a/net/base/isolation_info_unittest.cc b/net/base/isolation_info_unittest.cc index edad418..f15af69 100644 --- a/net/base/isolation_info_unittest.cc +++ b/net/base/isolation_info_unittest.cc
@@ -20,7 +20,7 @@ void DuplicateAndCompare(const IsolationInfo& isolation_info) { base::Optional<IsolationInfo> duplicate_isolation_info = IsolationInfo::CreateIfConsistent( - isolation_info.redirect_mode(), isolation_info.top_frame_origin(), + isolation_info.request_type(), isolation_info.top_frame_origin(), isolation_info.frame_origin(), isolation_info.site_for_cookies(), isolation_info.opaque_and_non_transient()); @@ -38,12 +38,12 @@ const url::Origin kOpaqueOrigin; }; -TEST_F(IsolationInfoTest, UpdateTopFrame) { - IsolationInfo isolation_info = IsolationInfo::Create( - IsolationInfo::RedirectMode::kUpdateTopFrame, kOrigin1, kOrigin1, - SiteForCookies::FromOrigin(kOrigin1)); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateTopFrame, - isolation_info.redirect_mode()); +TEST_F(IsolationInfoTest, RequestTypeMainFrame) { + IsolationInfo isolation_info = + IsolationInfo::Create(IsolationInfo::RequestType::kMainFrame, kOrigin1, + kOrigin1, SiteForCookies::FromOrigin(kOrigin1)); + EXPECT_EQ(IsolationInfo::RequestType::kMainFrame, + isolation_info.request_type()); EXPECT_EQ(kOrigin1, isolation_info.top_frame_origin()); EXPECT_EQ(kOrigin1, isolation_info.frame_origin()); EXPECT_TRUE(isolation_info.network_isolation_key().IsFullyPopulated()); @@ -58,8 +58,8 @@ IsolationInfo redirected_isolation_info = isolation_info.CreateForRedirect(kOrigin3); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateTopFrame, - redirected_isolation_info.redirect_mode()); + EXPECT_EQ(IsolationInfo::RequestType::kMainFrame, + redirected_isolation_info.request_type()); EXPECT_EQ(kOrigin3, redirected_isolation_info.top_frame_origin()); EXPECT_EQ(kOrigin3, redirected_isolation_info.frame_origin()); EXPECT_TRUE( @@ -72,12 +72,12 @@ EXPECT_FALSE(redirected_isolation_info.opaque_and_non_transient()); } -TEST_F(IsolationInfoTest, UpdateFrameOnly) { - IsolationInfo isolation_info = IsolationInfo::Create( - IsolationInfo::RedirectMode::kUpdateFrameOnly, kOrigin1, kOrigin2, - SiteForCookies::FromOrigin(kOrigin1)); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateFrameOnly, - isolation_info.redirect_mode()); +TEST_F(IsolationInfoTest, RequestTypeSubFrame) { + IsolationInfo isolation_info = + IsolationInfo::Create(IsolationInfo::RequestType::kSubFrame, kOrigin1, + kOrigin2, SiteForCookies::FromOrigin(kOrigin1)); + EXPECT_EQ(IsolationInfo::RequestType::kSubFrame, + isolation_info.request_type()); EXPECT_EQ(kOrigin1, isolation_info.top_frame_origin()); EXPECT_EQ(kOrigin2, isolation_info.frame_origin()); EXPECT_TRUE(isolation_info.network_isolation_key().IsFullyPopulated()); @@ -92,8 +92,8 @@ IsolationInfo redirected_isolation_info = isolation_info.CreateForRedirect(kOrigin3); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateFrameOnly, - redirected_isolation_info.redirect_mode()); + EXPECT_EQ(IsolationInfo::RequestType::kSubFrame, + redirected_isolation_info.request_type()); EXPECT_EQ(kOrigin1, redirected_isolation_info.top_frame_origin()); EXPECT_EQ(kOrigin3, redirected_isolation_info.frame_origin()); EXPECT_TRUE( @@ -106,10 +106,9 @@ EXPECT_FALSE(redirected_isolation_info.opaque_and_non_transient()); } -TEST_F(IsolationInfoTest, UpdateNothing) { +TEST_F(IsolationInfoTest, RequestTypeOther) { IsolationInfo isolation_info; - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateNothing, - isolation_info.redirect_mode()); + EXPECT_EQ(IsolationInfo::RequestType::kOther, isolation_info.request_type()); EXPECT_FALSE(isolation_info.top_frame_origin()); EXPECT_FALSE(isolation_info.frame_origin()); EXPECT_TRUE(isolation_info.network_isolation_key().IsEmpty()); @@ -123,12 +122,11 @@ EXPECT_TRUE(isolation_info.IsEqualForTesting(redirected_isolation_info)); } -TEST_F(IsolationInfoTest, UpdateNothingWithSiteForCookies) { - IsolationInfo isolation_info = IsolationInfo::Create( - IsolationInfo::RedirectMode::kUpdateNothing, kOrigin1, kOrigin1, - SiteForCookies::FromOrigin(kOrigin1)); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateNothing, - isolation_info.redirect_mode()); +TEST_F(IsolationInfoTest, RequestTypeOtherWithSiteForCookies) { + IsolationInfo isolation_info = + IsolationInfo::Create(IsolationInfo::RequestType::kOther, kOrigin1, + kOrigin1, SiteForCookies::FromOrigin(kOrigin1)); + EXPECT_EQ(IsolationInfo::RequestType::kOther, isolation_info.request_type()); EXPECT_EQ(kOrigin1, isolation_info.top_frame_origin()); EXPECT_EQ(kOrigin1, isolation_info.frame_origin()); EXPECT_TRUE(isolation_info.network_isolation_key().IsFullyPopulated()); @@ -148,12 +146,10 @@ // Test case of a subresource for cross-site subframe (which has an empty // site-for-cookies). -TEST_F(IsolationInfoTest, UpdateNothingWithEmptySiteForCookies) { - IsolationInfo isolation_info = - IsolationInfo::Create(IsolationInfo::RedirectMode::kUpdateNothing, - kOrigin1, kOrigin2, SiteForCookies()); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateNothing, - isolation_info.redirect_mode()); +TEST_F(IsolationInfoTest, RequestTypeOtherWithEmptySiteForCookies) { + IsolationInfo isolation_info = IsolationInfo::Create( + IsolationInfo::RequestType::kOther, kOrigin1, kOrigin2, SiteForCookies()); + EXPECT_EQ(IsolationInfo::RequestType::kOther, isolation_info.request_type()); EXPECT_EQ(kOrigin1, isolation_info.top_frame_origin()); EXPECT_EQ(kOrigin2, isolation_info.frame_origin()); EXPECT_TRUE(isolation_info.network_isolation_key().IsFullyPopulated()); @@ -172,8 +168,7 @@ TEST_F(IsolationInfoTest, CreateTransient) { IsolationInfo isolation_info = IsolationInfo::CreateTransient(); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateNothing, - isolation_info.redirect_mode()); + EXPECT_EQ(IsolationInfo::RequestType::kOther, isolation_info.request_type()); EXPECT_TRUE(isolation_info.top_frame_origin()->opaque()); EXPECT_TRUE(isolation_info.frame_origin()->opaque()); EXPECT_TRUE(isolation_info.network_isolation_key().IsFullyPopulated()); @@ -190,8 +185,7 @@ TEST_F(IsolationInfoTest, CreateOpaqueAndNonTransient) { IsolationInfo isolation_info = IsolationInfo::CreateOpaqueAndNonTransient(); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateNothing, - isolation_info.redirect_mode()); + EXPECT_EQ(IsolationInfo::RequestType::kOther, isolation_info.request_type()); EXPECT_TRUE(isolation_info.top_frame_origin()->opaque()); EXPECT_TRUE(isolation_info.frame_origin()->opaque()); EXPECT_TRUE(isolation_info.network_isolation_key().IsFullyPopulated()); @@ -212,8 +206,7 @@ TEST_F(IsolationInfoTest, CreateForInternalRequest) { IsolationInfo isolation_info = IsolationInfo::CreateForInternalRequest(kOrigin1); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateNothing, - isolation_info.redirect_mode()); + EXPECT_EQ(IsolationInfo::RequestType::kOther, isolation_info.request_type()); EXPECT_EQ(kOrigin1, isolation_info.top_frame_origin()); EXPECT_EQ(kOrigin1, isolation_info.frame_origin()); EXPECT_TRUE(isolation_info.network_isolation_key().IsFullyPopulated()); @@ -234,9 +227,9 @@ TEST_F(IsolationInfoTest, CreatePartialUpdateTopFrame) { const NetworkIsolationKey kNIK(kOrigin1, kOrigin1); IsolationInfo isolation_info = IsolationInfo::CreatePartial( - IsolationInfo::RedirectMode::kUpdateTopFrame, kNIK); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateTopFrame, - isolation_info.redirect_mode()); + IsolationInfo::RequestType::kMainFrame, kNIK); + EXPECT_EQ(IsolationInfo::RequestType::kMainFrame, + isolation_info.request_type()); EXPECT_EQ(kSite1, isolation_info.top_frame_origin()); EXPECT_EQ(kSite1, isolation_info.frame_origin()); EXPECT_EQ(kNIK, isolation_info.network_isolation_key()); @@ -248,10 +241,10 @@ TEST_F(IsolationInfoTest, CreatePartialUpdateFrameOnly) { const NetworkIsolationKey kNIK(kOrigin1, kOrigin2); - IsolationInfo isolation_info = IsolationInfo::CreatePartial( - IsolationInfo::RedirectMode::kUpdateFrameOnly, kNIK); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateFrameOnly, - isolation_info.redirect_mode()); + IsolationInfo isolation_info = + IsolationInfo::CreatePartial(IsolationInfo::RequestType::kSubFrame, kNIK); + EXPECT_EQ(IsolationInfo::RequestType::kSubFrame, + isolation_info.request_type()); EXPECT_EQ(kSite1, isolation_info.top_frame_origin()); EXPECT_EQ(kSite2, isolation_info.frame_origin()); EXPECT_EQ(kNIK, isolation_info.network_isolation_key()); @@ -263,10 +256,9 @@ TEST_F(IsolationInfoTest, CreatePartialUpdateNothing) { const NetworkIsolationKey kNIK(kOrigin1, kOrigin2); - IsolationInfo isolation_info = IsolationInfo::CreatePartial( - IsolationInfo::RedirectMode::kUpdateNothing, kNIK); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateNothing, - isolation_info.redirect_mode()); + IsolationInfo isolation_info = + IsolationInfo::CreatePartial(IsolationInfo::RequestType::kOther, kNIK); + EXPECT_EQ(IsolationInfo::RequestType::kOther, isolation_info.request_type()); EXPECT_EQ(kSite1, isolation_info.top_frame_origin()); EXPECT_EQ(kSite2, isolation_info.frame_origin()); EXPECT_EQ(kNIK, isolation_info.network_isolation_key()); @@ -278,10 +270,9 @@ TEST_F(IsolationInfoTest, CreatePartialTransient) { const NetworkIsolationKey kNIK = NetworkIsolationKey::CreateTransient(); - IsolationInfo isolation_info = IsolationInfo::CreatePartial( - IsolationInfo::RedirectMode::kUpdateNothing, kNIK); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateNothing, - isolation_info.redirect_mode()); + IsolationInfo isolation_info = + IsolationInfo::CreatePartial(IsolationInfo::RequestType::kOther, kNIK); + EXPECT_EQ(IsolationInfo::RequestType::kOther, isolation_info.request_type()); EXPECT_EQ(*kNIK.GetTopFrameSite(), isolation_info.top_frame_origin()); EXPECT_EQ(*kNIK.GetFrameSite(), isolation_info.frame_origin()); EXPECT_EQ(kNIK, isolation_info.network_isolation_key()); @@ -294,10 +285,9 @@ TEST_F(IsolationInfoTest, CreatePartialOpaqueAndNonTransient) { const NetworkIsolationKey kNIK = NetworkIsolationKey::CreateOpaqueAndNonTransient(); - IsolationInfo isolation_info = IsolationInfo::CreatePartial( - IsolationInfo::RedirectMode::kUpdateNothing, kNIK); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateNothing, - isolation_info.redirect_mode()); + IsolationInfo isolation_info = + IsolationInfo::CreatePartial(IsolationInfo::RequestType::kOther, kNIK); + EXPECT_EQ(IsolationInfo::RequestType::kOther, isolation_info.request_type()); EXPECT_EQ(*kNIK.GetTopFrameSite(), isolation_info.top_frame_origin()); EXPECT_EQ(*kNIK.GetFrameSite(), isolation_info.frame_origin()); EXPECT_EQ(kNIK, isolation_info.network_isolation_key()); @@ -309,9 +299,8 @@ TEST_F(IsolationInfoTest, CreatePartialEmpty) { IsolationInfo isolation_info = IsolationInfo::CreatePartial( - IsolationInfo::RedirectMode::kUpdateNothing, NetworkIsolationKey()); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateNothing, - isolation_info.redirect_mode()); + IsolationInfo::RequestType::kOther, NetworkIsolationKey()); + EXPECT_EQ(IsolationInfo::RequestType::kOther, isolation_info.request_type()); EXPECT_FALSE(isolation_info.top_frame_origin()); EXPECT_FALSE(isolation_info.frame_origin()); EXPECT_EQ(NetworkIsolationKey(), isolation_info.network_isolation_key()); @@ -321,8 +310,7 @@ DuplicateAndCompare(isolation_info); } -TEST_F(IsolationInfoTest, - CreatePartialEmptyNoFrameOriginRedirectModeUpdateTopFrame) { +TEST_F(IsolationInfoTest, CreatePartialEmptyNoFrameOriginRequestTypeMainFrame) { base::test::ScopedFeatureList feature_list; feature_list.InitAndDisableFeature( features::kAppendFrameOriginToNetworkIsolationKey); @@ -330,9 +318,9 @@ const NetworkIsolationKey kNIK(kOrigin1, kOrigin1); EXPECT_FALSE(kNIK.GetFrameSite()); IsolationInfo isolation_info = IsolationInfo::CreatePartial( - IsolationInfo::RedirectMode::kUpdateTopFrame, kNIK); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateTopFrame, - isolation_info.redirect_mode()); + IsolationInfo::RequestType::kMainFrame, kNIK); + EXPECT_EQ(IsolationInfo::RequestType::kMainFrame, + isolation_info.request_type()); EXPECT_EQ(kSite1, isolation_info.top_frame_origin()); EXPECT_EQ(kSite1, isolation_info.frame_origin()); EXPECT_EQ(kNIK, isolation_info.network_isolation_key()); @@ -342,18 +330,17 @@ DuplicateAndCompare(isolation_info); } -TEST_F(IsolationInfoTest, - CreatePartialEmptyNoFrameOriginRedirectModeUpdateFrameOnly) { +TEST_F(IsolationInfoTest, CreatePartialEmptyNoFrameOriginRequestTypeSubFrame) { base::test::ScopedFeatureList feature_list; feature_list.InitAndDisableFeature( features::kAppendFrameOriginToNetworkIsolationKey); const NetworkIsolationKey kNIK(kOrigin1, kOrigin2); EXPECT_FALSE(kNIK.GetFrameSite()); - IsolationInfo isolation_info = IsolationInfo::CreatePartial( - IsolationInfo::RedirectMode::kUpdateFrameOnly, kNIK); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateFrameOnly, - isolation_info.redirect_mode()); + IsolationInfo isolation_info = + IsolationInfo::CreatePartial(IsolationInfo::RequestType::kSubFrame, kNIK); + EXPECT_EQ(IsolationInfo::RequestType::kSubFrame, + isolation_info.request_type()); EXPECT_EQ(kSite1, isolation_info.top_frame_origin()); ASSERT_TRUE(isolation_info.frame_origin()); EXPECT_TRUE(isolation_info.frame_origin()->opaque()); @@ -364,18 +351,16 @@ DuplicateAndCompare(isolation_info); } -TEST_F(IsolationInfoTest, - CreatePartialEmptyNoFrameOriginRedirectModeUpdateNothing) { +TEST_F(IsolationInfoTest, CreatePartialEmptyNoFrameOriginRequestTypeOther) { base::test::ScopedFeatureList feature_list; feature_list.InitAndDisableFeature( features::kAppendFrameOriginToNetworkIsolationKey); const NetworkIsolationKey kNIK(kOrigin1, kOrigin2); EXPECT_FALSE(kNIK.GetFrameSite()); - IsolationInfo isolation_info = IsolationInfo::CreatePartial( - IsolationInfo::RedirectMode::kUpdateNothing, kNIK); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateNothing, - isolation_info.redirect_mode()); + IsolationInfo isolation_info = + IsolationInfo::CreatePartial(IsolationInfo::RequestType::kOther, kNIK); + EXPECT_EQ(IsolationInfo::RequestType::kOther, isolation_info.request_type()); EXPECT_EQ(kSite1, isolation_info.top_frame_origin()); ASSERT_TRUE(isolation_info.frame_origin()); EXPECT_TRUE(isolation_info.frame_origin()->opaque()); @@ -388,7 +373,7 @@ // Test that in the UpdateNothing case, the SiteForCookies does not have to // match the frame origin, unlike in the HTTP/HTTPS case. -TEST_F(IsolationInfoTest, CustomSchemeUpdateNothing) { +TEST_F(IsolationInfoTest, CustomSchemeRequestTypeOther) { // Have to register the scheme, or url::Origin::Create() will return an opaque // origin. url::ScopedSchemeRegistryForTests scoped_registry; @@ -398,10 +383,9 @@ const url::Origin kCustomOrigin = url::Origin::Create(kCustomOriginUrl); IsolationInfo isolation_info = IsolationInfo::Create( - IsolationInfo::RedirectMode::kUpdateNothing, kCustomOrigin, kOrigin1, + IsolationInfo::RequestType::kOther, kCustomOrigin, kOrigin1, SiteForCookies::FromOrigin(kCustomOrigin)); - EXPECT_EQ(IsolationInfo::RedirectMode::kUpdateNothing, - isolation_info.redirect_mode()); + EXPECT_EQ(IsolationInfo::RequestType::kOther, isolation_info.request_type()); EXPECT_EQ(kCustomOrigin, isolation_info.top_frame_origin()); EXPECT_EQ(kOrigin1, isolation_info.frame_origin()); EXPECT_TRUE(isolation_info.network_isolation_key().IsFullyPopulated()); @@ -423,73 +407,73 @@ TEST_F(IsolationInfoTest, CreateIfConsistentFails) { // Main frames with inconsistent SiteForCookies. EXPECT_FALSE(IsolationInfo::CreateIfConsistent( - IsolationInfo::RedirectMode::kUpdateTopFrame, kOrigin1, kOrigin1, + IsolationInfo::RequestType::kMainFrame, kOrigin1, kOrigin1, SiteForCookies::FromOrigin(kOrigin2), false /* opaque_and_non_transient */)); EXPECT_FALSE(IsolationInfo::CreateIfConsistent( - IsolationInfo::RedirectMode::kUpdateTopFrame, kOpaqueOrigin, - kOpaqueOrigin, SiteForCookies::FromOrigin(kOrigin1), + IsolationInfo::RequestType::kMainFrame, kOpaqueOrigin, kOpaqueOrigin, + SiteForCookies::FromOrigin(kOrigin1), false /* opaque_and_non_transient */)); // Sub frame with inconsistent SiteForCookies. EXPECT_FALSE(IsolationInfo::CreateIfConsistent( - IsolationInfo::RedirectMode::kUpdateFrameOnly, kOrigin1, kOrigin2, + IsolationInfo::RequestType::kSubFrame, kOrigin1, kOrigin2, SiteForCookies::FromOrigin(kOrigin2), false /* opaque_and_non_transient */)); // Sub resources with inconsistent SiteForCookies. EXPECT_FALSE(IsolationInfo::CreateIfConsistent( - IsolationInfo::RedirectMode::kUpdateNothing, kOrigin1, kOrigin2, + IsolationInfo::RequestType::kOther, kOrigin1, kOrigin2, SiteForCookies::FromOrigin(kOrigin1), false /* opaque_and_non_transient */)); EXPECT_FALSE(IsolationInfo::CreateIfConsistent( - IsolationInfo::RedirectMode::kUpdateNothing, kOrigin1, kOrigin2, + IsolationInfo::RequestType::kOther, kOrigin1, kOrigin2, SiteForCookies::FromOrigin(kOrigin2), false /* opaque_and_non_transient */)); - // |opaque_and_non_transient| for wrong RedirectModes. + // |opaque_and_non_transient| for wrong RequestTypes. EXPECT_FALSE(IsolationInfo::CreateIfConsistent( - IsolationInfo::RedirectMode::kUpdateTopFrame, kOpaqueOrigin, - kOpaqueOrigin, SiteForCookies(), true /* opaque_and_non_transient */)); + IsolationInfo::RequestType::kMainFrame, kOpaqueOrigin, kOpaqueOrigin, + SiteForCookies(), true /* opaque_and_non_transient */)); EXPECT_FALSE(IsolationInfo::CreateIfConsistent( - IsolationInfo::RedirectMode::kUpdateFrameOnly, kOpaqueOrigin, - kOpaqueOrigin, SiteForCookies(), true /* opaque_and_non_transient */)); + IsolationInfo::RequestType::kSubFrame, kOpaqueOrigin, kOpaqueOrigin, + SiteForCookies(), true /* opaque_and_non_transient */)); // |opaque_and_non_transient| with empty origins. EXPECT_FALSE(IsolationInfo::CreateIfConsistent( - IsolationInfo::RedirectMode::kUpdateNothing, base::nullopt, base::nullopt, + IsolationInfo::RequestType::kOther, base::nullopt, base::nullopt, SiteForCookies(), true /* opaque_and_non_transient */)); // |opaque_and_non_transient| with non-opaque origins. EXPECT_FALSE(IsolationInfo::CreateIfConsistent( - IsolationInfo::RedirectMode::kUpdateNothing, kOrigin1, kOrigin1, - SiteForCookies(), true /* opaque_and_non_transient */)); + IsolationInfo::RequestType::kOther, kOrigin1, kOrigin1, SiteForCookies(), + true /* opaque_and_non_transient */)); // Incorrectly have empty/non-empty origins: EXPECT_FALSE(IsolationInfo::CreateIfConsistent( - IsolationInfo::RedirectMode::kUpdateNothing, base::nullopt, kOrigin1, + IsolationInfo::RequestType::kOther, base::nullopt, kOrigin1, SiteForCookies(), false /* opaque_and_non_transient */)); EXPECT_FALSE(IsolationInfo::CreateIfConsistent( - IsolationInfo::RedirectMode::kUpdateNothing, kOrigin1, base::nullopt, + IsolationInfo::RequestType::kOther, kOrigin1, base::nullopt, SiteForCookies(), false /* opaque_and_non_transient */)); EXPECT_FALSE(IsolationInfo::CreateIfConsistent( - IsolationInfo::RedirectMode::kUpdateTopFrame, base::nullopt, kOrigin1, + IsolationInfo::RequestType::kMainFrame, base::nullopt, kOrigin1, SiteForCookies::FromOrigin(kOrigin1), false /* opaque_and_non_transient */)); EXPECT_FALSE(IsolationInfo::CreateIfConsistent( - IsolationInfo::RedirectMode::kUpdateTopFrame, kOrigin1, base::nullopt, + IsolationInfo::RequestType::kMainFrame, kOrigin1, base::nullopt, SiteForCookies::FromOrigin(kOrigin1), false /* opaque_and_non_transient */)); EXPECT_FALSE(IsolationInfo::CreateIfConsistent( - IsolationInfo::RedirectMode::kUpdateFrameOnly, base::nullopt, kOrigin2, + IsolationInfo::RequestType::kSubFrame, base::nullopt, kOrigin2, SiteForCookies(), false /* opaque_and_non_transient */)); EXPECT_FALSE(IsolationInfo::CreateIfConsistent( - IsolationInfo::RedirectMode::kUpdateFrameOnly, kOrigin1, base::nullopt, + IsolationInfo::RequestType::kSubFrame, kOrigin1, base::nullopt, SiteForCookies(), false /* opaque_and_non_transient */)); // No origins with non-null SiteForCookies. EXPECT_FALSE(IsolationInfo::CreateIfConsistent( - IsolationInfo::RedirectMode::kUpdateNothing, base::nullopt, base::nullopt, + IsolationInfo::RequestType::kOther, base::nullopt, base::nullopt, SiteForCookies::FromOrigin(kOrigin1), false /* opaque_and_non_transient */)); }
diff --git a/net/cert_net/cert_net_fetcher_url_request.cc b/net/cert_net/cert_net_fetcher_url_request.cc index 426fd773..331e0ab0 100644 --- a/net/cert_net/cert_net_fetcher_url_request.cc +++ b/net/cert_net/cert_net_fetcher_url_request.cc
@@ -522,10 +522,9 @@ // result to still be cached in the HTTP cache, and lets URLRequest DCHECK // that all requests have non-empty IsolationInfos. url::Origin origin = url::Origin::Create(request_params_->url); - url_request_->set_isolation_info( - IsolationInfo::Create(IsolationInfo::RedirectMode::kUpdateNothing, - origin /* top_frame_origin */, - origin /* frame_origin */, SiteForCookies())); + url_request_->set_isolation_info(IsolationInfo::Create( + IsolationInfo::RequestType::kOther, origin /* top_frame_origin */, + origin /* frame_origin */, SiteForCookies())); url_request_->Start();
diff --git a/net/nqe/throughput_analyzer_unittest.cc b/net/nqe/throughput_analyzer_unittest.cc index acd6bca9..f865c97 100644 --- a/net/nqe/throughput_analyzer_unittest.cc +++ b/net/nqe/throughput_analyzer_unittest.cc
@@ -236,7 +236,7 @@ TRAFFIC_ANNOTATION_FOR_TESTS)); if (use_network_isolation_key) request->set_isolation_info(IsolationInfo::CreatePartial( - IsolationInfo::RedirectMode::kUpdateNothing, kNetworkIsolationKey)); + IsolationInfo::RequestType::kOther, kNetworkIsolationKey)); throughput_analyzer.NotifyStartTransaction(*(request.get())); requests.push_back(std::move(request)); }
diff --git a/net/reporting/reporting_uploader.cc b/net/reporting/reporting_uploader.cc index a54bfc4fc..49c7eac 100644 --- a/net/reporting/reporting_uploader.cc +++ b/net/reporting/reporting_uploader.cc
@@ -156,8 +156,7 @@ upload->request->SetLoadFlags(LOAD_DISABLE_CACHE); upload->request->set_allow_credentials(false); upload->request->set_isolation_info(IsolationInfo::CreatePartial( - IsolationInfo::RedirectMode::kUpdateNothing, - upload->network_isolation_key)); + IsolationInfo::RequestType::kOther, upload->network_isolation_key)); upload->request->SetExtraRequestHeaderByName( HttpRequestHeaders::kOrigin, upload->report_origin.Serialize(), true); @@ -189,8 +188,7 @@ upload->request->SetLoadFlags(LOAD_DISABLE_CACHE); upload->request->set_allow_credentials(false); upload->request->set_isolation_info(IsolationInfo::CreatePartial( - IsolationInfo::RedirectMode::kUpdateNothing, - upload->network_isolation_key)); + IsolationInfo::RequestType::kOther, upload->network_isolation_key)); upload->request->SetExtraRequestHeaderByName( HttpRequestHeaders::kContentType, kUploadContentType, true);
diff --git a/net/url_request/url_request_unittest.cc b/net/url_request/url_request_unittest.cc index 092c45eb..4584deb 100644 --- a/net/url_request/url_request_unittest.cc +++ b/net/url_request/url_request_unittest.cc
@@ -6695,22 +6695,22 @@ IsolationInfo expected_info_after_redirect; } kTestCases[] = { {IsolationInfo(), IsolationInfo()}, - {IsolationInfo::Create(IsolationInfo::RedirectMode::kUpdateTopFrame, + {IsolationInfo::Create(IsolationInfo::RequestType::kMainFrame, original_origin, original_origin, SiteForCookies()), - IsolationInfo::Create(IsolationInfo::RedirectMode::kUpdateTopFrame, + IsolationInfo::Create(IsolationInfo::RequestType::kMainFrame, redirect_origin, redirect_origin, SiteForCookies::FromOrigin(redirect_origin))}, - {IsolationInfo::Create(IsolationInfo::RedirectMode::kUpdateFrameOnly, + {IsolationInfo::Create(IsolationInfo::RequestType::kSubFrame, original_origin, original_origin, SiteForCookies::FromOrigin(original_origin)), - IsolationInfo::Create(IsolationInfo::RedirectMode::kUpdateFrameOnly, + IsolationInfo::Create(IsolationInfo::RequestType::kSubFrame, original_origin, redirect_origin, SiteForCookies::FromOrigin(original_origin))}, - {IsolationInfo::Create(IsolationInfo::RedirectMode::kUpdateNothing, + {IsolationInfo::Create(IsolationInfo::RequestType::kOther, original_origin, original_origin, SiteForCookies()), - IsolationInfo::Create(IsolationInfo::RedirectMode::kUpdateNothing, + IsolationInfo::Create(IsolationInfo::RequestType::kOther, original_origin, original_origin, SiteForCookies())}, {transient_isolation_info, transient_isolation_info}, @@ -6746,8 +6746,8 @@ EXPECT_EQ(!test_case.expected_info_after_redirect.network_isolation_key() .IsTransient(), r->was_cached()); - EXPECT_EQ(test_case.expected_info_after_redirect.redirect_mode(), - r->isolation_info().redirect_mode()); + EXPECT_EQ(test_case.expected_info_after_redirect.request_type(), + r->isolation_info().request_type()); EXPECT_EQ(test_case.expected_info_after_redirect.top_frame_origin(), r->isolation_info().top_frame_origin()); EXPECT_EQ(test_case.expected_info_after_redirect.frame_origin(),
diff --git a/net/websockets/websocket_channel_test.cc b/net/websockets/websocket_channel_test.cc index cde91ac4..4ba6ef8 100644 --- a/net/websockets/websocket_channel_test.cc +++ b/net/websockets/websocket_channel_test.cc
@@ -840,9 +840,9 @@ : socket_url("ws://ws/"), origin(url::Origin::Create(GURL("http://ws"))), site_for_cookies(SiteForCookies::FromUrl(GURL("http://ws/"))) { - this->isolation_info = IsolationInfo::Create( - IsolationInfo::RedirectMode::kUpdateNothing, origin, origin, - SiteForCookies::FromOrigin(origin)); + this->isolation_info = + IsolationInfo::Create(IsolationInfo::RequestType::kOther, origin, + origin, SiteForCookies::FromOrigin(origin)); } // URLRequestContext object. @@ -981,7 +981,7 @@ connect_data_.site_for_cookies = SiteForCookies::FromUrl(GURL("http://example.com/")); connect_data_.isolation_info = net::IsolationInfo::Create( - IsolationInfo::RedirectMode::kUpdateNothing, connect_data_.origin, + IsolationInfo::RequestType::kOther, connect_data_.origin, connect_data_.origin, SiteForCookies::FromOrigin(connect_data_.origin)); connect_data_.requested_subprotocols.push_back("Sinbad");
diff --git a/net/websockets/websocket_end_to_end_test.cc b/net/websockets/websocket_end_to_end_test.cc index 687cb43..8c65e87 100644 --- a/net/websockets/websocket_end_to_end_test.cc +++ b/net/websockets/websocket_end_to_end_test.cc
@@ -292,9 +292,9 @@ url::Origin origin = url::Origin::Create(GURL("http://localhost")); net::SiteForCookies site_for_cookies = net::SiteForCookies::FromOrigin(origin); - IsolationInfo isolation_info = IsolationInfo::Create( - IsolationInfo::RedirectMode::kUpdateNothing, origin, origin, - SiteForCookies::FromOrigin(origin)); + IsolationInfo isolation_info = + IsolationInfo::Create(IsolationInfo::RequestType::kOther, origin, + origin, SiteForCookies::FromOrigin(origin)); event_interface_ = new ConnectTestingEventInterface(); channel_ = std::make_unique<WebSocketChannel>( base::WrapUnique(event_interface_), &context_);
diff --git a/net/websockets/websocket_stream.cc b/net/websockets/websocket_stream.cc index 71f5eac..fb2a677f 100644 --- a/net/websockets/websocket_stream.cc +++ b/net/websockets/websocket_stream.cc
@@ -98,8 +98,8 @@ traffic_annotation)), connect_delegate_(std::move(connect_delegate)), api_delegate_(std::move(api_delegate)) { - DCHECK_EQ(IsolationInfo::RedirectMode::kUpdateNothing, - isolation_info.redirect_mode()); + DCHECK_EQ(IsolationInfo::RequestType::kOther, + isolation_info.request_type()); HttpRequestHeaders headers = additional_headers; headers.SetHeader(websockets::kUpgrade, websockets::kWebSocketLowercase);
diff --git a/net/websockets/websocket_stream_cookie_test.cc b/net/websockets/websocket_stream_cookie_test.cc index b8f98d66..e8a218e 100644 --- a/net/websockets/websocket_stream_cookie_test.cc +++ b/net/websockets/websocket_stream_cookie_test.cc
@@ -144,8 +144,8 @@ url::Origin::Create(GURL("http://www.example.com")); const SiteForCookies site_for_cookies = SiteForCookies::FromOrigin(origin); const IsolationInfo isolation_info = - IsolationInfo::Create(IsolationInfo::RedirectMode::kUpdateNothing, origin, - origin, SiteForCookies::FromOrigin(origin)); + IsolationInfo::Create(IsolationInfo::RequestType::kOther, origin, origin, + SiteForCookies::FromOrigin(origin)); const std::string cookie_line(GetParam().cookie_line); const std::string cookie_header(AddCRLFIfNotEmpty(GetParam().cookie_header)); @@ -184,8 +184,8 @@ url::Origin::Create(GURL("http://www.example.com")); const SiteForCookies site_for_cookies = SiteForCookies::FromOrigin(origin); const IsolationInfo isolation_info = - IsolationInfo::Create(IsolationInfo::RedirectMode::kUpdateNothing, origin, - origin, SiteForCookies::FromOrigin(origin)); + IsolationInfo::Create(IsolationInfo::RequestType::kOther, origin, origin, + SiteForCookies::FromOrigin(origin)); const std::string cookie_line(GetParam().cookie_line); const std::string cookie_header(AddCRLFIfNotEmpty(GetParam().cookie_header));
diff --git a/net/websockets/websocket_stream_test.cc b/net/websockets/websocket_stream_test.cc index 0f092fb..f67fabf8 100644 --- a/net/websockets/websocket_stream_test.cc +++ b/net/websockets/websocket_stream_test.cc
@@ -92,9 +92,8 @@ static IsolationInfo CreateIsolationInfo() { url::Origin origin = Origin(); - return IsolationInfo::Create(IsolationInfo::RedirectMode::kUpdateNothing, - origin, origin, - SiteForCookies::FromOrigin(origin)); + return IsolationInfo::Create(IsolationInfo::RequestType::kOther, origin, + origin, SiteForCookies::FromOrigin(origin)); } class WebSocketStreamCreateTest : public TestWithParam<HandshakeStreamType>,
diff --git a/remoting/resources/remoting_strings_iw.xtb b/remoting/resources/remoting_strings_iw.xtb index cc6776f..9354cbb 100644 --- a/remoting/resources/remoting_strings_iw.xtb +++ b/remoting/resources/remoting_strings_iw.xtb
@@ -61,7 +61,7 @@ <translation id="3950820424414687140">כניסה</translation> <translation id="405887016757208221">המחשב המרוחק לא הצליח לאתחל את ההפעלה. אם הבעיה נמשכת, יש לנסות להגדיר שוב את המארח.</translation> <translation id="4060747889721220580">הורדת קובץ</translation> -<translation id="4126409073460786861">כשתהליך ההגדרה יסתיים, צריך יהיה לרענן את הדף ואז אפשר יהיה לבחור את המכשיר שלך ולהזין את ה-PIN כדי לגשת למחשב</translation> +<translation id="4126409073460786861">כשתהליך ההגדרה יסתיים, צריך יהיה לרענן את הדף ואז אפשר יהיה לבחור את המכשיר שלך ולהזין את קוד האימות כדי לגשת למחשב</translation> <translation id="4145029455188493639">התחברת באמצעות חשבון <ph name="EMAIL_ADDRESS" />.</translation> <translation id="4155497795971509630">חלק מהרכיבים הדרושים חסרים. ודא שהתקנת את הגרסה העדכנית ביותר של התוכנה ונסה שוב.</translation> <translation id="4176825807642096119">קוד גישה</translation> @@ -101,7 +101,7 @@ <translation id="5601503069213153581">PIN</translation> <translation id="5708869785009007625">שולחן העבודה שלך משותף כעת עם <ph name="USER" />.</translation> <translation id="5750083143895808682">התחברת באמצעות חשבון <ph name="EMAIL_ADDRESS" />.</translation> -<translation id="579702532610384533">התחבר מחדש</translation> +<translation id="579702532610384533">התחברות מחדש</translation> <translation id="5810269635982033450">המסך פועל כמשטח מגע</translation> <translation id="5823658491130719298">במחשב שאליו רוצים לגשת מרחוק, יש לפתוח את Chrome ולהיכנס אל <ph name="INSTALLATION_LINK" /></translation> <translation id="5841343754884244200">אפשרויות תצוגה</translation> @@ -136,7 +136,7 @@ <translation id="7434397035092923453">נדחתה גישה עבור לקוח: <ph name="CLIENT_USERNAME" />.</translation> <translation id="7444276978508498879">לקוח שהתחבר: <ph name="CLIENT_USERNAME" />.</translation> <translation id="7526139040829362392">החלף חשבון</translation> -<translation id="7628469622942688817">זכור את ה-PIN שלי במכשיר הזה.</translation> +<translation id="7628469622942688817">אני רוצה לזכור את קוד האימות שלי במכשיר הזה.</translation> <translation id="7649070708921625228">עזרה</translation> <translation id="7658239707568436148">ביטול</translation> <translation id="7665369617277396874">חשבון חדש</translation>
diff --git a/remoting/resources/remoting_strings_mr.xtb b/remoting/resources/remoting_strings_mr.xtb index 17906f4..06cb8cc7 100644 --- a/remoting/resources/remoting_strings_mr.xtb +++ b/remoting/resources/remoting_strings_mr.xtb
@@ -11,7 +11,7 @@ <translation id="1546934824884762070">एक अनपेक्षित एरर आली. कृपया डेव्हलपरकडे या समस्येची तक्रार करा.</translation> <translation id="1697532407822776718">तुम्ही पूर्णपणे तयार आहात!</translation> <translation id="1742469581923031760">कनेक्ट करीत आहे...</translation> -<translation id="177096447311351977">क्लायंट साठी चॅनेल IP: <ph name="CLIENT_GAIA_IDENTIFIER" /> ip='<ph name="CLIENT_IP_ADDRESS_AND_PORT" />' host_ip='<ph name="HOST_IP_ADDRESS_AND_PORT" />' channel='<ph name="CHANNEL_TYPE" />' connection='<ph name="CONNECTION_TYPE" />'.</translation> +<translation id="177096447311351977">क्लायंट साठी चॅनल IP: <ph name="CLIENT_GAIA_IDENTIFIER" /> ip='<ph name="CLIENT_IP_ADDRESS_AND_PORT" />' host_ip='<ph name="HOST_IP_ADDRESS_AND_PORT" />' channel='<ph name="CHANNEL_TYPE" />' connection='<ph name="CONNECTION_TYPE" />'.</translation> <translation id="1897488610212723051">हटवा</translation> <translation id="2009755455353575666">कनेक्शन अयशस्वी</translation> <translation id="2038229918502634450">धोरण बदल विचारात घेण्यासाठी, होस्ट रीस्टार्ट करीत आहे.</translation>
diff --git a/services/BUILD.gn b/services/BUILD.gn index 5eed2483..6243c22a 100644 --- a/services/BUILD.gn +++ b/services/BUILD.gn
@@ -25,7 +25,6 @@ deps = [ "//services/cert_verifier:tests", "//services/cert_verifier/cert_net_url_loader:tests", - "//services/content:tests", "//services/metrics/public/cpp:tests", "//services/network:tests", "//services/network/public/cpp:tests",
diff --git a/services/cert_verifier/integration_tests/network_context_unittest.cc b/services/cert_verifier/integration_tests/network_context_unittest.cc index 9848355..17988d8 100644 --- a/services/cert_verifier/integration_tests/network_context_unittest.cc +++ b/services/cert_verifier/integration_tests/network_context_unittest.cc
@@ -135,7 +135,7 @@ // NIK must be consistent with |site_for_cookies|. if (request.site_for_cookies.IsNull()) { params->isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, + net::IsolationInfo::RequestType::kOther, url::Origin::Create(GURL("https://abc.invalid")), url::Origin::Create(GURL("https://xyz.invalid")), request.site_for_cookies);
diff --git a/services/content/BUILD.gn b/services/content/BUILD.gn deleted file mode 100644 index f61ba73..0000000 --- a/services/content/BUILD.gn +++ /dev/null
@@ -1,69 +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. - -import("//build/config/ui.gni") - -source_set("impl") { - visibility = [ - ":tests", - "//content/browser", - ] - - public = [ - "navigable_contents_delegate.h", - "service.h", - "service_delegate.h", - ] - - sources = [ - "navigable_contents_factory_impl.cc", - "navigable_contents_factory_impl.h", - "navigable_contents_impl.cc", - "navigable_contents_impl.h", - "service.cc", - ] - - configs += [ "//build/config/compiler:wexit_time_destructors" ] - - public_deps = [ - "//base", - "//services/service_manager/public/cpp", - "//ui/gfx", - ] - - deps = [ - "//mojo/public/cpp/bindings", - "//services/content/public/cpp", - "//services/content/public/mojom", - ] - - if (toolkit_views && !is_chromecast) { - deps += [ - "//ui/base", - "//ui/views", - ] - - if (use_aura) { - deps += [ "//ui/aura" ] - } - } -} - -source_set("tests") { - testonly = true - - sources = [ "service_unittest.cc" ] - - deps = [ - ":impl", - "//base", - "//base/test:test_support", - "//services/content/public/cpp", - "//services/content/public/cpp/test:tests", - "//services/content/public/mojom", - "//services/service_manager/public/cpp/test:test_support", - "//testing/gtest", - "//url", - ] -}
diff --git a/services/content/DEPS b/services/content/DEPS deleted file mode 100644 index f3ff294..0000000 --- a/services/content/DEPS +++ /dev/null
@@ -1,8 +0,0 @@ -include_rules = [ - "+services/network/public", - - "+ui/aura", - "+ui/base", - "+ui/gfx", - "+ui/views", -]
diff --git a/services/content/OWNERS b/services/content/OWNERS deleted file mode 100644 index 9624e1d..0000000 --- a/services/content/OWNERS +++ /dev/null
@@ -1,4 +0,0 @@ -alexmos@chromium.org -clamy@chromium.org -jam@chromium.org -rockot@google.com \ No newline at end of file
diff --git a/services/content/navigable_contents_delegate.h b/services/content/navigable_contents_delegate.h deleted file mode 100644 index a048622..0000000 --- a/services/content/navigable_contents_delegate.h +++ /dev/null
@@ -1,54 +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 SERVICES_CONTENT_NAVIGABLE_CONTENTS_DELEGATE_H_ -#define SERVICES_CONTENT_NAVIGABLE_CONTENTS_DELEGATE_H_ - -#include "services/content/public/mojom/navigable_contents.mojom.h" -#include "ui/gfx/native_widget_types.h" - -class GURL; - -namespace content { - -// A virtual interface which must be implemented as a backing for -// NavigableContentsImpl instances. -// -// This is the primary interface by which the Content Service delegates -// NavigableContentsImpl behavior out to WebContentsImpl in src/content. As such -// it is a transitional API which will be removed as soon as WebContentsImpl -// itself can be fully migrated into Content Service. -// -// Each instance of this interface is constructed by the ContentServiceDelegate -// implementation and owned by a NavigableContentsImpl. -class NavigableContentsDelegate { - public: - virtual ~NavigableContentsDelegate() {} - - // Returns a NativeView that can be embedded into a client application's - // window tree to display the web contents navigated by the delegate's - // NavigableContents. - virtual gfx::NativeView GetNativeView() = 0; - - // Navigates the content object to a new URL. - virtual void Navigate(const GURL& url, mojom::NavigateParamsPtr params) = 0; - - // Attempts to navigate the web contents back in its history stack. The - // supplied |callback| is run to indicate success/failure of the attempt. The - // navigation attempt will fail if the history stack is empty. - virtual void GoBack( - content::mojom::NavigableContents::GoBackCallback callback) = 0; - - // Attempts to transfer global input focus to the navigated contents if they - // have an active visual representation. - virtual void Focus() = 0; - - // Similar to above but for use specifically when UI element traversal is - // being done via Tab-key cycling or a similar mechanism. - virtual void FocusThroughTabTraversal(bool reverse) = 0; -}; - -} // namespace content - -#endif // SERVICES_CONTENT_NAVIGABLE_CONTENTS_DELEGATE_H_
diff --git a/services/content/navigable_contents_factory_impl.cc b/services/content/navigable_contents_factory_impl.cc deleted file mode 100644 index a22d937..0000000 --- a/services/content/navigable_contents_factory_impl.cc +++ /dev/null
@@ -1,35 +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 "services/content/navigable_contents_factory_impl.h" - -#include <memory> -#include <utility> - -#include "base/bind.h" -#include "services/content/navigable_contents_impl.h" -#include "services/content/service.h" - -namespace content { - -NavigableContentsFactoryImpl::NavigableContentsFactoryImpl( - Service* service, - mojo::PendingReceiver<mojom::NavigableContentsFactory> receiver) - : service_(service), receiver_(this, std::move(receiver)) { - receiver_.set_disconnect_handler( - base::BindOnce(&Service::RemoveNavigableContentsFactory, - base::Unretained(service_), this)); -} - -NavigableContentsFactoryImpl::~NavigableContentsFactoryImpl() = default; - -void NavigableContentsFactoryImpl::CreateContents( - mojom::NavigableContentsParamsPtr params, - mojo::PendingReceiver<mojom::NavigableContents> receiver, - mojo::PendingRemote<mojom::NavigableContentsClient> client) { - service_->AddNavigableContents(std::make_unique<NavigableContentsImpl>( - service_, std::move(params), std::move(receiver), std::move(client))); -} - -} // namespace content
diff --git a/services/content/navigable_contents_factory_impl.h b/services/content/navigable_contents_factory_impl.h deleted file mode 100644 index ae17f21..0000000 --- a/services/content/navigable_contents_factory_impl.h +++ /dev/null
@@ -1,46 +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 SERVICES_CONTENT_NAVIGABLE_CONTENTS_FACTORY_IMPL_H_ -#define SERVICES_CONTENT_NAVIGABLE_CONTENTS_FACTORY_IMPL_H_ - -#include "base/macros.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "services/content/public/mojom/navigable_contents_factory.mojom.h" - -namespace content { - -class Service; - -// An implementation of the NavigableContentsFactory which backs every connected -// NavigableContentsFactory interface in a Content Service client. This creates -// instances of NavigableContentsImpl to fulfill |CreateContents()| requests. -// -// Instances of this class, and of the NavigableContentsImpls it creates, are -// all managed by the Service instance. -class NavigableContentsFactoryImpl : public mojom::NavigableContentsFactory { - public: - NavigableContentsFactoryImpl( - Service* service, - mojo::PendingReceiver<mojom::NavigableContentsFactory> receiver); - ~NavigableContentsFactoryImpl() override; - - private: - // mojom::NavigableContentsFactory: - void CreateContents( - mojom::NavigableContentsParamsPtr params, - mojo::PendingReceiver<mojom::NavigableContents> receiver, - mojo::PendingRemote<mojom::NavigableContentsClient> client) override; - - Service* const service_; - mojo::Receiver<mojom::NavigableContentsFactory> receiver_; - - DISALLOW_COPY_AND_ASSIGN(NavigableContentsFactoryImpl); -}; - -} // namespace content - -#endif // SERVICES_CONTENT_NAVIGABLE_CONTENTS_FACTORY_IMPL_H_
diff --git a/services/content/navigable_contents_impl.cc b/services/content/navigable_contents_impl.cc deleted file mode 100644 index a5761f8..0000000 --- a/services/content/navigable_contents_impl.cc +++ /dev/null
@@ -1,83 +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 "services/content/navigable_contents_impl.h" - -#include "base/bind.h" -#include "services/content/navigable_contents_delegate.h" -#include "services/content/public/cpp/navigable_contents_view.h" -#include "services/content/service.h" -#include "services/content/service_delegate.h" - -#if defined(USE_AURA) -#include "ui/aura/window.h" // nogncheck -#endif - -namespace content { - -NavigableContentsImpl::NavigableContentsImpl( - Service* service, - mojom::NavigableContentsParamsPtr params, - mojo::PendingReceiver<mojom::NavigableContents> receiver, - mojo::PendingRemote<mojom::NavigableContentsClient> client) - : service_(service), - receiver_(this, std::move(receiver)), - client_(std::move(client)), - delegate_( - service_->delegate()->CreateNavigableContentsDelegate(*params, - client_.get())), - native_content_view_(delegate_->GetNativeView()) { - receiver_.set_disconnect_handler(base::BindOnce( - &Service::RemoveNavigableContents, base::Unretained(service_), this)); -} - -NavigableContentsImpl::~NavigableContentsImpl() = default; - -void NavigableContentsImpl::Navigate(const GURL& url, - mojom::NavigateParamsPtr params) { - // Ignore non-HTTP/HTTPS/data requests for now. - if (!url.SchemeIsHTTPOrHTTPS() && !url.SchemeIs(url::kDataScheme)) - return; - - delegate_->Navigate(url, std::move(params)); -} - -void NavigableContentsImpl::GoBack( - mojom::NavigableContents::GoBackCallback callback) { - delegate_->GoBack(std::move(callback)); -} - -void NavigableContentsImpl::CreateView(CreateViewCallback callback) { - // Create and stash a new callback (indexed by token) which the in-process - // client library can use to establish an "embedding" of the contents' view. - auto token = base::UnguessableToken::Create(); - NavigableContentsView::RegisterInProcessEmbedCallback( - token, base::BindOnce(&NavigableContentsImpl::EmbedInProcessClientView, - weak_ptr_factory_.GetWeakPtr())); - std::move(callback).Run(token); -} - -void NavigableContentsImpl::Focus() { - delegate_->Focus(); -} - -void NavigableContentsImpl::FocusThroughTabTraversal(bool reverse) { - delegate_->FocusThroughTabTraversal(reverse); -} - -void NavigableContentsImpl::EmbedInProcessClientView( - NavigableContentsView* view) { - DCHECK(native_content_view_); -#if defined(TOOLKIT_VIEWS) && defined(USE_AURA) - view->native_view()->AddChild(native_content_view_); - native_content_view_->Show(); -#else - // TODO(https://crbug.com/855092): Support embedding of other native client - // views without Views + Aura. - NOTREACHED() - << "NavigableContents views are currently only supported on Views UI."; -#endif -} - -} // namespace content
diff --git a/services/content/navigable_contents_impl.h b/services/content/navigable_contents_impl.h deleted file mode 100644 index 9ae581bc..0000000 --- a/services/content/navigable_contents_impl.h +++ /dev/null
@@ -1,63 +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 SERVICES_CONTENT_NAVIGABLE_CONTENTS_IMPL_H_ -#define SERVICES_CONTENT_NAVIGABLE_CONTENTS_IMPL_H_ - -#include "base/macros.h" -#include "base/memory/weak_ptr.h" -#include "base/unguessable_token.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "services/content/public/mojom/navigable_contents.mojom.h" -#include "services/content/public/mojom/navigable_contents_factory.mojom.h" -#include "ui/gfx/native_widget_types.h" - -namespace content { - -class Service; -class NavigableContentsDelegate; -class NavigableContentsView; - -// This is the state which backs an individual NavigableContents owned by some -// client of the Content Service. In terms of the classical Content API, this is -// roughly analogous to a WebContentsImpl. -class NavigableContentsImpl : public mojom::NavigableContents { - public: - NavigableContentsImpl( - Service* service, - mojom::NavigableContentsParamsPtr params, - mojo::PendingReceiver<mojom::NavigableContents> receiver, - mojo::PendingRemote<mojom::NavigableContentsClient> client); - ~NavigableContentsImpl() override; - - private: - // mojom::NavigableContents: - void Navigate(const GURL& url, mojom::NavigateParamsPtr params) override; - void GoBack(mojom::NavigableContents::GoBackCallback callback) override; - void CreateView(CreateViewCallback callback) override; - void Focus() override; - void FocusThroughTabTraversal(bool reverse) override; - - // Used (indirectly) by the client library when run in the same process as the - // service. See the |CreateView()| implementation for details. - void EmbedInProcessClientView(NavigableContentsView* view); - - Service* const service_; - - mojo::Receiver<mojom::NavigableContents> receiver_; - mojo::Remote<mojom::NavigableContentsClient> client_; - std::unique_ptr<NavigableContentsDelegate> delegate_; - gfx::NativeView native_content_view_; - - base::WeakPtrFactory<NavigableContentsImpl> weak_ptr_factory_{this}; - - DISALLOW_COPY_AND_ASSIGN(NavigableContentsImpl); -}; - -} // namespace content - -#endif // SERVICES_CONTENT_NAVIGABLE_CONTENTS_IMPL_H_
diff --git a/services/content/public/cpp/BUILD.gn b/services/content/public/cpp/BUILD.gn deleted file mode 100644 index 2e97408c..0000000 --- a/services/content/public/cpp/BUILD.gn +++ /dev/null
@@ -1,45 +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. - -import("//build/config/ui.gni") - -component("cpp") { - output_name = "content_service_cpp" - - public = [ - "navigable_contents.h", - "navigable_contents_observer.h", - "navigable_contents_view.h", - ] - - sources = [ - "navigable_contents.cc", - "navigable_contents_view.cc", - ] - - configs += [ "//build/config/compiler:wexit_time_destructors" ] - - defines = [ "IS_CONTENT_SERVICE_CPP_IMPL" ] - - public_deps = [ - "//base", - "//net", - "//services/content/public/mojom", - "//ui/accessibility", - "//ui/accessibility/mojom", - "//ui/base", - "//ui/gfx:native_widget_types", - "//ui/gfx/geometry", - "//url", - ] - - deps = [] - if (toolkit_views && !is_chromecast) { - deps += [ "//ui/views" ] - } - - if (use_aura) { - deps += [ "//ui/aura" ] - } -}
diff --git a/services/content/public/cpp/DEPS b/services/content/public/cpp/DEPS deleted file mode 100644 index b541399..0000000 --- a/services/content/public/cpp/DEPS +++ /dev/null
@@ -1,6 +0,0 @@ -include_rules = [ - "+net/http/http_response_headers.h", - "+ui/accessibility", - "+ui/aura", - "+ui/views", -]
diff --git a/services/content/public/cpp/navigable_contents.cc b/services/content/public/cpp/navigable_contents.cc deleted file mode 100644 index f34211ed..0000000 --- a/services/content/public/cpp/navigable_contents.cc +++ /dev/null
@@ -1,122 +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 "services/content/public/cpp/navigable_contents.h" - -#include "base/bind.h" -#include "base/memory/ptr_util.h" -#include "services/content/public/cpp/navigable_contents_view.h" - -namespace content { - -NavigableContents::NavigableContents(mojom::NavigableContentsFactory* factory) - : NavigableContents(factory, mojom::NavigableContentsParams::New()) {} - -NavigableContents::NavigableContents(mojom::NavigableContentsFactory* factory, - mojom::NavigableContentsParamsPtr params) - : client_receiver_(this), content_ax_tree_id_(ui::AXTreeIDUnknown()) { - factory->CreateContents(std::move(params), - contents_.BindNewPipeAndPassReceiver(), - client_receiver_.BindNewPipeAndPassRemote()); -} - -NavigableContents::~NavigableContents() = default; - -void NavigableContents::AddObserver(NavigableContentsObserver* observer) { - observers_.AddObserver(observer); -} - -void NavigableContents::RemoveObserver(NavigableContentsObserver* observer) { - observers_.RemoveObserver(observer); -} - -NavigableContentsView* NavigableContents::GetView() { - if (!view_) { - view_ = base::WrapUnique(new NavigableContentsView(this)); - contents_->CreateView(base::BindOnce( - &NavigableContents::OnEmbedTokenReceived, base::Unretained(this))); - } - return view_.get(); -} - -void NavigableContents::Navigate(const GURL& url) { - NavigateWithParams(url, mojom::NavigateParams::New()); -} - -void NavigableContents::NavigateWithParams(const GURL& url, - mojom::NavigateParamsPtr params) { - contents_->Navigate(url, std::move(params)); -} - -void NavigableContents::GoBack( - content::mojom::NavigableContents::GoBackCallback callback) { - contents_->GoBack(std::move(callback)); -} - -void NavigableContents::Focus() { - contents_->Focus(); -} - -void NavigableContents::FocusThroughTabTraversal(bool reverse) { - contents_->FocusThroughTabTraversal(reverse); -} - -void NavigableContents::ClearViewFocus() { - if (view_) - view_->ClearNativeFocus(); -} - -void NavigableContents::DidFinishNavigation( - const GURL& url, - bool is_main_frame, - bool is_error_page, - const scoped_refptr<net::HttpResponseHeaders>& response_headers) { - for (auto& observer : observers_) { - observer.DidFinishNavigation(url, is_main_frame, is_error_page, - response_headers.get()); - } -} - -void NavigableContents::DidStopLoading() { - for (auto& observer : observers_) - observer.DidStopLoading(); -} - -void NavigableContents::DidAutoResizeView(const gfx::Size& new_size) { - for (auto& observer : observers_) - observer.DidAutoResizeView(new_size); -} - -void NavigableContents::DidSuppressNavigation(const GURL& url, - WindowOpenDisposition disposition, - bool from_user_gesture) { - for (auto& observer : observers_) - observer.DidSuppressNavigation(url, disposition, from_user_gesture); -} - -void NavigableContents::UpdateCanGoBack(bool can_go_back) { - for (auto& observer : observers_) - observer.UpdateCanGoBack(can_go_back); -} - -void NavigableContents::UpdateContentAXTree(const ui::AXTreeID& id) { - content_ax_tree_id_ = id; - if (view_) - view_->NotifyAccessibilityTreeChange(); -} - -void NavigableContents::FocusedNodeChanged( - bool is_editable_node, - const gfx::Rect& node_bounds_in_screen) { - for (auto& observer : observers_) - observer.FocusedNodeChanged(is_editable_node, node_bounds_in_screen); -} - -void NavigableContents::OnEmbedTokenReceived( - const base::UnguessableToken& token) { - DCHECK(view_); - view_->EmbedUsingToken(token); -} - -} // namespace content
diff --git a/services/content/public/cpp/navigable_contents.h b/services/content/public/cpp/navigable_contents.h deleted file mode 100644 index da93017..0000000 --- a/services/content/public/cpp/navigable_contents.h +++ /dev/null
@@ -1,106 +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 SERVICES_CONTENT_PUBLIC_CPP_NAVIGABLE_CONTENTS_H_ -#define SERVICES_CONTENT_PUBLIC_CPP_NAVIGABLE_CONTENTS_H_ - -#include <memory> - -#include "base/callback.h" -#include "base/component_export.h" -#include "base/macros.h" -#include "base/observer_list.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "services/content/public/cpp/navigable_contents_observer.h" -#include "services/content/public/mojom/navigable_contents.mojom.h" -#include "services/content/public/mojom/navigable_contents_factory.mojom.h" -#include "ui/accessibility/ax_tree_id.h" - -namespace content { - -class NavigableContentsView; - -// A NavigableContents controls a single dedicated instance of a top-level, -// navigable content frame hosted by the Content Service. In addition to -// maintaining its own navigation state, a NavigableContents may be used to -// acquire an embeddable native UI object to display renderered content within a -// client application's own UI. -class COMPONENT_EXPORT(CONTENT_SERVICE_CPP) NavigableContents - : public mojom::NavigableContentsClient { - public: - // Constructs a new NavigableContents using |factory|. - explicit NavigableContents(mojom::NavigableContentsFactory* factory); - NavigableContents(mojom::NavigableContentsFactory* factory, - mojom::NavigableContentsParamsPtr params); - ~NavigableContents() override; - - // These methods NavigableContentsObservers registered on this object. - void AddObserver(NavigableContentsObserver* observer); - void RemoveObserver(NavigableContentsObserver* observer); - - // Returns a NavigableContentsView which renders this NavigableContents's - // currently navigated contents. This widget can be parented and displayed - // anywhere within the application's own window tree. - // - // Note that this NavigableContentsView is created lazily on first call, and - // by default NavigableContents does not otherwise create or manipulate UI - // objects. - NavigableContentsView* GetView(); - - // Returns the last known ID of the content area's accessibility tree, if any. - const ui::AXTreeID& content_ax_tree_id() const { return content_ax_tree_id_; } - - // Begins an attempt to asynchronously navigate this NavigableContents to - // |url|. - void Navigate(const GURL& url); - void NavigateWithParams(const GURL& url, mojom::NavigateParamsPtr params); - - // Attempts to navigate back in the web contents' history stack. The supplied - // |callback| is run to indicate success/failure of the navigation attempt. - // The navigation attempt will fail if the history stack is empty. - void GoBack(content::mojom::NavigableContents::GoBackCallback callback); - - // Attempts to transfer global input focus to the navigated contents if they - // have an active visual representation. - void Focus(); - - // Similar to above but for use specifically when UI element traversal is - // being done via Tab-key cycling or a similar mechanism. - void FocusThroughTabTraversal(bool reverse); - - private: - // mojom::NavigableContentsClient: - void ClearViewFocus() override; - void DidFinishNavigation( - const GURL& url, - bool is_main_frame, - bool is_error_page, - const scoped_refptr<net::HttpResponseHeaders>& response_headers) override; - void DidStopLoading() override; - void DidAutoResizeView(const gfx::Size& new_size) override; - void DidSuppressNavigation(const GURL& url, - WindowOpenDisposition disposition, - bool from_user_gesture) override; - void UpdateCanGoBack(bool can_go_back) override; - void UpdateContentAXTree(const ui::AXTreeID& id) override; - void FocusedNodeChanged(bool is_editable_node, - const gfx::Rect& node_bounds_in_screen) override; - - void OnEmbedTokenReceived(const base::UnguessableToken& token); - - mojo::Remote<mojom::NavigableContents> contents_; - mojo::Receiver<mojom::NavigableContentsClient> client_receiver_; - std::unique_ptr<NavigableContentsView> view_; - - base::ReentrantObserverList<NavigableContentsObserver> observers_; - - ui::AXTreeID content_ax_tree_id_; - - DISALLOW_COPY_AND_ASSIGN(NavigableContents); -}; - -} // namespace content - -#endif // SERVICES_CONTENT_PUBLIC_CPP_NAVIGABLE_CONTENTS_H_
diff --git a/services/content/public/cpp/navigable_contents_observer.h b/services/content/public/cpp/navigable_contents_observer.h deleted file mode 100644 index dd5f6133..0000000 --- a/services/content/public/cpp/navigable_contents_observer.h +++ /dev/null
@@ -1,38 +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 SERVICES_CONTENT_PUBLIC_CPP_NAVIGABLE_CONTENTS_OBSERVER_H_ -#define SERVICES_CONTENT_PUBLIC_CPP_NAVIGABLE_CONTENTS_OBSERVER_H_ - -#include "base/component_export.h" -#include "base/observer_list_types.h" -#include "net/http/http_response_headers.h" -#include "ui/base/window_open_disposition.h" -#include "ui/gfx/geometry/rect.h" -#include "ui/gfx/geometry/size.h" -#include "url/gurl.h" - -namespace content { - -class COMPONENT_EXPORT(CONTENT_SERVICE_CPP) NavigableContentsObserver - : public base::CheckedObserver { - public: - virtual void DidFinishNavigation( - const GURL& url, - bool is_main_frame, - bool is_error_page, - const net::HttpResponseHeaders* response_headers) {} - virtual void DidStopLoading() {} - virtual void DidAutoResizeView(const gfx::Size& new_size) {} - virtual void DidSuppressNavigation(const GURL& url, - WindowOpenDisposition disposition, - bool from_user_gesture) {} - virtual void UpdateCanGoBack(bool can_go_back) {} - virtual void FocusedNodeChanged(bool is_editable_node, - const gfx::Rect& node_bounds_in_screen) {} -}; - -} // namespace content - -#endif // SERVICES_CONTENT_PUBLIC_CPP_NAVIGABLE_CONTENTS_OBSERVER_H_
diff --git a/services/content/public/cpp/navigable_contents_view.cc b/services/content/public/cpp/navigable_contents_view.cc deleted file mode 100644 index b2a150a9..0000000 --- a/services/content/public/cpp/navigable_contents_view.cc +++ /dev/null
@@ -1,188 +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 "services/content/public/cpp/navigable_contents_view.h" - -#include <map> - -#include "base/bind_helpers.h" -#include "base/callback.h" -#include "base/no_destructor.h" -#include "base/synchronization/atomic_flag.h" -#include "base/unguessable_token.h" -#include "services/content/public/cpp/navigable_contents.h" -#include "ui/accessibility/ax_enums.mojom.h" -#include "ui/accessibility/ax_node_data.h" - -#if defined(TOOLKIT_VIEWS) -#include "ui/views/focus/focus_manager.h" // nogncheck -#include "ui/views/layout/fill_layout.h" // nogncheck -#include "ui/views/view.h" // nogncheck -#endif // defined(TOOLKIT_VIEWS) - -#if defined(USE_AURA) -#include "ui/aura/layout_manager.h" // nogncheck -#include "ui/aura/window.h" // nogncheck -#endif - -namespace content { - -namespace { - -using InProcessEmbeddingMap = - std::map<base::UnguessableToken, - base::OnceCallback<void(NavigableContentsView*)>>; - -InProcessEmbeddingMap& GetInProcessEmbeddingMap() { - static base::NoDestructor<InProcessEmbeddingMap> embedding_map; - return *embedding_map; -} - -base::AtomicFlag& GetInServiceProcessFlag() { - static base::NoDestructor<base::AtomicFlag> in_service_process; - return *in_service_process; -} - -#if defined(TOOLKIT_VIEWS) && defined(USE_AURA) - -// Keeps child windows sized to the same bounds as the owning window. -class LocalWindowLayoutManager : public aura::LayoutManager { - public: - explicit LocalWindowLayoutManager(aura::Window* owner) : owner_(owner) {} - ~LocalWindowLayoutManager() override = default; - - // aura::LayoutManger: - void OnWindowResized() override { ResizeChildren(); } - void OnWindowAddedToLayout(aura::Window* child) override { ResizeChildren(); } - void OnWillRemoveWindowFromLayout(aura::Window* child) override {} - void OnWindowRemovedFromLayout(aura::Window* child) override {} - void OnChildWindowVisibilityChanged(aura::Window* child, - bool visible) override {} - void SetChildBounds(aura::Window* child, - const gfx::Rect& requested_bounds) override {} - - private: - void ResizeChildren() { - for (auto* child : owner_->children()) - SetChildBoundsDirect(child, gfx::Rect(owner_->bounds().size())); - } - - aura::Window* const owner_; - - DISALLOW_COPY_AND_ASSIGN(LocalWindowLayoutManager); -}; - -// Owns an Aura window which parents another Aura window in the same process, -// corresponding to a web contents view hosted in the process. -class LocalViewHost : public views::NativeViewHost { - public: - LocalViewHost(aura::Window* window, NavigableContents* contents) - : window_(window), contents_(contents) { - window_->SetLayoutManager(new LocalWindowLayoutManager(window_)); - } - - ~LocalViewHost() override = default; - - // views::View: - void AddedToWidget() override { - if (!native_view()) - Attach(window_); - } - - void GetAccessibleNodeData(ui::AXNodeData* node_data) override { - node_data->role = ax::mojom::Role::kWebView; - - // The document title is provided to the accessibility system by other - // means, so setting it here would be redundant. - node_data->SetNameExplicitlyEmpty(); - - if (contents_->content_ax_tree_id() != ui::AXTreeIDUnknown()) { - node_data->AddStringAttribute(ax::mojom::StringAttribute::kChildTreeId, - contents_->content_ax_tree_id().ToString()); - } - } - - private: - aura::Window* const window_; - NavigableContents* const contents_; - - DISALLOW_COPY_AND_ASSIGN(LocalViewHost); -}; - -#endif // defined(TOOLKIT_VIEWS) && defined(USE_AURA) - -} // namespace - -NavigableContentsView::~NavigableContentsView() = default; - -// static -void NavigableContentsView::SetClientRunningInServiceProcess() { - GetInServiceProcessFlag().Set(); -} - -// static -bool NavigableContentsView::IsClientRunningInServiceProcess() { - return GetInServiceProcessFlag().IsSet(); -} - -void NavigableContentsView::ClearNativeFocus() { -#if defined(TOOLKIT_VIEWS) && defined(USE_AURA) - auto* focus_manager = view_->GetFocusManager(); - if (focus_manager) - focus_manager->ClearNativeFocus(); -#endif // defined(TOOLKIT_VIEWS) && defined(USE_AURA) -} - -void NavigableContentsView::NotifyAccessibilityTreeChange() { -#if defined(TOOLKIT_VIEWS) && defined(USE_AURA) - view_->NotifyAccessibilityEvent(ax::mojom::Event::kChildrenChanged, false); -#endif -} - -NavigableContentsView::NavigableContentsView(NavigableContents* contents) - : contents_(contents) { -#if defined(TOOLKIT_VIEWS) && defined(USE_AURA) - window_ = std::make_unique<aura::Window>(nullptr); - window_->set_owned_by_parent(false); - window_->SetName("NavigableContentsViewWindow"); - window_->SetType(aura::client::WINDOW_TYPE_CONTROL); - window_->Init(ui::LAYER_NOT_DRAWN); - window_->Show(); - - view_ = std::make_unique<LocalViewHost>(window_.get(), contents_); - view_->set_owned_by_client(); -#endif // defined(TOOLKIT_VIEWS) && defined(USE_AURA) -} - -void NavigableContentsView::EmbedUsingToken( - const base::UnguessableToken& token) { -#if defined(TOOLKIT_VIEWS) - DCHECK(IsClientRunningInServiceProcess()); - - // |token| should already have an embed callback entry in the in-process - // callback map, injected by the in-process Content Service implementation. - auto& embeddings = GetInProcessEmbeddingMap(); - auto it = embeddings.find(token); - if (it == embeddings.end()) { - DLOG(ERROR) << "Unable to embed with unknown token " << token.ToString(); - return; - } - - // Invoke a callback provided by the Content Service's host environment. This - // should parent a web content view to our own |view()|, as well as set - // |native_view_| to the corresponding web contents' own NativeView. - auto callback = std::move(it->second); - embeddings.erase(it); - std::move(callback).Run(this); -#endif // defined(TOOLKIT_VIEWS) -} - -// static -void NavigableContentsView::RegisterInProcessEmbedCallback( - const base::UnguessableToken& token, - base::OnceCallback<void(NavigableContentsView*)> callback) { - GetInProcessEmbeddingMap()[token] = std::move(callback); -} - -} // namespace content
diff --git a/services/content/public/cpp/navigable_contents_view.h b/services/content/public/cpp/navigable_contents_view.h deleted file mode 100644 index d78372cb..0000000 --- a/services/content/public/cpp/navigable_contents_view.h +++ /dev/null
@@ -1,93 +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 SERVICES_CONTENT_PUBLIC_CPP_NAVIGABLE_CONTENTS_VIEW_H_ -#define SERVICES_CONTENT_PUBLIC_CPP_NAVIGABLE_CONTENTS_VIEW_H_ - -#include <memory> - -#include "base/callback.h" -#include "base/component_export.h" -#include "base/unguessable_token.h" -#include "ui/gfx/native_widget_types.h" - -#if defined(TOOLKIT_VIEWS) && defined(USE_AURA) -#include "ui/views/controls/native/native_view_host.h" // nogncheck -#endif - -namespace aura { -class Window; -} - -namespace views { -class View; -class NativeViewHost; -} // namespace views - -namespace content { - -class NavigableContents; -class NavigableContentsImpl; - -// NavigableContentsView encapsulates cross-platform manipulation and -// presentation of a NavigableContents within a native application UI based on -// either Views, UIKit, AppKit, or the Android Framework. -// -// TODO(https://crbug.com/855092): Actually support UI frameworks other than -// Views UI on Aura. -class COMPONENT_EXPORT(CONTENT_SERVICE_CPP) NavigableContentsView { - public: - ~NavigableContentsView(); - - // Used to set/query whether the calling process is the same process in which - // all Content Service instances are running. This should be used sparingly, - // and in general is only here to support internal sanity checks when - // performing, e.g., UI embedding operations on platforms where remote - // NavigableContentsViews are not yet supported. - static void SetClientRunningInServiceProcess(); - static bool IsClientRunningInServiceProcess(); - -#if defined(TOOLKIT_VIEWS) && defined(USE_AURA) - views::View* view() const { return view_.get(); } - - gfx::NativeView native_view() const { return view_->native_view(); } -#endif // defined(TOOLKIT_VIEWS) && defined(USE_AURA) - - // Clears the native view having focus. See FocusManager::ClearNativeFocus. - void ClearNativeFocus(); - - // Has this view notify the UI subsystem of an accessibility tree change. - void NotifyAccessibilityTreeChange(); - - private: - friend class FakeNavigableContents; - friend class NavigableContents; - friend class NavigableContentsImpl; - - explicit NavigableContentsView(NavigableContents* contents_); - - // Establishes a hierarchical relationship between this view's native UI - // object and another native UI object within the Content Service. - void EmbedUsingToken(const base::UnguessableToken& token); - - // Used by the service directly when running in the same process. Establishes - // a way for an embed token to be used without the UI service. - static void RegisterInProcessEmbedCallback( - const base::UnguessableToken& token, - base::OnceCallback<void(NavigableContentsView*)> callback); - - NavigableContents* const contents_; - -#if defined(TOOLKIT_VIEWS) && defined(USE_AURA) - // This NavigableContents's Window and corresponding View. - std::unique_ptr<aura::Window> window_; - std::unique_ptr<views::NativeViewHost> view_; -#endif // defined(TOOLKIT_VIEWS) && defined(USE_AURA) - - DISALLOW_COPY_AND_ASSIGN(NavigableContentsView); -}; - -} // namespace content - -#endif // SERVICES_CONTENT_PUBLIC_CPP_NAVIGABLE_CONTENTS_VIEW_H_
diff --git a/services/content/public/cpp/test/BUILD.gn b/services/content/public/cpp/test/BUILD.gn deleted file mode 100644 index d89c0fb..0000000 --- a/services/content/public/cpp/test/BUILD.gn +++ /dev/null
@@ -1,39 +0,0 @@ -# Copyright 2018 The Chromium Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -source_set("test_support") { - testonly = true - - sources = [ - "fake_navigable_contents.cc", - "fake_navigable_contents.h", - "fake_navigable_contents_factory.cc", - "fake_navigable_contents_factory.h", - ] - - public_deps = [ - "//base", - "//base/test:test_support", - "//mojo/public/cpp/bindings", - "//services/content/public/cpp", - "//services/content/public/mojom", - ] -} - -source_set("tests") { - testonly = true - - sources = [ "fake_navigable_contents_factory_unittest.cc" ] - - deps = [ - ":test_support", - "//base", - "//base/test:test_support", - "//net", - "//services/content/public/cpp", - "//services/content/public/mojom", - "//testing/gtest", - "//url", - ] -}
diff --git a/services/content/public/cpp/test/fake_navigable_contents.cc b/services/content/public/cpp/test/fake_navigable_contents.cc deleted file mode 100644 index 8a8d022..0000000 --- a/services/content/public/cpp/test/fake_navigable_contents.cc +++ /dev/null
@@ -1,57 +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 "services/content/public/cpp/test/fake_navigable_contents.h" - -#include "base/bind.h" -#include "base/bind_helpers.h" -#include "base/unguessable_token.h" -#include "services/content/public/cpp/navigable_contents_view.h" -#include "services/content/public/cpp/test/fake_navigable_contents_factory.h" - -namespace content { - -FakeNavigableContents::FakeNavigableContents() { - // This test-only object should only be used in environments where there is - // no Content Service. Hence we let the client think it's running in the - // same process as this service. This makes it easier to support fake - // behavior. Only needs to be called once, but there's no harm in calling it - // multiple times. This is more convenient. - NavigableContentsView::SetClientRunningInServiceProcess(); -} - -FakeNavigableContents::~FakeNavigableContents() = default; - -void FakeNavigableContents::Bind( - mojo::PendingReceiver<mojom::NavigableContents> receiver, - mojo::PendingRemote<mojom::NavigableContentsClient> client) { - receiver_.Bind(std::move(receiver)); - client_.Bind(std::move(client)); -} - -void FakeNavigableContents::Navigate(const GURL& url, - mojom::NavigateParamsPtr params) { - client_->DidFinishNavigation(url, true /* is_main_frame */, - false /* is_error_page */, - default_response_headers_); - client_->DidStopLoading(); -} - -void FakeNavigableContents::GoBack( - mojom::NavigableContents::GoBackCallback callback) { - std::move(callback).Run(false /* success */); -} - -void FakeNavigableContents::CreateView(CreateViewCallback callback) { - auto token = base::UnguessableToken::Create(); - NavigableContentsView::RegisterInProcessEmbedCallback(token, - base::DoNothing()); - std::move(callback).Run(token); -} - -void FakeNavigableContents::Focus() {} - -void FakeNavigableContents::FocusThroughTabTraversal(bool reverse) {} - -} // namespace content
diff --git a/services/content/public/cpp/test/fake_navigable_contents.h b/services/content/public/cpp/test/fake_navigable_contents.h deleted file mode 100644 index 542bf85..0000000 --- a/services/content/public/cpp/test/fake_navigable_contents.h +++ /dev/null
@@ -1,57 +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 SERVICES_CONTENT_PUBLIC_CPP_TEST_FAKE_NAVIGABLE_CONTENTS_H_ -#define SERVICES_CONTENT_PUBLIC_CPP_TEST_FAKE_NAVIGABLE_CONTENTS_H_ - -#include "base/macros.h" -#include "base/memory/ref_counted.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "net/http/http_response_headers.h" -#include "services/content/public/mojom/navigable_contents.mojom.h" - -namespace content { - -// Implementation of NavigableContents to be used by tests in conjunction with -// FakeNavigableContentsFactory. -class FakeNavigableContents : public mojom::NavigableContents { - public: - FakeNavigableContents(); - ~FakeNavigableContents() override; - - // Set response headers to provide in calls to |DidFinishNavigation()| on any - // NavigableContentsClient when driven by a call to - // |NavigableContents::Navigate()|. - void set_default_response_headers( - const scoped_refptr<net::HttpResponseHeaders> headers) { - default_response_headers_ = headers; - } - - // Binds this object to a NavigableContents receiver and gives it a - // corresponding remote client interface. May only be called once. - void Bind(mojo::PendingReceiver<mojom::NavigableContents> receiver, - mojo::PendingRemote<mojom::NavigableContentsClient> client); - - private: - // mojom::NavigableContents: - void Navigate(const GURL& url, mojom::NavigateParamsPtr params) override; - void GoBack(mojom::NavigableContents::GoBackCallback callback) override; - void CreateView(CreateViewCallback callback) override; - void Focus() override; - void FocusThroughTabTraversal(bool reverse) override; - - mojo::Receiver<mojom::NavigableContents> receiver_{this}; - mojo::Remote<mojom::NavigableContentsClient> client_; - - scoped_refptr<net::HttpResponseHeaders> default_response_headers_; - - DISALLOW_COPY_AND_ASSIGN(FakeNavigableContents); -}; - -} // namespace content - -#endif // SERVICES_CONTENT_PUBLIC_CPP_TEST_FAKE_NAVIGABLE_CONTENTS_H_
diff --git a/services/content/public/cpp/test/fake_navigable_contents_factory.cc b/services/content/public/cpp/test/fake_navigable_contents_factory.cc deleted file mode 100644 index 5c689477..0000000 --- a/services/content/public/cpp/test/fake_navigable_contents_factory.cc +++ /dev/null
@@ -1,50 +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 "services/content/public/cpp/test/fake_navigable_contents_factory.h" - -#include "base/macros.h" -#include "base/run_loop.h" -#include "base/test/bind_test_util.h" -#include "services/content/public/cpp/test/fake_navigable_contents.h" -#include "services/content/public/mojom/navigable_contents.mojom.h" - -namespace content { - -FakeNavigableContentsFactory::FakeNavigableContentsFactory() = default; - -FakeNavigableContentsFactory::~FakeNavigableContentsFactory() = default; - -void FakeNavigableContentsFactory::BindReceiver( - mojo::PendingReceiver<mojom::NavigableContentsFactory> receiver) { - receivers_.Add(this, std::move(receiver)); -} - -void FakeNavigableContentsFactory::WaitForAndBindNextContentsRequest( - FakeNavigableContents* contents) { - base::RunLoop loop; - next_create_contents_callback_ = base::BindLambdaForTesting( - [&loop, contents]( - mojo::PendingReceiver<mojom::NavigableContents> receiver, - mojo::PendingRemote<mojom::NavigableContentsClient> client) { - contents->Bind(std::move(receiver), std::move(client)); - loop.Quit(); - }); - loop.Run(); -} - -void FakeNavigableContentsFactory::CreateContents( - mojom::NavigableContentsParamsPtr params, - mojo::PendingReceiver<mojom::NavigableContents> receiver, - mojo::PendingRemote<mojom::NavigableContentsClient> client) { - if (!next_create_contents_callback_) { - LOG(ERROR) << "Dropping unexpected CreateContents() request."; - return; - } - - std::move(next_create_contents_callback_) - .Run(std::move(receiver), std::move(client)); -} - -} // namespace content
diff --git a/services/content/public/cpp/test/fake_navigable_contents_factory.h b/services/content/public/cpp/test/fake_navigable_contents_factory.h deleted file mode 100644 index 45ee2e8..0000000 --- a/services/content/public/cpp/test/fake_navigable_contents_factory.h +++ /dev/null
@@ -1,54 +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 SERVICES_CONTENT_PUBLIC_CPP_TEST_FAKE_NAVIGABLE_CONTENTS_FACTORY_H_ -#define SERVICES_CONTENT_PUBLIC_CPP_TEST_FAKE_NAVIGABLE_CONTENTS_FACTORY_H_ - -#include "base/macros.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/pending_remote.h" -#include "mojo/public/cpp/bindings/receiver_set.h" -#include "services/content/public/mojom/navigable_contents_factory.mojom.h" - -namespace content { - -class FakeNavigableContents; - -// Usable by unit tests which drive Content Service client code. Allows tests -// to fake a simple Content Service implementation which drives and customizes -// basic navigation lifecycle events. -class FakeNavigableContentsFactory : public mojom::NavigableContentsFactory { - public: - FakeNavigableContentsFactory(); - ~FakeNavigableContentsFactory() override; - - // Bind a new factory receiver. A single FakeNavigableContentsFactory supports - // binding any number of receivers simultaneously. - void BindReceiver( - mojo::PendingReceiver<mojom::NavigableContentsFactory> receiver); - - // Waits for the next |CreateContents()| request on the factory and fulfills - // it by binding to |*contents|. - void WaitForAndBindNextContentsRequest(FakeNavigableContents* contents); - - private: - // mojom::NavigableContentsFactory: - void CreateContents( - mojom::NavigableContentsParamsPtr params, - mojo::PendingReceiver<mojom::NavigableContents> receiver, - mojo::PendingRemote<mojom::NavigableContentsClient> client) override; - - mojo::ReceiverSet<mojom::NavigableContentsFactory> receivers_; - - using CreateContentsCallback = base::OnceCallback<void( - mojo::PendingReceiver<mojom::NavigableContents>, - mojo::PendingRemote<mojom::NavigableContentsClient>)>; - CreateContentsCallback next_create_contents_callback_; - - DISALLOW_COPY_AND_ASSIGN(FakeNavigableContentsFactory); -}; - -} // namespace content - -#endif // SERVICES_CONTENT_PUBLIC_CPP_TEST_FAKE_NAVIGABLE_CONTENTS_FACTORY_H_
diff --git a/services/content/public/cpp/test/fake_navigable_contents_factory_unittest.cc b/services/content/public/cpp/test/fake_navigable_contents_factory_unittest.cc deleted file mode 100644 index 8095f7f..0000000 --- a/services/content/public/cpp/test/fake_navigable_contents_factory_unittest.cc +++ /dev/null
@@ -1,177 +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 "services/content/public/cpp/test/fake_navigable_contents_factory.h" - -#include "base/callback.h" -#include "base/macros.h" -#include "base/run_loop.h" -#include "base/test/task_environment.h" -#include "net/http/http_response_headers.h" -#include "services/content/public/cpp/navigable_contents.h" -#include "services/content/public/cpp/navigable_contents_observer.h" -#include "services/content/public/cpp/test/fake_navigable_contents.h" -#include "services/content/public/mojom/navigable_contents.mojom.h" -#include "services/content/public/mojom/navigable_contents_factory.mojom.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "url/gurl.h" - -namespace content { -namespace { - -class FakeNavigableContentsFactoryTest : public testing::Test { - public: - FakeNavigableContentsFactoryTest() { - factory_.BindReceiver(remote_factory_.BindNewPipeAndPassReceiver()); - } - - ~FakeNavigableContentsFactoryTest() override = default; - - FakeNavigableContentsFactory& factory() { return factory_; } - - mojom::NavigableContentsFactory* remote_factory() { - return remote_factory_.get(); - } - - private: - base::test::TaskEnvironment task_environment_; - - mojo::Remote<mojom::NavigableContentsFactory> remote_factory_; - FakeNavigableContentsFactory factory_; - - DISALLOW_COPY_AND_ASSIGN(FakeNavigableContentsFactoryTest); -}; - -class NavigationObserver : public NavigableContentsObserver { - public: - explicit NavigationObserver(NavigableContents* contents) - : contents_(contents) { - contents_->AddObserver(this); - } - - ~NavigationObserver() override { contents_->RemoveObserver(this); } - - const GURL& last_url() const { return last_url_; } - const scoped_refptr<net::HttpResponseHeaders>& last_response_headers() const { - return last_response_headers_; - } - size_t navigations_observed() const { return navigations_observed_; } - bool last_navigation_succeeded() const { return last_navigation_succeeded_; } - - void WaitForNavigation() { - if (!navigation_run_loop_) - navigation_run_loop_.emplace(); - navigation_run_loop_->Run(); - navigation_run_loop_.reset(); - } - - private: - // NavigableContentsObserver: - void DidFinishNavigation( - const GURL& url, - bool is_main_frame, - bool is_error_page, - const net::HttpResponseHeaders* response_headers) override { - last_url_ = url; - last_navigation_succeeded_ = !is_error_page; - if (response_headers) { - last_response_headers_ = base::MakeRefCounted<net::HttpResponseHeaders>( - response_headers->raw_headers()); - } else { - last_response_headers_ = nullptr; - } - ++navigations_observed_; - if (navigation_run_loop_) - navigation_run_loop_->Quit(); - } - - NavigableContents* const contents_; - GURL last_url_; - scoped_refptr<net::HttpResponseHeaders> last_response_headers_; - bool last_navigation_succeeded_ = false; - size_t navigations_observed_ = 0; - base::Optional<base::RunLoop> navigation_run_loop_; - - DISALLOW_COPY_AND_ASSIGN(NavigationObserver); -}; - -TEST_F(FakeNavigableContentsFactoryTest, BasicNavigation) { - NavigableContents contents(remote_factory()); - FakeNavigableContents contents_impl; - factory().WaitForAndBindNextContentsRequest(&contents_impl); - - const GURL kTestUrl("https://www.google.com/"); - contents.Navigate(kTestUrl); - - NavigationObserver observer(&contents); - observer.WaitForNavigation(); - - EXPECT_TRUE(observer.last_navigation_succeeded()); - EXPECT_EQ(1u, observer.navigations_observed()); - EXPECT_EQ(kTestUrl, observer.last_url()); - EXPECT_EQ(nullptr, observer.last_response_headers()); -} - -TEST_F(FakeNavigableContentsFactoryTest, MultipleClients) { - NavigableContents contents1(remote_factory()); - FakeNavigableContents contents1_impl; - factory().WaitForAndBindNextContentsRequest(&contents1_impl); - - NavigableContents contents2(remote_factory()); - FakeNavigableContents contents2_impl; - factory().WaitForAndBindNextContentsRequest(&contents2_impl); - - const GURL kTestUrl1("https://www.google.com/?q=cats"); - const GURL kTestUrl2("https://www.google.com/?q=dogs"); - contents1.Navigate(kTestUrl1); - contents2.Navigate(kTestUrl2); - - NavigationObserver observer1(&contents1); - NavigationObserver observer2(&contents2); - observer1.WaitForNavigation(); - observer2.WaitForNavigation(); - - EXPECT_TRUE(observer1.last_navigation_succeeded()); - EXPECT_EQ(1u, observer1.navigations_observed()); - EXPECT_EQ(kTestUrl1, observer1.last_url()); - EXPECT_EQ(nullptr, observer1.last_response_headers()); - - EXPECT_TRUE(observer2.last_navigation_succeeded()); - EXPECT_EQ(1u, observer2.navigations_observed()); - EXPECT_EQ(kTestUrl2, observer2.last_url()); - EXPECT_EQ(nullptr, observer2.last_response_headers()); -} - -TEST_F(FakeNavigableContentsFactoryTest, CustomHeaders) { - NavigableContents contents(remote_factory()); - FakeNavigableContents contents_impl; - factory().WaitForAndBindNextContentsRequest(&contents_impl); - - const std::string kTestHeader1 = "Test-Header-1"; - const std::string kTestHeaderValue1 = "apples"; - const std::string kTestHeader2 = "Test-Header-2"; - const std::string kTestHeaderValue2 = "bananas"; - auto test_headers = - base::MakeRefCounted<net::HttpResponseHeaders>("HTTP/1.1 200 OK"); - test_headers->SetHeader(kTestHeader1, kTestHeaderValue1); - test_headers->SetHeader(kTestHeader2, kTestHeaderValue2); - contents_impl.set_default_response_headers(test_headers); - - const GURL kTestUrl("https://www.google.com/"); - contents.Navigate(kTestUrl); - - NavigationObserver observer(&contents); - observer.WaitForNavigation(); - - EXPECT_TRUE(observer.last_navigation_succeeded()); - EXPECT_EQ(kTestUrl, observer.last_url()); - ASSERT_TRUE(observer.last_response_headers()); - EXPECT_TRUE(observer.last_response_headers()->HasHeaderValue( - kTestHeader1, kTestHeaderValue1)); - EXPECT_TRUE(observer.last_response_headers()->HasHeaderValue( - kTestHeader2, kTestHeaderValue2)); -} - -} // namespace -} // namespace content
diff --git a/services/content/public/mojom/BUILD.gn b/services/content/public/mojom/BUILD.gn deleted file mode 100644 index 474f001..0000000 --- a/services/content/public/mojom/BUILD.gn +++ /dev/null
@@ -1,30 +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. - -import("//mojo/public/tools/bindings/mojom.gni") - -mojom_component("mojom") { - # We don't want Blink variants of these bindings to be generated, because they - # will end up having a dependency on KURL and thus be required to link into - # the same Blink component target. This should be removed once it's possible - # for a non-Blink target to depend on KURL. - disable_variants = true - - sources = [ - "navigable_contents.mojom", - "navigable_contents_factory.mojom", - ] - - public_deps = [ - "//mojo/public/mojom/base", - "//services/network/public/mojom:websocket_mojom", - "//ui/accessibility/mojom", - "//ui/base/mojom", - "//ui/gfx/geometry/mojom", - "//url/mojom:url_mojom_gurl", - ] - - output_prefix = "content_service_mojom" - macro_prefix = "CONTENT_SERVICE_MOJOM" -}
diff --git a/services/content/public/mojom/OWNERS b/services/content/public/mojom/OWNERS deleted file mode 100644 index 08850f4..0000000 --- a/services/content/public/mojom/OWNERS +++ /dev/null
@@ -1,2 +0,0 @@ -per-file *.mojom=set noparent -per-file *.mojom=file://ipc/SECURITY_OWNERS
diff --git a/services/content/public/mojom/navigable_contents.mojom b/services/content/public/mojom/navigable_contents.mojom deleted file mode 100644 index 202d63e9..0000000 --- a/services/content/public/mojom/navigable_contents.mojom +++ /dev/null
@@ -1,93 +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. - -module content.mojom; - -import "services/network/public/mojom/network_param.mojom"; -import "ui/accessibility/mojom/ax_tree_id.mojom"; -import "ui/base/mojom/window_open_disposition.mojom"; -import "ui/gfx/geometry/mojom/geometry.mojom"; -import "mojo/public/mojom/base/unguessable_token.mojom"; -import "url/mojom/url.mojom"; - -// Parameters used to configure the behavior of |NavigableContents.Navigate|. -struct NavigateParams { - // Indicates that upon successful navigation, the session history should be - // cleared, resulting in the navigated page being the first and only entry in - // the session's history. - bool should_clear_session_history = false; -}; - -// The primary interface an application uses to drive a top-level, navigable -// content object. Typically this would correspond to e.g. a browser tab, but -// it is not strictly necessary that the contents have any graphical presence -// within the client application. -interface NavigableContents { - // Initiates a navigation to |url|. - Navigate(url.mojom.Url url, NavigateParams params); - - // Attempts to navigate the web contents back in its history stack. The - // supplied |callback| is run to indicate success/failure of the attempt. The - // navigation attempt will fail if the history stack is empty. - GoBack() => (bool success); - - // Creates a visual representation of the navigated contents, which is - // maintained by the Content Service. Responds with a |embed_token| which can - // be given to Mus in order to authorize embedding of that visual - // representation within the client application's own window tree. - CreateView() => (mojo_base.mojom.UnguessableToken embed_token); - - // Attempts to transfer global input focus to the navigated contents if they - // have an active visual representation. - Focus(); - - // Similar to above but for use specifically when UI traversal is being done - // via Tab-key cycling. - FocusThroughTabTraversal(bool reverse); -}; - -// A client interface used by the Content Service to push contents-scoped events -// back to the application. -interface NavigableContentsClient { - // Requests that the client relinquish focus from the content area's view. - ClearViewFocus(); - - // Notifies the client that a navigation has finished. - DidFinishNavigation(url.mojom.Url url, - bool is_main_frame, - bool is_error_page, - network.mojom.HttpResponseHeaders? response_headers); - - // Notifies the client that the NavigableContents has stopped loading - // resources pertaining to a prior navigation request. - DidStopLoading(); - - // Indicates that the navigated contents changed in such a way as to elicit - // automatic resizing of the containing view. Only fired if - // |NavigableContentsParams.enable_view_auto_resize| was set to |true| when - // creating the corresponding NavigableContents. The client may use this as a - // signal to, e.g., resize a UI element containing the content view. - DidAutoResizeView(gfx.mojom.Size new_size); - - // Notifies the client that a navigation was attempted by the contents (e.g. - // by user gesture or script behavior), but it was suppressed because - // |NavigableContentsParams.suppress_navigations| was set to |true| when the - // NavigableContents was created. See that flag's documentation for details - // regarding which types of navigations it can affect. - DidSuppressNavigation(url.mojom.Url url, - ui.mojom.WindowOpenDisposition disposition, - bool from_user_gesture); - - // Notifies the client whether the web contents can navigate back in its - // history stack. - UpdateCanGoBack(bool can_go_back); - - // Informs the client of the ID of the content area's accessibility tree - // whenever it changes. - UpdateContentAXTree(ax.mojom.AXTreeID id); - - // Informs the client that the focused DOM node has changed. - FocusedNodeChanged(bool is_editable_node, - gfx.mojom.Rect node_bounds_in_screen); -};
diff --git a/services/content/public/mojom/navigable_contents_factory.mojom b/services/content/public/mojom/navigable_contents_factory.mojom deleted file mode 100644 index 0cb86ed..0000000 --- a/services/content/public/mojom/navigable_contents_factory.mojom +++ /dev/null
@@ -1,52 +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. - -module content.mojom; - -import "services/content/public/mojom/navigable_contents.mojom"; -import "ui/gfx/geometry/mojom/geometry.mojom"; - -// Parameters used to configure a newly created NavigableContents. -struct NavigableContentsParams { - // Enables auto-resizing of any view created for this NavigableContents. If - // |true|, the corresponding NavigableContentsClient will receive - // |DidAutoResizeView()| notifications whenever such resizing happens. - bool enable_view_auto_resize = false; - - // Specifies the minimum size for auto resizing. - // Defaults to (1, 1). - gfx.mojom.Size? auto_resize_min_size; - - // Specifies the maximum size for auto resizing. - // Defaults to (INT_MAX, INT_MAX). - gfx.mojom.Size? auto_resize_max_size; - - // Indicates that the client wants to control how navigation requests are - // handled within the created NavigableContents. Any attempt to navigate the - // NavigableContents by any means other than an explicit call to - // |NavigableContents.Navigate()| -- for example, link clicks or scripted - // location changes -- will be suppressed and will instead result in a - // |DidSuppressNavigation()| message being sent to the corresponding - // NavigableContentsClient. - bool suppress_navigations = false; - - // Background color of the content. Effective when |override_background_color| - // is true. - // TODO(https://crbug.com/657632): Numeric types are not nullable. - bool override_background_color = false; - uint32 background_color = 0xFFFFFFFF; // Opaque white. -}; - -// NavigableContentsFactory is the primary interface through which a new -// NavigableContents interface is bound to a new concrete navigable contents -// within the Content Service. -interface NavigableContentsFactory { - // Creates a new NavigableContents configured according to |params|. - // |receiver| is bound to a NavigableContents implementation, and |client| is - // used to push event notifications relevant to the state of that - // implementation throughout its lifetime. - CreateContents(NavigableContentsParams params, - pending_receiver<NavigableContents> receiver, - pending_remote<NavigableContentsClient> client); -};
diff --git a/services/content/service.cc b/services/content/service.cc deleted file mode 100644 index 5e295321..0000000 --- a/services/content/service.cc +++ /dev/null
@@ -1,56 +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 "services/content/service.h" - -#include <utility> - -#include "services/content/navigable_contents_factory_impl.h" -#include "services/content/navigable_contents_impl.h" -#include "services/content/public/mojom/navigable_contents_factory.mojom.h" -#include "services/content/service_delegate.h" - -namespace content { - -Service::Service(ServiceDelegate* delegate) : delegate_(delegate) {} - -Service::~Service() { - delegate_->WillDestroyServiceInstance(this); -} - -void Service::BindNavigableContentsFactory( - mojo::PendingReceiver<mojom::NavigableContentsFactory> receiver) { - AddNavigableContentsFactory(std::make_unique<NavigableContentsFactoryImpl>( - this, std::move(receiver))); -} - -void Service::ForceQuit() { - // Ensure that all bound interfaces are disconnected and no further interface - // requests will be handled. - navigable_contents_factories_.clear(); - navigable_contents_.clear(); -} - -void Service::AddNavigableContentsFactory( - std::unique_ptr<NavigableContentsFactoryImpl> factory) { - auto* raw_factory = factory.get(); - navigable_contents_factories_.emplace(raw_factory, std::move(factory)); -} - -void Service::RemoveNavigableContentsFactory( - NavigableContentsFactoryImpl* factory) { - navigable_contents_factories_.erase(factory); -} - -void Service::AddNavigableContents( - std::unique_ptr<NavigableContentsImpl> contents) { - auto* raw_contents = contents.get(); - navigable_contents_.emplace(raw_contents, std::move(contents)); -} - -void Service::RemoveNavigableContents(NavigableContentsImpl* contents) { - navigable_contents_.erase(contents); -} - -} // namespace content
diff --git a/services/content/service.h b/services/content/service.h deleted file mode 100644 index efc87cf..0000000 --- a/services/content/service.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 SERVICES_CONTENT_SERVICE_H_ -#define SERVICES_CONTENT_SERVICE_H_ - -#include <map> - -#include "base/macros.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "services/content/public/mojom/navigable_contents_factory.mojom.h" - -namespace content { - -class ServiceDelegate; -class NavigableContentsFactoryImpl; -class NavigableContentsImpl; - -// The core implementation of the Content Service. This takes responsibility for -// owning top-level state for an instance of the service, binding incoming -// interface requests, etc. -// -// NOTE: This type is exposed to ServiceDelegate implementations outside -// of private Content Service code. The public API surface of this class should -// therefore remain as minimal as possible. -class Service { - public: - // |delegate| is not owned and must outlive |this|. - explicit Service(ServiceDelegate* delegate); - ~Service(); - - ServiceDelegate* delegate() const { return delegate_; } - - void BindNavigableContentsFactory( - mojo::PendingReceiver<mojom::NavigableContentsFactory> receiver); - - // Forces this instance of the Service to be terminated. Useful if the - // delegate implementation encounters a scenario in which it can no longer - // operate correctly. May delete |this|. - void ForceQuit(); - - private: - friend class NavigableContentsFactoryImpl; - friend class NavigableContentsImpl; - - void AddNavigableContentsFactory( - std::unique_ptr<NavigableContentsFactoryImpl> factory); - void RemoveNavigableContentsFactory(NavigableContentsFactoryImpl* factory); - - void AddNavigableContents(std::unique_ptr<NavigableContentsImpl> contents); - void RemoveNavigableContents(NavigableContentsImpl* contents); - - ServiceDelegate* const delegate_; - - std::map<NavigableContentsFactoryImpl*, - std::unique_ptr<NavigableContentsFactoryImpl>> - navigable_contents_factories_; - std::map<NavigableContentsImpl*, std::unique_ptr<NavigableContentsImpl>> - navigable_contents_; - - DISALLOW_COPY_AND_ASSIGN(Service); -}; - -} // namespace content - -#endif // SERVICES_CONTENT_SERVICE_H_
diff --git a/services/content/service_delegate.h b/services/content/service_delegate.h deleted file mode 100644 index 363e21d..0000000 --- a/services/content/service_delegate.h +++ /dev/null
@@ -1,43 +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 SERVICES_CONTENT_SERVICE_DELEGATE_H_ -#define SERVICES_CONTENT_SERVICE_DELEGATE_H_ - -#include "services/content/public/mojom/navigable_contents.mojom.h" -#include "services/content/public/mojom/navigable_contents_factory.mojom.h" - -namespace content { - -class NavigableContentsDelegate; -class Service; - -// This is a delegate interface which allows the Content Service implementation -// to delegate out to private src/content code without a circular dependency -// between them. -// -// This interface is strictly intended to host transitional APIs for aiding in -// incremental conversion of src/content and its dependents into/onto the -// Content Service. As such, APIs should only be added here with a plan for -// eventual removal. -class ServiceDelegate { - public: - virtual ~ServiceDelegate() {} - - // Called when an instance of Service (specifically one using this - // delegate) is about to be destroyed. - virtual void WillDestroyServiceInstance(Service* service) = 0; - - // Constructs a new NavigableContentsDelegate implementation to back a new - // NavigableContentsImpl instance, servicing a client's NavigableContents. - // |client| is a NavigableContentsClient interface the implementation can use - // to communicate with the client of this contents. - virtual std::unique_ptr<NavigableContentsDelegate> - CreateNavigableContentsDelegate(const mojom::NavigableContentsParams& params, - mojom::NavigableContentsClient* client) = 0; -}; - -} // namespace content - -#endif // SERVICES_CONTENT_CONTENT_SERVICE_DELEGATE_H_
diff --git a/services/content/service_unittest.cc b/services/content/service_unittest.cc deleted file mode 100644 index cb927675..0000000 --- a/services/content/service_unittest.cc +++ /dev/null
@@ -1,169 +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 "services/content/service.h" - -#include "base/bind.h" -#include "base/callback.h" -#include "base/macros.h" -#include "base/run_loop.h" -#include "base/test/bind_test_util.h" -#include "base/test/task_environment.h" -#include "mojo/public/cpp/bindings/pending_receiver.h" -#include "mojo/public/cpp/bindings/receiver.h" -#include "mojo/public/cpp/bindings/remote.h" -#include "services/content/navigable_contents_delegate.h" -#include "services/content/public/mojom/navigable_contents.mojom.h" -#include "services/content/public/mojom/navigable_contents_factory.mojom.h" -#include "services/content/service_delegate.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "url/gurl.h" - -namespace content { -namespace { - -class TestNavigableContentsClient : public mojom::NavigableContentsClient { - public: - TestNavigableContentsClient() = default; - ~TestNavigableContentsClient() override = default; - - private: - // mojom::NavigableContentsClient: - void ClearViewFocus() override {} - void DidFinishNavigation(const GURL& url, - bool is_main_frame, - bool is_error_page, - const scoped_refptr<net::HttpResponseHeaders>& - response_headers) override {} - void DidStopLoading() override {} - void DidAutoResizeView(const gfx::Size& new_size) override {} - void DidSuppressNavigation(const GURL& url, - WindowOpenDisposition disposition, - bool from_user_gesture) override {} - void UpdateCanGoBack(bool can_go_back) override {} - void UpdateContentAXTree(const ui::AXTreeID& id) override {} - void FocusedNodeChanged(bool is_editable_node, - const gfx::Rect& node_bounds_in_screen) override {} - - DISALLOW_COPY_AND_ASSIGN(TestNavigableContentsClient); -}; - -class TestNavigableContentsDelegate : public NavigableContentsDelegate { - public: - TestNavigableContentsDelegate() = default; - ~TestNavigableContentsDelegate() override = default; - - const GURL& last_navigated_url() const { return last_navigated_url_; } - - void set_navigation_callback(base::RepeatingClosure callback) { - navigation_callback_ = std::move(callback); - } - - // NavigableContentsDelegate: - void Navigate(const GURL& url, mojom::NavigateParamsPtr params) override { - last_navigated_url_ = url; - if (navigation_callback_) - navigation_callback_.Run(); - } - - void GoBack( - content::mojom::NavigableContents::GoBackCallback callback) override { - std::move(callback).Run(false /* success */); - } - - void Focus() override {} - void FocusThroughTabTraversal(bool reverse) override {} - - gfx::NativeView GetNativeView() override { return nullptr; } - - private: - GURL last_navigated_url_; - base::RepeatingClosure navigation_callback_; - - DISALLOW_COPY_AND_ASSIGN(TestNavigableContentsDelegate); -}; - -class TestServiceDelegate : public ServiceDelegate { - public: - TestServiceDelegate() = default; - ~TestServiceDelegate() override = default; - - void set_navigable_contents_delegate_created_callback( - base::RepeatingCallback<void(TestNavigableContentsDelegate*)> callback) { - navigable_contents_delegate_created_callback_ = std::move(callback); - } - - // ServiceDelegate: - void WillDestroyServiceInstance(Service* service) override {} - - std::unique_ptr<NavigableContentsDelegate> CreateNavigableContentsDelegate( - const mojom::NavigableContentsParams& params, - mojom::NavigableContentsClient* client) override { - auto delegate = std::make_unique<TestNavigableContentsDelegate>(); - if (navigable_contents_delegate_created_callback_) - navigable_contents_delegate_created_callback_.Run(delegate.get()); - return delegate; - } - - private: - base::RepeatingCallback<void(TestNavigableContentsDelegate*)> - navigable_contents_delegate_created_callback_; - - DISALLOW_COPY_AND_ASSIGN(TestServiceDelegate); -}; - -class ContentServiceTest : public testing::Test { - public: - ContentServiceTest() : service_(&delegate_) {} - ~ContentServiceTest() override = default; - - protected: - TestServiceDelegate& delegate() { return delegate_; } - - Service& service() { return service_; } - - private: - base::test::TaskEnvironment task_environment_; - TestServiceDelegate delegate_; - Service service_; - - DISALLOW_COPY_AND_ASSIGN(ContentServiceTest); -}; - -TEST_F(ContentServiceTest, NavigableContentsCreation) { - mojo::Remote<mojom::NavigableContentsFactory> factory; - service().BindNavigableContentsFactory(factory.BindNewPipeAndPassReceiver()); - - base::RunLoop loop; - - TestNavigableContentsDelegate* navigable_contents_delegate = nullptr; - delegate().set_navigable_contents_delegate_created_callback( - base::BindLambdaForTesting([&](TestNavigableContentsDelegate* delegate) { - EXPECT_FALSE(navigable_contents_delegate); - navigable_contents_delegate = delegate; - loop.Quit(); - })); - - mojo::Remote<mojom::NavigableContents> contents; - TestNavigableContentsClient client_impl; - mojo::Receiver<mojom::NavigableContentsClient> client_receiver(&client_impl); - factory->CreateContents(mojom::NavigableContentsParams::New(), - contents.BindNewPipeAndPassReceiver(), - client_receiver.BindNewPipeAndPassRemote()); - loop.Run(); - - base::RunLoop navigation_loop; - ASSERT_TRUE(navigable_contents_delegate); - navigable_contents_delegate->set_navigation_callback( - navigation_loop.QuitClosure()); - - const GURL kTestUrl("https://example.com/"); - contents->Navigate(kTestUrl, mojom::NavigateParams::New()); - navigation_loop.Run(); - - EXPECT_EQ(kTestUrl, navigable_contents_delegate->last_navigated_url()); -} - -} // namespace -} // namespace content
diff --git a/services/device/usb/usb_device_handle_android.cc b/services/device/usb/usb_device_handle_android.cc index e71b3d7..fa9eeb62 100644 --- a/services/device/usb/usb_device_handle_android.cc +++ b/services/device/usb/usb_device_handle_android.cc
@@ -34,6 +34,7 @@ const base::android::JavaRef<jobject>& wrapper) : UsbDeviceHandleUsbfs(device, std::move(fd), + base::ScopedFD(), UsbService::CreateBlockingTaskRunner()), j_object_(wrapper) {}
diff --git a/services/device/usb/usb_device_handle_usbfs.cc b/services/device/usb/usb_device_handle_usbfs.cc index 6ca4296..8e0d035 100644 --- a/services/device/usb/usb_device_handle_usbfs.cc +++ b/services/device/usb/usb_device_handle_usbfs.cc
@@ -141,6 +141,7 @@ public: BlockingTaskRunnerHelper( base::ScopedFD fd, + base::ScopedFD lifeline_fd, scoped_refptr<UsbDeviceHandleUsbfs> device_handle, scoped_refptr<base::SequencedTaskRunner> task_runner); ~BlockingTaskRunnerHelper(); @@ -162,6 +163,7 @@ void OnFileCanWriteWithoutBlocking(); base::ScopedFD fd_; + base::ScopedFD lifeline_fd_; scoped_refptr<UsbDeviceHandleUsbfs> device_handle_; scoped_refptr<base::SequencedTaskRunner> task_runner_; std::unique_ptr<base::FileDescriptorWatcher::Controller> watch_controller_; @@ -208,9 +210,11 @@ UsbDeviceHandleUsbfs::BlockingTaskRunnerHelper::BlockingTaskRunnerHelper( base::ScopedFD fd, + base::ScopedFD lifeline_fd, scoped_refptr<UsbDeviceHandleUsbfs> device_handle, scoped_refptr<base::SequencedTaskRunner> task_runner) : fd_(std::move(fd)), + lifeline_fd_(std::move(lifeline_fd)), device_handle_(std::move(device_handle)), task_runner_(std::move(task_runner)) {} @@ -432,6 +436,7 @@ UsbDeviceHandleUsbfs::UsbDeviceHandleUsbfs( scoped_refptr<UsbDevice> device, base::ScopedFD fd, + base::ScopedFD lifeline_fd, scoped_refptr<base::SequencedTaskRunner> blocking_task_runner) : device_(device), fd_(fd.get()), @@ -441,8 +446,8 @@ DCHECK(fd.is_valid()); DCHECK(blocking_task_runner_); - helper_.reset( - new BlockingTaskRunnerHelper(std::move(fd), this, task_runner_)); + helper_ = std::make_unique<BlockingTaskRunnerHelper>( + std::move(fd), std::move(lifeline_fd), this, task_runner_); blocking_task_runner_->PostTask( FROM_HERE, base::BindOnce(&BlockingTaskRunnerHelper::Start, base::Unretained(helper_.get()))); @@ -472,6 +477,9 @@ // The device is no longer attached so we don't have any endpoints either. endpoints_.clear(); + // The destruction of the |helper_| below will close the lifeline pipe if it + // exists and re-attach kernel driver. + // Releases |helper_|. blocking_task_runner_->PostTask( FROM_HERE, base::BindOnce(&UsbDeviceHandleUsbfs::CloseBlocking, this));
diff --git a/services/device/usb/usb_device_handle_usbfs.h b/services/device/usb/usb_device_handle_usbfs.h index 949ddd0..10e4feca 100644 --- a/services/device/usb/usb_device_handle_usbfs.h +++ b/services/device/usb/usb_device_handle_usbfs.h
@@ -33,6 +33,7 @@ UsbDeviceHandleUsbfs( scoped_refptr<UsbDevice> device, base::ScopedFD fd, + base::ScopedFD lifeline_fd, scoped_refptr<base::SequencedTaskRunner> blocking_task_runner); // UsbDeviceHandle implementation.
diff --git a/services/device/usb/usb_device_linux.cc b/services/device/usb/usb_device_linux.cc index 070cdd5..fdc2053 100644 --- a/services/device/usb/usb_device_linux.cc +++ b/services/device/usb/usb_device_linux.cc
@@ -11,6 +11,7 @@ #include "base/bind.h" #include "base/callback_helpers.h" +#include "base/files/file_util.h" #include "base/location.h" #include "base/posix/eintr_wrapper.h" #include "base/sequenced_task_runner.h" @@ -23,6 +24,10 @@ #if defined(OS_CHROMEOS) #include "chromeos/dbus/permission_broker/permission_broker_client.h" + +namespace { +constexpr uint32_t kAllInterfacesMask = ~0U; +} // namespace #endif // defined(OS_CHROMEOS) namespace device { @@ -48,11 +53,20 @@ DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); #if defined(OS_CHROMEOS) + // create the pipe used as a lifetime to re-attach the original kernel driver + // to the USB device in permission_broker. + base::ScopedFD read_end, write_end; + if (!base::CreatePipe(&read_end, &write_end, /*non_blocking*/ true)) { + LOG(ERROR) << "Couldn't create pipe for USB device " << device_path_; + std::move(callback).Run(nullptr); + return; + } + auto copyable_callback = base::AdaptCallbackForRepeating(std::move(callback)); - chromeos::PermissionBrokerClient::Get()->OpenPath( - device_path_, + chromeos::PermissionBrokerClient::Get()->ClaimDevicePath( + device_path_, kAllInterfacesMask, read_end.get(), base::BindOnce(&UsbDeviceLinux::OnOpenRequestComplete, this, - copyable_callback), + copyable_callback, std::move(write_end)), base::BindOnce(&UsbDeviceLinux::OnOpenRequestError, this, copyable_callback)); #else @@ -69,13 +83,14 @@ #if defined(OS_CHROMEOS) void UsbDeviceLinux::OnOpenRequestComplete(OpenCallback callback, + base::ScopedFD lifeline_fd, base::ScopedFD fd) { if (!fd.is_valid()) { USB_LOG(EVENT) << "Did not get valid device handle from permission broker."; std::move(callback).Run(nullptr); return; } - Opened(std::move(fd), std::move(callback), + Opened(std::move(fd), std::move(lifeline_fd), std::move(callback), UsbService::CreateBlockingTaskRunner()); } @@ -97,7 +112,8 @@ if (fd.is_valid()) { task_runner->PostTask( FROM_HERE, base::BindOnce(&UsbDeviceLinux::Opened, this, std::move(fd), - std::move(callback), blocking_task_runner)); + base::ScopedFD(), std::move(callback), + blocking_task_runner)); } else { USB_PLOG(EVENT) << "Failed to open " << device_path_; task_runner->PostTask(FROM_HERE, @@ -109,11 +125,12 @@ void UsbDeviceLinux::Opened( base::ScopedFD fd, + base::ScopedFD lifeline_fd, OpenCallback callback, scoped_refptr<base::SequencedTaskRunner> blocking_task_runner) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - scoped_refptr<UsbDeviceHandle> device_handle = - new UsbDeviceHandleUsbfs(this, std::move(fd), blocking_task_runner); + scoped_refptr<UsbDeviceHandle> device_handle = new UsbDeviceHandleUsbfs( + this, std::move(fd), std::move(lifeline_fd), blocking_task_runner); handles().push_back(device_handle.get()); std::move(callback).Run(device_handle); }
diff --git a/services/device/usb/usb_device_linux.h b/services/device/usb/usb_device_linux.h index 6e6a873..f800bef2 100644 --- a/services/device/usb/usb_device_linux.h +++ b/services/device/usb/usb_device_linux.h
@@ -52,7 +52,9 @@ private: #if defined(OS_CHROMEOS) - void OnOpenRequestComplete(OpenCallback callback, base::ScopedFD fd); + void OnOpenRequestComplete(OpenCallback callback, + base::ScopedFD fd, + base::ScopedFD lifeline_fd); void OnOpenRequestError(OpenCallback callback, const std::string& error_name, const std::string& error_message); @@ -63,6 +65,7 @@ scoped_refptr<base::SequencedTaskRunner> blocking_task_runner); #endif // defined(OS_CHROMEOS) void Opened(base::ScopedFD fd, + base::ScopedFD lifeline_fd, OpenCallback callback, scoped_refptr<base::SequencedTaskRunner> blocking_task_runner);
diff --git a/services/network/cors/cors_url_loader_factory.cc b/services/network/cors/cors_url_loader_factory.cc index 42d93103..25386af 100644 --- a/services/network/cors/cors_url_loader_factory.cc +++ b/services/network/cors/cors_url_loader_factory.cc
@@ -193,8 +193,8 @@ DCHECK(context_); DCHECK(origin_access_list_); DCHECK_NE(mojom::kInvalidProcessId, process_id_); - DCHECK_EQ(net::IsolationInfo::RedirectMode::kUpdateNothing, - params->isolation_info.redirect_mode()); + DCHECK_EQ(net::IsolationInfo::RequestType::kOther, + params->isolation_info.request_type()); if (params->automatically_assign_isolation_info) { DCHECK(params->isolation_info.IsEmpty()); // Only the browser process is currently permitted to use automatically
diff --git a/services/network/cors/cors_url_loader_unittest.cc b/services/network/cors/cors_url_loader_unittest.cc index 5369c0a3..c72e0ef 100644 --- a/services/network/cors/cors_url_loader_unittest.cc +++ b/services/network/cors/cors_url_loader_unittest.cc
@@ -1256,7 +1256,7 @@ request.update_first_party_url_on_redirect = true; request.trusted_params = ResourceRequest::TrustedParams(); request.trusted_params->isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, + net::IsolationInfo::RequestType::kMainFrame, url_origin /* top_frame_origin */, url_origin /* frame_origin */, url_site_for_cookies); CreateLoaderAndStart(request); @@ -1285,10 +1285,10 @@ EXPECT_TRUE( GetRequest().site_for_cookies.IsEquivalent(new_url_site_for_cookies)); EXPECT_TRUE(GetRequest().trusted_params->isolation_info.IsEqualForTesting( - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, - new_url_origin /* top_frame_origin */, - new_url_origin /* frame_origin */, new_url_site_for_cookies))); + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kMainFrame, + new_url_origin /* top_frame_origin */, + new_url_origin /* frame_origin */, + new_url_site_for_cookies))); NotifyLoaderClientOnReceiveResponse( {{"Access-Control-Allow-Origin", "https://example.com"}}); @@ -2281,8 +2281,8 @@ // Fill up the |trusted_params| NetworkIsolationKey member. url::Origin request_origin = url::Origin::Create(request.url); request.trusted_params->isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, request_origin, - request_origin, net::SiteForCookies()); + net::IsolationInfo::RequestType::kOther, request_origin, request_origin, + net::SiteForCookies()); CreateLoaderAndStart(request); RunUntilCreateLoaderAndStartCalled();
diff --git a/services/network/cors/preflight_controller_unittest.cc b/services/network/cors/preflight_controller_unittest.cc index effbbabe..e0a7b05 100644 --- a/services/network/cors/preflight_controller_unittest.cc +++ b/services/network/cors/preflight_controller_unittest.cc
@@ -536,9 +536,9 @@ const url::Origin& origin = test_initiator_origin(); request.request_initiator = origin; ResourceRequest::TrustedParams trusted_params; - trusted_params.isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, origin, origin, - net::SiteForCookies()); + trusted_params.isolation_info = + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther, + origin, origin, net::SiteForCookies()); request.trusted_params = {trusted_params}; PerformPreflightCheck(request); @@ -554,9 +554,9 @@ url::Origin second_origin = url::Origin::Create(GURL("https://example.com/")); request.request_initiator = second_origin; SetAccessControlAllowOrigin(second_origin); - request.trusted_params->isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, origin, second_origin, - net::SiteForCookies()); + request.trusted_params->isolation_info = + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther, + origin, second_origin, net::SiteForCookies()); PerformPreflightCheck(request); EXPECT_EQ(net::OK, net_error()); ASSERT_FALSE(status()); @@ -571,9 +571,9 @@ const url::Origin& origin = test_initiator_origin(); request.request_initiator = origin; - const net::IsolationInfo isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, origin, origin, - net::SiteForCookies()); + const net::IsolationInfo isolation_info = + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther, + origin, origin, net::SiteForCookies()); PerformPreflightCheck(request, false, isolation_info); EXPECT_EQ(net::OK, net_error());
diff --git a/services/network/expect_ct_reporter.cc b/services/network/expect_ct_reporter.cc index 31123b7..ff6bbf0d 100644 --- a/services/network/expect_ct_reporter.cc +++ b/services/network/expect_ct_reporter.cc
@@ -271,7 +271,7 @@ url_request->set_allow_credentials(false); url_request->set_method(net::HttpRequestHeaders::kOptionsMethod); url_request->set_isolation_info(net::IsolationInfo::CreatePartial( - net::IsolationInfo::RedirectMode::kUpdateNothing, network_isolation_key)); + net::IsolationInfo::RequestType::kOther, network_isolation_key)); net::HttpRequestHeaders extra_headers; extra_headers.SetHeader("Origin", "null");
diff --git a/services/network/network_context_unittest.cc b/services/network/network_context_unittest.cc index 040bdaa..44c2049 100644 --- a/services/network/network_context_unittest.cc +++ b/services/network/network_context_unittest.cc
@@ -231,7 +231,7 @@ // NIK must be consistent with |site_for_cookies|. if (request.site_for_cookies.IsNull()) { params->isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, + net::IsolationInfo::RequestType::kOther, url::Origin::Create(GURL("https://abc.com")), url::Origin::Create(GURL("https://xyz.com")), request.site_for_cookies); } else { @@ -6443,8 +6443,8 @@ auto params = mojom::URLLoaderFactoryParams::New(); params->process_id = mojom::kBrowserProcessId; params->is_corb_enabled = false; - if (isolation_info.redirect_mode() == - net::IsolationInfo::RedirectMode::kUpdateNothing) { + if (isolation_info.request_type() == + net::IsolationInfo::RequestType::kOther) { params->isolation_info = isolation_info; } else { request.trusted_params = ResourceRequest::TrustedParams(); @@ -6513,18 +6513,18 @@ NavigationResourceCachedUsingNetworkIsolationKey) { GURL url = test_server()->GetURL("othersite.test", "/main.html"); url::Origin origin_a = url::Origin::Create(url); - net::IsolationInfo info_a = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateFrameOnly, origin_a, origin_a, - net::SiteForCookies()); + net::IsolationInfo info_a = + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kSubFrame, + origin_a, origin_a, net::SiteForCookies()); LoadAndVerifyCached(url, info_a, false /* was_cached */); // Load again with a different isolation key. The cached entry should not be // loaded. GURL url_b = test_server()->GetURL("/main.html"); url::Origin origin_b = url::Origin::Create(url_b); - net::IsolationInfo info_b = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateFrameOnly, origin_b, origin_b, - net::SiteForCookies()); + net::IsolationInfo info_b = + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kSubFrame, + origin_b, origin_b, net::SiteForCookies()); LoadAndVerifyCached(url_b, info_b, false /* was_cached */); // Load again with the same isolation key. The cached entry should be loaded. @@ -6541,17 +6541,17 @@ GURL url = test_server()->GetURL("/resource"); url::Origin origin_a = url::Origin::Create(GURL("http://a.test/")); - net::IsolationInfo info_a = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, origin_a, origin_a, - net::SiteForCookies()); + net::IsolationInfo info_a = + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther, + origin_a, origin_a, net::SiteForCookies()); LoadAndVerifyCached(url, info_a, false /* was_cached */); // Load again with a different isolation key. The cached entry should not be // loaded. url::Origin origin_b = url::Origin::Create(GURL("http://b.test/")); - net::IsolationInfo info_b = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, origin_a, origin_b, - net::SiteForCookies()); + net::IsolationInfo info_b = + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther, + origin_a, origin_b, net::SiteForCookies()); LoadAndVerifyCached(url, info_b, false /* was_cached */); } @@ -6563,7 +6563,7 @@ test_server()->GetURL("othersite.test", "/title1.html").spec()); url::Origin origin = url::Origin::Create(url); net::IsolationInfo info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, origin, origin, + net::IsolationInfo::RequestType::kMainFrame, origin, origin, net::SiteForCookies::FromOrigin(origin)); LoadAndVerifyCached(url, info, false /* was_cached */, true /* expect_redirect */); @@ -6578,7 +6578,7 @@ // A non-navigation resource with the same key and url should also be cached. net::IsolationInfo non_navigation_redirected_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, redirected_origin, + net::IsolationInfo::RequestType::kOther, redirected_origin, redirected_origin, net::SiteForCookies::FromOrigin(redirected_origin)); LoadAndVerifyCached(redirected_url, non_navigation_redirected_info,
diff --git a/services/network/origin_policy/origin_policy_fetcher.cc b/services/network/origin_policy/origin_policy_fetcher.cc index 04593e5..7690914 100644 --- a/services/network/origin_policy/origin_policy_fetcher.cc +++ b/services/network/origin_policy/origin_policy_fetcher.cc
@@ -29,8 +29,8 @@ DCHECK(callback_); DCHECK(!isolation_info.IsEmpty()); // Policy requests shouldn't update frame origins on redirect. - DCHECK_EQ(net::IsolationInfo::RedirectMode::kUpdateNothing, - isolation_info.redirect_mode()); + DCHECK_EQ(net::IsolationInfo::RequestType::kOther, + isolation_info.request_type()); // While they use CredentialsMode::kOmit, so it shouldn't matter, policy // requests should have a null SiteForCookies. DCHECK(isolation_info.site_for_cookies().IsNull());
diff --git a/services/network/origin_policy/origin_policy_manager_unittest.cc b/services/network/origin_policy/origin_policy_manager_unittest.cc index 37a759c..2aa762c 100644 --- a/services/network/origin_policy/origin_policy_manager_unittest.cc +++ b/services/network/origin_policy/origin_policy_manager_unittest.cc
@@ -51,9 +51,8 @@ const base::Optional<std::string>& header) { manager_->RetrieveOriginPolicy( origin, - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, origin, origin, - net::SiteForCookies()), + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther, + origin, origin, net::SiteForCookies()), header, base::BindOnce(&OriginPolicyManagerTest::Callback, base::Unretained(this)));
diff --git a/services/network/public/cpp/isolation_info_mojom_traits.cc b/services/network/public/cpp/isolation_info_mojom_traits.cc index 8f797b5..b9434b1 100644 --- a/services/network/public/cpp/isolation_info_mojom_traits.cc +++ b/services/network/public/cpp/isolation_info_mojom_traits.cc
@@ -10,39 +10,39 @@ namespace mojo { -bool EnumTraits<network::mojom::IsolationInfoRedirectMode, - net::IsolationInfo::RedirectMode>:: - FromMojom(network::mojom::IsolationInfoRedirectMode redirect_mode, - net::IsolationInfo::RedirectMode* out) { - switch (redirect_mode) { - case network::mojom::IsolationInfoRedirectMode::kUpdateTopFrame: - *out = net::IsolationInfo::RedirectMode::kUpdateTopFrame; +bool EnumTraits<network::mojom::IsolationInfoRequestType, + net::IsolationInfo::RequestType>:: + FromMojom(network::mojom::IsolationInfoRequestType request_type, + net::IsolationInfo::RequestType* out) { + switch (request_type) { + case network::mojom::IsolationInfoRequestType::kMainFrame: + *out = net::IsolationInfo::RequestType::kMainFrame; return true; - case network::mojom::IsolationInfoRedirectMode::kUpdateFrameOnly: - *out = net::IsolationInfo::RedirectMode::kUpdateFrameOnly; + case network::mojom::IsolationInfoRequestType::kSubFrame: + *out = net::IsolationInfo::RequestType::kSubFrame; return true; - case network::mojom::IsolationInfoRedirectMode::kUpdateNothing: - *out = net::IsolationInfo::RedirectMode::kUpdateNothing; + case network::mojom::IsolationInfoRequestType::kOther: + *out = net::IsolationInfo::RequestType::kOther; return true; } return false; } -network::mojom::IsolationInfoRedirectMode EnumTraits< - network::mojom::IsolationInfoRedirectMode, - net::IsolationInfo::RedirectMode>::ToMojom(net::IsolationInfo::RedirectMode - redirect_mode) { - switch (redirect_mode) { - case net::IsolationInfo::RedirectMode::kUpdateTopFrame: - return network::mojom::IsolationInfoRedirectMode::kUpdateTopFrame; - case net::IsolationInfo::RedirectMode::kUpdateFrameOnly: - return network::mojom::IsolationInfoRedirectMode::kUpdateFrameOnly; - case net::IsolationInfo::RedirectMode::kUpdateNothing: - return network::mojom::IsolationInfoRedirectMode::kUpdateNothing; +network::mojom::IsolationInfoRequestType EnumTraits< + network::mojom::IsolationInfoRequestType, + net::IsolationInfo::RequestType>::ToMojom(net::IsolationInfo::RequestType + request_type) { + switch (request_type) { + case net::IsolationInfo::RequestType::kMainFrame: + return network::mojom::IsolationInfoRequestType::kMainFrame; + case net::IsolationInfo::RequestType::kSubFrame: + return network::mojom::IsolationInfoRequestType::kSubFrame; + case net::IsolationInfo::RequestType::kOther: + return network::mojom::IsolationInfoRequestType::kOther; } NOTREACHED(); - return network::mojom::IsolationInfoRedirectMode::kUpdateNothing; + return network::mojom::IsolationInfoRequestType::kOther; } bool StructTraits<network::mojom::IsolationInfoDataView, net::IsolationInfo>:: @@ -50,7 +50,7 @@ base::Optional<url::Origin> top_frame_origin; base::Optional<url::Origin> frame_origin; net::SiteForCookies site_for_cookies; - net::IsolationInfo::RedirectMode redirect_mode; + net::IsolationInfo::RequestType request_type; if (!data.ReadTopFrameOrigin(&top_frame_origin)) { network::debug::SetDeserializationCrashKeyString("isolation_top_origin"); @@ -61,12 +61,12 @@ return false; } if (!data.ReadSiteForCookies(&site_for_cookies) || - !data.ReadRedirectMode(&redirect_mode)) { + !data.ReadRequestType(&request_type)) { return false; } base::Optional<net::IsolationInfo> isolation_info = - net::IsolationInfo::CreateIfConsistent(redirect_mode, top_frame_origin, + net::IsolationInfo::CreateIfConsistent(request_type, top_frame_origin, frame_origin, site_for_cookies, data.opaque_and_non_transient()); if (!isolation_info) {
diff --git a/services/network/public/cpp/isolation_info_mojom_traits.h b/services/network/public/cpp/isolation_info_mojom_traits.h index fee49ca..44a123f 100644 --- a/services/network/public/cpp/isolation_info_mojom_traits.h +++ b/services/network/public/cpp/isolation_info_mojom_traits.h
@@ -17,20 +17,20 @@ template <> struct COMPONENT_EXPORT(NETWORK_CPP_BASE) - EnumTraits<network::mojom::IsolationInfoRedirectMode, - net::IsolationInfo::RedirectMode> { - static network::mojom::IsolationInfoRedirectMode ToMojom( - net::IsolationInfo::RedirectMode redirect_mode); - static bool FromMojom(network::mojom::IsolationInfoRedirectMode redirect_mode, - net::IsolationInfo::RedirectMode* out); + EnumTraits<network::mojom::IsolationInfoRequestType, + net::IsolationInfo::RequestType> { + static network::mojom::IsolationInfoRequestType ToMojom( + net::IsolationInfo::RequestType request_type); + static bool FromMojom(network::mojom::IsolationInfoRequestType request_type, + net::IsolationInfo::RequestType* out); }; template <> struct COMPONENT_EXPORT(NETWORK_CPP_BASE) StructTraits<network::mojom::IsolationInfoDataView, net::IsolationInfo> { - static net::IsolationInfo::RedirectMode redirect_mode( + static net::IsolationInfo::RequestType request_type( const net::IsolationInfo& input) { - return input.redirect_mode(); + return input.request_type(); } static const base::Optional<url::Origin>& top_frame_origin(
diff --git a/services/network/public/cpp/isolation_info_mojom_traits_unittest.cc b/services/network/public/cpp/isolation_info_mojom_traits_unittest.cc index f79d4a5..7e2b034d 100644 --- a/services/network/public/cpp/isolation_info_mojom_traits_unittest.cc +++ b/services/network/public/cpp/isolation_info_mojom_traits_unittest.cc
@@ -24,21 +24,20 @@ net::IsolationInfo(), net::IsolationInfo::CreateTransient(), net::IsolationInfo::CreateOpaqueAndNonTransient(), - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, kOrigin1, kOrigin1, - net::SiteForCookies::FromOrigin(kOrigin1)), - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateFrameOnly, kOrigin1, - kOrigin2, net::SiteForCookies::FromOrigin(kOrigin1)), - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateFrameOnly, kOrigin1, - kOrigin2, net::SiteForCookies()), - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, kOrigin1, kOrigin1, - net::SiteForCookies::FromOrigin(kOrigin1)), - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, url::Origin(), - url::Origin(), net::SiteForCookies()), + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kMainFrame, + kOrigin1, kOrigin1, + net::SiteForCookies::FromOrigin(kOrigin1)), + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kSubFrame, + kOrigin1, kOrigin2, + net::SiteForCookies::FromOrigin(kOrigin1)), + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kSubFrame, + kOrigin1, kOrigin2, net::SiteForCookies()), + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther, + kOrigin1, kOrigin1, + net::SiteForCookies::FromOrigin(kOrigin1)), + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther, + url::Origin(), url::Origin(), + net::SiteForCookies()), }; for (auto original : keys) {
diff --git a/services/network/public/cpp/simple_url_loader_unittest.cc b/services/network/public/cpp/simple_url_loader_unittest.cc index 5b0757e..0e2479b8 100644 --- a/services/network/public/cpp/simple_url_loader_unittest.cc +++ b/services/network/public/cpp/simple_url_loader_unittest.cc
@@ -703,9 +703,9 @@ network::ResourceRequest::TrustedParams(); url::Origin request_origin = url::Origin::Create(url); resource_request->trusted_params->isolation_info = - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, request_origin, - request_origin, net::SiteForCookies()); + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther, + request_origin, request_origin, + net::SiteForCookies()); return std::make_unique<SimpleLoaderTestHelper>(std::move(resource_request), GetParam()); }
diff --git a/services/network/public/cpp/url_request_mojom_traits_unittest.cc b/services/network/public/cpp/url_request_mojom_traits_unittest.cc index 7daeae3..abbd67bd 100644 --- a/services/network/public/cpp/url_request_mojom_traits_unittest.cc +++ b/services/network/public/cpp/url_request_mojom_traits_unittest.cc
@@ -87,7 +87,7 @@ original.trusted_params = ResourceRequest::TrustedParams(); original.trusted_params->isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, + net::IsolationInfo::RequestType::kMainFrame, url::Origin::Create(original.url), url::Origin::Create(original.url), original.site_for_cookies); original.trusted_params->disable_secure_dns = true;
diff --git a/services/network/public/mojom/isolation_info.mojom b/services/network/public/mojom/isolation_info.mojom index eb00944..cc25710 100644 --- a/services/network/public/mojom/isolation_info.mojom +++ b/services/network/public/mojom/isolation_info.mojom
@@ -7,19 +7,19 @@ import "services/network/public/mojom/site_for_cookies.mojom"; import "url/mojom/origin.mojom"; -// Mapped to net::IsolationInfo::RedirectMode, which is what consumers should +// Mapped to net::IsolationInfo::RequestType, which is what consumers should // be using instead of using this directly. -enum IsolationInfoRedirectMode { - kUpdateTopFrame, - kUpdateFrameOnly, - kUpdateNothing, +enum IsolationInfoRequestType { + kMainFrame, + kSubFrame, + kOther, }; // Mapped to net::IsolationInfo. struct IsolationInfo { // These fields should not be used directly, but rather through the mapped // net::IsolationInfo. - IsolationInfoRedirectMode redirect_mode; + IsolationInfoRequestType request_type; url.mojom.Origin? top_frame_origin; url.mojom.Origin? frame_origin; bool opaque_and_non_transient;
diff --git a/services/network/url_loader.cc b/services/network/url_loader.cc index 6589345..794fcd3 100644 --- a/services/network/url_loader.cc +++ b/services/network/url_loader.cc
@@ -548,9 +548,9 @@ } } else if (factory_params_->automatically_assign_isolation_info) { url::Origin origin = url::Origin::Create(request.url); - url_request_->set_isolation_info(net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, origin, origin, - net::SiteForCookies())); + url_request_->set_isolation_info( + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther, + origin, origin, net::SiteForCookies())); } if (url_request_context_->require_network_isolation_key()) @@ -1366,7 +1366,7 @@ // Create IsolationInfo as if this were an uncredentialed subresource // request of the original URL. net::IsolationInfo isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, + net::IsolationInfo::RequestType::kOther, url_request_->isolation_info().top_frame_origin().value(), url_request_->isolation_info().frame_origin().value(), net::SiteForCookies());
diff --git a/services/network/url_loader_factory.cc b/services/network/url_loader_factory.cc index 75ae848..7b9ec04 100644 --- a/services/network/url_loader_factory.cc +++ b/services/network/url_loader_factory.cc
@@ -81,8 +81,8 @@ DCHECK_NE(mojom::kInvalidProcessId, params_->process_id); DCHECK(!params_->factory_override); // Only non-navigation IsolationInfos should be bound to URLLoaderFactories. - DCHECK_EQ(net::IsolationInfo::RedirectMode::kUpdateNothing, - params_->isolation_info.redirect_mode()); + DCHECK_EQ(net::IsolationInfo::RequestType::kOther, + params_->isolation_info.request_type()); DCHECK(!params_->automatically_assign_isolation_info || params_->isolation_info.IsEmpty());
diff --git a/services/network/url_loader_unittest.cc b/services/network/url_loader_unittest.cc index 7c80c65d..4385e39 100644 --- a/services/network/url_loader_unittest.cc +++ b/services/network/url_loader_unittest.cc
@@ -5240,7 +5240,7 @@ CreateResourceRequest("GET", server.GetURL("/with_policy")); // This is what the IsolationInfo for a main frame will normally look like. request.trusted_params->isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateTopFrame, + net::IsolationInfo::RequestType::kMainFrame, test_server_origin /* top_frame_origin */, test_server_origin /* frame_origin */, net::SiteForCookies::FromOrigin(test_server_origin)); @@ -5284,13 +5284,13 @@ // Check IsolationInfo sent to the OriginPolicyManager. Both origins should // be the same as the |isolation_info| field of - // ResourceRequest::trusted_params, but the RedirectMode should be - // kUpdateNothing, and the SiteForCookies should be null. + // ResourceRequest::trusted_params, but the RequestType should be + // kOther, and the SiteForCookies should be null. EXPECT_TRUE( - net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, - test_server_origin /* top_frame_origin */, - test_server_origin /* frame_origin */, net::SiteForCookies()) + net::IsolationInfo::Create(net::IsolationInfo::RequestType::kOther, + test_server_origin /* top_frame_origin */, + test_server_origin /* frame_origin */, + net::SiteForCookies()) .IsEqualForTesting(mock_origin_policy_manager.isolation_info())); } @@ -5384,7 +5384,7 @@ // IsolationInfo used for the ResourceRequest. This is what the // IsolationInfo for a cross-origin subframe will normally look like. request.trusted_params->isolation_info = net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateFrameOnly, top_frame_origin, + net::IsolationInfo::RequestType::kSubFrame, top_frame_origin, test_server_origin /* frame_origin */, net::SiteForCookies()); request.site_for_cookies = request.trusted_params->isolation_info.site_for_cookies(); @@ -5418,11 +5418,11 @@ // Check IsolationInfo sent to the OriginPolicyManager. Both origins should // be the same as the |isolation_info| field of - // ResourceRequest::trusted_params, but the RedirectMode should be - // kUpdateNothing, and the SiteForCookies should be null. + // ResourceRequest::trusted_params, but the RequestType should be + // kOther, and the SiteForCookies should be null. EXPECT_TRUE( net::IsolationInfo::Create( - net::IsolationInfo::RedirectMode::kUpdateNothing, top_frame_origin, + net::IsolationInfo::RequestType::kOther, top_frame_origin, test_server_origin /* frame_origin */, net::SiteForCookies()) .IsEqualForTesting(mock_origin_policy_manager.isolation_info())); }
diff --git a/services/network/websocket_factory.cc b/services/network/websocket_factory.cc index f5525ded..b7c8a8a 100644 --- a/services/network/websocket_factory.cc +++ b/services/network/websocket_factory.cc
@@ -41,10 +41,10 @@ mojo::PendingRemote<mojom::WebSocketHandshakeClient> handshake_client, mojo::PendingRemote<mojom::AuthenticationHandler> auth_handler, mojo::PendingRemote<mojom::TrustedHeaderClient> header_client) { - if (isolation_info.redirect_mode() != - net::IsolationInfo::RedirectMode::kUpdateNothing) { + if (isolation_info.request_type() != + net::IsolationInfo::RequestType::kOther) { mojo::ReportBadMessage( - "WebSocket's IsolationInfo::RedirectMode must be kUpdateNothing"); + "WebSocket's IsolationInfo::RequestType must be kOther"); return; }
diff --git a/services/tracing/public/cpp/perfetto/trace_event_data_source.cc b/services/tracing/public/cpp/perfetto/trace_event_data_source.cc index 185a5da..c5a3b7b 100644 --- a/services/tracing/public/cpp/perfetto/trace_event_data_source.cc +++ b/services/tracing/public/cpp/perfetto/trace_event_data_source.cc
@@ -119,11 +119,14 @@ // Helper class used to ensure no tasks are posted while // TraceEventDataSource::lock_ is held. -class AutoLockWithDeferredTaskPosting { +class SCOPED_LOCKABLE AutoLockWithDeferredTaskPosting { public: explicit AutoLockWithDeferredTaskPosting(base::Lock& lock) + EXCLUSIVE_LOCK_FUNCTION(lock) : autolock_(lock) {} + ~AutoLockWithDeferredTaskPosting() UNLOCK_FUNCTION() = default; + private: // The ordering is important: |defer_task_posting_| must be destroyed // after |autolock_| to ensure the lock is not held when any deferred @@ -159,7 +162,10 @@ void TraceEventMetadataSource::AddGeneratorFunction( JsonMetadataGeneratorFunction generator) { DCHECK(origin_task_runner_->RunsTasksInCurrentSequence()); - json_generator_functions_.push_back(generator); + { + base::AutoLock lock(lock_); + json_generator_functions_.push_back(generator); + } // An EventBundle is created when nullptr is passed. GenerateJsonMetadataFromGenerator(generator, nullptr); } @@ -167,14 +173,20 @@ void TraceEventMetadataSource::AddGeneratorFunction( MetadataGeneratorFunction generator) { DCHECK(origin_task_runner_->RunsTasksInCurrentSequence()); - generator_functions_.push_back(generator); + { + base::AutoLock lock(lock_); + generator_functions_.push_back(generator); + } GenerateMetadataFromGenerator(generator); } void TraceEventMetadataSource::AddGeneratorFunction( PacketGeneratorFunction generator) { DCHECK(origin_task_runner_->RunsTasksInCurrentSequence()); - packet_generator_functions_.push_back(generator); + { + base::AutoLock lock(lock_); + packet_generator_functions_.push_back(generator); + } GenerateMetadataPacket(generator); } @@ -282,7 +294,12 @@ DCHECK(!privacy_filtering_enabled_); auto merged_metadata = std::make_unique<base::DictionaryValue>(); - for (auto& generator : json_generator_functions_) { + std::vector<JsonMetadataGeneratorFunction> json_generators; + { + base::AutoLock lock(lock_); + json_generators = json_generator_functions_; + } + for (auto& generator : json_generators) { std::unique_ptr<base::DictionaryValue> metadata_dict = generator.Run(); if (!metadata_dict) { continue;
diff --git a/services/tracing/public/cpp/perfetto/trace_event_data_source.h b/services/tracing/public/cpp/perfetto/trace_event_data_source.h index a319cbc..dfbdd62 100644 --- a/services/tracing/public/cpp/perfetto/trace_event_data_source.h +++ b/services/tracing/public/cpp/perfetto/trace_event_data_source.h
@@ -122,19 +122,20 @@ // TODO(crbug.com/1138893): Change annotations to GUARDED_BY base::Lock lock_; std::vector<JsonMetadataGeneratorFunction> json_generator_functions_ - GUARDED_BY_FIXME(lock_); - std::vector<MetadataGeneratorFunction> generator_functions_ - GUARDED_BY_FIXME(lock_); + GUARDED_BY(lock_); + std::vector<MetadataGeneratorFunction> generator_functions_ GUARDED_BY(lock_); std::vector<PacketGeneratorFunction> packet_generator_functions_ + GUARDED_BY(lock_); + + const scoped_refptr<base::SequencedTaskRunner> origin_task_runner_ GUARDED_BY_FIXME(lock_); - const scoped_refptr<base::SequencedTaskRunner> origin_task_runner_; - - std::unique_ptr<perfetto::TraceWriter> trace_writer_; - bool privacy_filtering_enabled_ = false; - std::string chrome_config_; - std::unique_ptr<base::trace_event::TraceConfig> parsed_chrome_config_; - bool emit_metadata_at_start_ = false; + std::unique_ptr<perfetto::TraceWriter> trace_writer_ GUARDED_BY_FIXME(lock_); + bool privacy_filtering_enabled_ GUARDED_BY_FIXME(lock_) = false; + std::string chrome_config_ GUARDED_BY(lock_); + std::unique_ptr<base::trace_event::TraceConfig> parsed_chrome_config_ + GUARDED_BY(lock_); + bool emit_metadata_at_start_ GUARDED_BY(lock_) = false; DISALLOW_COPY_AND_ASSIGN(TraceEventMetadataSource); };
diff --git a/testing/buildbot/chromium.win.json b/testing/buildbot/chromium.win.json index dea654e..db90b00 100644 --- a/testing/buildbot/chromium.win.json +++ b/testing/buildbot/chromium.win.json
@@ -1830,7 +1830,7 @@ "dimension_sets": [ { "cpu": "x86-64", - "os": "Windows-10-15063" + "os": "Windows-10-18363" } ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com",
diff --git a/testing/buildbot/filters/chromeos.msan.browser_tests.oobe_negative.filter b/testing/buildbot/filters/chromeos.msan.browser_tests.oobe_negative.filter index 604e196..9521787 100644 --- a/testing/buildbot/filters/chromeos.msan.browser_tests.oobe_negative.filter +++ b/testing/buildbot/filters/chromeos.msan.browser_tests.oobe_negative.filter
@@ -96,8 +96,6 @@ -OobeTest.* -OobeZeroTouchInteractiveUITest.* -PackagedLicenseScreenTest.* --ParentalHandoffScreenBrowserTest.* --ParentalHandoffScreenChildBrowserTest.* -PolicyProvidedCertsOnUserSessionInitTest.* -PresetPolicyDeviceDisablingTest.* -PrimaryUserPoliciesProxiedTest.*
diff --git a/testing/buildbot/filters/chromeos.msan.browser_tests.oobe_positive.filter b/testing/buildbot/filters/chromeos.msan.browser_tests.oobe_positive.filter index 4ed8b56..9d978c3 100644 --- a/testing/buildbot/filters/chromeos.msan.browser_tests.oobe_positive.filter +++ b/testing/buildbot/filters/chromeos.msan.browser_tests.oobe_positive.filter
@@ -96,8 +96,6 @@ OobeTest.* OobeZeroTouchInteractiveUITest.* PackagedLicenseScreenTest.* -ParentalHandoffScreenBrowserTest.* -ParentalHandoffScreenChildBrowserTest.* PolicyProvidedCertsOnUserSessionInitTest.* PresetPolicyDeviceDisablingTest.* PrimaryUserPoliciesProxiedTest.*
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl index faf2ba7..5b90aa3 100644 --- a/testing/buildbot/test_suite_exceptions.pyl +++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -548,14 +548,6 @@ '--disable-features=WebRTC-H264WithOpenH264FFmpeg', ], 'swarming': { - # TODO(crbug.com/1124829): Remove this exception when moving browser_tests - # to 1909. - 'dimension_sets': [ - { - 'cpu': 'x86-64', - 'os': 'Windows-10-15063', - }, - ], # This is for slow test execution that often becomes a critical path of # swarming jobs. crbug.com/868114 'shards': 15,
diff --git a/testing/test.gni b/testing/test.gni index 8904ee6..c7951fa 100644 --- a/testing/test.gni +++ b/testing/test.gni
@@ -432,7 +432,13 @@ ] if (_use_ash_chrome) { - executable_args += [ "--ash-chrome-version=for_bots" ] + if (also_build_ash_chrome) { + executable_args += [ "--ash-chrome-path=ash_clang_x64/chrome" ] + } else { + # TODO(crbug.com/1129223): Remove in ~1week after + # http://crrev.com/c/2487696 lands and is not reverted. + executable_args += [ "--ash-chrome-version=for_bots" ] + } } if (is_asan) {
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index fd01e94a8..c9ff9827 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -1708,6 +1708,24 @@ ] } ], + "ClientStorageAccessContextAuditing": [ + { + "platforms": [ + "chromeos", + "linux", + "mac", + "windows" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "ClientStorageAccessContextAuditing" + ] + } + ] + } + ], "CodeCacheDeletionWithoutFilter": [ { "platforms": [ @@ -7966,6 +7984,22 @@ ] } ], + "WebRtcLibvpxEncodeNV12": [ + { + "platforms": [ + "chromeos", + "mac" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "WebRtcLibvpxEncodeNV12" + ] + } + ] + } + ], "WebSocketReassembleShortMessages": [ { "platforms": [
diff --git a/third_party/abseil-cpp/CMake/AbseilDll.cmake b/third_party/abseil-cpp/CMake/AbseilDll.cmake index d67c439..e0ff249 100644 --- a/third_party/abseil-cpp/CMake/AbseilDll.cmake +++ b/third_party/abseil-cpp/CMake/AbseilDll.cmake
@@ -196,6 +196,7 @@ "strings/internal/charconv_parse.cc" "strings/internal/charconv_parse.h" "strings/internal/stl_type_traits.h" + "strings/internal/string_constant.h" "strings/match.cc" "strings/match.h" "strings/numbers.cc"
diff --git a/third_party/abseil-cpp/README.chromium b/third_party/abseil-cpp/README.chromium index fda94723..24681db 100644 --- a/third_party/abseil-cpp/README.chromium +++ b/third_party/abseil-cpp/README.chromium
@@ -4,7 +4,7 @@ License: Apache 2.0 License File: LICENSE Version: 0 -Revision: f3f785ab59478dd0312bf1b5df65d380650bf0dc +Revision: 4b915e70929ca2d6152240facc83d3d38c5d5f28 Security Critical: yes Description:
diff --git a/third_party/abseil-cpp/absl/abseil.podspec.gen.py b/third_party/abseil-cpp/absl/abseil.podspec.gen.py index 6aefb79..63752980 100755 --- a/third_party/abseil-cpp/absl/abseil.podspec.gen.py +++ b/third_party/abseil-cpp/absl/abseil.podspec.gen.py
@@ -40,8 +40,8 @@ 'USE_HEADERMAP' => 'NO', 'ALWAYS_SEARCH_USER_PATHS' => 'NO', } - s.ios.deployment_target = '7.0' - s.osx.deployment_target = '10.9' + s.ios.deployment_target = '9.0' + s.osx.deployment_target = '10.10' s.tvos.deployment_target = '9.0' s.watchos.deployment_target = '2.0' """
diff --git a/third_party/abseil-cpp/absl/base/attributes.h b/third_party/abseil-cpp/absl/base/attributes.h index 046fbea3..f1d3cfe4 100644 --- a/third_party/abseil-cpp/absl/base/attributes.h +++ b/third_party/abseil-cpp/absl/base/attributes.h
@@ -607,6 +607,7 @@ // When used with unsupported compilers, the ABSL_FALLTHROUGH_INTENDED macro // has no effect on diagnostics. In any case this macro has no effect on runtime // behavior and performance of code. + #ifdef ABSL_FALLTHROUGH_INTENDED #error "ABSL_FALLTHROUGH_INTENDED should not be defined." #endif
diff --git a/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc b/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc index c055f75d..c260ff1 100644 --- a/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc +++ b/third_party/abseil-cpp/absl/base/internal/throw_delegate.cc
@@ -18,6 +18,7 @@ #include <functional> #include <new> #include <stdexcept> + #include "absl/base/config.h" #include "absl/base/internal/raw_logging.h" @@ -25,83 +26,186 @@ ABSL_NAMESPACE_BEGIN namespace base_internal { +// NOTE: The various STL exception throwing functions are placed within the +// #ifdef blocks so the symbols aren't exposed on platforms that don't support +// them, such as the Android NDK. For example, ANGLE fails to link when building +// within AOSP without them, since the STL functions don't exist. namespace { +#ifdef ABSL_HAVE_EXCEPTIONS template <typename T> [[noreturn]] void Throw(const T& error) { -#ifdef ABSL_HAVE_EXCEPTIONS throw error; -#else - ABSL_RAW_LOG(FATAL, "%s", error.what()); - std::abort(); -#endif } +#endif } // namespace void ThrowStdLogicError(const std::string& what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::logic_error(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str()); + std::abort(); +#endif } void ThrowStdLogicError(const char* what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::logic_error(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg); + std::abort(); +#endif } void ThrowStdInvalidArgument(const std::string& what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::invalid_argument(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str()); + std::abort(); +#endif } void ThrowStdInvalidArgument(const char* what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::invalid_argument(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg); + std::abort(); +#endif } void ThrowStdDomainError(const std::string& what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::domain_error(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str()); + std::abort(); +#endif } void ThrowStdDomainError(const char* what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::domain_error(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg); + std::abort(); +#endif } void ThrowStdLengthError(const std::string& what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::length_error(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str()); + std::abort(); +#endif } void ThrowStdLengthError(const char* what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::length_error(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg); + std::abort(); +#endif } void ThrowStdOutOfRange(const std::string& what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::out_of_range(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str()); + std::abort(); +#endif } void ThrowStdOutOfRange(const char* what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::out_of_range(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg); + std::abort(); +#endif } void ThrowStdRuntimeError(const std::string& what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::runtime_error(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str()); + std::abort(); +#endif } void ThrowStdRuntimeError(const char* what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::runtime_error(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg); + std::abort(); +#endif } void ThrowStdRangeError(const std::string& what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::range_error(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str()); + std::abort(); +#endif } void ThrowStdRangeError(const char* what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::range_error(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg); + std::abort(); +#endif } void ThrowStdOverflowError(const std::string& what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::overflow_error(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str()); + std::abort(); +#endif } void ThrowStdOverflowError(const char* what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::overflow_error(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg); + std::abort(); +#endif } void ThrowStdUnderflowError(const std::string& what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::underflow_error(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg.c_str()); + std::abort(); +#endif } void ThrowStdUnderflowError(const char* what_arg) { +#ifdef ABSL_HAVE_EXCEPTIONS Throw(std::underflow_error(what_arg)); +#else + ABSL_RAW_LOG(FATAL, "%s", what_arg); + std::abort(); +#endif } -void ThrowStdBadFunctionCall() { Throw(std::bad_function_call()); } +void ThrowStdBadFunctionCall() { +#ifdef ABSL_HAVE_EXCEPTIONS + Throw(std::bad_function_call()); +#else + std::abort(); +#endif +} -void ThrowStdBadAlloc() { Throw(std::bad_alloc()); } +void ThrowStdBadAlloc() { +#ifdef ABSL_HAVE_EXCEPTIONS + Throw(std::bad_alloc()); +#else + std::abort(); +#endif +} } // namespace base_internal ABSL_NAMESPACE_END
diff --git a/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h b/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h index ec13a2f..67364b7 100644 --- a/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +++ b/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h
@@ -1065,7 +1065,9 @@ } iterator insert(const_iterator, node_type&& node) { - return insert(std::move(node)).first; + auto res = insert(std::move(node)); + node = std::move(res.node); + return res.position; } // This overload kicks in if we can deduce the key from args. This enables us
diff --git a/third_party/abseil-cpp/absl/container/internal/raw_hash_set_test.cc b/third_party/abseil-cpp/absl/container/internal/raw_hash_set_test.cc index 6210eb64..33d2773 100644 --- a/third_party/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +++ b/third_party/abseil-cpp/absl/container/internal/raw_hash_set_test.cc
@@ -1711,6 +1711,26 @@ EXPECT_FALSE(node); } +TEST(Nodes, HintInsert) { + IntTable t = {1, 2, 3}; + auto node = t.extract(1); + EXPECT_THAT(t, UnorderedElementsAre(2, 3)); + auto it = t.insert(t.begin(), std::move(node)); + EXPECT_THAT(t, UnorderedElementsAre(1, 2, 3)); + EXPECT_EQ(*it, 1); + EXPECT_FALSE(node); + + node = t.extract(2); + EXPECT_THAT(t, UnorderedElementsAre(1, 3)); + // reinsert 2 to make the next insert fail. + t.insert(2); + EXPECT_THAT(t, UnorderedElementsAre(1, 2, 3)); + it = t.insert(t.begin(), std::move(node)); + EXPECT_EQ(*it, 2); + // The node was not emptied by the insert call. + EXPECT_TRUE(node); +} + IntTable MakeSimpleTable(size_t size) { IntTable t; while (t.size() < size) t.insert(t.size());
diff --git a/third_party/abseil-cpp/absl/flags/CMakeLists.txt b/third_party/abseil-cpp/absl/flags/CMakeLists.txt index 28bd5a8..88551914 100644 --- a/third_party/abseil-cpp/absl/flags/CMakeLists.txt +++ b/third_party/abseil-cpp/absl/flags/CMakeLists.txt
@@ -183,6 +183,7 @@ DEPS absl::base absl::config + absl::flags_commandlineflag absl::flags_commandlineflag_internal absl::flags_config absl::flags_marshalling
diff --git a/third_party/abseil-cpp/absl/hash/internal/hash.h b/third_party/abseil-cpp/absl/hash/internal/hash.h index 9e608f7..b0132da 100644 --- a/third_party/abseil-cpp/absl/hash/internal/hash.h +++ b/third_party/abseil-cpp/absl/hash/internal/hash.h
@@ -855,7 +855,14 @@ // On other platforms this is still going to be non-deterministic but most // probably per-build and not per-process. ABSL_ATTRIBUTE_ALWAYS_INLINE static uint64_t Seed() { +#if (!defined(__clang__) || __clang_major__ > 11) && \ + !defined(__apple_build_version__) + return static_cast<uint64_t>(reinterpret_cast<uintptr_t>(&kSeed)); +#else + // Workaround the absence of + // https://github.com/llvm/llvm-project/commit/bc15bf66dcca76cc06fe71fca35b74dc4d521021. return static_cast<uint64_t>(reinterpret_cast<uintptr_t>(kSeed)); +#endif } static const void* const kSeed;
diff --git a/third_party/abseil-cpp/absl/status/CMakeLists.txt b/third_party/abseil-cpp/absl/status/CMakeLists.txt index 6672855..f0d798a 100644 --- a/third_party/abseil-cpp/absl/status/CMakeLists.txt +++ b/third_party/abseil-cpp/absl/status/CMakeLists.txt
@@ -64,6 +64,7 @@ COPTS ${ABSL_DEFAULT_COPTS} DEPS + absl::status absl::core_headers absl::raw_logging_internal absl::type_traits
diff --git a/third_party/abseil-cpp/absl/strings/BUILD.bazel b/third_party/abseil-cpp/absl/strings/BUILD.bazel index 64a13ce..30a8dd2 100644 --- a/third_party/abseil-cpp/absl/strings/BUILD.bazel +++ b/third_party/abseil-cpp/absl/strings/BUILD.bazel
@@ -54,6 +54,7 @@ "ascii.h", "charconv.h", "escaping.h", + "internal/string_constant.h", "match.h", "numbers.h", "str_cat.h", @@ -223,6 +224,19 @@ ) cc_test( + name = "string_constant_test", + size = "small", + srcs = ["internal/string_constant_test.cc"], + copts = ABSL_TEST_COPTS, + visibility = ["//visibility:private"], + deps = [ + ":strings", + "//absl/meta:type_traits", + "@com_google_googletest//:gtest_main", + ], +) + +cc_test( name = "string_view_benchmark", srcs = ["string_view_benchmark.cc"], copts = ABSL_TEST_COPTS,
diff --git a/third_party/abseil-cpp/absl/strings/BUILD.gn b/third_party/abseil-cpp/absl/strings/BUILD.gn index 327ee499..44957903 100644 --- a/third_party/abseil-cpp/absl/strings/BUILD.gn +++ b/third_party/abseil-cpp/absl/strings/BUILD.gn
@@ -31,6 +31,7 @@ "ascii.h", "charconv.h", "escaping.h", + "internal/string_constant.h", "match.h", "numbers.h", "str_cat.h",
diff --git a/third_party/abseil-cpp/absl/strings/CMakeLists.txt b/third_party/abseil-cpp/absl/strings/CMakeLists.txt index d6c2126..2b994a71 100644 --- a/third_party/abseil-cpp/absl/strings/CMakeLists.txt +++ b/third_party/abseil-cpp/absl/strings/CMakeLists.txt
@@ -21,6 +21,7 @@ "ascii.h" "charconv.h" "escaping.h" + "internal/string_constant.h" "match.h" "numbers.h" "str_cat.h" @@ -160,6 +161,19 @@ absl_cc_test( NAME + string_constant_test + SRCS + "internal/string_constant_test.cc" + COPTS + ${ABSL_TEST_COPTS} + DEPS + absl::strings + absl::type_traits + gmock_main +) + +absl_cc_test( + NAME string_view_test SRCS "string_view_test.cc"
diff --git a/third_party/abseil-cpp/absl/strings/cord.cc b/third_party/abseil-cpp/absl/strings/cord.cc index 5092fd1..9efd135 100644 --- a/third_party/abseil-cpp/absl/strings/cord.cc +++ b/third_party/abseil-cpp/absl/strings/cord.cc
@@ -241,6 +241,7 @@ absl::InlinedVector<CordRep*, kInlinedVectorSize> pending; while (true) { + assert(!rep->refcount.IsImmortal()); if (rep->tag == CONCAT) { CordRepConcat* rep_concat = rep->concat(); CordRep* right = rep_concat->right; @@ -256,6 +257,7 @@ } } else if (rep->tag == EXTERNAL) { CordRepExternal* rep_external = rep->external(); + assert(rep_external->releaser_invoker != nullptr); rep_external->releaser_invoker(rep_external); rep = nullptr; } else if (rep->tag == SUBSTRING) {
diff --git a/third_party/abseil-cpp/absl/strings/cord.h b/third_party/abseil-cpp/absl/strings/cord.h index 653a118..5d5c897 100644 --- a/third_party/abseil-cpp/absl/strings/cord.h +++ b/third_party/abseil-cpp/absl/strings/cord.h
@@ -79,6 +79,7 @@ #include "absl/meta/type_traits.h" #include "absl/strings/internal/cord_internal.h" #include "absl/strings/internal/resize_uninitialized.h" +#include "absl/strings/internal/string_constant.h" #include "absl/strings/string_view.h" #include "absl/types/optional.h" @@ -624,6 +625,14 @@ return c.HashFragmented(std::move(hash_state)); } + // Create a Cord with the contents of StringConstant<T>::value. + // No allocations will be done and no data will be copied. + // This is an INTERNAL API and subject to change or removal. This API can only + // be used by spelling absl::strings_internal::MakeStringConstant, which is + // also an internal API. + template <typename T> + explicit constexpr Cord(strings_internal::StringConstant<T>); + private: friend class CordTestPeer; friend bool operator==(const Cord& lhs, const Cord& rhs); @@ -655,6 +664,8 @@ InlineRep& operator=(const InlineRep& src); InlineRep& operator=(InlineRep&& src) noexcept; + explicit constexpr InlineRep(cord_internal::InlineData data); + void Swap(InlineRep* rhs); bool empty() const; size_t size() const; @@ -884,6 +895,9 @@ return cord; } +constexpr Cord::InlineRep::InlineRep(cord_internal::InlineData data) + : data_(data) {} + inline Cord::InlineRep::InlineRep(const Cord::InlineRep& src) { data_ = src.data_; } @@ -981,6 +995,18 @@ constexpr inline Cord::Cord() noexcept {} +template <typename T> +constexpr Cord::Cord(strings_internal::StringConstant<T>) + : contents_(strings_internal::StringConstant<T>::value.size() <= + cord_internal::kMaxInline + ? cord_internal::InlineData( + strings_internal::StringConstant<T>::value) + : cord_internal::InlineData(cord_internal::AsTree{ + &cord_internal::ConstInitExternalStorage< + strings_internal::StringConstant<T>>::value, + {}, + cord_internal::kTreeFlag})) {} + inline Cord& Cord::operator=(const Cord& x) { contents_ = x.contents_; return *this;
diff --git a/third_party/abseil-cpp/absl/strings/cord_test.cc b/third_party/abseil-cpp/absl/strings/cord_test.cc index dbed3e9a..7942bfc 100644 --- a/third_party/abseil-cpp/absl/strings/cord_test.cc +++ b/third_party/abseil-cpp/absl/strings/cord_test.cc
@@ -181,6 +181,8 @@ const Cord& c, absl::FunctionRef<void(absl::string_view)> callback) { c.ForEachChunk(callback); } + + static bool IsTree(const Cord& c) { return c.contents_.is_tree(); } }; ABSL_NAMESPACE_END @@ -1627,3 +1629,83 @@ EXPECT_DEATH_IF_SUPPORTED(static_cast<void>(cord.chunk_end()->empty()), ""); EXPECT_DEATH_IF_SUPPORTED(++cord.chunk_end(), ""); } + +class AfterExitCordTester { + public: + bool Set(absl::Cord* cord, absl::string_view expected) { + cord_ = cord; + expected_ = expected; + return true; + } + + ~AfterExitCordTester() { + EXPECT_EQ(*cord_, expected_); + } + private: + absl::Cord* cord_; + absl::string_view expected_; +}; + +template <typename Str> +void TestConstinitConstructor(Str) { + const auto expected = Str::value; + // Defined before `cord` to be destroyed after it. + static AfterExitCordTester exit_tester; // NOLINT + ABSL_CONST_INIT static absl::Cord cord(Str{}); // NOLINT + static bool init_exit_tester = exit_tester.Set(&cord, expected); + (void)init_exit_tester; + + EXPECT_EQ(cord, expected); + // Copy the object and test the copy, and the original. + { + absl::Cord copy = cord; + EXPECT_EQ(copy, expected); + } + // The original still works + EXPECT_EQ(cord, expected); + + // Try making adding more structure to the tree. + { + absl::Cord copy = cord; + std::string expected_copy(expected); + for (int i = 0; i < 10; ++i) { + copy.Append(cord); + absl::StrAppend(&expected_copy, expected); + EXPECT_EQ(copy, expected_copy); + } + } + + // Make sure we are using the right branch during constant evaluation. + EXPECT_EQ(absl::CordTestPeer::IsTree(cord), cord.size() >= 16); + + for (int i = 0; i < 10; ++i) { + // Make a few more Cords from the same global rep. + // This tests what happens when the refcount for it gets below 1. + EXPECT_EQ(expected, absl::Cord(Str{})); + } +} + +constexpr int SimpleStrlen(const char* p) { + return *p ? 1 + SimpleStrlen(p + 1) : 0; +} + +struct ShortView { + constexpr absl::string_view operator()() const { + return absl::string_view("SSO string", SimpleStrlen("SSO string")); + } +}; + +struct LongView { + constexpr absl::string_view operator()() const { + return absl::string_view("String that does not fit SSO.", + SimpleStrlen("String that does not fit SSO.")); + } +}; + + +TEST(Cord, ConstinitConstructor) { + TestConstinitConstructor( + absl::strings_internal::MakeStringConstant(ShortView{})); + TestConstinitConstructor( + absl::strings_internal::MakeStringConstant(LongView{})); +}
diff --git a/third_party/abseil-cpp/absl/strings/internal/cord_internal.h b/third_party/abseil-cpp/absl/strings/internal/cord_internal.h index 00b9baa..aa91a69 100644 --- a/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +++ b/third_party/abseil-cpp/absl/strings/internal/cord_internal.h
@@ -33,14 +33,17 @@ // Wraps std::atomic for reference counting. class Refcount { public: - Refcount() : count_{1} {} - ~Refcount() {} + constexpr Refcount() : count_{kRefIncrement} {} + struct Immortal {}; + explicit constexpr Refcount(Immortal) : count_(kImmortalTag) {} - // Increments the reference count by 1. Imposes no memory ordering. - inline void Increment() { count_.fetch_add(1, std::memory_order_relaxed); } + // Increments the reference count. Imposes no memory ordering. + inline void Increment() { + count_.fetch_add(kRefIncrement, std::memory_order_relaxed); + } // Asserts that the current refcount is greater than 0. If the refcount is - // greater than 1, decrements the reference count by 1. + // greater than 1, decrements the reference count. // // Returns false if there are no references outstanding; true otherwise. // Inserts barriers to ensure that state written before this method returns @@ -48,19 +51,24 @@ // false. inline bool Decrement() { int32_t refcount = count_.load(std::memory_order_acquire); - assert(refcount > 0); - return refcount != 1 && count_.fetch_sub(1, std::memory_order_acq_rel) != 1; + assert(refcount > 0 || refcount & kImmortalTag); + return refcount != kRefIncrement && + count_.fetch_sub(kRefIncrement, std::memory_order_acq_rel) != + kRefIncrement; } // Same as Decrement but expect that refcount is greater than 1. inline bool DecrementExpectHighRefcount() { - int32_t refcount = count_.fetch_sub(1, std::memory_order_acq_rel); - assert(refcount > 0); - return refcount != 1; + int32_t refcount = + count_.fetch_sub(kRefIncrement, std::memory_order_acq_rel); + assert(refcount > 0 || refcount & kImmortalTag); + return refcount != kRefIncrement; } // Returns the current reference count using acquire semantics. - inline int32_t Get() const { return count_.load(std::memory_order_acquire); } + inline int32_t Get() const { + return count_.load(std::memory_order_acquire) >> kImmortalShift; + } // Returns whether the atomic integer is 1. // If the reference count is used in the conventional way, a @@ -70,9 +78,27 @@ // performs the memory barrier needed for the owning thread // to act on the object, knowing that it has exclusive access to the // object. - inline bool IsOne() { return count_.load(std::memory_order_acquire) == 1; } + inline bool IsOne() { + return count_.load(std::memory_order_acquire) == kRefIncrement; + } + + bool IsImmortal() const { + return (count_.load(std::memory_order_relaxed) & kImmortalTag) != 0; + } private: + // We reserve the bottom bit to tag a reference count as immortal. + // By making it `1` we ensure that we never reach `0` when adding/subtracting + // `2`, thus it never looks as if it should be destroyed. + // These are used for the StringConstant constructor where we do not increase + // the refcount at construction time (due to constinit requirements) but we + // will still decrease it at destruction time to avoid branching on Unref. + enum { + kImmortalShift = 1, + kRefIncrement = 1 << kImmortalShift, + kImmortalTag = kRefIncrement - 1 + }; + std::atomic<int32_t> count_; }; @@ -97,6 +123,10 @@ }; struct CordRep { + CordRep() = default; + constexpr CordRep(Refcount::Immortal immortal, size_t l) + : length(l), refcount(immortal), tag(EXTERNAL), data{} {} + // The following three fields have to be less than 32 bytes since // that is the smallest supported flat node size. size_t length; @@ -135,6 +165,12 @@ // External CordReps are allocated together with a type erased releaser. The // releaser is stored in the memory directly following the CordRepExternal. struct CordRepExternal : public CordRep { + CordRepExternal() = default; + explicit constexpr CordRepExternal(absl::string_view str) + : CordRep(Refcount::Immortal{}, str.size()), + base(str.data()), + releaser_invoker(nullptr) {} + const char* base; // Pointer to function that knows how to call and destroy the releaser. ExternalReleaserInvoker releaser_invoker; @@ -178,6 +214,14 @@ } }; +template <typename Str> +struct ConstInitExternalStorage { + ABSL_CONST_INIT static CordRepExternal value; +}; + +template <typename Str> +CordRepExternal ConstInitExternalStorage<Str>::value(Str::value); + enum { kMaxInline = 15, // Tag byte & kMaxInline means we are storing a pointer. @@ -195,9 +239,23 @@ char padding[kMaxInline + 1 - sizeof(absl::cord_internal::CordRep*) - 1]; char tagged_size; }; + +constexpr char GetOrNull(absl::string_view data, size_t pos) { + return pos < data.size() ? data[pos] : '\0'; +} + union InlineData { constexpr InlineData() : as_chars{} {} explicit constexpr InlineData(AsTree tree) : as_tree(tree) {} + explicit constexpr InlineData(absl::string_view chars) + : as_chars{GetOrNull(chars, 0), GetOrNull(chars, 1), + GetOrNull(chars, 2), GetOrNull(chars, 3), + GetOrNull(chars, 4), GetOrNull(chars, 5), + GetOrNull(chars, 6), GetOrNull(chars, 7), + GetOrNull(chars, 8), GetOrNull(chars, 9), + GetOrNull(chars, 10), GetOrNull(chars, 11), + GetOrNull(chars, 12), GetOrNull(chars, 13), + GetOrNull(chars, 14), static_cast<char>(chars.size())} {} AsTree as_tree; char as_chars[kMaxInline + 1];
diff --git a/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h b/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h index 727b2115..267cc0ef 100644 --- a/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +++ b/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h
@@ -133,10 +133,11 @@ #endif // ABSL_INTERNAL_ENABLE_FORMAT_CHECKER - template <FormatConversionCharSet... C, - typename = typename std::enable_if< - AllOf(sizeof...(C) == sizeof...(Args), Contains(Args, - C)...)>::type> + template < + FormatConversionCharSet... C, + typename = typename std::enable_if<sizeof...(C) == sizeof...(Args)>::type, + typename = typename std::enable_if<AllOf(Contains(Args, + C)...)>::type> FormatSpecTemplate(const ExtendedParsedFormat<C...>& pc) // NOLINT : Base(&pc) {} };
diff --git a/third_party/abseil-cpp/absl/strings/internal/string_constant.h b/third_party/abseil-cpp/absl/strings/internal/string_constant.h new file mode 100644 index 0000000..b15f1d9b --- /dev/null +++ b/third_party/abseil-cpp/absl/strings/internal/string_constant.h
@@ -0,0 +1,70 @@ +// Copyright 2020 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#ifndef ABSL_STRINGS_INTERNAL_STRING_CONSTANT_H_ +#define ABSL_STRINGS_INTERNAL_STRING_CONSTANT_H_ + +#include "absl/meta/type_traits.h" +#include "absl/strings/string_view.h" + +namespace absl { +ABSL_NAMESPACE_BEGIN +namespace strings_internal { + +// StringConstant<T> represents a compile time string constant. +// It can be accessed via its `absl::string_view value` static member. +// It is guaranteed that the `string_view` returned has constant `.data()`, +// constant `.size()` and constant `value[i]` for all `0 <= i < .size()` +// +// The `T` is an opaque type. It is guaranteed that different string constants +// will have different values of `T`. This allows users to associate the string +// constant with other static state at compile time. +// +// Instances should be made using the `MakeStringConstant()` factory function +// below. +template <typename T> +struct StringConstant { + private: + // Returns true if `view` points to constant data. + // Otherwise, it can't be constant evaluated. + static constexpr bool ValidateConstant(absl::string_view view) { + return view.empty() || 2 * view[0] != 1; + } + + public: + static constexpr absl::string_view value = T{}(); + constexpr absl::string_view operator()() const { return value; } + + static_assert(ValidateConstant(value), + "The input string_view must point to constant data."); +}; + +template <typename T> +constexpr absl::string_view StringConstant<T>::value; // NOLINT + +// Factory function for `StringConstant` instances. +// It supports callables that have a constexpr default constructor and a +// constexpr operator(). +// It must return an `absl::string_view` or `const char*` pointing to constant +// data. This is validated at compile time. +template <typename T> +constexpr StringConstant<T> MakeStringConstant(T) { + return {}; +} + +} // namespace strings_internal +ABSL_NAMESPACE_END +} // namespace absl + +#endif // ABSL_STRINGS_INTERNAL_STRING_CONSTANT_H_
diff --git a/third_party/abseil-cpp/absl/strings/internal/string_constant_test.cc b/third_party/abseil-cpp/absl/strings/internal/string_constant_test.cc new file mode 100644 index 0000000..392833c --- /dev/null +++ b/third_party/abseil-cpp/absl/strings/internal/string_constant_test.cc
@@ -0,0 +1,60 @@ +// Copyright 2020 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "absl/strings/internal/string_constant.h" + +#include "absl/meta/type_traits.h" +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +namespace { + +using absl::strings_internal::MakeStringConstant; + +struct Callable { + constexpr absl::string_view operator()() const { + return absl::string_view("Callable", 8); + } +}; + +TEST(StringConstant, Traits) { + constexpr auto str = MakeStringConstant(Callable{}); + using T = decltype(str); + + EXPECT_TRUE(std::is_empty<T>::value); + EXPECT_TRUE(std::is_trivial<T>::value); + EXPECT_TRUE(absl::is_trivially_default_constructible<T>::value); + EXPECT_TRUE(absl::is_trivially_copy_constructible<T>::value); + EXPECT_TRUE(absl::is_trivially_move_constructible<T>::value); + EXPECT_TRUE(absl::is_trivially_destructible<T>::value); +} + +TEST(StringConstant, MakeFromCallable) { + constexpr auto str = MakeStringConstant(Callable{}); + using T = decltype(str); + EXPECT_EQ(Callable{}(), T::value); + EXPECT_EQ(Callable{}(), str()); +} + +TEST(StringConstant, MakeFromStringConstant) { + // We want to make sure the StringConstant itself is a valid input to the + // factory function. + constexpr auto str = MakeStringConstant(Callable{}); + constexpr auto str2 = MakeStringConstant(str); + using T = decltype(str2); + EXPECT_EQ(Callable{}(), T::value); + EXPECT_EQ(Callable{}(), str2()); +} + +} // namespace
diff --git a/third_party/abseil-cpp/absl/strings/numbers.cc b/third_party/abseil-cpp/absl/strings/numbers.cc index 68c26dd..3da1059c 100644 --- a/third_party/abseil-cpp/absl/strings/numbers.cc +++ b/third_party/abseil-cpp/absl/strings/numbers.cc
@@ -736,9 +736,18 @@ X / 35, X / 36, \ } +// This kVmaxOverBase is generated with +// for (int base = 2; base < 37; ++base) { +// absl::uint128 max = std::numeric_limits<absl::uint128>::max(); +// auto result = max / base; +// std::cout << " MakeUint128(" << absl::Uint128High64(result) << "u, " +// << absl::Uint128Low64(result) << "u),\n"; +// } +// See https://godbolt.org/z/aneYsb +// // uint128& operator/=(uint128) is not constexpr, so hardcode the resulting // array to avoid a static initializer. -template <> +template<> const uint128 LookupTables<uint128>::kVmaxOverBase[] = { 0, 0, @@ -779,6 +788,111 @@ MakeUint128(512409557603043100u, 8198552921648689607u), }; +// This kVmaxOverBase generated with +// for (int base = 2; base < 37; ++base) { +// absl::int128 max = std::numeric_limits<absl::int128>::max(); +// auto result = max / base; +// std::cout << "\tMakeInt128(" << absl::Int128High64(result) << ", " +// << absl::Int128Low64(result) << "u),\n"; +// } +// See https://godbolt.org/z/7djYWz +// +// int128& operator/=(int128) is not constexpr, so hardcode the resulting array +// to avoid a static initializer. +template<> +const int128 LookupTables<int128>::kVmaxOverBase[] = { + 0, + 0, + MakeInt128(4611686018427387903, 18446744073709551615u), + MakeInt128(3074457345618258602, 12297829382473034410u), + MakeInt128(2305843009213693951, 18446744073709551615u), + MakeInt128(1844674407370955161, 11068046444225730969u), + MakeInt128(1537228672809129301, 6148914691236517205u), + MakeInt128(1317624576693539401, 2635249153387078802u), + MakeInt128(1152921504606846975, 18446744073709551615u), + MakeInt128(1024819115206086200, 16397105843297379214u), + MakeInt128(922337203685477580, 14757395258967641292u), + MakeInt128(838488366986797800, 13415813871788764811u), + MakeInt128(768614336404564650, 12297829382473034410u), + MakeInt128(709490156681136600, 11351842506898185609u), + MakeInt128(658812288346769700, 10540996613548315209u), + MakeInt128(614891469123651720, 9838263505978427528u), + MakeInt128(576460752303423487, 18446744073709551615u), + MakeInt128(542551296285575047, 9765923333140350855u), + MakeInt128(512409557603043100, 8198552921648689607u), + MakeInt128(485440633518672410, 17475862806672206794u), + MakeInt128(461168601842738790, 7378697629483820646u), + MakeInt128(439208192231179800, 7027331075698876806u), + MakeInt128(419244183493398900, 6707906935894382405u), + MakeInt128(401016175515425035, 2406097053092550210u), + MakeInt128(384307168202282325, 6148914691236517205u), + MakeInt128(368934881474191032, 5902958103587056517u), + MakeInt128(354745078340568300, 5675921253449092804u), + MakeInt128(341606371735362066, 17763531330238827482u), + MakeInt128(329406144173384850, 5270498306774157604u), + MakeInt128(318047311615681924, 7633135478776366185u), + MakeInt128(307445734561825860, 4919131752989213764u), + MakeInt128(297528130221121800, 4760450083537948804u), + MakeInt128(288230376151711743, 18446744073709551615u), + MakeInt128(279496122328932600, 4471937957262921603u), + MakeInt128(271275648142787523, 14106333703424951235u), + MakeInt128(263524915338707880, 4216398645419326083u), + MakeInt128(256204778801521550, 4099276460824344803u), +}; + +// This kVminOverBase generated with +// for (int base = 2; base < 37; ++base) { +// absl::int128 min = std::numeric_limits<absl::int128>::min(); +// auto result = min / base; +// std::cout << "\tMakeInt128(" << absl::Int128High64(result) << ", " +// << absl::Int128Low64(result) << "u),\n"; +// } +// +// See https://godbolt.org/z/7djYWz +// +// int128& operator/=(int128) is not constexpr, so hardcode the resulting array +// to avoid a static initializer. +template<> +const int128 LookupTables<int128>::kVminOverBase[] = { + 0, + 0, + MakeInt128(-4611686018427387904, 0u), + MakeInt128(-3074457345618258603, 6148914691236517206u), + MakeInt128(-2305843009213693952, 0u), + MakeInt128(-1844674407370955162, 7378697629483820647u), + MakeInt128(-1537228672809129302, 12297829382473034411u), + MakeInt128(-1317624576693539402, 15811494920322472814u), + MakeInt128(-1152921504606846976, 0u), + MakeInt128(-1024819115206086201, 2049638230412172402u), + MakeInt128(-922337203685477581, 3689348814741910324u), + MakeInt128(-838488366986797801, 5030930201920786805u), + MakeInt128(-768614336404564651, 6148914691236517206u), + MakeInt128(-709490156681136601, 7094901566811366007u), + MakeInt128(-658812288346769701, 7905747460161236407u), + MakeInt128(-614891469123651721, 8608480567731124088u), + MakeInt128(-576460752303423488, 0u), + MakeInt128(-542551296285575048, 8680820740569200761u), + MakeInt128(-512409557603043101, 10248191152060862009u), + MakeInt128(-485440633518672411, 970881267037344822u), + MakeInt128(-461168601842738791, 11068046444225730970u), + MakeInt128(-439208192231179801, 11419412998010674810u), + MakeInt128(-419244183493398901, 11738837137815169211u), + MakeInt128(-401016175515425036, 16040647020617001406u), + MakeInt128(-384307168202282326, 12297829382473034411u), + MakeInt128(-368934881474191033, 12543785970122495099u), + MakeInt128(-354745078340568301, 12770822820260458812u), + MakeInt128(-341606371735362067, 683212743470724134u), + MakeInt128(-329406144173384851, 13176245766935394012u), + MakeInt128(-318047311615681925, 10813608594933185431u), + MakeInt128(-307445734561825861, 13527612320720337852u), + MakeInt128(-297528130221121801, 13686293990171602812u), + MakeInt128(-288230376151711744, 0u), + MakeInt128(-279496122328932601, 13974806116446630013u), + MakeInt128(-271275648142787524, 4340410370284600381u), + MakeInt128(-263524915338707881, 14230345428290225533u), + MakeInt128(-256204778801521551, 14347467612885206813u), +}; + template <typename IntType> const IntType LookupTables<IntType>::kVmaxOverBase[] = X_OVER_BASE_INITIALIZER(std::numeric_limits<IntType>::max()); @@ -948,6 +1062,10 @@ return safe_int_internal<int64_t>(text, value, base); } +bool safe_strto128_base(absl::string_view text, int128* value, int base) { + return safe_int_internal<absl::int128>(text, value, base); +} + bool safe_strtou32_base(absl::string_view text, uint32_t* value, int base) { return safe_uint_internal<uint32_t>(text, value, base); }
diff --git a/third_party/abseil-cpp/absl/strings/numbers.h b/third_party/abseil-cpp/absl/strings/numbers.h index d872cca..2e004b44 100644 --- a/third_party/abseil-cpp/absl/strings/numbers.h +++ b/third_party/abseil-cpp/absl/strings/numbers.h
@@ -127,6 +127,8 @@ // safe_strto?() functions for implementing SimpleAtoi() bool safe_strto32_base(absl::string_view text, int32_t* value, int base); bool safe_strto64_base(absl::string_view text, int64_t* value, int base); +bool safe_strto128_base(absl::string_view text, absl::int128* value, + int base); bool safe_strtou32_base(absl::string_view text, uint32_t* value, int base); bool safe_strtou64_base(absl::string_view text, uint64_t* value, int base); bool safe_strtou128_base(absl::string_view text, absl::uint128* value, @@ -256,6 +258,11 @@ } ABSL_MUST_USE_RESULT inline bool SimpleAtoi(absl::string_view str, + absl::int128* out) { + return numbers_internal::safe_strto128_base(str, out, 10); +} + +ABSL_MUST_USE_RESULT inline bool SimpleAtoi(absl::string_view str, absl::uint128* out) { return numbers_internal::safe_strtou128_base(str, out, 10); }
diff --git a/third_party/abseil-cpp/absl/strings/numbers_test.cc b/third_party/abseil-cpp/absl/strings/numbers_test.cc index c2f03b63..4ab67fb6 100644 --- a/third_party/abseil-cpp/absl/strings/numbers_test.cc +++ b/third_party/abseil-cpp/absl/strings/numbers_test.cc
@@ -251,7 +251,7 @@ template <typename int_type, typename in_val_type> void VerifySimpleAtoiGood(in_val_type in_value, int_type exp_value) { std::string s; - // uint128 can be streamed but not StrCat'd + // (u)int128 can be streamed but not StrCat'd. absl::strings_internal::OStringStream(&s) << in_value; int_type x = static_cast<int_type>(~exp_value); EXPECT_TRUE(SimpleAtoi(s, &x)) @@ -264,7 +264,9 @@ template <typename int_type, typename in_val_type> void VerifySimpleAtoiBad(in_val_type in_value) { - std::string s = absl::StrCat(in_value); + std::string s; + // (u)int128 can be streamed but not StrCat'd. + absl::strings_internal::OStringStream(&s) << in_value; int_type x; EXPECT_FALSE(SimpleAtoi(s, &x)); EXPECT_FALSE(SimpleAtoi(s.c_str(), &x)); @@ -347,6 +349,31 @@ std::numeric_limits<absl::uint128>::max(), std::numeric_limits<absl::uint128>::max()); + // SimpleAtoi(absl::string_view, absl::int128) + VerifySimpleAtoiGood<absl::int128>(0, 0); + VerifySimpleAtoiGood<absl::int128>(42, 42); + VerifySimpleAtoiGood<absl::int128>(-42, -42); + + VerifySimpleAtoiGood<absl::int128>(std::numeric_limits<int32_t>::min(), + std::numeric_limits<int32_t>::min()); + VerifySimpleAtoiGood<absl::int128>(std::numeric_limits<int32_t>::max(), + std::numeric_limits<int32_t>::max()); + VerifySimpleAtoiGood<absl::int128>(std::numeric_limits<uint32_t>::max(), + std::numeric_limits<uint32_t>::max()); + VerifySimpleAtoiGood<absl::int128>(std::numeric_limits<int64_t>::min(), + std::numeric_limits<int64_t>::min()); + VerifySimpleAtoiGood<absl::int128>(std::numeric_limits<int64_t>::max(), + std::numeric_limits<int64_t>::max()); + VerifySimpleAtoiGood<absl::int128>(std::numeric_limits<uint64_t>::max(), + std::numeric_limits<uint64_t>::max()); + VerifySimpleAtoiGood<absl::int128>( + std::numeric_limits<absl::int128>::min(), + std::numeric_limits<absl::int128>::min()); + VerifySimpleAtoiGood<absl::int128>( + std::numeric_limits<absl::int128>::max(), + std::numeric_limits<absl::int128>::max()); + VerifySimpleAtoiBad<absl::int128>(std::numeric_limits<absl::uint128>::max()); + // Some other types VerifySimpleAtoiGood<int>(-42, -42); VerifySimpleAtoiGood<int32_t>(-42, -42); @@ -725,6 +752,51 @@ EXPECT_FALSE(parse_func(s, &parsed_value, base)); } } +TEST(stringtest, safe_strto128_random) { + // random number generators don't work for int128, and + // int128 can be streamed but not StrCat'd, so this code must be custom + // implemented for int128, but is generally the same as what's above. + // test_random_integer_parse_base<absl::int128>( + // &absl::numbers_internal::safe_strto128_base); + using RandomEngine = std::minstd_rand0; + using IntType = absl::int128; + constexpr auto parse_func = &absl::numbers_internal::safe_strto128_base; + + std::random_device rd; + RandomEngine rng(rd()); + std::uniform_int_distribution<int64_t> random_int64( + std::numeric_limits<int64_t>::min()); + std::uniform_int_distribution<uint64_t> random_uint64( + std::numeric_limits<uint64_t>::min()); + std::uniform_int_distribution<int> random_base(2, 35); + + for (size_t i = 0; i < kNumRandomTests; ++i) { + int64_t high = random_int64(rng); + uint64_t low = random_uint64(rng); + IntType value = absl::MakeInt128(high, low); + + int base = random_base(rng); + std::string str_value; + EXPECT_TRUE(Itoa<IntType>(value, base, &str_value)); + IntType parsed_value; + + // Test successful parse + EXPECT_TRUE(parse_func(str_value, &parsed_value, base)); + EXPECT_EQ(parsed_value, value); + + // Test overflow + std::string s; + absl::strings_internal::OStringStream(&s) + << std::numeric_limits<IntType>::max() << value; + EXPECT_FALSE(parse_func(s, &parsed_value, base)); + + // Test underflow + s.clear(); + absl::strings_internal::OStringStream(&s) + << std::numeric_limits<IntType>::min() << value; + EXPECT_FALSE(parse_func(s, &parsed_value, base)); + } +} TEST(stringtest, safe_strtou32_base) { for (int i = 0; strtouint32_test_cases()[i].str != nullptr; ++i) {
diff --git a/third_party/abseil-cpp/ci/cmake_install_test.sh b/third_party/abseil-cpp/ci/cmake_install_test.sh index b31e4b8c..78eb41d 100755 --- a/third_party/abseil-cpp/ci/cmake_install_test.sh +++ b/third_party/abseil-cpp/ci/cmake_install_test.sh
@@ -24,7 +24,7 @@ readonly DOCKER_CONTAINER=${LINUX_GCC_LATEST_CONTAINER} time docker run \ - --volume="${ABSEIL_ROOT}:/abseil-cpp:ro" \ + --mount type=bind,source="${ABSEIL_ROOT}",target=/abseil-cpp,readonly \ --workdir=/abseil-cpp \ --tmpfs=/buildfs:exec \ --cap-add=SYS_PTRACE \
diff --git a/third_party/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh b/third_party/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh index 2aed43c..da922a5 100755 --- a/third_party/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +++ b/third_party/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh
@@ -42,7 +42,7 @@ # USE_BAZEL_CACHE=1 only works on Kokoro. # Without access to the credentials this won't work. if [[ ${USE_BAZEL_CACHE:-0} -ne 0 ]]; then - DOCKER_EXTRA_ARGS="--volume=${KOKORO_KEYSTORE_DIR}:/keystore:ro ${DOCKER_EXTRA_ARGS:-}" + DOCKER_EXTRA_ARGS="--mount type=bind,source=${KOKORO_KEYSTORE_DIR},target=/keystore,readonly ${DOCKER_EXTRA_ARGS:-}" # Bazel doesn't track changes to tools outside of the workspace # (e.g. /usr/bin/gcc), so by appending the docker container to the # remote_http_cache url, we make changes to the container part of @@ -55,7 +55,7 @@ # external dependencies first. # https://docs.bazel.build/versions/master/guide.html#distdir if [[ ${KOKORO_GFILE_DIR:-} ]] && [[ -d "${KOKORO_GFILE_DIR}/distdir" ]]; then - DOCKER_EXTRA_ARGS="--volume=${KOKORO_GFILE_DIR}/distdir:/distdir:ro ${DOCKER_EXTRA_ARGS:-}" + DOCKER_EXTRA_ARGS="--mount type=bind,source=${KOKORO_GFILE_DIR}/distdir,target=/distdir,readonly ${DOCKER_EXTRA_ARGS:-}" BAZEL_EXTRA_ARGS="--distdir=/distdir ${BAZEL_EXTRA_ARGS:-}" fi @@ -64,7 +64,7 @@ for exceptions_mode in ${EXCEPTIONS_MODE}; do echo "--------------------------------------------------------------------" time docker run \ - --volume="${ABSEIL_ROOT}:/abseil-cpp:ro" \ + --mount type=bind,source="${ABSEIL_ROOT}",target=/abseil-cpp,readonly \ --workdir=/abseil-cpp \ --cap-add=SYS_PTRACE \ --rm \
diff --git a/third_party/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh b/third_party/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh index eb04e69..06eaac5 100755 --- a/third_party/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +++ b/third_party/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh
@@ -42,7 +42,7 @@ # USE_BAZEL_CACHE=1 only works on Kokoro. # Without access to the credentials this won't work. if [[ ${USE_BAZEL_CACHE:-0} -ne 0 ]]; then - DOCKER_EXTRA_ARGS="--volume=${KOKORO_KEYSTORE_DIR}:/keystore:ro ${DOCKER_EXTRA_ARGS:-}" + DOCKER_EXTRA_ARGS="--mount type=bind,source=${KOKORO_KEYSTORE_DIR},target=/keystore,readonly ${DOCKER_EXTRA_ARGS:-}" # Bazel doesn't track changes to tools outside of the workspace # (e.g. /usr/bin/gcc), so by appending the docker container to the # remote_http_cache url, we make changes to the container part of @@ -55,7 +55,7 @@ # external dependencies first. # https://docs.bazel.build/versions/master/guide.html#distdir if [[ ${KOKORO_GFILE_DIR:-} ]] && [[ -d "${KOKORO_GFILE_DIR}/distdir" ]]; then - DOCKER_EXTRA_ARGS="--volume=${KOKORO_GFILE_DIR}/distdir:/distdir:ro ${DOCKER_EXTRA_ARGS:-}" + DOCKER_EXTRA_ARGS="--mount type=bind,source=${KOKORO_GFILE_DIR}/distdir,target=/distdir,readonly ${DOCKER_EXTRA_ARGS:-}" BAZEL_EXTRA_ARGS="--distdir=/distdir ${BAZEL_EXTRA_ARGS:-}" fi @@ -64,7 +64,7 @@ for exceptions_mode in ${EXCEPTIONS_MODE}; do echo "--------------------------------------------------------------------" time docker run \ - --volume="${ABSEIL_ROOT}:/abseil-cpp-ro:ro" \ + --mount type=bind,source="${ABSEIL_ROOT}",target=/abseil-cpp-ro,readonly \ --tmpfs=/abseil-cpp \ --workdir=/abseil-cpp \ --cap-add=SYS_PTRACE \
diff --git a/third_party/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh b/third_party/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh index b39eaf74..b2e722c 100755 --- a/third_party/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +++ b/third_party/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh
@@ -42,7 +42,7 @@ # USE_BAZEL_CACHE=1 only works on Kokoro. # Without access to the credentials this won't work. if [[ ${USE_BAZEL_CACHE:-0} -ne 0 ]]; then - DOCKER_EXTRA_ARGS="--volume=${KOKORO_KEYSTORE_DIR}:/keystore:ro ${DOCKER_EXTRA_ARGS:-}" + DOCKER_EXTRA_ARGS="--mount type=bind,source=${KOKORO_KEYSTORE_DIR},target=/keystore,readonly ${DOCKER_EXTRA_ARGS:-}" # Bazel doesn't track changes to tools outside of the workspace # (e.g. /usr/bin/gcc), so by appending the docker container to the # remote_http_cache url, we make changes to the container part of @@ -55,7 +55,7 @@ # external dependencies first. # https://docs.bazel.build/versions/master/guide.html#distdir if [[ ${KOKORO_GFILE_DIR:-} ]] && [[ -d "${KOKORO_GFILE_DIR}/distdir" ]]; then - DOCKER_EXTRA_ARGS="--volume=${KOKORO_GFILE_DIR}/distdir:/distdir:ro ${DOCKER_EXTRA_ARGS:-}" + DOCKER_EXTRA_ARGS="--mount type=bind,source=${KOKORO_GFILE_DIR}/distdir,target=/distdir,readonly ${DOCKER_EXTRA_ARGS:-}" BAZEL_EXTRA_ARGS="--distdir=/distdir ${BAZEL_EXTRA_ARGS:-}" fi @@ -64,7 +64,7 @@ for exceptions_mode in ${EXCEPTIONS_MODE}; do echo "--------------------------------------------------------------------" time docker run \ - --volume="${ABSEIL_ROOT}:/abseil-cpp:ro" \ + --mount type=bind,source="${ABSEIL_ROOT}",target=/abseil-cpp,readonly \ --workdir=/abseil-cpp \ --cap-add=SYS_PTRACE \ --rm \
diff --git a/third_party/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh b/third_party/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh index 4e490676..f8ce3c6a 100755 --- a/third_party/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +++ b/third_party/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh
@@ -42,7 +42,7 @@ # USE_BAZEL_CACHE=1 only works on Kokoro. # Without access to the credentials this won't work. if [[ ${USE_BAZEL_CACHE:-0} -ne 0 ]]; then - DOCKER_EXTRA_ARGS="--volume=${KOKORO_KEYSTORE_DIR}:/keystore:ro ${DOCKER_EXTRA_ARGS:-}" + DOCKER_EXTRA_ARGS="--mount type=bind,source=${KOKORO_KEYSTORE_DIR},target=/keystore,readonly ${DOCKER_EXTRA_ARGS:-}" # Bazel doesn't track changes to tools outside of the workspace # (e.g. /usr/bin/gcc), so by appending the docker container to the # remote_http_cache url, we make changes to the container part of @@ -55,7 +55,7 @@ # external dependencies first. # https://docs.bazel.build/versions/master/guide.html#distdir if [[ ${KOKORO_GFILE_DIR:-} ]] && [[ -d "${KOKORO_GFILE_DIR}/distdir" ]]; then - DOCKER_EXTRA_ARGS="--volume=${KOKORO_GFILE_DIR}/distdir:/distdir:ro ${DOCKER_EXTRA_ARGS:-}" + DOCKER_EXTRA_ARGS="--mount type=bind,source=${KOKORO_GFILE_DIR}/distdir,target=/distdir,readonly ${DOCKER_EXTRA_ARGS:-}" BAZEL_EXTRA_ARGS="--distdir=/distdir ${BAZEL_EXTRA_ARGS:-}" fi @@ -64,7 +64,7 @@ for exceptions_mode in ${EXCEPTIONS_MODE}; do echo "--------------------------------------------------------------------" time docker run \ - --volume="${ABSEIL_ROOT}:/abseil-cpp:ro" \ + --mount type=bind,source="${ABSEIL_ROOT}",target=/abseil-cpp,readonly \ --workdir=/abseil-cpp \ --cap-add=SYS_PTRACE \ --rm \
diff --git a/third_party/abseil-cpp/ci/linux_gcc-4.9_libstdcxx_bazel.sh b/third_party/abseil-cpp/ci/linux_gcc-4.9_libstdcxx_bazel.sh index 8e6540c..16f927bd 100755 --- a/third_party/abseil-cpp/ci/linux_gcc-4.9_libstdcxx_bazel.sh +++ b/third_party/abseil-cpp/ci/linux_gcc-4.9_libstdcxx_bazel.sh
@@ -42,7 +42,7 @@ # USE_BAZEL_CACHE=1 only works on Kokoro. # Without access to the credentials this won't work. if [[ ${USE_BAZEL_CACHE:-0} -ne 0 ]]; then - DOCKER_EXTRA_ARGS="--volume=${KOKORO_KEYSTORE_DIR}:/keystore:ro ${DOCKER_EXTRA_ARGS:-}" + DOCKER_EXTRA_ARGS="--mount type=bind,source=${KOKORO_KEYSTORE_DIR},target=/keystore,readonly ${DOCKER_EXTRA_ARGS:-}" # Bazel doesn't track changes to tools outside of the workspace # (e.g. /usr/bin/gcc), so by appending the docker container to the # remote_http_cache url, we make changes to the container part of @@ -55,7 +55,7 @@ # external dependencies first. # https://docs.bazel.build/versions/master/guide.html#distdir if [[ ${KOKORO_GFILE_DIR:-} ]] && [[ -d "${KOKORO_GFILE_DIR}/distdir" ]]; then - DOCKER_EXTRA_ARGS="--volume=${KOKORO_GFILE_DIR}/distdir:/distdir:ro ${DOCKER_EXTRA_ARGS:-}" + DOCKER_EXTRA_ARGS="--mount type=bind,source=${KOKORO_GFILE_DIR}/distdir,target=/distdir,readonly ${DOCKER_EXTRA_ARGS:-}" BAZEL_EXTRA_ARGS="--distdir=/distdir ${BAZEL_EXTRA_ARGS:-}" fi @@ -64,7 +64,7 @@ for exceptions_mode in ${EXCEPTIONS_MODE}; do echo "--------------------------------------------------------------------" time docker run \ - --volume="${ABSEIL_ROOT}:/abseil-cpp:ro" \ + --mount type=bind,source="${ABSEIL_ROOT}",target=/abseil-cpp,readonly \ --workdir=/abseil-cpp \ --cap-add=SYS_PTRACE \ --rm \
diff --git a/third_party/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh b/third_party/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh index b327405..37d89d9 100755 --- a/third_party/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +++ b/third_party/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh
@@ -42,7 +42,7 @@ # USE_BAZEL_CACHE=1 only works on Kokoro. # Without access to the credentials this won't work. if [[ ${USE_BAZEL_CACHE:-0} -ne 0 ]]; then - DOCKER_EXTRA_ARGS="--volume=${KOKORO_KEYSTORE_DIR}:/keystore:ro ${DOCKER_EXTRA_ARGS:-}" + DOCKER_EXTRA_ARGS="--mount type=bind,source=${KOKORO_KEYSTORE_DIR},target=/keystore,readonly ${DOCKER_EXTRA_ARGS:-}" # Bazel doesn't track changes to tools outside of the workspace # (e.g. /usr/bin/gcc), so by appending the docker container to the # remote_http_cache url, we make changes to the container part of @@ -55,7 +55,7 @@ # external dependencies first. # https://docs.bazel.build/versions/master/guide.html#distdir if [[ ${KOKORO_GFILE_DIR:-} ]] && [[ -d "${KOKORO_GFILE_DIR}/distdir" ]]; then - DOCKER_EXTRA_ARGS="--volume=${KOKORO_GFILE_DIR}/distdir:/distdir:ro ${DOCKER_EXTRA_ARGS:-}" + DOCKER_EXTRA_ARGS="--mount type=bind,source=${KOKORO_GFILE_DIR}/distdir,target=/distdir,readonly ${DOCKER_EXTRA_ARGS:-}" BAZEL_EXTRA_ARGS="--distdir=/distdir ${BAZEL_EXTRA_ARGS:-}" fi @@ -64,7 +64,7 @@ for exceptions_mode in ${EXCEPTIONS_MODE}; do echo "--------------------------------------------------------------------" time docker run \ - --volume="${ABSEIL_ROOT}:/abseil-cpp-ro:ro" \ + --mount type=bind,source="${ABSEIL_ROOT}",target=/abseil-cpp-ro,readonly \ --tmpfs=/abseil-cpp \ --workdir=/abseil-cpp \ --cap-add=SYS_PTRACE \
diff --git a/third_party/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh b/third_party/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh index 1ba02b2..1bf5fda 100755 --- a/third_party/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +++ b/third_party/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh
@@ -34,31 +34,36 @@ ABSL_CMAKE_BUILD_TYPES="Debug Release" fi +if [[ -z ${ABSL_CMAKE_BUILD_SHARED:-} ]]; then + ABSL_CMAKE_BUILD_SHARED="OFF ON" +fi + source "${ABSEIL_ROOT}/ci/linux_docker_containers.sh" readonly DOCKER_CONTAINER=${LINUX_GCC_LATEST_CONTAINER} for std in ${ABSL_CMAKE_CXX_STANDARDS}; do for compilation_mode in ${ABSL_CMAKE_BUILD_TYPES}; do - echo "--------------------------------------------------------------------" - echo "Testing with CMAKE_BUILD_TYPE=${compilation_mode} and -std=c++${std}" - - time docker run \ - --volume="${ABSEIL_ROOT}:/abseil-cpp:ro" \ - --workdir=/abseil-cpp \ - --tmpfs=/buildfs:exec \ - --cap-add=SYS_PTRACE \ - --rm \ - -e CFLAGS="-Werror" \ - -e CXXFLAGS="-Werror" \ - ${DOCKER_CONTAINER} \ - /bin/bash -c " - cd /buildfs && \ - cmake /abseil-cpp \ - -DABSL_USE_GOOGLETEST_HEAD=ON \ - -DABSL_RUN_TESTS=ON \ - -DCMAKE_BUILD_TYPE=${compilation_mode} \ - -DCMAKE_CXX_STANDARD=${std} && \ - make -j$(nproc) && \ - ctest -j$(nproc) --output-on-failure" + for build_shared in ${ABSL_CMAKE_BUILD_SHARED}; do + time docker run \ + --mount type=bind,source="${ABSEIL_ROOT}",target=/abseil-cpp,readonly \ + --workdir=/abseil-cpp \ + --tmpfs=/buildfs:exec \ + --cap-add=SYS_PTRACE \ + --rm \ + -e CFLAGS="-Werror" \ + -e CXXFLAGS="-Werror" \ + ${DOCKER_CONTAINER} \ + /bin/bash -c " + cd /buildfs && \ + cmake /abseil-cpp \ + -DABSL_USE_GOOGLETEST_HEAD=ON \ + -DABSL_RUN_TESTS=ON \ + -DBUILD_SHARED_LIBS=${build_shared} \ + -DCMAKE_BUILD_TYPE=${compilation_mode} \ + -DCMAKE_CXX_STANDARD=${std} \ + -DCMAKE_MODULE_LINKER_FLAGS=\"-Wl,--no-undefined\" && \ + make -j$(nproc) && \ + ctest -j$(nproc) --output-on-failure" + done done done
diff --git a/third_party/abseil-cpp/ci/linux_gcc_alpine_cmake.sh b/third_party/abseil-cpp/ci/linux_gcc_alpine_cmake.sh index f57ab12..c8f173d 100755 --- a/third_party/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +++ b/third_party/abseil-cpp/ci/linux_gcc_alpine_cmake.sh
@@ -34,31 +34,35 @@ ABSL_CMAKE_BUILD_TYPES="Debug Release" fi +if [[ -z ${ABSL_CMAKE_BUILD_SHARED:-} ]]; then + ABSL_CMAKE_BUILD_SHARED="OFF ON" +fi + source "${ABSEIL_ROOT}/ci/linux_docker_containers.sh" readonly DOCKER_CONTAINER=${LINUX_ALPINE_CONTAINER} for std in ${ABSL_CMAKE_CXX_STANDARDS}; do for compilation_mode in ${ABSL_CMAKE_BUILD_TYPES}; do - echo "--------------------------------------------------------------------" - echo "Testing with CMAKE_BUILD_TYPE=${compilation_mode} and -std=c++${std}" - - time docker run \ - --volume="${ABSEIL_ROOT}:/abseil-cpp:ro" \ - --workdir=/abseil-cpp \ - --tmpfs=/buildfs:exec \ - --cap-add=SYS_PTRACE \ - --rm \ - -e CFLAGS="-Werror" \ - -e CXXFLAGS="-Werror" \ - "${DOCKER_CONTAINER}" \ - /bin/sh -c " - cd /buildfs && \ - cmake /abseil-cpp \ - -DABSL_USE_GOOGLETEST_HEAD=ON \ - -DABSL_RUN_TESTS=ON \ - -DCMAKE_BUILD_TYPE=${compilation_mode} \ - -DCMAKE_CXX_STANDARD=${std} && \ - make -j$(nproc) && \ - ctest -j$(nproc) --output-on-failure" + for build_shared in ${ABSL_CMAKE_BUILD_SHARED}; do + time docker run \ + --mount type=bind,source="${ABSEIL_ROOT}",target=/abseil-cpp,readonly \ + --workdir=/abseil-cpp \ + --tmpfs=/buildfs:exec \ + --cap-add=SYS_PTRACE \ + --rm \ + -e CFLAGS="-Werror" \ + -e CXXFLAGS="-Werror" \ + "${DOCKER_CONTAINER}" \ + /bin/sh -c " + cd /buildfs && \ + cmake /abseil-cpp \ + -DABSL_USE_GOOGLETEST_HEAD=ON \ + -DABSL_RUN_TESTS=ON \ + -DCMAKE_BUILD_TYPE=${compilation_mode} \ + -DCMAKE_CXX_STANDARD=${std} \ + -DCMAKE_MODULE_LINKER_FLAGS=\"-Wl,--no-undefined\" && \ + make -j$(nproc) && \ + ctest -j$(nproc) --output-on-failure" + done done done
diff --git a/third_party/abseil-cpp/ci/macos_xcode_cmake.sh b/third_party/abseil-cpp/ci/macos_xcode_cmake.sh index cf78e20..d90e273a 100755 --- a/third_party/abseil-cpp/ci/macos_xcode_cmake.sh +++ b/third_party/abseil-cpp/ci/macos_xcode_cmake.sh
@@ -28,17 +28,25 @@ ABSL_CMAKE_BUILD_TYPES="Debug" fi -for compilation_mode in ${ABSL_CMAKE_BUILD_TYPES}; do - BUILD_DIR=$(mktemp -d ${compilation_mode}.XXXXXXXX) - cd ${BUILD_DIR} +if [[ -z ${ABSL_CMAKE_BUILD_SHARED:-} ]]; then + ABSL_CMAKE_BUILD_SHARED="OFF ON" +fi - # TODO(absl-team): Enable -Werror once all warnings are fixed. - time cmake ${ABSEIL_ROOT} \ - -GXcode \ - -DCMAKE_BUILD_TYPE=${compilation_mode} \ - -DCMAKE_CXX_STANDARD=11 \ - -DABSL_USE_GOOGLETEST_HEAD=ON \ - -DABSL_RUN_TESTS=ON - time cmake --build . - time ctest -C ${compilation_mode} --output-on-failure +for compilation_mode in ${ABSL_CMAKE_BUILD_TYPES}; do + for build_shared in ${ABSL_CMAKE_BUILD_SHARED}; do + BUILD_DIR=$(mktemp -d ${compilation_mode}.XXXXXXXX) + cd ${BUILD_DIR} + + # TODO(absl-team): Enable -Werror once all warnings are fixed. + time cmake ${ABSEIL_ROOT} \ + -GXcode \ + -DBUILD_SHARED_LIBS=${build_shared} \ + -DCMAKE_BUILD_TYPE=${compilation_mode} \ + -DCMAKE_CXX_STANDARD=11 \ + -DCMAKE_MODULE_LINKER_FLAGS="-Wl,--no-undefined" \ + -DABSL_USE_GOOGLETEST_HEAD=ON \ + -DABSL_RUN_TESTS=ON + time cmake --build . + time ctest -C ${compilation_mode} --output-on-failure + done done
diff --git a/third_party/abseil-cpp/symbols_arm64_dbg.def b/third_party/abseil-cpp/symbols_arm64_dbg.def index 9d7bc72..ed49db5 100644 --- a/third_party/abseil-cpp/symbols_arm64_dbg.def +++ b/third_party/abseil-cpp/symbols_arm64_dbg.def
@@ -1078,10 +1078,6 @@ ??1CondVar@absl@@QEAA@XZ ??1Cord@absl@@QEAA@XZ ??1CordForest@absl@@QEAA@XZ - ??1CordRep@cord_internal@absl@@QEAA@XZ - ??1CordRepConcat@cord_internal@absl@@QEAA@XZ - ??1CordRepExternal@cord_internal@absl@@QEAA@XZ - ??1CordRepSubstring@cord_internal@absl@@QEAA@XZ ??1ErrnoSaver@base_internal@absl@@QEAA@XZ ??1FormatSinkImpl@str_format_internal@absl@@QEAA@XZ ??1GraphCycles@synchronization_internal@absl@@QEAA@XZ @@ -1094,7 +1090,6 @@ ??1Notification@absl@@QEAA@XZ ??1Payload@status_internal@absl@@QEAA@XZ ??1PosixTimeZone@cctz@time_internal@absl@@QEAA@XZ - ??1Refcount@cord_internal@absl@@QEAA@XZ ??1Rep@GraphCycles@synchronization_internal@absl@@QEAA@XZ ??1SchedulingHelper@base_internal@absl@@QEAA@XZ ??1ScopedDisable@SchedulingGuard@base_internal@absl@@QEAA@XZ @@ -1131,6 +1126,7 @@ ??4InlineRep@Cord@absl@@QEAAAEAV012@AEBV012@@Z ??4Payload@status_internal@absl@@QEAAAEAU012@$$QEAU012@@Z ??4Status@absl@@QEAAAEAV01@$$QEAV01@@Z + ??4int128@absl@@QEAAAEAV01@H@Z ??4uint128@absl@@QEAAAEAV01@H@Z ??4uint128@absl@@QEAAAEAV01@_J@Z ??4uint128@absl@@QEAAAEAV01@_K@Z @@ -1230,6 +1226,7 @@ ??D?$optional@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@absl@@QEGAAAEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@XZ ??D?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@@__1@std@@@__1@std@@QEBAAEAV?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@XZ ??DChunkIterator@Cord@absl@@QEBA?AVstring_view@2@XZ + ??Dabsl@@YA?AVint128@0@V10@0@Z ??Dabsl@@YA?AVuint128@0@V10@0@Z ??E?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEAAAEAV012@XZ ??E?$__hash_map_iterator@V?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@QEAAAEAV012@XZ @@ -1247,6 +1244,7 @@ ??Gabsl@@YA?AVDuration@0@V10@0@Z ??Gabsl@@YA?AVDuration@0@V10@@Z ??Gabsl@@YA?AVDuration@0@VTime@0@0@Z + ??Gabsl@@YA?AVint128@0@V10@0@Z ??Gabsl@@YA?AVint128@0@V10@@Z ??Gabsl@@YA?AVuint128@0@V10@0@Z ??Gabsl@@YA?AVuint128@0@V10@@Z @@ -1256,6 +1254,7 @@ ??Gdetail@cctz@time_internal@absl@@YA_JV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@0123@0@Z ??Habsl@@YA?AVDuration@0@V10@0@Z ??Habsl@@YA?AVTime@0@V10@VDuration@0@@Z + ??Habsl@@YA?AVint128@0@V10@0@Z ??Habsl@@YA?AVuint128@0@V10@0@Z ??Hdetail@cctz@time_internal@absl@@YA?AV?$civil_time@Uday_tag@detail@cctz@time_internal@absl@@@0123@V40123@_J@Z ??Hdetail@cctz@time_internal@absl@@YA?AV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@0123@V40123@_J@Z @@ -1271,9 +1270,12 @@ ??Mabsl@@YA_NVint128@0@0@Z ??Mabsl@@YA_NVuint128@0@0@Z ??Nabsl@@YA_NVDuration@0@0@Z + ??Nabsl@@YA_NVint128@0@0@Z ??Oabsl@@YA_NVDuration@0@0@Z + ??Oabsl@@YA_NVint128@0@0@Z ??Oabsl@@YA_NVuint128@0@0@Z ??Pabsl@@YA_NVDuration@0@0@Z + ??Pabsl@@YA_NVint128@0@0@Z ??Pabsl@@YA_NVuint128@0@0@Z ??R<lambda_1>@?0???A?$FixedArray@PEAUCordRep@cord_internal@absl@@$0?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@QEAAAEAPEAUCordRep@cord_internal@2@_K@Z@QEBA?A?<auto>@@XZ ??R<lambda_1>@?0???A?$InlinedVector@PEAUCordRep@cord_internal@absl@@$0CP@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@QEAAAEAPEAUCordRep@cord_internal@2@_K@Z@QEBA?A?<auto>@@XZ @@ -1335,15 +1337,18 @@ ??Uabsl@@YA?AVuint128@0@V10@0@Z ??XDuration@absl@@QEAAAEAV01@N@Z ??XDuration@absl@@QEAAAEAV01@_J@Z + ??Xint128@absl@@QEAAAEAV01@V01@@Z ??Xuint128@absl@@QEAAAEAV01@V01@@Z ??Y?$civil_time@Uday_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QEAAAEAV01234@_J@Z ??Y?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QEAAAEAV01234@_J@Z ??YDuration@absl@@QEAAAEAV01@V01@@Z ??YTime@absl@@QEAAAEAV01@VDuration@1@@Z + ??Yint128@absl@@QEAAAEAV01@V01@@Z ??Yuint128@absl@@QEAAAEAV01@V01@@Z ??Z?$civil_time@Uday_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QEAAAEAV01234@_J@Z ??Z?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QEAAAEAV01234@_J@Z ??ZDuration@absl@@QEAAAEAV01@V01@@Z + ??Zint128@absl@@QEAAAEAV01@V01@@Z ??Zuint128@absl@@QEAAAEAV01@V01@@Z ??_0Duration@absl@@QEAAAEAV01@N@Z ??_0Duration@absl@@QEAAAEAV01@_J@Z @@ -1805,6 +1810,7 @@ ?InstallFailureSignalHandler@absl@@YAXAEBUFailureSignalHandlerOptions@1@@Z ?Int128High64@absl@@YA_JVint128@1@@Z ?Int128Low64@absl@@YA_KVint128@1@@Z + ?Int128Max@absl@@YA?AVint128@1@XZ ?Int128Min@absl@@YA?AVint128@1@XZ ?InternalAttemptToUseMutexInFatalSignalHandler@Mutex@absl@@SAXXZ ?InternalCondVarPoke@Waiter@synchronization_internal@absl@@AEAAXXZ @@ -1818,6 +1824,7 @@ ?IsDataLoss@absl@@YA_NAEBVStatus@1@@Z ?IsDeadlineExceeded@absl@@YA_NAEBVStatus@1@@Z ?IsFailedPrecondition@absl@@YA_NAEBVStatus@1@@Z + ?IsImmortal@Refcount@cord_internal@absl@@QEBA_NXZ ?IsInfiniteDuration@time_internal@absl@@YA_NVDuration@2@@Z ?IsInlined@Status@absl@@CA_N_K@Z ?IsInternal@absl@@YA_NAEBVStatus@1@@Z @@ -2856,6 +2863,7 @@ ?lookup@time_zone@cctz@time_internal@absl@@QEBA?AUcivil_lookup@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@234@@Z ?max@?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@SA?AV12345@XZ ?max@?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@SA?AV12345@XZ + ?max@?$numeric_limits@Vint128@absl@@@__1@std@@SA?AVint128@absl@@XZ ?max@?$numeric_limits@Vuint128@absl@@@__1@std@@SA?AVuint128@absl@@XZ ?max_load_factor@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QEAAAEAMXZ ?max_size@?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEBA_KXZ @@ -2893,6 +2901,7 @@ ?message@Status@absl@@QEBA?AVstring_view@2@XZ ?min@?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@SA?AV12345@XZ ?min@?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@SA?AV12345@XZ + ?min@?$numeric_limits@Vint128@absl@@@__1@std@@SA?AVint128@absl@@XZ ?minute@?$civil_time@Uminute_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QEBAHXZ ?minute@?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QEBAHXZ ?minute@?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@QEBAHXZ @@ -2975,6 +2984,7 @@ ?resize@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAX_K@Z ?rfind@string_view@absl@@QEBA_KD_K@Z ?rfind@string_view@absl@@QEBA_KV12@_K@Z + ?safe_strto128_base@numbers_internal@absl@@YA_NVstring_view@2@PEAVint128@2@H@Z ?safe_strto32_base@numbers_internal@absl@@YA_NVstring_view@2@PEAHH@Z ?safe_strto64_base@numbers_internal@absl@@YA_NVstring_view@2@PEA_JH@Z ?safe_strtou128_base@numbers_internal@absl@@YA_NVstring_view@2@PEAVuint128@2@H@Z
diff --git a/third_party/abseil-cpp/symbols_arm64_rel.def b/third_party/abseil-cpp/symbols_arm64_rel.def index fbd920b3..8d20a7dd 100644 --- a/third_party/abseil-cpp/symbols_arm64_rel.def +++ b/third_party/abseil-cpp/symbols_arm64_rel.def
@@ -767,6 +767,7 @@ ?resize@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAX_K@Z ?rfind@string_view@absl@@QEBA_KD_K@Z ?rfind@string_view@absl@@QEBA_KV12@_K@Z + ?safe_strto128_base@numbers_internal@absl@@YA_NVstring_view@2@PEAVint128@2@H@Z ?safe_strto32_base@numbers_internal@absl@@YA_NVstring_view@2@PEAHH@Z ?safe_strto64_base@numbers_internal@absl@@YA_NVstring_view@2@PEA_JH@Z ?safe_strtou128_base@numbers_internal@absl@@YA_NVstring_view@2@PEAVuint128@2@H@Z
diff --git a/third_party/abseil-cpp/symbols_x64_dbg.def b/third_party/abseil-cpp/symbols_x64_dbg.def index 19742f7a..ca0a9948 100644 --- a/third_party/abseil-cpp/symbols_x64_dbg.def +++ b/third_party/abseil-cpp/symbols_x64_dbg.def
@@ -1080,10 +1080,6 @@ ??1CondVar@absl@@QEAA@XZ ??1Cord@absl@@QEAA@XZ ??1CordForest@absl@@QEAA@XZ - ??1CordRep@cord_internal@absl@@QEAA@XZ - ??1CordRepConcat@cord_internal@absl@@QEAA@XZ - ??1CordRepExternal@cord_internal@absl@@QEAA@XZ - ??1CordRepSubstring@cord_internal@absl@@QEAA@XZ ??1ErrnoSaver@base_internal@absl@@QEAA@XZ ??1FormatSinkImpl@str_format_internal@absl@@QEAA@XZ ??1GraphCycles@synchronization_internal@absl@@QEAA@XZ @@ -1096,7 +1092,6 @@ ??1Notification@absl@@QEAA@XZ ??1Payload@status_internal@absl@@QEAA@XZ ??1PosixTimeZone@cctz@time_internal@absl@@QEAA@XZ - ??1Refcount@cord_internal@absl@@QEAA@XZ ??1Rep@GraphCycles@synchronization_internal@absl@@QEAA@XZ ??1SchedulingHelper@base_internal@absl@@QEAA@XZ ??1ScopedDisable@SchedulingGuard@base_internal@absl@@QEAA@XZ @@ -1133,6 +1128,7 @@ ??4InlineRep@Cord@absl@@QEAAAEAV012@AEBV012@@Z ??4Payload@status_internal@absl@@QEAAAEAU012@$$QEAU012@@Z ??4Status@absl@@QEAAAEAV01@$$QEAV01@@Z + ??4int128@absl@@QEAAAEAV01@H@Z ??4uint128@absl@@QEAAAEAV01@H@Z ??4uint128@absl@@QEAAAEAV01@_J@Z ??4uint128@absl@@QEAAAEAV01@_K@Z @@ -1232,6 +1228,7 @@ ??D?$optional@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@absl@@QEGAAAEAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@XZ ??D?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@@__1@std@@@__1@std@@QEBAAEAV?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@XZ ??DChunkIterator@Cord@absl@@QEBA?AVstring_view@2@XZ + ??Dabsl@@YA?AVint128@0@V10@0@Z ??Dabsl@@YA?AVuint128@0@V10@0@Z ??E?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@QEAAAEAV012@XZ ??E?$__hash_map_iterator@V?$__hash_iterator@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PEAX@__1@std@@@__1@std@@@__1@std@@QEAAAEAV012@XZ @@ -1249,6 +1246,7 @@ ??Gabsl@@YA?AVDuration@0@V10@0@Z ??Gabsl@@YA?AVDuration@0@V10@@Z ??Gabsl@@YA?AVDuration@0@VTime@0@0@Z + ??Gabsl@@YA?AVint128@0@V10@0@Z ??Gabsl@@YA?AVint128@0@V10@@Z ??Gabsl@@YA?AVuint128@0@V10@0@Z ??Gabsl@@YA?AVuint128@0@V10@@Z @@ -1258,6 +1256,7 @@ ??Gdetail@cctz@time_internal@absl@@YA_JV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@0123@0@Z ??Habsl@@YA?AVDuration@0@V10@0@Z ??Habsl@@YA?AVTime@0@V10@VDuration@0@@Z + ??Habsl@@YA?AVint128@0@V10@0@Z ??Habsl@@YA?AVuint128@0@V10@0@Z ??Hdetail@cctz@time_internal@absl@@YA?AV?$civil_time@Uday_tag@detail@cctz@time_internal@absl@@@0123@V40123@_J@Z ??Hdetail@cctz@time_internal@absl@@YA?AV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@0123@V40123@_J@Z @@ -1273,9 +1272,12 @@ ??Mabsl@@YA_NVint128@0@0@Z ??Mabsl@@YA_NVuint128@0@0@Z ??Nabsl@@YA_NVDuration@0@0@Z + ??Nabsl@@YA_NVint128@0@0@Z ??Oabsl@@YA_NVDuration@0@0@Z + ??Oabsl@@YA_NVint128@0@0@Z ??Oabsl@@YA_NVuint128@0@0@Z ??Pabsl@@YA_NVDuration@0@0@Z + ??Pabsl@@YA_NVint128@0@0@Z ??Pabsl@@YA_NVuint128@0@0@Z ??R<lambda_1>@?0???A?$FixedArray@PEAUCordRep@cord_internal@absl@@$0?0V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@QEAAAEAPEAUCordRep@cord_internal@2@_K@Z@QEBA?A?<auto>@@XZ ??R<lambda_1>@?0???A?$InlinedVector@PEAUCordRep@cord_internal@absl@@$0CP@V?$allocator@PEAUCordRep@cord_internal@absl@@@__1@std@@@absl@@QEAAAEAPEAUCordRep@cord_internal@2@_K@Z@QEBA?A?<auto>@@XZ @@ -1337,15 +1339,18 @@ ??Uabsl@@YA?AVuint128@0@V10@0@Z ??XDuration@absl@@QEAAAEAV01@N@Z ??XDuration@absl@@QEAAAEAV01@_J@Z + ??Xint128@absl@@QEAAAEAV01@V01@@Z ??Xuint128@absl@@QEAAAEAV01@V01@@Z ??Y?$civil_time@Uday_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QEAAAEAV01234@_J@Z ??Y?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QEAAAEAV01234@_J@Z ??YDuration@absl@@QEAAAEAV01@V01@@Z ??YTime@absl@@QEAAAEAV01@VDuration@1@@Z + ??Yint128@absl@@QEAAAEAV01@V01@@Z ??Yuint128@absl@@QEAAAEAV01@V01@@Z ??Z?$civil_time@Uday_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QEAAAEAV01234@_J@Z ??Z?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QEAAAEAV01234@_J@Z ??ZDuration@absl@@QEAAAEAV01@V01@@Z + ??Zint128@absl@@QEAAAEAV01@V01@@Z ??Zuint128@absl@@QEAAAEAV01@V01@@Z ??_0Duration@absl@@QEAAAEAV01@N@Z ??_0Duration@absl@@QEAAAEAV01@_J@Z @@ -1807,6 +1812,7 @@ ?InstallFailureSignalHandler@absl@@YAXAEBUFailureSignalHandlerOptions@1@@Z ?Int128High64@absl@@YA_JVint128@1@@Z ?Int128Low64@absl@@YA_KVint128@1@@Z + ?Int128Max@absl@@YA?AVint128@1@XZ ?Int128Min@absl@@YA?AVint128@1@XZ ?InternalAttemptToUseMutexInFatalSignalHandler@Mutex@absl@@SAXXZ ?InternalCondVarPoke@Waiter@synchronization_internal@absl@@AEAAXXZ @@ -1820,6 +1826,7 @@ ?IsDataLoss@absl@@YA_NAEBVStatus@1@@Z ?IsDeadlineExceeded@absl@@YA_NAEBVStatus@1@@Z ?IsFailedPrecondition@absl@@YA_NAEBVStatus@1@@Z + ?IsImmortal@Refcount@cord_internal@absl@@QEBA_NXZ ?IsInfiniteDuration@time_internal@absl@@YA_NVDuration@2@@Z ?IsInlined@Status@absl@@CA_N_K@Z ?IsInternal@absl@@YA_NAEBVStatus@1@@Z @@ -2858,6 +2865,7 @@ ?lookup@time_zone@cctz@time_internal@absl@@QEBA?AUcivil_lookup@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@234@@Z ?max@?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@SA?AV12345@XZ ?max@?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@SA?AV12345@XZ + ?max@?$numeric_limits@Vint128@absl@@@__1@std@@SA?AVint128@absl@@XZ ?max@?$numeric_limits@Vuint128@absl@@@__1@std@@SA?AVuint128@absl@@XZ ?max_load_factor@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QEAAAEAMXZ ?max_size@?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QEBA_KXZ @@ -2895,6 +2903,7 @@ ?message@Status@absl@@QEBA?AVstring_view@2@XZ ?min@?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@SA?AV12345@XZ ?min@?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@SA?AV12345@XZ + ?min@?$numeric_limits@Vint128@absl@@@__1@std@@SA?AVint128@absl@@XZ ?minute@?$civil_time@Uminute_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QEBAHXZ ?minute@?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QEBAHXZ ?minute@?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@QEBAHXZ @@ -2977,6 +2986,7 @@ ?resize@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAX_K@Z ?rfind@string_view@absl@@QEBA_KD_K@Z ?rfind@string_view@absl@@QEBA_KV12@_K@Z + ?safe_strto128_base@numbers_internal@absl@@YA_NVstring_view@2@PEAVint128@2@H@Z ?safe_strto32_base@numbers_internal@absl@@YA_NVstring_view@2@PEAHH@Z ?safe_strto64_base@numbers_internal@absl@@YA_NVstring_view@2@PEA_JH@Z ?safe_strtou128_base@numbers_internal@absl@@YA_NVstring_view@2@PEAVuint128@2@H@Z
diff --git a/third_party/abseil-cpp/symbols_x64_rel.def b/third_party/abseil-cpp/symbols_x64_rel.def index f5d61c0..bd856aa 100644 --- a/third_party/abseil-cpp/symbols_x64_rel.def +++ b/third_party/abseil-cpp/symbols_x64_rel.def
@@ -766,6 +766,7 @@ ?resize@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAX_K@Z ?rfind@string_view@absl@@QEBA_KD_K@Z ?rfind@string_view@absl@@QEBA_KV12@_K@Z + ?safe_strto128_base@numbers_internal@absl@@YA_NVstring_view@2@PEAVint128@2@H@Z ?safe_strto32_base@numbers_internal@absl@@YA_NVstring_view@2@PEAHH@Z ?safe_strto64_base@numbers_internal@absl@@YA_NVstring_view@2@PEA_JH@Z ?safe_strtou128_base@numbers_internal@absl@@YA_NVstring_view@2@PEAVuint128@2@H@Z
diff --git a/third_party/abseil-cpp/symbols_x64_rel_asan.def b/third_party/abseil-cpp/symbols_x64_rel_asan.def index 0b1f6de..91361d6 100644 --- a/third_party/abseil-cpp/symbols_x64_rel_asan.def +++ b/third_party/abseil-cpp/symbols_x64_rel_asan.def
@@ -806,6 +806,7 @@ ?resize@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QEAAX_K@Z ?rfind@string_view@absl@@QEBA_KD_K@Z ?rfind@string_view@absl@@QEBA_KV12@_K@Z + ?safe_strto128_base@numbers_internal@absl@@YA_NVstring_view@2@PEAVint128@2@H@Z ?safe_strto32_base@numbers_internal@absl@@YA_NVstring_view@2@PEAHH@Z ?safe_strto64_base@numbers_internal@absl@@YA_NVstring_view@2@PEA_JH@Z ?safe_strtou128_base@numbers_internal@absl@@YA_NVstring_view@2@PEAVuint128@2@H@Z
diff --git a/third_party/abseil-cpp/symbols_x86_dbg.def b/third_party/abseil-cpp/symbols_x86_dbg.def index 9fd9c59e..c41d90cf 100644 --- a/third_party/abseil-cpp/symbols_x86_dbg.def +++ b/third_party/abseil-cpp/symbols_x86_dbg.def
@@ -1078,10 +1078,6 @@ ??1CondVar@absl@@QAE@XZ ??1Cord@absl@@QAE@XZ ??1CordForest@absl@@QAE@XZ - ??1CordRep@cord_internal@absl@@QAE@XZ - ??1CordRepConcat@cord_internal@absl@@QAE@XZ - ??1CordRepExternal@cord_internal@absl@@QAE@XZ - ??1CordRepSubstring@cord_internal@absl@@QAE@XZ ??1ErrnoSaver@base_internal@absl@@QAE@XZ ??1FormatSinkImpl@str_format_internal@absl@@QAE@XZ ??1GraphCycles@synchronization_internal@absl@@QAE@XZ @@ -1094,7 +1090,6 @@ ??1Notification@absl@@QAE@XZ ??1Payload@status_internal@absl@@QAE@XZ ??1PosixTimeZone@cctz@time_internal@absl@@QAE@XZ - ??1Refcount@cord_internal@absl@@QAE@XZ ??1Rep@GraphCycles@synchronization_internal@absl@@QAE@XZ ??1SchedulingHelper@base_internal@absl@@QAE@XZ ??1ScopedDisable@SchedulingGuard@base_internal@absl@@QAE@XZ @@ -1131,6 +1126,7 @@ ??4InlineRep@Cord@absl@@QAEAAV012@ABV012@@Z ??4Payload@status_internal@absl@@QAEAAU012@$$QAU012@@Z ??4Status@absl@@QAEAAV01@$$QAV01@@Z + ??4int128@absl@@QAEAAV01@H@Z ??4uint128@absl@@QAEAAV01@H@Z ??4uint128@absl@@QAEAAV01@_J@Z ??4uint128@absl@@QAEAAV01@_K@Z @@ -1230,6 +1226,7 @@ ??D?$optional@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@absl@@QGAEAAV?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@XZ ??D?$unique_ptr@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@U?$default_delete@V?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@@__1@std@@@__1@std@@QBEAAV?$InlinedVector@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__1@std@@@absl@@XZ ??DChunkIterator@Cord@absl@@QBE?AVstring_view@2@XZ + ??Dabsl@@YA?AVint128@0@V10@0@Z ??Dabsl@@YA?AVuint128@0@V10@0@Z ??E?$__hash_iterator@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@QAEAAV012@XZ ??E?$__hash_map_iterator@V?$__hash_iterator@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@PAX@__1@std@@@__1@std@@@__1@std@@QAEAAV012@XZ @@ -1247,6 +1244,7 @@ ??Gabsl@@YA?AVDuration@0@V10@0@Z ??Gabsl@@YA?AVDuration@0@V10@@Z ??Gabsl@@YA?AVDuration@0@VTime@0@0@Z + ??Gabsl@@YA?AVint128@0@V10@0@Z ??Gabsl@@YA?AVint128@0@V10@@Z ??Gabsl@@YA?AVuint128@0@V10@0@Z ??Gabsl@@YA?AVuint128@0@V10@@Z @@ -1256,6 +1254,7 @@ ??Gdetail@cctz@time_internal@absl@@YA_JV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@0123@0@Z ??Habsl@@YA?AVDuration@0@V10@0@Z ??Habsl@@YA?AVTime@0@V10@VDuration@0@@Z + ??Habsl@@YA?AVint128@0@V10@0@Z ??Habsl@@YA?AVuint128@0@V10@0@Z ??Hdetail@cctz@time_internal@absl@@YA?AV?$civil_time@Uday_tag@detail@cctz@time_internal@absl@@@0123@V40123@_J@Z ??Hdetail@cctz@time_internal@absl@@YA?AV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@0123@V40123@_J@Z @@ -1271,9 +1270,12 @@ ??Mabsl@@YA_NVint128@0@0@Z ??Mabsl@@YA_NVuint128@0@0@Z ??Nabsl@@YA_NVDuration@0@0@Z + ??Nabsl@@YA_NVint128@0@0@Z ??Oabsl@@YA_NVDuration@0@0@Z + ??Oabsl@@YA_NVint128@0@0@Z ??Oabsl@@YA_NVuint128@0@0@Z ??Pabsl@@YA_NVDuration@0@0@Z + ??Pabsl@@YA_NVint128@0@0@Z ??Pabsl@@YA_NVuint128@0@0@Z ??R<lambda_1>@?0???A?$FixedArray@PAUCordRep@cord_internal@absl@@$0PPPPPPPP@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@absl@@QAEAAPAUCordRep@cord_internal@2@I@Z@QBE?A?<auto>@@XZ ??R<lambda_1>@?0???A?$InlinedVector@PAUCordRep@cord_internal@absl@@$0CP@V?$allocator@PAUCordRep@cord_internal@absl@@@__1@std@@@absl@@QAEAAPAUCordRep@cord_internal@2@I@Z@QBE?A?<auto>@@XZ @@ -1334,15 +1336,18 @@ ??Uabsl@@YA?AVuint128@0@V10@0@Z ??XDuration@absl@@QAEAAV01@N@Z ??XDuration@absl@@QAEAAV01@_J@Z + ??Xint128@absl@@QAEAAV01@V01@@Z ??Xuint128@absl@@QAEAAV01@V01@@Z ??Y?$civil_time@Uday_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QAEAAV01234@_J@Z ??Y?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QAEAAV01234@_J@Z ??YDuration@absl@@QAEAAV01@V01@@Z ??YTime@absl@@QAEAAV01@VDuration@1@@Z + ??Yint128@absl@@QAEAAV01@V01@@Z ??Yuint128@absl@@QAEAAV01@V01@@Z ??Z?$civil_time@Uday_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QAEAAV01234@_J@Z ??Z?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QAEAAV01234@_J@Z ??ZDuration@absl@@QAEAAV01@V01@@Z + ??Zint128@absl@@QAEAAV01@V01@@Z ??Zuint128@absl@@QAEAAV01@V01@@Z ??_0Duration@absl@@QAEAAV01@N@Z ??_0Duration@absl@@QAEAAV01@_J@Z @@ -1804,6 +1809,7 @@ ?InstallFailureSignalHandler@absl@@YAXABUFailureSignalHandlerOptions@1@@Z ?Int128High64@absl@@YA_JVint128@1@@Z ?Int128Low64@absl@@YA_KVint128@1@@Z + ?Int128Max@absl@@YA?AVint128@1@XZ ?Int128Min@absl@@YA?AVint128@1@XZ ?InternalAttemptToUseMutexInFatalSignalHandler@Mutex@absl@@SAXXZ ?InternalCondVarPoke@Waiter@synchronization_internal@absl@@AAEXXZ @@ -1817,6 +1823,7 @@ ?IsDataLoss@absl@@YA_NABVStatus@1@@Z ?IsDeadlineExceeded@absl@@YA_NABVStatus@1@@Z ?IsFailedPrecondition@absl@@YA_NABVStatus@1@@Z + ?IsImmortal@Refcount@cord_internal@absl@@QBE_NXZ ?IsInfiniteDuration@time_internal@absl@@YA_NVDuration@2@@Z ?IsInlined@Status@absl@@CA_NI@Z ?IsInternal@absl@@YA_NABVStatus@1@@Z @@ -2855,6 +2862,7 @@ ?lookup@time_zone@cctz@time_internal@absl@@QBE?AUcivil_lookup@1234@ABV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@234@@Z ?max@?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@SA?AV12345@XZ ?max@?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@SA?AV12345@XZ + ?max@?$numeric_limits@Vint128@absl@@@__1@std@@SA?AVint128@absl@@XZ ?max@?$numeric_limits@Vuint128@absl@@@__1@std@@SA?AVuint128@absl@@XZ ?max_load_factor@?$__hash_table@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@V?$__unordered_map_hasher@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$hash@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$__unordered_map_equal@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@23@U?$equal_to@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@@23@$00@23@V?$allocator@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__1@std@@V?$allocator@D@23@@__1@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@@23@@__1@std@@QAEAAMXZ ?max_size@?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__1@std@@QBEIXZ @@ -2892,6 +2900,7 @@ ?message@Status@absl@@QBE?AVstring_view@2@XZ ?min@?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@SA?AV12345@XZ ?min@?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@SA?AV12345@XZ + ?min@?$numeric_limits@Vint128@absl@@@__1@std@@SA?AVint128@absl@@XZ ?minute@?$civil_time@Uminute_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QBEHXZ ?minute@?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@detail@cctz@time_internal@absl@@QBEHXZ ?minute@?$civil_time@Usecond_tag@time_internal@absl@@@detail@cctz@time_internal@absl@@QBEHXZ @@ -2974,6 +2983,7 @@ ?resize@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEXI@Z ?rfind@string_view@absl@@QBEIDI@Z ?rfind@string_view@absl@@QBEIV12@I@Z + ?safe_strto128_base@numbers_internal@absl@@YA_NVstring_view@2@PAVint128@2@H@Z ?safe_strto32_base@numbers_internal@absl@@YA_NVstring_view@2@PAHH@Z ?safe_strto64_base@numbers_internal@absl@@YA_NVstring_view@2@PA_JH@Z ?safe_strtou128_base@numbers_internal@absl@@YA_NVstring_view@2@PAVuint128@2@H@Z
diff --git a/third_party/abseil-cpp/symbols_x86_rel.def b/third_party/abseil-cpp/symbols_x86_rel.def index 7db9eaa..1d00a74 100644 --- a/third_party/abseil-cpp/symbols_x86_rel.def +++ b/third_party/abseil-cpp/symbols_x86_rel.def
@@ -764,6 +764,7 @@ ?resize@?$vector@UTransitionType@cctz@time_internal@absl@@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__1@std@@@__1@std@@QAEXI@Z ?rfind@string_view@absl@@QBEIDI@Z ?rfind@string_view@absl@@QBEIV12@I@Z + ?safe_strto128_base@numbers_internal@absl@@YA_NVstring_view@2@PAVint128@2@H@Z ?safe_strto32_base@numbers_internal@absl@@YA_NVstring_view@2@PAHH@Z ?safe_strto64_base@numbers_internal@absl@@YA_NVstring_view@2@PA_JH@Z ?safe_strtou128_base@numbers_internal@absl@@YA_NVstring_view@2@PAVuint128@2@H@Z
diff --git a/third_party/blink/public/strings/translations/blink_strings_mr.xtb b/third_party/blink/public/strings/translations/blink_strings_mr.xtb index 267de31d..a13ada7e 100644 --- a/third_party/blink/public/strings/translations/blink_strings_mr.xtb +++ b/third_party/blink/public/strings/translations/blink_strings_mr.xtb
@@ -39,7 +39,7 @@ <translation id="1938124657309484470">मूल्य <ph name="MAXIMUM_DATE_OR_TIME" /> किंवा आधीचे असणे आवश्यक आहे.</translation> <translation id="1946271899482435442">तारीख निवडक दाखवा</translation> <translation id="1993104285338243655">मिररिंगवर स्विच केले</translation> -<translation id="2031987842108996681">लाल चॅनेल</translation> +<translation id="2031987842108996681">लाल चॅनल</translation> <translation id="2060505056492490888">'<ph name="DOT" />' '<ph name="INVALIDDOMAIN" />' मध्ये चुकीच्या स्थितीवर वापरले आहे.</translation> <translation id="2148716181193084225">आज</translation> <translation id="2158401438286456825">पेज सूची</translation> @@ -60,7 +60,7 @@ <translation id="2561842179657104141">आणखी मीडिया नियंत्रणे दर्शवा</translation> <translation id="2572483411312390101">प्ले करा</translation> <translation id="2613802280814924224">कृपया एक वैध मूल्य एंटर करा. जवळील वैध मूल्य <ph name="VALID_VALUE" /> आहे.</translation> -<translation id="2634240155926812724">हिरवे चॅनेल</translation> +<translation id="2634240155926812724">हिरवे चॅनल</translation> <translation id="2653659639078652383">सबमिट करा</translation> <translation id="2657045182931379222">ग्राफिक्स ऑब्जेक्ट</translation> <translation id="2674318244760992338">अधोलेख</translation> @@ -120,7 +120,7 @@ <translation id="4718048029184481307">चित्रात-चित्र मध्ये प्ले करत आहे</translation> <translation id="4742539557769756338">कव्हर</translation> <translation id="4748357248530471599">डिस्प्ले कटआउट फुलस्क्रीन टॉगल करा</translation> -<translation id="4757246831282535685">टॅब पॅनेल</translation> +<translation id="4757246831282535685">टॅब पॅनल</translation> <translation id="4763480195061959176">व्हिडिओ</translation> <translation id="479989351350248267">search</translation> <translation id="4812940957355064477">कृपया एक नंबर एंटर करा.</translation> @@ -136,7 +136,7 @@ <translation id="5034860022980953847">प्रगती सूचक</translation> <translation id="5090250355906949916">व्हिडिओ वेळ स्क्रबर</translation> <translation id="5093189678851173835">बोधवाक्य</translation> -<translation id="509897012892853729">निळे चॅनेल</translation> +<translation id="509897012892853729">निळे चॅनल</translation> <translation id="5117590920725113268">पुढील महिना दर्शवा</translation> <translation id="512758898067543763">पंक्ती शीर्षलेख</translation> <translation id="5143125788380636750">उपसंहार</translation> @@ -179,7 +179,7 @@ <translation id="6281588256137006900">फिकटपणा</translation> <translation id="6281763101136022427">url</translation> <translation id="6310801910862476708">चित्रात-चित्र मधून बाहेर पडा</translation> -<translation id="6398862346408813489">महिना निवड पॅनेल दाखवा</translation> +<translation id="6398862346408813489">महिना निवड पॅनल दाखवा</translation> <translation id="6404546809543547843">ऑडिओ वेळ स्क्रबर</translation> <translation id="6443871981718447451">सबटायटल मेनू दाखवा</translation> <translation id="6453774872122745852">श्रेयनिर्देश</translation>
diff --git a/third_party/blink/renderer/core/dom/element.h b/third_party/blink/renderer/core/dom/element.h index 1e6993e..a46e9ab 100644 --- a/third_party/blink/renderer/core/dom/element.h +++ b/third_party/blink/renderer/core/dom/element.h
@@ -316,8 +316,8 @@ double scrollTop(); void setScrollLeft(double); void setScrollTop(double); - int scrollWidth(); - int scrollHeight(); + virtual int scrollWidth(); + virtual int scrollHeight(); void scrollBy(double x, double y); void scrollBy(const ScrollToOptions*);
diff --git a/third_party/blink/renderer/core/editing/editing_utilities.cc b/third_party/blink/renderer/core/editing/editing_utilities.cc index 97ae8719..bcacc0c2 100644 --- a/third_party/blink/renderer/core/editing/editing_utilities.cc +++ b/third_party/blink/renderer/core/editing/editing_utilities.cc
@@ -1348,6 +1348,25 @@ return target_object->PositionForPoint(selection_end_point); } +PositionWithAffinity AdjustForEditingBoundary( + const PositionWithAffinity& position_with_affinity) { + if (position_with_affinity.IsNull()) + return position_with_affinity; + const Position& position = position_with_affinity.GetPosition(); + const Node& node = *position.ComputeContainerNode(); + if (HasEditableStyle(node)) + return position_with_affinity; + const Position& forward = + MostForwardCaretPosition(position, kCanCrossEditingBoundary); + if (HasEditableStyle(*forward.ComputeContainerNode())) + return PositionWithAffinity(forward); + const Position& backward = + MostBackwardCaretPosition(position, kCanCrossEditingBoundary); + if (HasEditableStyle(*backward.ComputeContainerNode())) + return PositionWithAffinity(backward); + return position_with_affinity; +} + Position ComputePositionForNodeRemoval(const Position& position, const Node& node) { if (position.IsNull())
diff --git a/third_party/blink/renderer/core/editing/editing_utilities.h b/third_party/blink/renderer/core/editing/editing_utilities.h index 3abc2ad2..0530c34 100644 --- a/third_party/blink/renderer/core/editing/editing_utilities.h +++ b/third_party/blink/renderer/core/editing/editing_utilities.h
@@ -261,6 +261,17 @@ const Position&, const PhysicalOffset& local_point, Node* target_node); + +// Move specified position to start/end of non-editable region. +// If it can be found, we prefer a visually equivalent position that is +// editable. +// See also LayoutObject::CreatePositionWithAffinity() +// Example: +// <editable><non-editable>|abc</non-editable></editable> +// => +// <editable>|<non-editable>abc</non-editable></editable> +PositionWithAffinity AdjustForEditingBoundary(const PositionWithAffinity&); + Position ComputePositionForNodeRemoval(const Position&, const Node&); // TODO(editing-dev): These two functions should be eliminated.
diff --git a/third_party/blink/renderer/core/editing/layout_selection_test.cc b/third_party/blink/renderer/core/editing/layout_selection_test.cc index 8d14afd7..be608b3a 100644 --- a/third_party/blink/renderer/core/editing/layout_selection_test.cc +++ b/third_party/blink/renderer/core/editing/layout_selection_test.cc
@@ -39,7 +39,7 @@ const LayoutText& layout_text, SelectionState state) { if (layout_text.IsInLayoutNGInlineFormattingContext()) { - NGInlineCursor cursor(*layout_text.RootInlineFormattingContext()); + NGInlineCursor cursor(*layout_text.ContainingNGBlockFlow()); cursor.MoveTo(layout_text); if (!cursor) return; @@ -979,7 +979,7 @@ LayoutSelectionStatus ComputeLayoutSelectionStatus( const LayoutObject& layout_object) const { DCHECK(layout_object.IsText()); - NGInlineCursor cursor(*layout_object.RootInlineFormattingContext()); + NGInlineCursor cursor(*layout_object.ContainingNGBlockFlow()); cursor.MoveTo(layout_object); return Selection().ComputeLayoutSelectionStatus(cursor); }
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 16a7ed3..ed9f122 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
@@ -1784,6 +1784,22 @@ return input_type_->MatchesDefaultPseudoClass(); } +int HTMLInputElement::scrollWidth() { + // If in preview state, fake the scroll width to prevent that any information + // about the suggested content can be derived from the size. + if (IsTextField() && !SuggestedValue().IsEmpty()) + return clientWidth(); + return TextControlElement::scrollWidth(); +} + +int HTMLInputElement::scrollHeight() { + // If in preview state, fake the scroll height to prevent that any information + // about the suggested content can be derived from the size. + if (IsTextField() && !SuggestedValue().IsEmpty()) + return clientHeight(); + return TextControlElement::scrollHeight(); +} + bool HTMLInputElement::ShouldAppearChecked() const { return checked() && input_type_->IsCheckable(); }
diff --git a/third_party/blink/renderer/core/html/forms/html_input_element.h b/third_party/blink/renderer/core/html/forms/html_input_element.h index b8eaae0..77a311d 100644 --- a/third_party/blink/renderer/core/html/forms/html_input_element.h +++ b/third_party/blink/renderer/core/html/forms/html_input_element.h
@@ -374,8 +374,9 @@ bool IsInteractiveContent() const final; bool IsLabelable() const final; bool MatchesDefaultPseudoClass() const override; - bool IsTextControl() const final { return IsTextField(); } + int scrollWidth() override; + int scrollHeight() override; bool CanTriggerImplicitSubmission() const final { return IsTextField(); }
diff --git a/third_party/blink/renderer/core/html/forms/html_text_area_element.cc b/third_party/blink/renderer/core/html/forms/html_text_area_element.cc index 95c97136..a981645 100644 --- a/third_party/blink/renderer/core/html/forms/html_text_area_element.cc +++ b/third_party/blink/renderer/core/html/forms/html_text_area_element.cc
@@ -47,6 +47,8 @@ #include "third_party/blink/renderer/core/html/parser/html_parser_idioms.h" #include "third_party/blink/renderer/core/html/shadow/shadow_element_names.h" #include "third_party/blink/renderer/core/html_names.h" +#include "third_party/blink/renderer/core/layout/adjust_for_absolute_zoom.h" +#include "third_party/blink/renderer/core/layout/layout_box.h" #include "third_party/blink/renderer/core/layout/layout_object.h" #include "third_party/blink/renderer/core/layout/layout_object_factory.h" #include "third_party/blink/renderer/core/page/chrome_client.h" @@ -106,6 +108,42 @@ setValue(state[0]); } +int HTMLTextAreaElement::scrollWidth() { + if (SuggestedValue().IsEmpty()) + return TextControlElement::scrollWidth(); + // If in preview state, fake the scroll width to prevent that any information + // about the suggested content can be derived from the size. + GetDocument().UpdateStyleAndLayoutForNode(this, + DocumentUpdateReason::kJavaScript); + auto* editor = InnerEditorElement(); + auto* editor_box = editor ? editor->GetLayoutBox() : nullptr; + auto* box = GetLayoutBox(); + if (!box || !editor_box) + return TextControlElement::scrollWidth(); + LayoutUnit width = + editor_box->ClientWidth() + box->PaddingLeft() + box->PaddingRight(); + return AdjustForAbsoluteZoom::AdjustLayoutUnit(width, box->StyleRef()) + .Round(); +} + +int HTMLTextAreaElement::scrollHeight() { + if (SuggestedValue().IsEmpty()) + return TextControlElement::scrollHeight(); + // If in preview state, fake the scroll height to prevent that any + // information about the suggested content can be derived from the size. + GetDocument().UpdateStyleAndLayoutForNode(this, + DocumentUpdateReason::kJavaScript); + auto* editor = InnerEditorElement(); + auto* editor_box = editor ? editor->GetLayoutBox() : nullptr; + auto* box = GetLayoutBox(); + if (!box || !editor_box) + return TextControlElement::scrollHeight(); + LayoutUnit height = + editor_box->ClientHeight() + box->PaddingTop() + box->PaddingBottom(); + return AdjustForAbsoluteZoom::AdjustLayoutUnit(height, box->StyleRef()) + .Round(); +} + void HTMLTextAreaElement::ChildrenChanged(const ChildrenChange& change) { HTMLElement::ChildrenChanged(change); SetLastChangeWasNotUserEdit();
diff --git a/third_party/blink/renderer/core/html/forms/html_text_area_element.h b/third_party/blink/renderer/core/html/forms/html_text_area_element.h index c490877..e5181409 100644 --- a/third_party/blink/renderer/core/html/forms/html_text_area_element.h +++ b/third_party/blink/renderer/core/html/forms/html_text_area_element.h
@@ -109,7 +109,8 @@ void RestoreFormControlState(const FormControlState&) override; bool IsTextControl() const override { return true; } - + int scrollWidth() override; + int scrollHeight() override; void ChildrenChanged(const ChildrenChange&) override; void ParseAttribute(const AttributeModificationParams&) override; bool IsPresentationAttribute(const QualifiedName&) const override;
diff --git a/third_party/blink/renderer/core/layout/hit_test_result.cc b/third_party/blink/renderer/core/layout/hit_test_result.cc index 1359aa6b..0fcccd8 100644 --- a/third_party/blink/renderer/core/layout/hit_test_result.cc +++ b/third_party/blink/renderer/core/layout/hit_test_result.cc
@@ -41,6 +41,7 @@ #include "third_party/blink/renderer/core/input_type_names.h" #include "third_party/blink/renderer/core/layout/layout_block.h" #include "third_party/blink/renderer/core/layout/layout_image.h" +#include "third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h" #include "third_party/blink/renderer/core/page/page.h" #include "third_party/blink/renderer/core/page/scrolling/top_document_root_scroller_controller.h" #include "third_party/blink/renderer/core/scroll/scrollbar.h" @@ -73,6 +74,7 @@ local_point_(other.LocalPoint()), inner_url_element_(other.URLElement()), scrollbar_(other.GetScrollbar()), + box_fragment_(other.box_fragment_), is_over_embedded_content_view_(other.IsOverEmbeddedContentView()), canvas_region_id_(other.CanvasRegionId()) { // Only copy the NodeSet in case of list hit test. @@ -100,6 +102,7 @@ local_point_ == other.LocalPoint() && inner_url_element_ == other.URLElement() && scrollbar_ == other.GetScrollbar() && + box_fragment_ == other.box_fragment_ && is_over_embedded_content_view_ == other.IsOverEmbeddedContentView(); } @@ -117,6 +120,8 @@ local_point_ = other.LocalPoint(); inner_url_element_ = other.URLElement(); scrollbar_ = other.GetScrollbar(); + box_fragment_ = other.box_fragment_; + is_over_embedded_content_view_ = other.IsOverEmbeddedContentView(); cacheable_ = other.cacheable_; canvas_region_id_ = other.CanvasRegionId(); @@ -138,6 +143,14 @@ visitor->Trace(list_based_test_result_); } +void HitTestResult::SetNodeAndPosition( + Node* node, + scoped_refptr<const NGPhysicalBoxFragment> box_fragment, + const PhysicalOffset& position) { + SetNodeAndPosition(node, position); + box_fragment_ = std::move(box_fragment); +} + PositionWithAffinity HitTestResult::GetPosition() const { if (!inner_possibly_pseudo_node_) return PositionWithAffinity(); @@ -149,6 +162,10 @@ return PositionWithAffinity(MostForwardCaretPosition( Position(inner_node_, PositionAnchorType::kBeforeChildren))); } + // TODO(mstensho): Remove check for Items() when the code is ready + // for it. Right now it doesn't support block children. + if (box_fragment_ && box_fragment_->Items()) + return box_fragment_->PositionForPoint(LocalPoint()); return layout_object->PositionForPoint(LocalPoint()); }
diff --git a/third_party/blink/renderer/core/layout/hit_test_result.h b/third_party/blink/renderer/core/layout/hit_test_result.h index e1ec69b..d500982 100644 --- a/third_party/blink/renderer/core/layout/hit_test_result.h +++ b/third_party/blink/renderer/core/layout/hit_test_result.h
@@ -45,6 +45,7 @@ class Image; class KURL; class MediaStreamDescriptor; +class NGPhysicalBoxFragment; class Node; class LayoutObject; class Region; @@ -119,6 +120,9 @@ local_point_ = p; SetInnerNode(node); } + void SetNodeAndPosition(Node*, + scoped_refptr<const NGPhysicalBoxFragment>, + const PhysicalOffset&); PositionWithAffinity GetPosition() const; LayoutObject* GetLayoutObject() const; @@ -206,6 +210,7 @@ // For non-URL, this is the enclosing that triggers navigation. Member<Element> inner_url_element_; Member<Scrollbar> scrollbar_; + scoped_refptr<const NGPhysicalBoxFragment> box_fragment_; // Returns true if we are over a EmbeddedContentView (and not in the // border/padding area of a LayoutEmbeddedContent for example). bool is_over_embedded_content_view_;
diff --git a/third_party/blink/renderer/core/layout/layout_inline.cc b/third_party/blink/renderer/core/layout/layout_inline.cc index c564acc..07fee00 100644 --- a/third_party/blink/renderer/core/layout/layout_inline.cc +++ b/third_party/blink/renderer/core/layout/layout_inline.cc
@@ -59,6 +59,7 @@ // TODO(layout-dev): Once we generate fragment for all inline element, we should // use |LayoutObject::EnclosingBlockFlowFragment()|. +// TODO(crbug.com/1061423): Shouldn't assume that there's only one fragment. const NGPhysicalBoxFragment* ContainingBlockFlowFragmentOf( const LayoutInline& node) { if (!RuntimeEnabledFeatures::LayoutNGEnabled())
diff --git a/third_party/blink/renderer/core/layout/layout_object.cc b/third_party/blink/renderer/core/layout/layout_object.cc index b284434..c756fa04 100644 --- a/third_party/blink/renderer/core/layout/layout_object.cc +++ b/third_party/blink/renderer/core/layout/layout_object.cc
@@ -886,20 +886,6 @@ return nullptr; } -LayoutBlockFlow* LayoutObject::RootInlineFormattingContext() const { - NOT_DESTROYED(); - for (LayoutObject* parent = Parent(); parent; parent = parent->Parent()) { - if (auto* block_flow = DynamicTo<LayoutBlockFlow>(parent)) { - // Skip |LayoutFlowThread| because it is skipped when finding the first - // child in |GetLayoutObjectForFirstChildNode|. - if (UNLIKELY(block_flow->IsLayoutFlowThread())) - return DynamicTo<LayoutBlockFlow>(block_flow->Parent()); - return block_flow; - } - } - return nullptr; -} - LayoutBlockFlow* LayoutObject::FragmentItemsContainer() const { NOT_DESTROYED(); for (LayoutObject* parent = Parent(); parent; parent = parent->Parent()) { @@ -914,12 +900,15 @@ DCHECK(IsInline()); if (!RuntimeEnabledFeatures::LayoutNGEnabled()) return nullptr; - if (LayoutObject* parent = Parent()) { - LayoutBox* box = parent->EnclosingBox(); - DCHECK(box); - if (NGBlockNode::CanUseNewLayout(*box)) { - DCHECK(box->IsLayoutBlockFlow()); - return To<LayoutBlockFlow>(box); + for (LayoutObject* parent = Parent(); parent; parent = parent->Parent()) { + if (auto* block_flow = DynamicTo<LayoutBlockFlow>(parent)) { + // Skip |LayoutFlowThread| because it is skipped when finding the first + // child in |GetLayoutObjectForFirstChildNode|. + if (UNLIKELY(block_flow->IsLayoutFlowThread())) + block_flow = DynamicTo<LayoutBlockFlow>(block_flow->Parent()); + if (!NGBlockNode::CanUseNewLayout(*block_flow)) + return nullptr; + return block_flow; } } return nullptr;
diff --git a/third_party/blink/renderer/core/layout/layout_object.h b/third_party/blink/renderer/core/layout/layout_object.h index 5f1ae94c..c095883 100644 --- a/third_party/blink/renderer/core/layout/layout_object.h +++ b/third_party/blink/renderer/core/layout/layout_object.h
@@ -439,25 +439,26 @@ LayoutBox* EnclosingScrollableBox() const; - // Returns the root of the inline formatting context |this| belongs to. |this| - // must be |IsInline()|. The root is the object that holds |NGInlineNodeData| - // and the root |NGPaintFragment| if it's in LayoutNG context. See also - // |ContainingFragmentainer()|. - LayoutBlockFlow* RootInlineFormattingContext() const; - // Returns the |LayoutBlockFlow| that has |NGFragmentItems| for |this|. This - // is usually the same as |RootInlineFormattingContext()|, but it is the child - // of that when the IFC has multicol applied. TODO(crbug.com/1076470) + // is usually the same as |ContainingNGBlockFlow()|, but it is the child of + // that when the IFC has multicol applied. TODO(crbug.com/1076470) LayoutBlockFlow* FragmentItemsContainer() const; // Returns the containing block flow if it's a LayoutNGBlockFlow, or nullptr // otherwise. Note that the semantics is different from |EnclosingBox| for // atomic inlines that this function returns the container, while // |EnclosingBox| returns the atomic inline itself. + // + // |this| must be |IsInline()|. The root is the object that holds + // |NGInlineNodeData| and the root |NGPaintFragment| if it's in + // LayoutNG context. LayoutBlockFlow* ContainingNGBlockFlow() const; // Returns |NGPhysicalBoxFragment| for |ContainingNGBlockFlow()| or nullptr // otherwise. + // + // TODO(crbug.com/1061423): Remove this method. We shouldn't assume + // that there's only one fragment. const NGPhysicalBoxFragment* ContainingBlockFlowFragment() const; // Function to return our enclosing flow thread if we are contained inside
diff --git a/third_party/blink/renderer/core/layout/layout_replaced.cc b/third_party/blink/renderer/core/layout/layout_replaced.cc index 79363de..936df63 100644 --- a/third_party/blink/renderer/core/layout/layout_replaced.cc +++ b/third_party/blink/renderer/core/layout/layout_replaced.cc
@@ -972,10 +972,12 @@ const std::pair<LayoutUnit, LayoutUnit> fallback( layout_replaced.LogicalTop(), layout_replaced.LogicalBottom()); - const NGPhysicalBoxFragment* fragmentainer = + // TODO(crbug.com/1061423): Shouldn't assume that there's only one + // fragment. + const NGPhysicalBoxFragment* fragment = layout_replaced.IsInline() ? layout_replaced.ContainingBlockFlowFragment() : nullptr; - if (fragmentainer) { + if (fragment) { // Step 1: Find the line box containing |layout_replaced|. NGInlineCursor line_box; line_box.MoveTo(layout_replaced); @@ -994,7 +996,7 @@ line_box.Current().OffsetInContainerBlock(); const PhysicalSize line_box_size = line_box.Current().Size(); const LogicalOffset logical_offset = line_box_offset.ConvertToLogical( - writing_direction, fragmentainer->Size(), line_box.Current().Size()); + writing_direction, fragment->Size(), line_box.Current().Size()); const LogicalSize logical_size = line_box_size.ConvertToLogical(writing_direction.GetWritingMode()); return {logical_offset.block_offset,
diff --git a/third_party/blink/renderer/core/layout/layout_text.cc b/third_party/blink/renderer/core/layout/layout_text.cc index 0ce3780..4507939 100644 --- a/third_party/blink/renderer/core/layout/layout_text.cc +++ b/third_party/blink/renderer/core/layout/layout_text.cc
@@ -2320,7 +2320,7 @@ const FrameSelection& frame_selection = GetFrame()->Selection(); if (IsInLayoutNGInlineFormattingContext()) { PhysicalRect rect; - NGInlineCursor cursor(*RootInlineFormattingContext()); + NGInlineCursor cursor(*ContainingNGBlockFlow()); for (cursor.MoveTo(*this); cursor; cursor.MoveToNextForSameLayoutObject()) { if (cursor.Current().IsHiddenForPaint()) continue;
diff --git a/third_party/blink/renderer/core/layout/layout_text_control_multi_line.cc b/third_party/blink/renderer/core/layout/layout_text_control_multi_line.cc index fa608856..0a257b7 100644 --- a/third_party/blink/renderer/core/layout/layout_text_control_multi_line.cc +++ b/third_party/blink/renderer/core/layout/layout_text_control_multi_line.cc
@@ -85,22 +85,4 @@ return placeholder_layout_object; } -LayoutUnit LayoutTextControlMultiLine::ScrollWidth() const { - NOT_DESTROYED(); - // If in preview state, fake the scroll width to prevent that any information - // about the suggested content can be derived from the size. - if (!GetTextControlElement()->SuggestedValue().IsEmpty()) - return ClientWidth(); - return LayoutTextControl::ScrollWidth(); -} - -LayoutUnit LayoutTextControlMultiLine::ScrollHeight() const { - NOT_DESTROYED(); - // If in preview state, fake the scroll height to prevent that any information - // about the suggested content can be derived from the size. - if (!GetTextControlElement()->SuggestedValue().IsEmpty()) - return ClientHeight(); - return LayoutTextControl::ScrollHeight(); -} - } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/layout_text_control_multi_line.h b/third_party/blink/renderer/core/layout/layout_text_control_multi_line.h index 2d6975b..be54347 100644 --- a/third_party/blink/renderer/core/layout/layout_text_control_multi_line.h +++ b/third_party/blink/renderer/core/layout/layout_text_control_multi_line.h
@@ -58,9 +58,6 @@ LayoutObject* LayoutSpecialExcludedChild(bool relayout_children, SubtreeLayoutScope&) override; - - LayoutUnit ScrollWidth() const override; - LayoutUnit ScrollHeight() const override; }; } // namespace blink
diff --git a/third_party/blink/renderer/core/layout/layout_text_control_single_line.cc b/third_party/blink/renderer/core/layout/layout_text_control_single_line.cc index 61c86ae..9f64b622 100644 --- a/third_party/blink/renderer/core/layout/layout_text_control_single_line.cc +++ b/third_party/blink/renderer/core/layout/layout_text_control_single_line.cc
@@ -179,11 +179,7 @@ LayoutUnit LayoutTextControlSingleLine::ScrollWidth() const { NOT_DESTROYED(); - // If in preview state, fake the scroll width to prevent that any information - // about the suggested content can be derived from the size. - if (!GetTextControlElement()->SuggestedValue().IsEmpty()) - return ClientWidth(); - + // TODO(crbug.com/1040826): Move this logic to HTMLInputElement::scrollWidth. if (LayoutBox* inner = InnerEditorElement() ? InnerEditorElement()->GetLayoutBox() : nullptr) { @@ -197,11 +193,7 @@ LayoutUnit LayoutTextControlSingleLine::ScrollHeight() const { NOT_DESTROYED(); - // If in preview state, fake the scroll height to prevent that any information - // about the suggested content can be derived from the size. - if (!GetTextControlElement()->SuggestedValue().IsEmpty()) - return ClientHeight(); - + // TODO(crbug.com/1040826): Move this logic to HTMLInputElement::scrollHeight. if (LayoutBox* inner = InnerEditorElement() ? InnerEditorElement()->GetLayoutBox() : nullptr) {
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_rect.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_rect.cc index 6bef0e6..c3786c7 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_caret_rect.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_caret_rect.cc
@@ -103,7 +103,9 @@ cursor.Current().OffsetInContainerBlock(); const PhysicalSize caret_size(caret_width, caret_height); - const NGPhysicalBoxFragment& fragmentainer = + // TODO(crbug.com/1061423): Shouldn't assume that there's only one + // fragment. + const NGPhysicalBoxFragment& fragment = *cursor.Current().GetLayoutObject()->ContainingBlockFlowFragment(); NGInlineCursor line_box(cursor); line_box.MoveToContainingLine(); @@ -115,7 +117,7 @@ *line_box.Current().InlineBreakToken(); const bool is_last_line = break_token.IsFinished() || break_token.IsForcedBreak(); - const ComputedStyle& block_style = fragmentainer.Style(); + const ComputedStyle& block_style = fragment.Style(); bool should_align_caret_right = ShouldAlignCaretRight(block_style.GetTextAlign(is_last_line), block_style.Direction()) && @@ -133,7 +135,7 @@ std::min(caret_location.left, line_box_rect.Right() - caret_width); } else { const LayoutUnit right_edge = - std::max(fragmentainer.Size().width, line_box_rect.Right()); + std::max(fragment.Size().width, line_box_rect.Right()); caret_location.left = std::min(caret_location.left, right_edge - caret_width); caret_location.left = std::max(caret_location.left, line_box_rect.X()); @@ -146,7 +148,7 @@ const LayoutUnit min_y = std::min(LayoutUnit(), line_box_offset.top); caret_location.top = std::max(caret_location.top, min_y); const LayoutUnit max_y = - std::max(fragmentainer.Size().height, line_box_rect.Bottom()); + std::max(fragment.Size().height, line_box_rect.Bottom()); caret_location.top = std::min(caret_location.top, max_y - caret_height); caret_location.top = LayoutUnit(caret_location.top.Round()); return PhysicalRect(caret_location, caret_size);
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.cc index ae9aacd9..cccc653 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_cursor.cc
@@ -141,14 +141,14 @@ DynamicTo<LayoutBlockFlow>(layout_object)) return block_flow; DCHECK(layout_object->IsLayoutInline()); - return layout_object->RootInlineFormattingContext(); + return layout_object->ContainingNGBlockFlow(); } if (IsItemCursor()) { const NGFragmentItem& item = fragment_items_->front(); const LayoutObject* layout_object = item.GetLayoutObject(); if (item.Type() == NGFragmentItem::kLine) return To<LayoutBlockFlow>(layout_object); - return layout_object->RootInlineFormattingContext(); + return layout_object->ContainingNGBlockFlow(); } NOTREACHED(); return nullptr; @@ -420,11 +420,9 @@ } if (IsAtomicInline()) { - const NGPhysicalBoxFragment* fragmentainer = - GetLayoutObject()->ContainingBlockFlowFragment(); - DCHECK(fragmentainer); + DCHECK(GetLayoutObject()->ContainingNGBlockFlow()); const LayoutBlockFlow& block_flow = - *To<LayoutBlockFlow>(fragmentainer->GetLayoutObject()); + *GetLayoutObject()->ContainingNGBlockFlow(); const Vector<NGInlineItem> items = block_flow.GetNGInlineNodeData()->ItemsData(UsesFirstLineStyle()).items; const LayoutObject* const layout_object = GetLayoutObject(); @@ -1532,8 +1530,7 @@ // If this cursor is rootless, find the root of the inline formatting // context. if (!HasRoot()) { - const LayoutBlockFlow& root = - *layout_object.RootInlineFormattingContext(); + const LayoutBlockFlow& root = *layout_object.ContainingNGBlockFlow(); DCHECK(&root); SetRoot(root); if (!HasRoot()) {
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item_result.h b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item_result.h index df14bd22..2e759623 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item_result.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_item_result.h
@@ -67,7 +67,9 @@ // is needed in the line breaker. scoped_refptr<const ShapeResultView> shape_result; - // Hyphen character and its |ShapeResult| if this text is hyphenated. + // Hyphen character and its |ShapeResult|. + // Use |is_hyphenated| to determine whether this item is hyphenated or not. + // These fields may be set even when this item is not hyphenated. String hyphen_string; scoped_refptr<const ShapeResult> hyphen_shape_result; @@ -131,6 +133,10 @@ // position) any unpositioned floats. bool has_unpositioned_floats = false; + // True if this is hyphenated. The hyphen is in |hyphen_string| and + // |hyphen_shape_result|. + bool is_hyphenated = false; + NGInlineItemResult(); NGInlineItemResult(const NGInlineItem*, unsigned index,
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc index 50d7a57c..90603e1 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_inline_layout_algorithm.cc
@@ -239,7 +239,9 @@ DCHECK(item.TextType() == NGTextType::kNormal || item.TextType() == NGTextType::kSymbolMarker); - if (UNLIKELY(item_result.hyphen_shape_result)) { + if (UNLIKELY(item_result.is_hyphenated)) { + DCHECK(item_result.hyphen_string); + DCHECK(item_result.hyphen_shape_result); LayoutUnit hyphen_inline_size = item_result.HyphenInlineSize(); line_box->AddChild(item, std::move(item_result.shape_result), item_result.TextOffset(), box->text_top,
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc index d9c90fd..10fa50d 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.cc
@@ -134,18 +134,6 @@ return inline_end_size; } -void CreateHyphen(NGInlineNode node, - WritingMode writing_mode, - const NGInlineItem& item, - NGInlineItemResult* item_result) { - DCHECK(item.Style()); - const ComputedStyle& style = *item.Style(); - TextDirection direction = style.Direction(); - item_result->hyphen_string = style.HyphenString(); - HarfBuzzShaper shaper(item_result->hyphen_string); - item_result->hyphen_shape_result = shaper.Shape(&style.GetFont(), direction); -} - } // namespace inline void NGLineBreaker::ClearNeedsLayout(const NGInlineItem& item) { @@ -318,6 +306,97 @@ DCHECK_GE(available_width_, cloned_box_decorations_initial_size_); } +// Add a hyphen string to the |NGInlineItemResult|. +// +// This function changes |NGInlineItemResult::inline_size|, but does not change +// |position_| +LayoutUnit NGLineBreaker::AddHyphen(NGInlineItemResults* item_results, + wtf_size_t index, + NGInlineItemResult* item_result, + const NGInlineItem& item) { + DCHECK(!HasHyphen()); + DCHECK_EQ(index, + static_cast<wtf_size_t>(item_result - item_results->begin())); + DCHECK_LT(index, item_results->size()); + hyphen_index_ = index; + + if (!item_result->hyphen_string) { + DCHECK(!item_result->hyphen_shape_result); + DCHECK(item.Style()); + const ComputedStyle& style = *item.Style(); + DCHECK(!item_result->hyphen_string); + item_result->hyphen_string = style.HyphenString(); + HarfBuzzShaper shaper(item_result->hyphen_string); + item_result->hyphen_shape_result = + shaper.Shape(&style.GetFont(), style.Direction()); + has_any_hyphens_ = true; + } + DCHECK(item_result->hyphen_string); + DCHECK(item_result->hyphen_shape_result); + DCHECK(has_any_hyphens_); + + const LayoutUnit hyphen_inline_size = item_result->HyphenInlineSize(); + item_result->inline_size += hyphen_inline_size; + return hyphen_inline_size; +} + +LayoutUnit NGLineBreaker::AddHyphen(NGInlineItemResults* item_results, + wtf_size_t index) { + NGInlineItemResult* item_result = &(*item_results)[index]; + DCHECK(item_result->item); + return AddHyphen(item_results, index, item_result, *item_result->item); +} + +LayoutUnit NGLineBreaker::AddHyphen(NGInlineItemResults* item_results, + NGInlineItemResult* item_result, + const NGInlineItem& item) { + return AddHyphen(item_results, item_result - item_results->begin(), + item_result, item); +} + +// Remove the hyphen string from the |NGInlineItemResult|. +// +// This function changes |NGInlineItemResult::inline_size|, but does not change +// |position_| +LayoutUnit NGLineBreaker::RemoveHyphen(NGInlineItemResults* item_results) { + DCHECK(HasHyphen()); + NGInlineItemResult* item_result = &(*item_results)[*hyphen_index_]; + DCHECK(item_result->hyphen_string); + DCHECK(item_result->hyphen_shape_result); + const LayoutUnit hyphen_inline_size = item_result->HyphenInlineSize(); + item_result->inline_size -= hyphen_inline_size; + // |hyphen_string| and |hyphen_shape_result| may be reused when rewinded. + hyphen_index_.reset(); + return hyphen_inline_size; +} + +// Add a hyphen string to the last inflow item in |item_results| if it is +// hyphenated. This can restore the hyphenation state after rewind. +void NGLineBreaker::RestoreLastHyphen(NGInlineItemResults* item_results) { + DCHECK(!hyphen_index_); + DCHECK(has_any_hyphens_); + for (NGInlineItemResult& item_result : base::Reversed(*item_results)) { + DCHECK(item_result.item); + const NGInlineItem& item = *item_result.item; + if (item_result.hyphen_string) { + AddHyphen(item_results, &item_result, item); + return; + } + if (item.Type() == NGInlineItem::kText || + item.Type() == NGInlineItem::kAtomicInline) + return; + } +} + +// Set the final hyphenation results to |item_results|. +void NGLineBreaker::FinalizeHyphen(NGInlineItemResults* item_results) { + DCHECK(HasHyphen()); + NGInlineItemResult* item_result = &(*item_results)[*hyphen_index_]; + DCHECK(item_result->hyphen_string); + DCHECK(item_result->hyphen_shape_result); + item_result->is_hyphenated = true; +} + // Initialize internal states for the next line. void NGLineBreaker::PrepareNextLine(NGLineInfo* line_info) { // NGLineInfo is not supposed to be re-used because it's not much gain and to @@ -357,6 +436,8 @@ SetCurrentStyle(line_info->LineStyle()); ComputeBaseDirection(); line_info->SetBaseDirection(base_direction_); + hyphen_index_.reset(); + has_any_hyphens_ = false; // Use 'text-indent' as the initial position. This lets tab positions to align // regardless of 'text-indent'. @@ -375,6 +456,8 @@ NGLineInfo* line_info) { PrepareNextLine(line_info); BreakLine(percentage_resolution_block_size_for_min_max, line_info); + if (UNLIKELY(HasHyphen())) + FinalizeHyphen(line_info->MutableResults()); RemoveTrailingCollapsibleSpace(line_info); const NGInlineItemResults& item_results = line_info->Results(); @@ -420,6 +503,8 @@ // Still check overflow because the last item may have overflowed. if (HandleOverflowIfNeeded(line_info) && item_index_ != items.size()) continue; + if (UNLIKELY(HasHyphen())) + position_ -= RemoveHyphen(line_info->MutableResults()); line_info->SetIsLastLine(true); return; } @@ -594,6 +679,9 @@ return; } + if (UNLIKELY(HasHyphen())) + position_ -= RemoveHyphen(line_info->MutableResults()); + NGInlineItemResult* item_result = AddItem(item, line_info); item_result->should_create_line_box = true; // Try to commit |pending_end_overhang_| of a prior NGInlineItemResult. @@ -711,6 +799,11 @@ DCHECK(&item_shape_result); item.AssertOffset(item_result->StartOffset()); + // The hyphenation state should be cleared before the entry. This function + // may reset it, but this function cannot determine whether it should update + // |position_| or not. + DCHECK(!HasHyphen()); + DCHECK_EQ(item_shape_result.StartIndex(), item.StartOffset()); DCHECK_EQ(item_shape_result.EndIndex(), item.EndOffset()); struct ShapeCallbackContext { @@ -778,27 +871,23 @@ CHECK_GT(result.break_offset, item_result->StartOffset()); inline_size = shape_result->SnappedWidth().ClampNegativeToZero(); + item_result->inline_size = inline_size; if (UNLIKELY(result.is_hyphenated)) { - const WritingMode writing_mode = constraint_space_.GetWritingMode(); - CreateHyphen(node_, writing_mode, item, item_result); - DCHECK(item_result->hyphen_shape_result); - DCHECK(item_result->hyphen_string); - LayoutUnit hyphen_inline_size = item_result->HyphenInlineSize(); + NGInlineItemResults* item_results = line_info->MutableResults(); + const LayoutUnit hyphen_inline_size = + AddHyphen(item_results, item_result, item); // If the hyphen overflows, retry with the reduced available width. if (!result.is_overflow && inline_size <= available_width) { - LayoutUnit space_for_hyphen = + const LayoutUnit space_for_hyphen = available_width_with_hyphens - inline_size; if (space_for_hyphen >= 0 && hyphen_inline_size > space_for_hyphen) { available_width -= hyphen_inline_size; + RemoveHyphen(item_results); continue; } } - inline_size += hyphen_inline_size; - } else if (UNLIKELY(item_result->hyphen_shape_result)) { - item_result->hyphen_shape_result = nullptr; - item_result->hyphen_string = String(); + inline_size = item_result->inline_size; } - item_result->inline_size = inline_size; item_result->text_offset.end = result.break_offset; item_result->text_offset.AssertNotEmpty(); item_result->non_hangable_run_end = result.non_hangable_run_end; @@ -1333,11 +1422,14 @@ break; } + if (UNLIKELY(HasHyphen())) + position_ -= RemoveHyphen(line_info->MutableResults()); is_after_forced_break_ = true; line_info->SetIsLastLine(true); state_ = LineBreakState::kDone; return; } + DCHECK_EQ(item.TextType(), NGTextType::kFlowControl); UChar character = Text()[item.StartOffset()]; switch (character) { @@ -1463,6 +1555,11 @@ line_info->SetHasOverflow(false); } + // Last item may have ended with a hyphen, because at that point the line may + // have ended there. Remove it because there are more items. + if (UNLIKELY(HasHyphen())) + position_ -= RemoveHyphen(line_info->MutableResults()); + // When we're just computing min/max content sizes, we can skip the full // layout and just compute those sizes. On the other hand, for regular // layout we need to do the full layout and get the layout result. @@ -1813,8 +1910,13 @@ // True if there is at least one item that has `break-word`. bool has_break_anywhere_if_overflow = break_anywhere_if_overflow_; - // Search for a break opportunity that can fit. + // Save the hyphenation states before we may make changes. NGInlineItemResults* item_results = line_info->MutableResults(); + base::Optional<wtf_size_t> hyphen_index_before = hyphen_index_; + if (UNLIKELY(HasHyphen())) + position_ -= RemoveHyphen(item_results); + + // Search for a break opportunity that can fit. for (unsigned i = item_results->size(); i;) { NGInlineItemResult* item_result = &(*item_results)[--i]; has_break_anywhere_if_overflow |= item_result->break_anywhere_if_overflow; @@ -1903,6 +2005,8 @@ } // Failed to break to fit. Restore to the original state. + if (UNLIKELY(HasHyphen())) + RemoveHyphen(item_results); *item_result = std::move(item_result_before); SetCurrentStyle(*was_current_style); } @@ -1926,6 +2030,11 @@ // Let this line overflow. line_info->SetHasOverflow(); + // Restore the hyphenation states to before the loop if needed. + DCHECK(!HasHyphen()); + if (UNLIKELY(hyphen_index_before)) + position_ += AddHyphen(item_results, *hyphen_index_before); + // If there was a break opportunity, the overflow should stop there. if (break_before) { RewindOverflow(break_before, line_info); @@ -2067,6 +2176,8 @@ DCHECK(item_results[new_end].can_break_after); ++new_end; if (new_end == item_results.size()) { + if (UNLIKELY(!hyphen_index_ && has_any_hyphens_)) + RestoreLastHyphen(&item_results); position_ = line_info->ComputeWidth(); return; } @@ -2085,6 +2196,8 @@ // still better than rewinding them. new_end = i + 1; if (new_end == item_results.size()) { + if (UNLIKELY(!hyphen_index_ && has_any_hyphens_)) + RestoreLastHyphen(&item_results); position_ = line_info->ComputeWidth(); return; } @@ -2128,8 +2241,11 @@ item_results.Shrink(new_end); trailing_collapsible_space_.reset(); + if (UNLIKELY(hyphen_index_ && *hyphen_index_ >= new_end)) + hyphen_index_.reset(); + if (UNLIKELY(!hyphen_index_ && has_any_hyphens_)) + RestoreLastHyphen(&item_results); position_ = line_info->ComputeWidth(); - if (UNLIKELY(has_cloned_box_decorations_)) RecalcClonedBoxDecorations(); }
diff --git a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h index 95f24b1..89f3a162 100644 --- a/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h +++ b/third_party/blink/renderer/core/layout/ng/inline/ng_line_breaker.h
@@ -220,6 +220,20 @@ void ClearNeedsLayout(const NGInlineItem& item); + // True if the current line is hyphenated. + bool HasHyphen() const { return hyphen_index_.has_value(); } + LayoutUnit AddHyphen(NGInlineItemResults* item_results, + wtf_size_t index, + NGInlineItemResult* item_result, + const NGInlineItem& item); + LayoutUnit AddHyphen(NGInlineItemResults* item_results, wtf_size_t index); + LayoutUnit AddHyphen(NGInlineItemResults* item_results, + NGInlineItemResult* item_result, + const NGInlineItem& item); + LayoutUnit RemoveHyphen(NGInlineItemResults* item_results); + void RestoreLastHyphen(NGInlineItemResults* item_results); + void FinalizeHyphen(NGInlineItemResults* item_results); + // Represents the current offset of the input. LineBreakState state_; unsigned item_index_ = 0; @@ -291,6 +305,9 @@ bool previous_line_had_forced_break_ = false; const Hyphenation* hyphenation_ = nullptr; + base::Optional<wtf_size_t> hyphen_index_; + bool has_any_hyphens_ = false; + // Cache the result of |ComputeTrailingCollapsibleSpace| to avoid shaping // multiple times. struct TrailingCollapsibleSpace {
diff --git a/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow_mixin.cc b/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow_mixin.cc index 265b7949..e3602886 100644 --- a/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow_mixin.cc +++ b/third_party/blink/renderer/core/layout/ng/layout_ng_block_flow_mixin.cc
@@ -246,33 +246,6 @@ accumulated_offset, action); } -// Move specified position to start/end of non-editable region. -// If it can be found, we prefer a visually equivalent position that is -// editable. -// See also LayoutObject::CreatePositionWithAffinity() -// Example: -// <editable><non-editable>|abc</non-editable></editable> -// => -// <editable>|<non-editable>abc</non-editable></editable> -static PositionWithAffinity AdjustForEditingBoundary( - const PositionWithAffinity& position_with_affinity) { - if (position_with_affinity.IsNull()) - return position_with_affinity; - const Position& position = position_with_affinity.GetPosition(); - const Node& node = *position.ComputeContainerNode(); - if (HasEditableStyle(node)) - return position_with_affinity; - const Position& forward = - MostForwardCaretPosition(position, kCanCrossEditingBoundary); - if (HasEditableStyle(*forward.ComputeContainerNode())) - return PositionWithAffinity(forward); - const Position& backward = - MostBackwardCaretPosition(position, kCanCrossEditingBoundary); - if (HasEditableStyle(*backward.ComputeContainerNode())) - return PositionWithAffinity(backward); - return position_with_affinity; -} - template <typename Base> PositionWithAffinity LayoutNGBlockFlowMixin<Base>::PositionForPoint( const PhysicalOffset& point) const { @@ -295,17 +268,7 @@ paint_fragment->PositionForPoint(point_in_contents)) return AdjustForEditingBoundary(position); } else if (const NGPhysicalBoxFragment* fragment = CurrentFragment()) { - if (const NGFragmentItems* items = fragment->Items()) { - // The given offset is relative to this |LayoutBlockFlow|. Convert to the - // contents offset. - PhysicalOffset point_in_contents = point; - Base::OffsetForContents(point_in_contents); - NGInlineCursor cursor(*items); - if (const PositionWithAffinity position = - cursor.PositionForPointInInlineFormattingContext( - point_in_contents, *fragment)) - return AdjustForEditingBoundary(position); - } + return fragment->PositionForPoint(point); } return Base::CreatePositionWithAffinity(0);
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc index c2dc5df..34df95d 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.cc
@@ -4,6 +4,7 @@ #include "third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h" +#include "third_party/blink/renderer/core/editing/editing_utilities.h" #include "third_party/blink/renderer/core/editing/position_with_affinity.h" #include "third_party/blink/renderer/core/layout/geometry/writing_mode_converter.h" #include "third_party/blink/renderer/core/layout/layout_block_flow.h" @@ -728,6 +729,22 @@ // LayoutBlockFlow::AddOutlineRects? } +PositionWithAffinity NGPhysicalBoxFragment::PositionForPoint( + PhysicalOffset point) const { + if (IsScrollContainer()) + point += PhysicalOffset(PixelSnappedScrolledContentOffset()); + if (const NGFragmentItems* items = Items()) { + NGInlineCursor cursor(*items); + if (const PositionWithAffinity position = + cursor.PositionForPointInInlineFormattingContext(point, *this)) + return AdjustForEditingBoundary(position); + } + // TODO(mstensho): Add support for block children. + if (layout_object_->GetNode()) + return layout_object_->CreatePositionWithAffinity(0); + return PositionWithAffinity(); +} + UBiDiLevel NGPhysicalBoxFragment::BidiLevel() const { // TODO(xiaochengh): Make the implementation more efficient. DCHECK(IsInline());
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h index 9b91457..54a5b79d 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h +++ b/third_party/blink/renderer/core/layout/ng/ng_physical_box_fragment.h
@@ -230,6 +230,8 @@ NGOutlineType include_block_overflows, Vector<PhysicalRect>* outline_rects) const; + PositionWithAffinity PositionForPoint(PhysicalOffset) const; + UBiDiLevel BidiLevel() const; PhysicalBoxSides SidesToInclude() const {
diff --git a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.cc b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.cc index 6bf2681..3d0aad5 100644 --- a/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.cc +++ b/third_party/blink/renderer/core/layout/ng/ng_physical_fragment.cc
@@ -537,8 +537,7 @@ const { DCHECK(IsInline()); DCHECK(GetLayoutObject()); - LayoutBlockFlow* block_flow = - GetLayoutObject()->RootInlineFormattingContext(); + LayoutBlockFlow* block_flow = GetLayoutObject()->ContainingNGBlockFlow(); // TODO(xiaochengh): Code below is copied from ng_offset_mapping.cc with // modification. Unify them. DCHECK(block_flow);
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc index babf6f4..ca98300e 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.cc
@@ -1831,10 +1831,11 @@ bool NGBoxFragmentPainter::HitTestContext::AddNodeToResult( Node* node, + const NGPhysicalBoxFragment* box_fragment, const PhysicalRect& bounds_rect, const PhysicalOffset& offset) const { if (node && !result->InnerNode()) - result->SetNodeAndPosition(node, location.Point() - offset); + result->SetNodeAndPosition(node, box_fragment, location.Point() - offset); return result->AddNodeToListBasedTestResult(node, location, bounds_rect) == kStopHitTesting; } @@ -1931,18 +1932,19 @@ // See http://crbug.com/1043471 if (box_item_ && box_item_->IsInlineBox()) { if (hit_test.AddNodeToResult( - fragment.NodeForHitTest(), bounds_rect, + fragment.NodeForHitTest(), &box_fragment_, bounds_rect, physical_offset - box_item_->OffsetInContainerBlock())) return true; } else if (paint_fragment_ && paint_fragment_->PhysicalFragment().IsInline()) { if (hit_test.AddNodeToResult( - fragment.NodeForHitTest(), bounds_rect, + fragment.NodeForHitTest(), /* box_fragment */ nullptr, + bounds_rect, physical_offset - paint_fragment_->OffsetInContainerBlock())) return true; } else { - if (hit_test.AddNodeToResult(fragment.NodeForHitTest(), bounds_rect, - physical_offset)) + if (hit_test.AddNodeToResult(fragment.NodeForHitTest(), &box_fragment_, + bounds_rect, physical_offset)) return true; } } @@ -2013,7 +2015,7 @@ return false; return hit_test.AddNodeToResult( - text_fragment.NodeForHitTest(), rect, + text_fragment.NodeForHitTest(), /* box_fragment */ nullptr, rect, physical_offset - text_paint_fragment->OffsetInContainerBlock()); } @@ -2039,8 +2041,8 @@ if (!hit_test.location.Intersects(rect)) return false; - return hit_test.AddNodeToResult(text_item.NodeForHitTest(), rect, - hit_test.inline_root_offset); + return hit_test.AddNodeToResult(text_item.NodeForHitTest(), &box_fragment_, + rect, hit_test.inline_root_offset); } // Replicates logic in legacy InlineFlowBox::NodeAtPoint(). @@ -2097,7 +2099,7 @@ } return hit_test.AddNodeToResult( - fragment.NodeForHitTest(), bounds_rect, + fragment.NodeForHitTest(), &box_fragment_, bounds_rect, physical_offset - cursor.Current().OffsetInContainerBlock()); } @@ -2192,8 +2194,8 @@ // snap, but matches to legacy and fixes crbug.com/976606. bounds_rect = PhysicalRect(PixelSnappedIntRect(bounds_rect)); if (hit_test.location.Intersects(bounds_rect)) { - if (hit_test.AddNodeToResult(item.NodeForHitTest(), bounds_rect, - child_offset)) + if (hit_test.AddNodeToResult(item.NodeForHitTest(), &box_fragment_, + bounds_rect, child_offset)) return true; } }
diff --git a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h index 8fc89d7..20e4107 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h +++ b/third_party/blink/renderer/core/paint/ng/ng_box_fragment_painter.h
@@ -207,6 +207,7 @@ // Add |node| to |HitTestResult|. Returns true if the hit-testing should // stop. bool AddNodeToResult(Node* node, + const NGPhysicalBoxFragment* box_fragment, const PhysicalRect& bounds_rect, const PhysicalOffset& offset) const;
diff --git a/third_party/blink/renderer/core/paint/ng/ng_inline_box_fragment_painter.cc b/third_party/blink/renderer/core/paint/ng/ng_inline_box_fragment_painter.cc index 0aea9fe..83af0ec 100644 --- a/third_party/blink/renderer/core/paint/ng/ng_inline_box_fragment_painter.cc +++ b/third_party/blink/renderer/core/paint/ng/ng_inline_box_fragment_painter.cc
@@ -356,8 +356,7 @@ const PhysicalOffset& paint_offset) { // TODO(kojii): If the block flow is dirty, children of these fragments // maybe already deleted. crbug.com/963103 - const LayoutBlockFlow* block_flow = - layout_inline.RootInlineFormattingContext(); + const LayoutBlockFlow* block_flow = layout_inline.ContainingNGBlockFlow(); if (UNLIKELY(block_flow->NeedsLayout())) return;
diff --git a/third_party/blink/renderer/core/streams/writable_stream.idl b/third_party/blink/renderer/core/streams/writable_stream.idl index bb61c20..8cb0ff8 100644 --- a/third_party/blink/renderer/core/streams/writable_stream.idl +++ b/third_party/blink/renderer/core/streams/writable_stream.idl
@@ -7,9 +7,9 @@ Exposed=(Window,Worker,Worklet) ] interface WritableStream { [CallWith=ScriptState, RaisesException, MeasureAs=WritableStreamConstructor] constructor(optional any underlyingSink, optional any strategy); - readonly attribute boolean locked; - [RaisesException, CallWith=ScriptState] Promise<void> abort( + [NotEnumerable] readonly attribute boolean locked; + [RaisesException, CallWith=ScriptState, NotEnumerable] Promise<void> abort( optional any reason); - [RaisesException, CallWith=ScriptState] Promise<void> close(); - [RaisesException, CallWith=ScriptState] WritableStreamDefaultWriter getWriter(); + [RaisesException, CallWith=ScriptState, NotEnumerable] Promise<void> close(); + [RaisesException, CallWith=ScriptState, NotEnumerable] WritableStreamDefaultWriter getWriter(); };
diff --git a/third_party/blink/renderer/core/streams/writable_stream_default_controller.idl b/third_party/blink/renderer/core/streams/writable_stream_default_controller.idl index c7bc87a..f301939 100644 --- a/third_party/blink/renderer/core/streams/writable_stream_default_controller.idl +++ b/third_party/blink/renderer/core/streams/writable_stream_default_controller.idl
@@ -6,5 +6,5 @@ // https://streams.spec.whatwg.org/#ws-default-controller-class-definition interface WritableStreamDefaultController { - [CallWith=ScriptState] void error(optional any e); + [CallWith=ScriptState, NotEnumerable] void error(optional any e); };
diff --git a/third_party/blink/renderer/core/streams/writable_stream_default_writer.idl b/third_party/blink/renderer/core/streams/writable_stream_default_writer.idl index cafcd45..0b59cdf3 100644 --- a/third_party/blink/renderer/core/streams/writable_stream_default_writer.idl +++ b/third_party/blink/renderer/core/streams/writable_stream_default_writer.idl
@@ -9,17 +9,17 @@ Exposed=(Window,Worker,Worklet) ] interface WritableStreamDefaultWriter { [CallWith=ScriptState, RaisesException] constructor(WritableStream stream); - [CallWith=ScriptState] readonly attribute Promise<void> + [CallWith=ScriptState, NotEnumerable] readonly attribute Promise<void> closed; - [RaisesException, CallWith=ScriptState] readonly attribute + [RaisesException, CallWith=ScriptState, NotEnumerable] readonly attribute any desiredSize; - [CallWith=ScriptState] readonly attribute Promise<void> + [CallWith=ScriptState, NotEnumerable] readonly attribute Promise<void> ready; - [CallWith=ScriptState, RaisesException] Promise<void> abort( + [CallWith=ScriptState, RaisesException, NotEnumerable] Promise<void> abort( optional any reason); - [CallWith=ScriptState, RaisesException] Promise<void> close(); + [CallWith=ScriptState, RaisesException, NotEnumerable] Promise<void> close(); [CallWith=ScriptState, NotEnumerable] void releaseLock(); - [CallWith=ScriptState, RaisesException] Promise<void> write( + [CallWith=ScriptState, RaisesException, NotEnumerable] Promise<void> write( optional any chunk); };
diff --git a/third_party/blink/renderer/modules/canvas/OWNERS b/third_party/blink/renderer/modules/canvas/OWNERS index 0513b2b..4abe99a 100644 --- a/third_party/blink/renderer/modules/canvas/OWNERS +++ b/third_party/blink/renderer/modules/canvas/OWNERS
@@ -1,4 +1,7 @@ fserb@chromium.org +aaronhk@chromium.org +juanmihd@chromium.org +yiyix@chromium.org # canvas, imagebitmap senorblanco@chromium.org # lowLatency
diff --git a/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css b/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css index 63764b5..1e36d10 100644 --- a/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css +++ b/third_party/blink/renderer/modules/media_controls/resources/mediaControls.css
@@ -898,6 +898,7 @@ font-family: Roboto-Regular, Roboto, sans-serif; font-size: 12px; + background-color: -internal-light-dark(#FFFFFF, #3B3B3B); color: -internal-light-dark(rgba(0,0,0,0.87), rgba(255,255,255,0.87)); letter-spacing: 0; @@ -1019,11 +1020,16 @@ video::-internal-media-controls-overflow-menu-list-item:focus, audio::-internal-media-controls-text-track-list-item:focus, video::-internal-media-controls-text-track-list-item:focus { - background-color: -internal-light-dark(#e0e0e0, #3b3b3b); + background-color: -internal-light-dark(#e0e0e0, #545454); color: -internal-light-dark(rgba(0,0,0,0.87), rgba(255,255,255,0.87)); outline: none; } +audio::-internal-media-controls-overflow-menu-list-item:active, +video::-internal-media-controls-overflow-menu-list-item:active { + background-color: -internal-light-dark(#e0e0e0, #454545); +} + audio::-internal-media-controls-text-track-list-header, video::-internal-media-controls-text-track-list-header, audio::-internal-media-controls-text-track-list-item, @@ -1090,7 +1096,7 @@ video::-webkit-media-controls.audio-only [pseudo="-webkit-media-controls-enclosure"] { max-height: 54px; flex-direction: row; - background: -internal-light-dark(#F1F3F4, #3B3B3B); + background: -internal-light-dark(#F1F3F4, rgba(59, 59, 59, .9)); border-radius: 100px; overflow: hidden; }
diff --git a/third_party/blink/renderer/modules/mediasource/cross_thread_media_source_attachment.cc b/third_party/blink/renderer/modules/mediasource/cross_thread_media_source_attachment.cc index 4caa075..9efe530 100644 --- a/third_party/blink/renderer/modules/mediasource/cross_thread_media_source_attachment.cc +++ b/third_party/blink/renderer/modules/mediasource/cross_thread_media_source_attachment.cc
@@ -575,7 +575,7 @@ MediaSourceTracer* /* tracer */, std::unique_ptr<WebMediaSource> web_media_source) { DVLOG(1) << __func__ << " this=" << this - << ", web_media_source=" << web_media_source; + << ", web_media_source=" << web_media_source.get(); DCHECK(web_media_source); { @@ -618,7 +618,7 @@ DCHECK(worker_runner_->BelongsToCurrentThread()); DVLOG(1) << __func__ << " this=" << this - << ", web_media_source=" << web_media_source; + << ", web_media_source=" << web_media_source.get(); // While awaiting task scheduling, the media element could have begun // detachment or main context could have been destroyed. Return early in
diff --git a/third_party/blink/renderer/modules/webcodecs/video_frame.cc b/third_party/blink/renderer/modules/webcodecs/video_frame.cc index 20d8812..da78666 100644 --- a/third_party/blink/renderer/modules/webcodecs/video_frame.cc +++ b/third_party/blink/renderer/modules/webcodecs/video_frame.cc
@@ -345,8 +345,9 @@ if ((local_frame->IsMappable() || local_frame->HasTextures()) && (local_frame->format() == media::PIXEL_FORMAT_I420 || - (local_frame->format() == media::PIXEL_FORMAT_NV12 && - local_frame->HasTextures()))) { + (local_frame->HasTextures() && + (local_frame->format() == media::PIXEL_FORMAT_NV12 || + local_frame->format() == media::PIXEL_FORMAT_ABGR)))) { scoped_refptr<StaticBitmapImage> image; gfx::ColorSpace gfx_color_space = local_frame->ColorSpace(); gfx_color_space = gfx_color_space.GetWithMatrixAndRange( @@ -397,8 +398,17 @@ dest_holder.sync_token = shared_image_interface->GenUnverifiedSyncToken(); dest_holder.texture_target = GL_TEXTURE_2D; - media::VideoFrameYUVConverter::ConvertYUVVideoFrameNoCaching( - local_frame.get(), raster_context_provider.get(), dest_holder); + if (local_frame->NumTextures() == 1) { + ri->WaitSyncTokenCHROMIUM(dest_holder.sync_token.GetConstData()); + ri->CopySubTexture( + local_frame->mailbox_holder(0).mailbox, dest_holder.mailbox, + GL_TEXTURE_2D, 0, 0, 0, 0, local_frame->coded_size().width(), + local_frame->coded_size().height(), GL_FALSE, GL_FALSE); + } else { + media::VideoFrameYUVConverter::ConvertYUVVideoFrameNoCaching( + local_frame.get(), raster_context_provider.get(), dest_holder); + } + gpu::SyncToken sync_token; ri->GenUnverifiedSyncTokenCHROMIUM(sync_token.GetData());
diff --git a/third_party/blink/renderer/platform/bindings/dom_wrapper_world.h b/third_party/blink/renderer/platform/bindings/dom_wrapper_world.h index b37b4de..d9e7a70 100644 --- a/third_party/blink/renderer/platform/bindings/dom_wrapper_world.h +++ b/third_party/blink/renderer/platform/bindings/dom_wrapper_world.h
@@ -150,6 +150,7 @@ world_type_ == WorldType::kInspectorIsolated; } + WorldType GetWorldType() const { return world_type_; } int GetWorldId() const { return world_id_; } DOMDataStore& DomDataStore() const { return *dom_data_store_; }
diff --git a/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.cc b/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.cc index 66a92ce..a41d1ff 100644 --- a/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.cc +++ b/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.cc
@@ -200,6 +200,25 @@ return {break_offset, false}; } +inline void ShapingLineBreaker::SetBreakOffset(unsigned break_offset, + const String& text, + Result* result) { + result->break_offset = break_offset; + result->is_hyphenated = + text[result->break_offset - 1] == kSoftHyphenCharacter; +} + +inline void ShapingLineBreaker::SetBreakOffset( + const BreakOpportunity& break_opportunity, + const String& text, + Result* result) { + result->break_offset = break_opportunity.offset; + result->is_hyphenated = + break_opportunity.is_hyphenated || + text[result->break_offset - 1] == kSoftHyphenCharacter; + result->non_hangable_run_end = break_opportunity.non_hangable_run_end; +} + // Shapes a line of text by finding a valid and appropriate break opportunity // based on the shaping results for the entire paragraph. Re-shapes the start // and end of the line as needed. @@ -268,7 +287,7 @@ // The |result_| does not have glyphs to fill the available space, // and thus unable to compute. Return the result up to range_end. DCHECK_EQ(candidate_break, range_end); - result_out->break_offset = range_end; + SetBreakOffset(range_end, text, result_out); return ShapeToEnd(start, first_safe, range_start, range_end); } @@ -316,6 +335,7 @@ #if DCHECK_IS_ON() DCHECK(IsAllSpaces(text, start, result_out->break_offset)); #endif + result_out->is_hyphenated = false; return ShapeResultView::Create(result_.get(), start, result_out->break_offset); } @@ -324,8 +344,7 @@ // |range_end| may not be a break opportunity, but this function cannot // measure beyond it. if (break_opportunity.offset >= range_end) { - result_out->break_offset = range_end; - result_out->non_hangable_run_end = break_opportunity.non_hangable_run_end; + SetBreakOffset(range_end, text, result_out); if (result_out->is_overflow) return ShapeToEnd(start, first_safe, range_start, range_end); break_opportunity.offset = range_end; @@ -339,8 +358,7 @@ if (first_safe != start) { if (first_safe >= break_opportunity.offset) { // There is no safe-to-break, reshape the whole range. - result_out->break_offset = break_opportunity.offset; - result_out->non_hangable_run_end = break_opportunity.non_hangable_run_end; + SetBreakOffset(break_opportunity, text, result_out); CheckBreakOffset(result_out->break_offset, start, range_end); return ShapeResultView::Create( Shape(start, break_opportunity.offset).get()); @@ -437,9 +455,7 @@ break_opportunity = NextBreakOpportunity( std::max(candidate_break, start + 1), start, range_end); if (break_opportunity.offset >= range_end) { - result_out->break_offset = range_end; - result_out->non_hangable_run_end = - break_opportunity.non_hangable_run_end; + SetBreakOffset(range_end, text, result_out); return ShapeToEnd(start, first_safe, range_start, range_end); } } @@ -468,11 +484,7 @@ auto line_result = ShapeResultView::Create(&segments[0], count); DCHECK_EQ(break_opportunity.offset - start, line_result->NumCharacters()); - result_out->break_offset = break_opportunity.offset; - result_out->non_hangable_run_end = break_opportunity.non_hangable_run_end; - result_out->is_hyphenated = - break_opportunity.is_hyphenated || - text[break_opportunity.offset - 1] == kSoftHyphenCharacter; + SetBreakOffset(break_opportunity, text, result_out); return line_result; }
diff --git a/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.h b/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.h index 6bb7ba1..1b4e61ce 100644 --- a/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.h +++ b/third_party/blink/renderer/platform/fonts/shaping/shaping_line_breaker.h
@@ -146,6 +146,9 @@ unsigned range_start, unsigned range_end); + void SetBreakOffset(unsigned break_offset, const String&, Result*); + void SetBreakOffset(const BreakOpportunity&, const String&, Result*); + const ShapeCallback shape_callback_; void* shape_callback_context_; scoped_refptr<const ShapeResult> result_;
diff --git a/third_party/blink/renderer/platform/graphics/OWNERS b/third_party/blink/renderer/platform/graphics/OWNERS index 4bc6f6e..4b3d9b2 100644 --- a/third_party/blink/renderer/platform/graphics/OWNERS +++ b/third_party/blink/renderer/platform/graphics/OWNERS
@@ -5,6 +5,7 @@ fmalita@chromium.org fserb@chromium.org jbroman@chromium.org +juanmihd@chromium.org kbr@chromium.org pdr@chromium.org schenney@chromium.org
diff --git a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng index b188fb4..65fb52cf 100644 --- a/third_party/blink/web_tests/FlagExpectations/disable-layout-ng +++ b/third_party/blink/web_tests/FlagExpectations/disable-layout-ng
@@ -143,6 +143,8 @@ ### external/wpt/css/css-text/hyphens/ crbug.com/591099 external/wpt/css/css-text/hyphens/hyphens-shaping-001.html [ Failure ] +crbug.com/958672 external/wpt/css/css-text/hyphens/hyphens-shaping-002.html [ Failure ] +crbug.com/958672 external/wpt/css/css-text/hyphens/hyphens-span-001.html [ Failure ] ### external/wpt/css/css-text/line-break/ crbug.com/591099 external/wpt/css/css-text/line-break/line-break-anywhere-001.html [ Failure ] @@ -383,6 +385,8 @@ ### virtual/text-antialias/ crbug.com/591099 virtual/text-antialias/justify-ideograph-simple.html [ Failure ] crbug.com/591099 virtual/text-antialias/apply-start-width-after-skipped-text.html [ Failure ] +crbug.com/591099 virtual/text-antialias/hyphens/hyphens-auto-nowrap.html [ Failure ] +crbug.com/639223 virtual/text-antialias/line-break-between-text-nodes-latin1.html [ Failure ] ### http/tests/ crbug.com/591099 http/tests/devtools/elements/highlight/highlight-node-vertical-rl.js [ Failure ]
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index a997930..bf76c91 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -977,8 +977,6 @@ crbug.com/982211 fast/events/before-unload-return-value-from-listener.html [ Pass Crash Timeout ] ### With LayoutNGFragmentItem enabled -crbug.com/982194 [ Win ] external/wpt/css/CSS2/linebox/empty-inline-002.xht [ Failure ] -crbug.com/982194 [ Win ] external/wpt/css/css-text/white-space/line-edge-white-space-collapse-001.html [ Failure ] crbug.com/982194 [ Win7 ] external/wpt/css/css-text/white-space/seg-break-transformation-018.html [ Failure ] crbug.com/982194 [ Win10 ] fast/inline/emptyInlinesWithinLists.html [ Pass Failure ] crbug.com/982194 [ Win10 ] fast/writing-mode/background-vertical-rl.html [ Pass Failure ] @@ -1100,8 +1098,6 @@ crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/forced-break-in-nested-columns.html [ Failure ] crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/forced-break-too-short-column.html [ Failure ] crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/hit-test-above-or-below.html [ Failure ] -crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/hit-test-end-of-column.html [ Failure ] -crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/hit-test-end-of-column-with-line-height.html [ Crash Failure ] crbug.com/1066629 virtual/layout_ng_block_frag/fast/multicol/hit-test-translate-z.html [ Failure ] crbug.com/829181 virtual/layout_ng_block_frag/fast/multicol/infinitely-tall-content-in-outer-crash.html [ Skip ] crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/inline-getclientrects.html [ Failure ] @@ -1148,7 +1144,6 @@ crbug.com/1079031 virtual/layout_ng_block_frag/fast/multicol/tall-line-in-short-block.html [ Failure ] crbug.com/1079031 virtual/layout_ng_block_frag/fast/multicol/transform-with-fixedpos.html [ Failure ] crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/vertical-lr/caret-range-anonymous-block.html [ Failure ] -crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/vertical-lr/caret-range-anonymous-block-rtl.html [ Failure Crash ] crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/vertical-lr/caret-range-outside-columns.html [ Timeout Failure ] crbug.com/829028 virtual/layout_ng_block_frag/fast/multicol/vertical-lr/caret-range-outside-columns-rtl.html [ Failure ] crbug.com/1058792 virtual/layout_ng_block_frag/fast/multicol/vertical-lr/composited-relpos-overlapping-will-change.html [ Failure ] @@ -1200,7 +1195,6 @@ ### Textarea NG crbug.com/1140307 accessibility/inline-text-textarea.html [ Failure ] crbug.com/1137666 editing/caret/caret-direction-auto.html [ Failure ] -crbug.com/1138820 fast/forms/text/input-appearance-scroll-size-mocked.html [ Failure ] # ====== LayoutNG-only failures until here ====== @@ -1637,12 +1631,9 @@ crbug.com/1022182 virtual/module-top-level-await/external/wpt/html/webappapis/dynamic-markup-insertion/document-write/module-tla-promise.html [ Pass ] crbug.com/676270 external/wpt/css/css-text/hyphens/hyphens-auto-001.html [ Failure ] -crbug.com/963369 external/wpt/css/css-text/hyphens/hyphens-out-of-flow-001.html [ Failure ] -crbug.com/963369 external/wpt/css/css-text/hyphens/hyphens-out-of-flow-002.html [ Failure ] -crbug.com/639223 external/wpt/css/css-text/hyphens/hyphens-shaping-002.html [ Failure ] -crbug.com/639223 external/wpt/css/css-text/hyphens/hyphens-span-001.html [ Failure ] -crbug.com/639223 external/wpt/css/css-text/hyphens/hyphens-span-002.html [ Failure ] -crbug.com/639223 external/wpt/css/css-text/hyphens/shy-styling-001.html [ Failure ] +crbug.com/1024331 external/wpt/css/css-text/hyphens/hyphens-out-of-flow-001.html [ Failure ] +crbug.com/1024331 external/wpt/css/css-text/hyphens/hyphens-out-of-flow-002.html [ Failure ] +crbug.com/1140728 external/wpt/css/css-text/hyphens/hyphens-span-002.html [ Failure ] crbug.com/870219 virtual/text-antialias/hyphens/hyphens-auto-mock.html [ Failure ] crbug.com/1139693 virtual/text-antialias/hyphens/midword-break-priority.html [ Failure ] @@ -4088,8 +4079,8 @@ crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-columns-rows-get-set.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-columns-rows-resolution.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-columns-rows-update.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-flow-resolution.html [ Crash ] -crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-flow-update.html [ Crash ] +crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-flow-resolution.html [ Failure Crash ] +crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-flow-update.html [ Failure Crash ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-auto-repeat-huge-grid.html [ Failure Crash ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-columns-rows-get-set-multiple.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-columns-rows-get-set.html [ Failure Crash ] @@ -4122,7 +4113,7 @@ crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-negative-indexes.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-negative-integer-explicit-grid-resolution.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-negative-position-resolution.html [ Failure ] -crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-order-auto-flow-resolution.html [ Crash ] +crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-order-auto-flow-resolution.html [ Failure Crash ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-order-paint-order.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-overflow-paint.html [ Failure ] crbug.com/1045599 virtual/layout-ng-grid/fast/css-grid-layout/grid-item-overflow.html [ Failure ]
diff --git a/third_party/blink/web_tests/android/ChromiumWPTExpectations b/third_party/blink/web_tests/android/ChromiumWPTExpectations index daf5c3ff..55ee1624 100644 --- a/third_party/blink/web_tests/android/ChromiumWPTExpectations +++ b/third_party/blink/web_tests/android/ChromiumWPTExpectations
@@ -3616,7 +3616,7 @@ crbug.com/1050754 external/wpt/screen-wake-lock/wakelockpermissiondescriptor.https.html [ Failure ] crbug.com/1050754 external/wpt/screen_enumeration/getScreens.tentative.https.window.html [ Failure ] crbug.com/1050754 external/wpt/screen_enumeration/getScreens.values.https.html [ Failure ] -crbug.com/1050754 external/wpt/screen_enumeration/screen_enumeration_permission.window.html [ Failure ] +crbug.com/1050754 external/wpt/screen_enumeration/screen_enumeration_permission.https.window.html [ Failure ] crbug.com/1050754 external/wpt/scroll-animations/cancel-animation.html [ Failure ] crbug.com/1050754 external/wpt/scroll-animations/constructor-no-document.html [ Failure ] crbug.com/1050754 external/wpt/scroll-animations/constructor.html [ Failure ]
diff --git a/third_party/blink/web_tests/android/WeblayerWPTExpectations b/third_party/blink/web_tests/android/WeblayerWPTExpectations index 82719ea..f15fc27 100644 --- a/third_party/blink/web_tests/android/WeblayerWPTExpectations +++ b/third_party/blink/web_tests/android/WeblayerWPTExpectations
@@ -3641,7 +3641,7 @@ crbug.com/1050754 external/wpt/screen_enumeration/getScreens.values.https.html [ Failure ] crbug.com/1050754 external/wpt/screen_enumeration/isMultiScreen.tentative.https.window.html [ Failure ] crbug.com/1050754 external/wpt/screen_enumeration/isMultiScreen.values.https.html [ Failure ] -crbug.com/1050754 external/wpt/screen_enumeration/screen_enumeration_permission.window.html [ Failure ] +crbug.com/1050754 external/wpt/screen_enumeration/screen_enumeration_permission.https.window.html [ Failure ] crbug.com/1050754 external/wpt/scroll-animations/cancel-animation.html [ Failure ] crbug.com/1050754 external/wpt/scroll-animations/constructor-no-document.html [ Failure ] crbug.com/1050754 external/wpt/scroll-animations/constructor.html [ Failure ]
diff --git a/third_party/blink/web_tests/android/WebviewWPTExpectations b/third_party/blink/web_tests/android/WebviewWPTExpectations index 0c58d51..57ee602 100644 --- a/third_party/blink/web_tests/android/WebviewWPTExpectations +++ b/third_party/blink/web_tests/android/WebviewWPTExpectations
@@ -3883,7 +3883,7 @@ crbug.com/1050754 external/wpt/screen-wake-lock/wakelockpermissiondescriptor.https.html [ Failure ] crbug.com/1050754 external/wpt/screen_enumeration/getScreens.tentative.https.window.html [ Failure ] crbug.com/1050754 external/wpt/screen_enumeration/getScreens.values.https.html [ Failure ] -crbug.com/1050754 external/wpt/screen_enumeration/screen_enumeration_permission.window.html [ Failure ] +crbug.com/1050754 external/wpt/screen_enumeration/screen_enumeration_permission.https.window.html [ Failure ] crbug.com/1050754 external/wpt/scroll-animations/cancel-animation.html [ Failure ] crbug.com/1050754 external/wpt/scroll-animations/constructor-no-document.html [ Failure ] crbug.com/1050754 external/wpt/scroll-animations/constructor.html [ Failure ]
diff --git a/third_party/blink/web_tests/external/wpt/css/css-sizing/OWNERS b/third_party/blink/web_tests/external/wpt/css/css-sizing/OWNERS new file mode 100644 index 0000000..95f61b7 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/css/css-sizing/OWNERS
@@ -0,0 +1,4 @@ +# TEAM: layout-dev@chromium.org +# COMPONENT: Blink>Layout +# WPT-NOTIFY: true +cbiesinger@chromium.org
diff --git a/third_party/blink/web_tests/external/wpt/infrastructure/testdriver/click_iframe_crossorigin.sub.html b/third_party/blink/web_tests/external/wpt/infrastructure/testdriver/click_iframe_crossorigin.sub.html index 01833dc..df2b447 100644 --- a/third_party/blink/web_tests/external/wpt/infrastructure/testdriver/click_iframe_crossorigin.sub.html +++ b/third_party/blink/web_tests/external/wpt/infrastructure/testdriver/click_iframe_crossorigin.sub.html
@@ -6,8 +6,6 @@ <script src="/resources/testdriver.js"></script> <script src="/resources/testdriver-vendor.js"></script> -<iframe src="https://{{host}}:{{ports[https][1]}}/infrastructure/testdriver/click_child_testdriver.html"></iframe> - <script> setup({single_test: true}); addEventListener("message", (msg) => { @@ -18,3 +16,8 @@ } }); </script> + +<!-- Make sure we add the event listener before loading the iframe, to avoid +potentially missing messages from the child. --> +<iframe src="https://{{host}}:{{ports[https][1]}}/infrastructure/testdriver/click_child_testdriver.html"></iframe> +
diff --git a/third_party/blink/web_tests/external/wpt/screen_enumeration/screen_enumeration_permission.window.js b/third_party/blink/web_tests/external/wpt/screen_enumeration/screen_enumeration_permission.https.window.js similarity index 100% rename from third_party/blink/web_tests/external/wpt/screen_enumeration/screen_enumeration_permission.window.js rename to third_party/blink/web_tests/external/wpt/screen_enumeration/screen_enumeration_permission.https.window.js
diff --git a/third_party/blink/web_tests/external/wpt/streams/idlharness.any-expected.txt b/third_party/blink/web_tests/external/wpt/streams/idlharness.any-expected.txt index 2af3b75..542c62c 100644 --- a/third_party/blink/web_tests/external/wpt/streams/idlharness.any-expected.txt +++ b/third_party/blink/web_tests/external/wpt/streams/idlharness.any-expected.txt
@@ -124,10 +124,10 @@ PASS WritableStream interface: existence and properties of interface prototype object PASS WritableStream interface: existence and properties of interface prototype object's "constructor" property PASS WritableStream interface: existence and properties of interface prototype object's @@unscopables property -PASS WritableStream interface: attribute locked -PASS WritableStream interface: operation abort(optional any) -PASS WritableStream interface: operation close() -PASS WritableStream interface: operation getWriter() +FAIL WritableStream interface: attribute locked assert_true: property should be enumerable expected true got false +FAIL WritableStream interface: operation abort(optional any) assert_true: property should be enumerable expected true got false +FAIL WritableStream interface: operation close() assert_true: property should be enumerable expected true got false +FAIL WritableStream interface: operation getWriter() assert_true: property should be enumerable expected true got false PASS WritableStream must be primary interface of new WritableStream() PASS Stringification of new WritableStream() PASS WritableStream interface: new WritableStream() must inherit property "locked" with the proper type @@ -141,13 +141,13 @@ PASS WritableStreamDefaultWriter interface: existence and properties of interface prototype object PASS WritableStreamDefaultWriter interface: existence and properties of interface prototype object's "constructor" property PASS WritableStreamDefaultWriter interface: existence and properties of interface prototype object's @@unscopables property -PASS WritableStreamDefaultWriter interface: attribute closed -PASS WritableStreamDefaultWriter interface: attribute desiredSize -PASS WritableStreamDefaultWriter interface: attribute ready -PASS WritableStreamDefaultWriter interface: operation abort(optional any) -PASS WritableStreamDefaultWriter interface: operation close() +FAIL WritableStreamDefaultWriter interface: attribute closed assert_true: property should be enumerable expected true got false +FAIL WritableStreamDefaultWriter interface: attribute desiredSize assert_true: property should be enumerable expected true got false +FAIL WritableStreamDefaultWriter interface: attribute ready assert_true: property should be enumerable expected true got false +FAIL WritableStreamDefaultWriter interface: operation abort(optional any) assert_true: property should be enumerable expected true got false +FAIL WritableStreamDefaultWriter interface: operation close() assert_true: property should be enumerable expected true got false FAIL WritableStreamDefaultWriter interface: operation releaseLock() assert_true: property should be enumerable expected true got false -PASS WritableStreamDefaultWriter interface: operation write(optional any) +FAIL WritableStreamDefaultWriter interface: operation write(optional any) assert_true: property should be enumerable expected true got false PASS WritableStreamDefaultWriter must be primary interface of (new WritableStream()).getWriter() PASS Stringification of (new WritableStream()).getWriter() PASS WritableStreamDefaultWriter interface: (new WritableStream()).getWriter() must inherit property "closed" with the proper type
diff --git a/third_party/blink/web_tests/external/wpt/streams/idlharness.any.serviceworker-expected.txt b/third_party/blink/web_tests/external/wpt/streams/idlharness.any.serviceworker-expected.txt index 2af3b75..542c62c 100644 --- a/third_party/blink/web_tests/external/wpt/streams/idlharness.any.serviceworker-expected.txt +++ b/third_party/blink/web_tests/external/wpt/streams/idlharness.any.serviceworker-expected.txt
@@ -124,10 +124,10 @@ PASS WritableStream interface: existence and properties of interface prototype object PASS WritableStream interface: existence and properties of interface prototype object's "constructor" property PASS WritableStream interface: existence and properties of interface prototype object's @@unscopables property -PASS WritableStream interface: attribute locked -PASS WritableStream interface: operation abort(optional any) -PASS WritableStream interface: operation close() -PASS WritableStream interface: operation getWriter() +FAIL WritableStream interface: attribute locked assert_true: property should be enumerable expected true got false +FAIL WritableStream interface: operation abort(optional any) assert_true: property should be enumerable expected true got false +FAIL WritableStream interface: operation close() assert_true: property should be enumerable expected true got false +FAIL WritableStream interface: operation getWriter() assert_true: property should be enumerable expected true got false PASS WritableStream must be primary interface of new WritableStream() PASS Stringification of new WritableStream() PASS WritableStream interface: new WritableStream() must inherit property "locked" with the proper type @@ -141,13 +141,13 @@ PASS WritableStreamDefaultWriter interface: existence and properties of interface prototype object PASS WritableStreamDefaultWriter interface: existence and properties of interface prototype object's "constructor" property PASS WritableStreamDefaultWriter interface: existence and properties of interface prototype object's @@unscopables property -PASS WritableStreamDefaultWriter interface: attribute closed -PASS WritableStreamDefaultWriter interface: attribute desiredSize -PASS WritableStreamDefaultWriter interface: attribute ready -PASS WritableStreamDefaultWriter interface: operation abort(optional any) -PASS WritableStreamDefaultWriter interface: operation close() +FAIL WritableStreamDefaultWriter interface: attribute closed assert_true: property should be enumerable expected true got false +FAIL WritableStreamDefaultWriter interface: attribute desiredSize assert_true: property should be enumerable expected true got false +FAIL WritableStreamDefaultWriter interface: attribute ready assert_true: property should be enumerable expected true got false +FAIL WritableStreamDefaultWriter interface: operation abort(optional any) assert_true: property should be enumerable expected true got false +FAIL WritableStreamDefaultWriter interface: operation close() assert_true: property should be enumerable expected true got false FAIL WritableStreamDefaultWriter interface: operation releaseLock() assert_true: property should be enumerable expected true got false -PASS WritableStreamDefaultWriter interface: operation write(optional any) +FAIL WritableStreamDefaultWriter interface: operation write(optional any) assert_true: property should be enumerable expected true got false PASS WritableStreamDefaultWriter must be primary interface of (new WritableStream()).getWriter() PASS Stringification of (new WritableStream()).getWriter() PASS WritableStreamDefaultWriter interface: (new WritableStream()).getWriter() must inherit property "closed" with the proper type
diff --git a/third_party/blink/web_tests/external/wpt/streams/idlharness.any.sharedworker-expected.txt b/third_party/blink/web_tests/external/wpt/streams/idlharness.any.sharedworker-expected.txt index 2af3b75..542c62c 100644 --- a/third_party/blink/web_tests/external/wpt/streams/idlharness.any.sharedworker-expected.txt +++ b/third_party/blink/web_tests/external/wpt/streams/idlharness.any.sharedworker-expected.txt
@@ -124,10 +124,10 @@ PASS WritableStream interface: existence and properties of interface prototype object PASS WritableStream interface: existence and properties of interface prototype object's "constructor" property PASS WritableStream interface: existence and properties of interface prototype object's @@unscopables property -PASS WritableStream interface: attribute locked -PASS WritableStream interface: operation abort(optional any) -PASS WritableStream interface: operation close() -PASS WritableStream interface: operation getWriter() +FAIL WritableStream interface: attribute locked assert_true: property should be enumerable expected true got false +FAIL WritableStream interface: operation abort(optional any) assert_true: property should be enumerable expected true got false +FAIL WritableStream interface: operation close() assert_true: property should be enumerable expected true got false +FAIL WritableStream interface: operation getWriter() assert_true: property should be enumerable expected true got false PASS WritableStream must be primary interface of new WritableStream() PASS Stringification of new WritableStream() PASS WritableStream interface: new WritableStream() must inherit property "locked" with the proper type @@ -141,13 +141,13 @@ PASS WritableStreamDefaultWriter interface: existence and properties of interface prototype object PASS WritableStreamDefaultWriter interface: existence and properties of interface prototype object's "constructor" property PASS WritableStreamDefaultWriter interface: existence and properties of interface prototype object's @@unscopables property -PASS WritableStreamDefaultWriter interface: attribute closed -PASS WritableStreamDefaultWriter interface: attribute desiredSize -PASS WritableStreamDefaultWriter interface: attribute ready -PASS WritableStreamDefaultWriter interface: operation abort(optional any) -PASS WritableStreamDefaultWriter interface: operation close() +FAIL WritableStreamDefaultWriter interface: attribute closed assert_true: property should be enumerable expected true got false +FAIL WritableStreamDefaultWriter interface: attribute desiredSize assert_true: property should be enumerable expected true got false +FAIL WritableStreamDefaultWriter interface: attribute ready assert_true: property should be enumerable expected true got false +FAIL WritableStreamDefaultWriter interface: operation abort(optional any) assert_true: property should be enumerable expected true got false +FAIL WritableStreamDefaultWriter interface: operation close() assert_true: property should be enumerable expected true got false FAIL WritableStreamDefaultWriter interface: operation releaseLock() assert_true: property should be enumerable expected true got false -PASS WritableStreamDefaultWriter interface: operation write(optional any) +FAIL WritableStreamDefaultWriter interface: operation write(optional any) assert_true: property should be enumerable expected true got false PASS WritableStreamDefaultWriter must be primary interface of (new WritableStream()).getWriter() PASS Stringification of (new WritableStream()).getWriter() PASS WritableStreamDefaultWriter interface: (new WritableStream()).getWriter() must inherit property "closed" with the proper type
diff --git a/third_party/blink/web_tests/external/wpt/streams/idlharness.any.worker-expected.txt b/third_party/blink/web_tests/external/wpt/streams/idlharness.any.worker-expected.txt index 2af3b75..542c62c 100644 --- a/third_party/blink/web_tests/external/wpt/streams/idlharness.any.worker-expected.txt +++ b/third_party/blink/web_tests/external/wpt/streams/idlharness.any.worker-expected.txt
@@ -124,10 +124,10 @@ PASS WritableStream interface: existence and properties of interface prototype object PASS WritableStream interface: existence and properties of interface prototype object's "constructor" property PASS WritableStream interface: existence and properties of interface prototype object's @@unscopables property -PASS WritableStream interface: attribute locked -PASS WritableStream interface: operation abort(optional any) -PASS WritableStream interface: operation close() -PASS WritableStream interface: operation getWriter() +FAIL WritableStream interface: attribute locked assert_true: property should be enumerable expected true got false +FAIL WritableStream interface: operation abort(optional any) assert_true: property should be enumerable expected true got false +FAIL WritableStream interface: operation close() assert_true: property should be enumerable expected true got false +FAIL WritableStream interface: operation getWriter() assert_true: property should be enumerable expected true got false PASS WritableStream must be primary interface of new WritableStream() PASS Stringification of new WritableStream() PASS WritableStream interface: new WritableStream() must inherit property "locked" with the proper type @@ -141,13 +141,13 @@ PASS WritableStreamDefaultWriter interface: existence and properties of interface prototype object PASS WritableStreamDefaultWriter interface: existence and properties of interface prototype object's "constructor" property PASS WritableStreamDefaultWriter interface: existence and properties of interface prototype object's @@unscopables property -PASS WritableStreamDefaultWriter interface: attribute closed -PASS WritableStreamDefaultWriter interface: attribute desiredSize -PASS WritableStreamDefaultWriter interface: attribute ready -PASS WritableStreamDefaultWriter interface: operation abort(optional any) -PASS WritableStreamDefaultWriter interface: operation close() +FAIL WritableStreamDefaultWriter interface: attribute closed assert_true: property should be enumerable expected true got false +FAIL WritableStreamDefaultWriter interface: attribute desiredSize assert_true: property should be enumerable expected true got false +FAIL WritableStreamDefaultWriter interface: attribute ready assert_true: property should be enumerable expected true got false +FAIL WritableStreamDefaultWriter interface: operation abort(optional any) assert_true: property should be enumerable expected true got false +FAIL WritableStreamDefaultWriter interface: operation close() assert_true: property should be enumerable expected true got false FAIL WritableStreamDefaultWriter interface: operation releaseLock() assert_true: property should be enumerable expected true got false -PASS WritableStreamDefaultWriter interface: operation write(optional any) +FAIL WritableStreamDefaultWriter interface: operation write(optional any) assert_true: property should be enumerable expected true got false PASS WritableStreamDefaultWriter must be primary interface of (new WritableStream()).getWriter() PASS Stringification of (new WritableStream()).getWriter() PASS WritableStreamDefaultWriter interface: (new WritableStream()).getWriter() must inherit property "closed" with the proper type
diff --git a/third_party/blink/web_tests/fast/forms/color-scheme/media/video-overlay-menu.html b/third_party/blink/web_tests/fast/forms/color-scheme/media/video-overlay-menu.html new file mode 100644 index 0000000..c73dc9a4 --- /dev/null +++ b/third_party/blink/web_tests/fast/forms/color-scheme/media/video-overlay-menu.html
@@ -0,0 +1,21 @@ +<!DOCTYPE html> +<script src="../../../../media/media-file.js"></script> +<script src="../../../../media/video-paint-test.js"></script> +<script src="../../../../media/media-controls.js"></script> +<script src="../../../../media/overflow-menu.js"></script> +<meta name="color-scheme" content="light dark"> + +<body style="padding-top: 200px; padding-left: 100px"> + <video controls></video> + <script> + var video = document.querySelector("video"); + video.src = "../../../../media/content/test.ogv"; + enableTestMode(video); + init(); + video.onloadeddata = function () { + var overflowMenu = getOverflowMenuButton(video); + var coords = elementCoordinates(overflowMenu); + clickAtCoordinates(coords[0], coords[1]); + }; + </script> +</body> \ No newline at end of file
diff --git a/third_party/blink/web_tests/http/tests/mojo/deserializer.html b/third_party/blink/web_tests/http/tests/mojo/deserializer.html index 8603fca..ce8f252d 100644 --- a/third_party/blink/web_tests/http/tests/mojo/deserializer.html +++ b/third_party/blink/web_tests/http/tests/mojo/deserializer.html
@@ -17,7 +17,7 @@ const s = deserializer.TestStruct_Deserialize(dataview); assert_equals(s.v1, 8899); assert_equals(s.v2, 9988); - assert_equals(s.v3, 7777n); + assert_equals(s.v3, 7777); }, 'deserializer'); </script>
diff --git a/third_party/blink/web_tests/http/tests/mojo/lite/constants.html b/third_party/blink/web_tests/http/tests/mojo/lite/constants.html index e8cb80e..4c94386 100644 --- a/third_party/blink/web_tests/http/tests/mojo/lite/constants.html +++ b/third_party/blink/web_tests/http/tests/mojo/lite/constants.html
@@ -35,14 +35,17 @@ expectedValue: 4294967295, type: 'uint32' }, { - constant: mojo.tstest.INT64_VALUE, - expectedValue: -9223372036854775807n, - type: 'int64' -}, { - constant: mojo.tstest.UINT64_VALUE, - expectedValue: 9999999999999999999n, - type: 'uint64' -}, { + // TODO(crbug.com/1009262): Re-enable once we generate the right value for + // 64-bit constants. + // + // constant: mojo.tstest.kInt64Value, + // expectedValue: -9223372036854775807n, + // type: 'int64' + //}, { + // constant: mojo.tstest.kUint64Value, + // expectedValue: 9999999999999999999n, + // type: 'uint64' + //}, { constant: mojo.tstest.DOUBLE_VALUE, expectedValue: 3.14159, type: 'double'
diff --git a/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..1f2f392 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..a897edc --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..528ddf8 --- /dev/null +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png index ca35871..4d647566 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/audio-focus-ring-expected.png b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/audio-focus-ring-expected.png index 54ae93fa..b534b5f 100644 --- a/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/audio-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/linux/virtual/dark-color-scheme/media/audio-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..ede47a6c --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.12/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..ede47a6c --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..67f8faac --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png index 85e355b..2ff66126 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/media/audio-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/media/audio-focus-ring-expected.png index 1ef5174e..7bded8c 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/media/audio-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.12/virtual/dark-color-scheme/media/audio-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..eba67052 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..db0b34ff --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png index bbebb23..f17f9518 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/audio-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/audio-focus-ring-expected.png index 01971c1..3fc2944 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/audio-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.13/virtual/dark-color-scheme/media/audio-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..eba67052 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.14/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..eba67052 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..db0b34ff --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png index b3fd630..990eeddc 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/audio-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/audio-focus-ring-expected.png index b09eff5..86c678bf 100644 --- a/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/audio-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/mac-mac10.14/virtual/dark-color-scheme/media/audio-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..70f9f23d --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac-mac10.15/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..823f964 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac-mac10.15/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..70f9f23d --- /dev/null +++ b/third_party/blink/web_tests/platform/mac/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..70f9f23d --- /dev/null +++ b/third_party/blink/web_tests/platform/mac/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..823f964 --- /dev/null +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png index d2880c4..b8bb5cb 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/audio-focus-ring-expected.png b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/audio-focus-ring-expected.png index eefb64d..81f0416c5 100644 --- a/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/audio-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/mac/virtual/dark-color-scheme/media/audio-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..d7d099ed --- /dev/null +++ b/third_party/blink/web_tests/platform/win/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..33ec357 --- /dev/null +++ b/third_party/blink/web_tests/platform/win/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..d14dbb6 --- /dev/null +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png index a7da2da..f3d44bc 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/audio-controls-rendering-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/audio-focus-ring-expected.png b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/audio-focus-ring-expected.png index 54f91b8b..6193acc 100644 --- a/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/audio-focus-ring-expected.png +++ b/third_party/blink/web_tests/platform/win/virtual/dark-color-scheme/media/audio-focus-ring-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..33ec357 --- /dev/null +++ b/third_party/blink/web_tests/platform/win7/virtual/controls-refresh-hc/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png new file mode 100644 index 0000000..d14dbb6 --- /dev/null +++ b/third_party/blink/web_tests/platform/win7/virtual/dark-color-scheme/fast/forms/color-scheme/media/video-overlay-menu-expected.png Binary files differ
diff --git a/third_party/blink/web_tests/virtual/text-antialias/line-break-between-text-nodes-latin1-expected.html b/third_party/blink/web_tests/virtual/text-antialias/line-break-between-text-nodes-latin1-expected.html index 381ddc0..2ad03c063 100644 --- a/third_party/blink/web_tests/virtual/text-antialias/line-break-between-text-nodes-latin1-expected.html +++ b/third_party/blink/web_tests/virtual/text-antialias/line-break-between-text-nodes-latin1-expected.html
@@ -2,17 +2,17 @@ Lorem ipsum- dolor </div> <div id="target" style="width: 100px; background: yellow;"> -Lorem ipsum dolor +Lorem ipsum- dolor </div> <div id="target" style="width: 100px; background: yellow;"> -Lorem ipsum ðolor +Lorem ipsum- ðolor </div> <div id="target" style="width: 100px; background: yellow;"> -Lorem ipsum dolor +Lorem ipsum- dolor </div> <div id="target" style="width: 100px; background: yellow;"> -Lorem ipsum ðolor +Lorem ipsum- ðolor </div> <div id="target" style="width: 100px; background: yellow;"> -Lorem ipsum ðolor +Lorem ipsum- ðolor </div>
diff --git a/third_party/closure_compiler/externs/file_manager_private.js b/third_party/closure_compiler/externs/file_manager_private.js index f100212..7046857 100644 --- a/third_party/closure_compiler/externs/file_manager_private.js +++ b/third_party/closure_compiler/externs/file_manager_private.js
@@ -1136,6 +1136,19 @@ chrome.fileManagerPrivate.getPdfThumbnail = function(entry, width, height, callback) {}; /** + Retrieves a thumbnail of an ARC DocumentsProvider file, close in size to + |widthHint| and |heightHint|, but not necessarily exactly this size. + * @param {!FileEntry} entry + * @param {number} widthHint + * @param {number} heightHint + * @param {function(string): void} callback |thumbnailDataUrl| A data URL for the + * thumbnail; |thumbnailDataUrl| is empty if no thumbnail was available. + * Note: The thumbnail data may originate from third-party application code, + * and is untrustworthy (Security). + */ +chrome.fileManagerPrivate.getArcDocumentsProviderThumbnail = function(entry, widthHint, heightHint, callback) {}; + +/** * @param {!Array<string>} extensions * @param {function(!Array<chrome.fileManagerPrivate.AndroidApp>): void} callback * Completion callback.
diff --git a/third_party/freetype/README.chromium b/third_party/freetype/README.chromium index dea7d2a..be56a26d 100644 --- a/third_party/freetype/README.chromium +++ b/third_party/freetype/README.chromium
@@ -1,7 +1,7 @@ Name: FreeType URL: http://www.freetype.org/ -Version: VER-2-10-3-4 -Revision: 80389cab7f5823e7c3b3fe4190a7c337439317de +Version: VER-2-10-4-0 +Revision: 6a2b3e4007e794bfc6c91030d0ed987f925164a8 CPEPrefix: cpe:/a:freetype:freetype:2.10.1 License: Custom license "inspired by the BSD, Artistic, and IJG (Independent JPEG Group) licenses"
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index df5742e4..5d497ca 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -2761,7 +2761,8 @@ }, 'fuzzer': { - 'gn_args': 'enable_ipc_fuzzer=true', + # TODO(crbug.com/1140770): Remove use_vaapi=false once fixed. + 'gn_args': 'enable_ipc_fuzzer=true use_vaapi=false', }, 'gn_linux_upload': {
diff --git a/tools/mb/mb_config_expectations/chromium.clang.json b/tools/mb/mb_config_expectations/chromium.clang.json index 8f9d08c0..0d5e3d6 100644 --- a/tools/mb/mb_config_expectations/chromium.clang.json +++ b/tools/mb/mb_config_expectations/chromium.clang.json
@@ -35,6 +35,7 @@ "is_debug": false, "llvm_force_head_revision": true, "symbol_level": 1, + "use_vaapi": false, "v8_enable_verify_heap": true } },
diff --git a/tools/mb/mb_config_expectations/chromium.fuzz.json b/tools/mb/mb_config_expectations/chromium.fuzz.json index cc24799..96fbdc4 100644 --- a/tools/mb/mb_config_expectations/chromium.fuzz.json +++ b/tools/mb/mb_config_expectations/chromium.fuzz.json
@@ -17,6 +17,7 @@ "is_debug": false, "is_lsan": true, "use_goma": true, + "use_vaapi": false, "v8_enable_verify_heap": true } }, @@ -54,6 +55,7 @@ "is_debug": false, "target_cpu": "x86", "use_goma": true, + "use_vaapi": false, "v8_enable_verify_heap": true, "v8_target_cpu": "arm" } @@ -69,6 +71,7 @@ "proprietary_codecs": true, "target_cpu": "x86", "use_goma": true, + "use_vaapi": false, "v8_enable_verify_heap": true, "v8_target_cpu": "arm" } @@ -97,6 +100,7 @@ "is_lsan": true, "target_os": "chromeos", "use_goma": true, + "use_vaapi": false, "v8_enable_verify_heap": true } }, @@ -340,6 +344,7 @@ "is_component_build": false, "is_debug": false, "use_goma": true, + "use_vaapi": false, "v8_enable_verify_heap": true } }, @@ -353,6 +358,7 @@ "is_debug": false, "proprietary_codecs": true, "use_goma": true, + "use_vaapi": false, "v8_enable_verify_heap": true } }, @@ -400,6 +406,7 @@ "is_component_build": false, "is_debug": false, "use_goma": true, + "use_vaapi": false, "v8_enable_verify_heap": true } }, @@ -413,6 +420,7 @@ "is_debug": false, "proprietary_codecs": true, "use_goma": true, + "use_vaapi": false, "v8_enable_verify_heap": true } }
diff --git a/tools/mb/mb_config_expectations/chromium.memory.json b/tools/mb/mb_config_expectations/chromium.memory.json index a683fab..4e746ab3 100644 --- a/tools/mb/mb_config_expectations/chromium.memory.json +++ b/tools/mb/mb_config_expectations/chromium.memory.json
@@ -142,6 +142,7 @@ "is_debug": false, "symbol_level": 1, "use_goma": true, + "use_vaapi": false, "v8_enable_verify_heap": true } }
diff --git a/tools/mb/mb_config_expectations/tryserver.chromium.win.json b/tools/mb/mb_config_expectations/tryserver.chromium.win.json index fd8ab91e..c8dfff1 100644 --- a/tools/mb/mb_config_expectations/tryserver.chromium.win.json +++ b/tools/mb/mb_config_expectations/tryserver.chromium.win.json
@@ -241,6 +241,7 @@ "is_debug": false, "symbol_level": 1, "use_goma": true, + "use_vaapi": false, "v8_enable_verify_heap": true } },
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index 82d4ba6d..e67e687c 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -16466,6 +16466,7 @@ <int value="34" label="movableTabs"/> <int value="35" label="keyboardShortcutEditor"/> <int value="36" label="cssFlexboxFeatures"/> + <int value="37" label="showWebVitalsInPerformancePanel"/> </enum> <enum name="DevToolsGridOverlayOpenedFrom"> @@ -25078,6 +25079,8 @@ <int value="1521" label="AUTOTESTPRIVATE_ACTIVATEADJACENTDESKSTOTARGETINDEX"/> <int value="1522" label="DECLARATIVENETREQUEST_GETAVAILABLESTATICRULECOUNT"/> <int value="1523" label="CHROMEOSINFOPRIVATE_ISTABLETMODEENABLED"/> + <int value="1524" + label="FILEMANAGERPRIVATEINTERNAL_GETARCDOCUMENTSPROVIDERTHUMBNAIL"/> </enum> <enum name="ExtensionIconState"> @@ -31544,9 +31547,13 @@ <summary>Actions which happen on the screen.</summary> <int value="0" label="Setup done button clicked"/> <int value="1" label="Skipped button clicked"/> - <int value="2" label="Do it later button clicked"/> + <int value="2" label="Do it later button clicked"> + Obsolete, the button is removed. + </int> <int value="3" label="Add another finger button clicked"/> - <int value="4" label="Show sensor location button clicked"/> + <int value="4" label="Show sensor location button clicked"> + Obsolete, the button in removed. + </int> </enum> <enum name="FingerprintUpdaterReason">
diff --git a/tools/metrics/histograms/histograms_xml/android/histograms.xml b/tools/metrics/histograms/histograms_xml/android/histograms.xml index ec08e1f..9ebdeb09 100644 --- a/tools/metrics/histograms/histograms_xml/android/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/android/histograms.xml
@@ -1916,6 +1916,17 @@ </summary> </histogram> +<histogram name="Android.ShouldDestroyIncognitoProfileOnStartup" + units="Boolean" expires_after="M92"> + <owner>rhalavati@chromium.org</owner> + <owner>yfriedman@chromium.org</owner> + <summary> + Records the number of times the call to the function + |IncognitoUtils.shouldDestroyIncognitoProfileOnStartup| returns true or + false. + </summary> +</histogram> + <histogram name="Android.StrictMode.OverrideUrlLoadingTime" units="ms" expires_after="2021-03-28"> <owner>yfriedman@chromium.org</owner> @@ -1947,7 +1958,7 @@ </histogram> <histogram name="Android.Survey.DownloadRequested" enum="BooleanRequested" - expires_after="2020-12-01"> + expires_after="2021-06-01"> <owner>twellington@chromium.org</owner> <owner>chrome-android-app@chromium.org</owner> <summary> @@ -1957,14 +1968,14 @@ </histogram> <histogram name="Android.Survey.DownloadResponseCode" - enum="SurveyDownloadResponseCodes" expires_after="2020-12-01"> + enum="SurveyDownloadResponseCodes" expires_after="2021-06-01"> <owner>twellington@chromium.org</owner> <owner>chrome-android-app@chromium.org</owner> <summary>The response code of the completed survey download request.</summary> </histogram> <histogram name="Android.Survey.InfoBarClosingState" - enum="InfoBarClosingStates" expires_after="2020-12-01"> + enum="InfoBarClosingStates" expires_after="2021-06-01"> <owner>twellington@chromium.org</owner> <owner>chrome-android-app@chromium.org</owner> <summary> @@ -1974,7 +1985,7 @@ </histogram> <histogram name="Android.Survey.ShowSurvey" enum="BooleanSuccess" - expires_after="2020-12-01"> + expires_after="2021-06-01"> <owner>twellington@chromium.org</owner> <owner>chrome-android-app@chromium.org</owner> <summary> @@ -1983,7 +1994,7 @@ </histogram> <histogram name="Android.Survey.SurveyFilteringResults" - enum="SurveyFilteringResult" expires_after="2020-12-01"> + enum="SurveyFilteringResult" expires_after="2021-06-01"> <owner>twellington@chromium.org</owner> <owner>chrome-android-app@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/direct/OWNERS b/tools/metrics/histograms/histograms_xml/direct/OWNERS new file mode 100644 index 0000000..012cb6c --- /dev/null +++ b/tools/metrics/histograms/histograms_xml/direct/OWNERS
@@ -0,0 +1,4 @@ +# If none of these reviewers are available, please send CLs to +# <chromium-metrics-reviews@google.com>. +# See tools/metrics/histograms/histograms_xml/OWNERS for details. +schenney@chromium.org
diff --git a/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml b/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml index 9da2edf..6fd8a52c8 100644 --- a/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/enterprise/histograms.xml
@@ -1182,7 +1182,7 @@ </histogram> <histogram name="Enterprise.SystemFeaturesDisableList" enum="SystemFeature" - expires_after="2020-12-01"> + expires_after="2021-06-01"> <owner>ayaelattar@chromium.org</owner> <owner>poromov@chromium.org</owner> <summary>
diff --git a/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml b/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml index 4957dbcc..7e08171 100644 --- a/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml +++ b/tools/metrics/histograms/histograms_xml/histogram_suffixes_list.xml
@@ -11908,7 +11908,6 @@ <suffix name="Network" label=""/> <suffix name="Network-selection" label=""/> <suffix name="Packaged-license" label=""/> - <suffix name="Parental-handoff" label=""/> <suffix name="Recommend-apps" label=""/> <suffix name="Reset" label=""/> <suffix name="Supervision-transition" label=""/> @@ -11963,7 +11962,6 @@ <suffix name="Oauth-enrollment.Completed" label=""/> <suffix name="Packaged-license.DontEnroll" label=""/> <suffix name="Packaged-license.Enroll" label=""/> - <suffix name="Parental-Handoff.Done" label=""/> <suffix name="Recommend-apps.Selected" label=""/> <suffix name="Recommend-apps.Skipped" label=""/> <suffix name="Reset.Cancel" label=""/>
diff --git a/tools/metrics/histograms/histograms_xml/stability/histograms.xml b/tools/metrics/histograms/histograms_xml/stability/histograms.xml index 3f56414..14fde45 100644 --- a/tools/metrics/histograms/histograms_xml/stability/histograms.xml +++ b/tools/metrics/histograms/histograms_xml/stability/histograms.xml
@@ -240,6 +240,9 @@ </histogram> <histogram name="Stability.ExitFunnel" units="ms" expires_after="M85"> + <obsolete> + Removed 10/2020 although this has been dead for many years. + </obsolete> <owner>siggi@chromium.org</owner> <summary> Temporary instrumentation to record the Windows browser's exit path. See
diff --git a/ui/accessibility/extensions/strings/accessibility_extensions_strings_iw.xtb b/ui/accessibility/extensions/strings/accessibility_extensions_strings_iw.xtb index e296336..f3ee329 100644 --- a/ui/accessibility/extensions/strings/accessibility_extensions_strings_iw.xtb +++ b/ui/accessibility/extensions/strings/accessibility_extensions_strings_iw.xtb
@@ -27,7 +27,7 @@ <translation id="381767806621926835">לחץ לחיצה ארוכה על כל פריט עם המאפיין "longdesc" או "aria-describedat" כדי לגשת לתיאור הארוך שלו.</translation> <translation id="4023902424053835668">דפדף בטקסט של דפי אינטרנט באמצעות מקשי החצים.</translation> <translation id="4388820049312272371">הדגשת מיקום הסמן באמצעות הבהוב מהיר.</translation> -<translation id="4394049700291259645">השבת</translation> +<translation id="4394049700291259645">השבתה</translation> <translation id="4769065380738716500">תמונות הוחלפו על-ידי טקסט ה-alt שלהן.</translation> <translation id="4896660567607030658">אין משוב, פשוט הצג את הסמן.</translation> <translation id="4937901943818762779">אפשר תמונות המכילות אנימציה, אך רק פעם אחת.</translation>
diff --git a/ui/base/clipboard/DIR_METADATA b/ui/base/clipboard/DIR_METADATA new file mode 100644 index 0000000..185817f --- /dev/null +++ b/ui/base/clipboard/DIR_METADATA
@@ -0,0 +1,12 @@ +# Metadata information for this directory. +# +# For more information on DIR_METADATA files, see: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md +# +# For the schema of this file, see Metadata message: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto + +monorail { + component: "Blink>DataTransfer" +} +team_email: "storage-dev@chromium.org" \ No newline at end of file
diff --git a/ui/base/clipboard/OWNERS b/ui/base/clipboard/OWNERS index 4a0f01a..9317fe4 100644 --- a/ui/base/clipboard/OWNERS +++ b/ui/base/clipboard/OWNERS
@@ -1,5 +1,2 @@ dcheng@chromium.org huangdarwin@chromium.org - -# TEAM: storage-dev@chromium.org -# COMPONENT: Blink>DataTransfer
diff --git a/ui/base/cocoa/DIR_METADATA b/ui/base/cocoa/DIR_METADATA new file mode 100644 index 0000000..2769d07 --- /dev/null +++ b/ui/base/cocoa/DIR_METADATA
@@ -0,0 +1,11 @@ +# Metadata information for this directory. +# +# For more information on DIR_METADATA files, see: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md +# +# For the schema of this file, see Metadata message: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto + +monorail { + component: "UI" +} \ No newline at end of file
diff --git a/ui/base/cocoa/OWNERS b/ui/base/cocoa/OWNERS index 2799183..f5de6bf4 100644 --- a/ui/base/cocoa/OWNERS +++ b/ui/base/cocoa/OWNERS
@@ -2,5 +2,3 @@ rsesek@chromium.org tapted@chromium.org thakis@chromium.org - -# COMPONENT: UI
diff --git a/ui/base/cursor/BUILD.gn b/ui/base/cursor/BUILD.gn index f4e3f83c..91434c8 100644 --- a/ui/base/cursor/BUILD.gn +++ b/ui/base/cursor/BUILD.gn
@@ -55,8 +55,6 @@ "cursor_util.h", "cursors_aura.cc", "cursors_aura.h", - "image_cursors.cc", - "image_cursors.h", ] defines = [ "IS_UI_BASE_CURSOR_IMPL" ] public_deps = [ @@ -106,26 +104,39 @@ source_set("unittests") { testonly = true sources = [] - deps = [ "//testing/gtest" ] + deps = [ + ":cursor_base", + "//testing/gtest", + "//ui/base/cursor/mojom:cursor_type", + ] if (!is_ios) { sources += [ "cursor_unittest.cc" ] deps += [ - ":cursor_base", "//skia", - "//ui/base/cursor/mojom:cursor_type", "//ui/gfx:geometry_skia", "//ui/gfx/geometry", ] } if (use_aura) { - sources += [ "cursor_util_unittest.cc" ] + sources += [ + "cursor_loader_unittest.cc", + "cursor_util_unittest.cc", + ] deps += [ ":cursor", "//skia", "//ui/gfx/geometry", ] + + if (use_x11) { + deps += [ + "//skia", + "//ui/base/x", + "//ui/gfx/geometry", + ] + } } if (use_ozone) { @@ -133,7 +144,6 @@ deps += [ ":cursor", "//base", - "//ui/base/cursor/mojom:cursor_type", ] } }
diff --git a/ui/base/cursor/DIR_METADATA b/ui/base/cursor/DIR_METADATA new file mode 100644 index 0000000..b05aeb7e --- /dev/null +++ b/ui/base/cursor/DIR_METADATA
@@ -0,0 +1,11 @@ +# Metadata information for this directory. +# +# For more information on DIR_METADATA files, see: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md +# +# For the schema of this file, see Metadata message: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto + +monorail { + component: "Internal>Input" +} \ No newline at end of file
diff --git a/ui/base/cursor/OWNERS b/ui/base/cursor/OWNERS index 776ce1a..81aec02 100644 --- a/ui/base/cursor/OWNERS +++ b/ui/base/cursor/OWNERS
@@ -1 +1 @@ -# COMPONENT: Internal>Input +hferreiro@igalia.com
diff --git a/ui/base/cursor/cursor_factory.h b/ui/base/cursor/cursor_factory.h index f038a42..3eef1dd 100644 --- a/ui/base/cursor/cursor_factory.h +++ b/ui/base/cursor/cursor_factory.h
@@ -46,6 +46,7 @@ // cursors are referenced counted and have an initial refcount of 1. // Therefore, each CreateAnimatedCursor call must be matched with a call to // UnrefImageCursor. + // |frame_delay_ms| is the delay between frames in millisecond. virtual PlatformCursor CreateAnimatedCursor( const std::vector<SkBitmap>& bitmaps, const gfx::Point& hotspot,
diff --git a/ui/base/cursor/cursor_loader.h b/ui/base/cursor/cursor_loader.h index 2553c54..0c516d7 100644 --- a/ui/base/cursor/cursor_loader.h +++ b/ui/base/cursor/cursor_loader.h
@@ -5,71 +5,70 @@ #ifndef UI_BASE_CURSOR_CURSOR_LOADER_H_ #define UI_BASE_CURSOR_CURSOR_LOADER_H_ +#include <memory> + #include "base/component_export.h" -#include "base/macros.h" +#include "ui/base/cursor/cursor_size.h" #include "ui/base/cursor/mojom/cursor_type.mojom-forward.h" #include "ui/display/display.h" #include "ui/gfx/native_widget_types.h" -namespace gfx { -class Point; -} - namespace ui { class COMPONENT_EXPORT(UI_BASE_CURSOR) CursorLoader { public: - CursorLoader() : scale_(1.f), rotation_(display::Display::ROTATE_0) {} - virtual ~CursorLoader() {} + CursorLoader() = default; + CursorLoader(const CursorLoader&) = delete; + CursorLoader& operator=(const CursorLoader&) = delete; + virtual ~CursorLoader() = default; + // Returns the rotation and scale of the currently loaded cursor. display::Display::Rotation rotation() const { return rotation_; } + float scale() const { return scale_; } - void set_rotation(display::Display::Rotation rotation) { + // Sets the rotation and scale the cursors are loaded for. + // Returns true if the cursor image was reloaded. + bool SetDisplayData(display::Display::Rotation rotation, float scale) { + if (rotation_ == rotation && scale_ == scale) + return false; + rotation_ = rotation; - } - - // Returns the current scale of the mouse cursor icon. - float scale() const { - return scale_; - } - - // Sets the scale of the mouse cursor icon. - void set_scale(const float scale) { scale_ = scale; + UnloadCursors(); + return true; } - // Creates a cursor from an image resource and puts it in the cursor map. - virtual void LoadImageCursor(mojom::CursorType id, - int resource_id, - const gfx::Point& hot) = 0; + // Returns the size of the currently loaded cursor. + CursorSize size() const { return size_; } - // Creates an animated cursor from an image resource and puts it in the - // cursor map. The image is assumed to be a concatenation of animation frames - // from left to right. Also, each frame is assumed to be square - // (width == height). - // |frame_delay_ms| is the delay between frames in millisecond. - virtual void LoadAnimatedCursor(mojom::CursorType id, - int resource_id, - const gfx::Point& hot, - int frame_delay_ms) = 0; + // Sets the size of the mouse cursor icon. + void set_size(CursorSize size) { + if (size_ == size) + return; - // Unloads all the cursors. - virtual void UnloadAll() = 0; + size_ = size; + UnloadCursors(); + } // Sets the platform cursor based on the native type of |cursor|. virtual void SetPlatformCursor(gfx::NativeCursor* cursor) = 0; // Creates a CursorLoader. - static CursorLoader* Create(); + static std::unique_ptr<CursorLoader> Create(bool use_platform_cursors = true); + + protected: + // Resets the cursor cache. + virtual void UnloadCursors() = 0; private: // The current scale of the mouse cursor icon. - float scale_; + float scale_ = 1.0f; // The current rotation of the mouse cursor icon. - display::Display::Rotation rotation_; + display::Display::Rotation rotation_ = display::Display::ROTATE_0; - DISALLOW_COPY_AND_ASSIGN(CursorLoader); + // The preferred size of the mouse cursor icon. + CursorSize size_ = CursorSize::kNormal; }; } // namespace ui
diff --git a/ui/base/cursor/cursor_loader_ozone.cc b/ui/base/cursor/cursor_loader_ozone.cc index 6df16b5f..91bb7cb3 100644 --- a/ui/base/cursor/cursor_loader_ozone.cc +++ b/ui/base/cursor/cursor_loader_ozone.cc
@@ -4,50 +4,37 @@ #include "ui/base/cursor/cursor_loader_ozone.h" +#include <memory> #include <vector> +#include "base/ranges/algorithm.h" #include "ui/base/cursor/cursor_factory.h" #include "ui/base/cursor/cursor_size.h" #include "ui/base/cursor/cursor_util.h" #include "ui/base/cursor/cursors_aura.h" #include "ui/base/cursor/mojom/cursor_type.mojom-shared.h" +#include "ui/gfx/geometry/point.h" namespace ui { -CursorLoaderOzone::CursorLoaderOzone() { - factory_ = CursorFactory::GetInstance(); -} +namespace { + +constexpr mojom::CursorType kAnimatedCursorTypes[] = { + mojom::CursorType::kWait, mojom::CursorType::kProgress}; + +const int kAnimatedCursorFrameDelayMs = 25; + +} // namespace + +CursorLoaderOzone::CursorLoaderOzone(bool use_platform_cursors) + : use_platform_cursors_(use_platform_cursors), + factory_(CursorFactory::GetInstance()) {} CursorLoaderOzone::~CursorLoaderOzone() { - UnloadAll(); + UnloadCursors(); } -void CursorLoaderOzone::LoadImageCursor(mojom::CursorType id, - int resource_id, - const gfx::Point& hot) { - SkBitmap bitmap; - gfx::Point hotspot = hot; - - GetImageCursorBitmap(resource_id, scale(), rotation(), &hotspot, &bitmap); - - image_cursors_[id] = factory_->CreateImageCursor(bitmap, hotspot); -} - -void CursorLoaderOzone::LoadAnimatedCursor(mojom::CursorType id, - int resource_id, - const gfx::Point& hot, - int frame_delay_ms) { - std::vector<SkBitmap> bitmaps; - gfx::Point hotspot = hot; - - GetAnimatedCursorBitmaps( - resource_id, scale(), rotation(), &hotspot, &bitmaps); - - image_cursors_[id] = - factory_->CreateAnimatedCursor(bitmaps, hotspot, frame_delay_ms); -} - -void CursorLoaderOzone::UnloadAll() { +void CursorLoaderOzone::UnloadCursors() { for (const auto& image_cursor : image_cursors_) factory_->UnrefImageCursor(image_cursor.second); image_cursors_.clear(); @@ -63,43 +50,63 @@ cursor->SetPlatformCursor(CursorFromType(cursor->type())); } +void CursorLoaderOzone::LoadImageCursor(mojom::CursorType type, + int resource_id, + const gfx::Point& hot) { + gfx::Point hotspot = hot; + if (base::ranges::count(kAnimatedCursorTypes, type) == 0) { + SkBitmap bitmap; + GetImageCursorBitmap(resource_id, scale(), rotation(), &hotspot, &bitmap); + image_cursors_[type] = factory_->CreateImageCursor(bitmap, hotspot); + } else { + std::vector<SkBitmap> bitmaps; + GetAnimatedCursorBitmaps(resource_id, scale(), rotation(), &hotspot, + &bitmaps); + image_cursors_[type] = factory_->CreateAnimatedCursor( + bitmaps, hotspot, kAnimatedCursorFrameDelayMs); + } +} + PlatformCursor CursorLoaderOzone::CursorFromType(mojom::CursorType type) { // An image cursor is loaded for this type. if (image_cursors_.count(type)) return image_cursors_[type]; // Check if there's a default platform cursor available. - base::Optional<PlatformCursor> default_cursor = - factory_->GetDefaultCursor(type); - if (default_cursor) - return *default_cursor; + // For the none cursor, we also need to use the platform factory to take + // into account the different ways of creating an invisible cursor. + if (use_platform_cursors_ || type == mojom::CursorType::kNone) { + base::Optional<PlatformCursor> default_cursor = + factory_->GetDefaultCursor(type); + if (default_cursor) + return *default_cursor; + } // Loads the default Aura cursor bitmap for the cursor type. Falls back on // pointer cursor if this fails. - PlatformCursor platform = CreateFallbackCursor(type); + PlatformCursor platform = LoadCursorFromAsset(type); if (!platform && type != mojom::CursorType::kPointer) { platform = CursorFromType(mojom::CursorType::kPointer); factory_->RefImageCursor(platform); image_cursors_[type] = platform; } - DCHECK(platform) << "Failed to load a fallback bitmap for cursor " << type; + DCHECK(platform) << "Failed to load a bitmap for the pointer cursor."; return platform; } // Gets default Aura cursor bitmap/hotspot and creates a PlatformCursor with it. -PlatformCursor CursorLoaderOzone::CreateFallbackCursor(mojom::CursorType type) { +PlatformCursor CursorLoaderOzone::LoadCursorFromAsset(mojom::CursorType type) { int resource_id; - gfx::Point point; - if (ui::GetCursorDataFor(ui::CursorSize::kNormal, type, scale(), &resource_id, - &point)) { - LoadImageCursor(type, resource_id, point); + gfx::Point hotspot; + if (GetCursorDataFor(size(), type, scale(), &resource_id, &hotspot)) { + LoadImageCursor(type, resource_id, hotspot); return image_cursors_[type]; } return nullptr; } -CursorLoader* CursorLoader::Create() { - return new CursorLoaderOzone(); +std::unique_ptr<CursorLoader> CursorLoader::Create(bool use_platform_cursors) { + return std::make_unique<CursorLoaderOzone>(use_platform_cursors); } } // namespace ui
diff --git a/ui/base/cursor/cursor_loader_ozone.h b/ui/base/cursor/cursor_loader_ozone.h index ccd23a3..bf1c11f6 100644 --- a/ui/base/cursor/cursor_loader_ozone.h +++ b/ui/base/cursor/cursor_loader_ozone.h
@@ -13,28 +13,35 @@ #include "ui/base/cursor/cursor_loader.h" #include "ui/base/cursor/mojom/cursor_type.mojom-forward.h" +namespace gfx { +class Point; +} + namespace ui { class CursorFactory; class COMPONENT_EXPORT(UI_BASE_CURSOR) CursorLoaderOzone : public CursorLoader { public: - CursorLoaderOzone(); + explicit CursorLoaderOzone(bool use_platform_cursors); ~CursorLoaderOzone() override; // CursorLoader overrides: - void LoadImageCursor(mojom::CursorType id, - int resource_id, - const gfx::Point& hot) override; - void LoadAnimatedCursor(mojom::CursorType id, - int resource_id, - const gfx::Point& hot, - int frame_delay_ms) override; - void UnloadAll() override; void SetPlatformCursor(gfx::NativeCursor* cursor) override; private: + // CursorLoader overrides: + void UnloadCursors() override; + + void LoadImageCursor(mojom::CursorType id, + int resource_id, + const gfx::Point& hot); PlatformCursor CursorFromType(mojom::CursorType type); - PlatformCursor CreateFallbackCursor(mojom::CursorType type); + PlatformCursor LoadCursorFromAsset(mojom::CursorType type); + + // Whether to use cursors provided by the underlying platform (e.g. X11 + // cursors). If false or in the case of a failure, Chromium assets will be + // used instead. + const bool use_platform_cursors_; // Pointers are owned by ResourceBundle and must not be freed here. std::map<mojom::CursorType, PlatformCursor> image_cursors_;
diff --git a/ui/base/cursor/cursor_loader_unittest.cc b/ui/base/cursor/cursor_loader_unittest.cc new file mode 100644 index 0000000..ee871ed --- /dev/null +++ b/ui/base/cursor/cursor_loader_unittest.cc
@@ -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. + +#include "ui/base/cursor/cursor_loader.h" + +#include "testing/gtest/include/gtest/gtest.h" +#include "ui/base/cursor/cursor.h" +#include "ui/base/cursor/mojom/cursor_type.mojom-shared.h" + +#if defined(USE_OZONE) +#include "ui/base/cursor/ozone/bitmap_cursor_factory_ozone.h" +#endif + +#if defined(USE_X11) +#include "third_party/skia/include/core/SkBitmap.h" +#include "ui/base/x/x11_cursor_factory.h" // nogncheck +#include "ui/gfx/geometry/point.h" +#endif + +namespace ui { + +namespace { + +PlatformCursor LoadInvisibleCursor() { + auto cursor_loader = CursorLoader::Create(); + Cursor cursor(mojom::CursorType::kNone); + cursor_loader->SetPlatformCursor(&cursor); + return cursor.platform(); +} + +} // namespace + +#if !defined(USE_X11) +TEST(CursorLoaderTest, InvisibleCursorOnNotX11) { +#if defined(USE_OZONE) + BitmapCursorFactoryOzone cursor_factory; +#endif + EXPECT_EQ(LoadInvisibleCursor(), nullptr); +} +#endif + +#if defined(USE_X11) +TEST(CursorLoaderTest, InvisibleCursorOnX11) { + X11CursorFactory cursor_factory; + // Building an image cursor with an invalid SkBitmap should return the + // invisible cursor in X11. + auto* invisible_cursor = + cursor_factory.CreateImageCursor(SkBitmap(), gfx::Point()); + EXPECT_EQ(LoadInvisibleCursor(), invisible_cursor); + + // Release our refcount on the cursor + cursor_factory.UnrefImageCursor(invisible_cursor); +} +#endif + +} // namespace ui
diff --git a/ui/base/cursor/cursor_loader_win.cc b/ui/base/cursor/cursor_loader_win.cc index 735568d..392fd85 100644 --- a/ui/base/cursor/cursor_loader_win.cc +++ b/ui/base/cursor/cursor_loader_win.cc
@@ -6,6 +6,8 @@ #include <windows.h> +#include <memory> + #include "base/lazy_instance.h" #include "base/notreached.h" #include "ui/base/cursor/cursor.h" @@ -122,8 +124,8 @@ } // namespace -CursorLoader* CursorLoader::Create() { - return new CursorLoaderWin; +std::unique_ptr<CursorLoader> CursorLoader::Create(bool use_platform_cursors) { + return std::make_unique<CursorLoaderWin>(); } CursorLoaderWin::CursorLoaderWin() { @@ -132,20 +134,7 @@ CursorLoaderWin::~CursorLoaderWin() { } -void CursorLoaderWin::LoadImageCursor(mojom::CursorType id, - int resource_id, - const gfx::Point& hot) { - // NOTIMPLEMENTED(); -} - -void CursorLoaderWin::LoadAnimatedCursor(mojom::CursorType id, - int resource_id, - const gfx::Point& hot, - int frame_delay_ms) { - // NOTIMPLEMENTED(); -} - -void CursorLoaderWin::UnloadAll() { +void CursorLoaderWin::UnloadCursors() { // NOTIMPLEMENTED(); }
diff --git a/ui/base/cursor/cursor_loader_win.h b/ui/base/cursor/cursor_loader_win.h index bf3ec63..cbe7d0001 100644 --- a/ui/base/cursor/cursor_loader_win.h +++ b/ui/base/cursor/cursor_loader_win.h
@@ -18,14 +18,7 @@ ~CursorLoaderWin() override; // Overridden from CursorLoader: - void LoadImageCursor(mojom::CursorType id, - int resource_id, - const gfx::Point& hot) override; - void LoadAnimatedCursor(mojom::CursorType id, - int resource_id, - const gfx::Point& hot, - int frame_delay_ms) override; - void UnloadAll() override; + void UnloadCursors() override; void SetPlatformCursor(gfx::NativeCursor* cursor) override; // Used to pass the cursor resource module name to the cursor loader. This is
diff --git a/ui/base/cursor/cursor_util.cc b/ui/base/cursor/cursor_util.cc index a19a4dd..ee513696 100644 --- a/ui/base/cursor/cursor_util.cc +++ b/ui/base/cursor/cursor_util.cc
@@ -133,6 +133,9 @@ ResourceBundle::GetSharedInstance().GetImageSkiaNamed(resource_id); const gfx::ImageSkiaRep& image_rep = image->GetRepresentation(scale); SkBitmap bitmap = image_rep.GetBitmap(); + + // The image is assumed to be a concatenation of animation frames from left to + // right. Also, each frame is assumed to be square (width == height). int frame_width = bitmap.height(); int frame_height = frame_width; int total_width = bitmap.width();
diff --git a/ui/base/cursor/cursors_aura.cc b/ui/base/cursor/cursors_aura.cc index 710fb8d..c527ac4d 100644 --- a/ui/base/cursor/cursors_aura.cc +++ b/ui/base/cursor/cursors_aura.cc
@@ -42,8 +42,6 @@ const CursorSize id; const CursorData* cursors; const int length; - const CursorData* animated_cursors; - const int animated_length; }; const CursorData kNormalCursors[] = { @@ -127,6 +125,8 @@ {24, 23}}, {mojom::CursorType::kGrab, IDR_AURA_CURSOR_GRAB, {8, 5}, {16, 10}}, {mojom::CursorType::kGrabbing, IDR_AURA_CURSOR_GRABBING, {9, 9}, {18, 18}}, + {mojom::CursorType::kWait, IDR_AURA_CURSOR_THROBBER, {7, 7}, {14, 14}}, + {mojom::CursorType::kProgress, IDR_AURA_CURSOR_THROBBER, {7, 7}, {14, 14}}, }; const CursorData kLargeCursors[] = { @@ -233,20 +233,12 @@ IDR_AURA_CURSOR_BIG_GRABBING, {20, 12}, {40, 24}}, -}; - -const CursorData kAnimatedCursors[] = { - {mojom::CursorType::kWait, IDR_AURA_CURSOR_THROBBER, {7, 7}, {14, 14}}, - {mojom::CursorType::kProgress, IDR_AURA_CURSOR_THROBBER, {7, 7}, {14, 14}}, + // TODO(https://crbug.com/336867): create IDR_AURA_CURSOR_BIG_THROBBER. }; const CursorSizeData kCursorSizes[] = { - {CursorSize::kNormal, kNormalCursors, base::size(kNormalCursors), - kAnimatedCursors, base::size(kAnimatedCursors)}, - {CursorSize::kLarge, kLargeCursors, base::size(kLargeCursors), - // TODO(yoshiki): Replace animated cursors with big assets. - // crbug.com/247254 - kAnimatedCursors, base::size(kAnimatedCursors)}, + {CursorSize::kNormal, kNormalCursors, base::size(kNormalCursors)}, + {CursorSize::kLarge, kLargeCursors, base::size(kLargeCursors)}, }; const CursorSizeData* GetCursorSizeByType(CursorSize cursor_size) { @@ -302,25 +294,6 @@ resource_id, point); } -bool GetAnimatedCursorDataFor(CursorSize cursor_size, - mojom::CursorType id, - float scale_factor, - int* resource_id, - gfx::Point* point) { - const CursorSizeData* cursor_set = GetCursorSizeByType(cursor_size); - if (cursor_set && - SearchTable(cursor_set->animated_cursors, cursor_set->animated_length, id, - scale_factor, resource_id, point)) { - return true; - } - - // Falls back to the default cursor set. - cursor_set = GetCursorSizeByType(ui::CursorSize::kNormal); - DCHECK(cursor_set); - return SearchTable(cursor_set->animated_cursors, cursor_set->animated_length, - id, scale_factor, resource_id, point); -} - SkBitmap GetDefaultBitmap(const Cursor& cursor) { #if defined(OS_WIN) Cursor cursor_copy = cursor;
diff --git a/ui/base/cursor/cursors_aura.h b/ui/base/cursor/cursors_aura.h index cc82d97..69e514e 100644 --- a/ui/base/cursor/cursors_aura.h +++ b/ui/base/cursor/cursors_aura.h
@@ -18,8 +18,6 @@ class Cursor; enum class CursorSize; -const int kAnimatedCursorFrameDelayMs = 25; - // Returns data about |id|, where id is a cursor constant like // ui::mojom::CursorType::kHelp. The IDR will be placed in |resource_id| and // the hotspots for the different DPIs will be placed in |hot_1x| and @@ -31,14 +29,6 @@ int* resource_id, gfx::Point* point); -// Like above, but for animated cursors. -COMPONENT_EXPORT(UI_BASE_CURSOR) -bool GetAnimatedCursorDataFor(CursorSize cursor_size, - mojom::CursorType id, - float scale_factor, - int* resource_id, - gfx::Point* point); - SkBitmap GetDefaultBitmap(const Cursor& cursor); gfx::Point GetDefaultHotspot(const Cursor& cursor);
diff --git a/ui/base/cursor/image_cursors.cc b/ui/base/cursor/image_cursors.cc deleted file mode 100644 index 42fd3249..0000000 --- a/ui/base/cursor/image_cursors.cc +++ /dev/null
@@ -1,120 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "ui/base/cursor/image_cursors.h" - -#include "base/check.h" -#include "ui/base/cursor/cursor_loader.h" -#include "ui/base/cursor/cursors_aura.h" -#include "ui/base/cursor/mojom/cursor_type.mojom-shared.h" -#include "ui/gfx/geometry/point.h" - -namespace ui { - -namespace { - -constexpr mojom::CursorType kImageCursorIds[] = { - mojom::CursorType::kNull, - mojom::CursorType::kPointer, - mojom::CursorType::kNoDrop, - mojom::CursorType::kNotAllowed, - mojom::CursorType::kCopy, - mojom::CursorType::kHand, - mojom::CursorType::kMove, - mojom::CursorType::kNorthEastResize, - mojom::CursorType::kSouthWestResize, - mojom::CursorType::kSouthEastResize, - mojom::CursorType::kNorthWestResize, - mojom::CursorType::kNorthResize, - mojom::CursorType::kSouthResize, - mojom::CursorType::kEastResize, - mojom::CursorType::kWestResize, - mojom::CursorType::kIBeam, - mojom::CursorType::kAlias, - mojom::CursorType::kCell, - mojom::CursorType::kContextMenu, - mojom::CursorType::kCross, - mojom::CursorType::kHelp, - mojom::CursorType::kVerticalText, - mojom::CursorType::kZoomIn, - mojom::CursorType::kZoomOut, - mojom::CursorType::kRowResize, - mojom::CursorType::kColumnResize, - mojom::CursorType::kEastWestResize, - mojom::CursorType::kNorthSouthResize, - mojom::CursorType::kNorthEastSouthWestResize, - mojom::CursorType::kNorthWestSouthEastResize, - mojom::CursorType::kGrab, - mojom::CursorType::kGrabbing, -}; - -constexpr mojom::CursorType kAnimatedCursorIds[] = { - mojom::CursorType::kWait, mojom::CursorType::kProgress}; - -} // namespace - -ImageCursors::ImageCursors() - : cursor_loader_(CursorLoader::Create()), - cursor_size_(CursorSize::kNormal) {} - -ImageCursors::~ImageCursors() = default; - -float ImageCursors::GetScale() const { - return cursor_loader_->scale(); -} - -display::Display::Rotation ImageCursors::GetRotation() const { - return cursor_loader_->rotation(); -} - -bool ImageCursors::SetDisplay(const display::Display& display, - float scale_factor) { - if (cursor_loader_->rotation() == display.panel_rotation() && - cursor_loader_->scale() == scale_factor) - return false; - - cursor_loader_->set_rotation(display.panel_rotation()); - cursor_loader_->set_scale(scale_factor); - ReloadCursors(); - return true; -} - -void ImageCursors::ReloadCursors() { - float device_scale_factor = cursor_loader_->scale(); - - cursor_loader_->UnloadAll(); - - for (auto cursor_id : kImageCursorIds) { - int resource_id = -1; - gfx::Point hot_point; - bool success = GetCursorDataFor( - cursor_size_, cursor_id, device_scale_factor, &resource_id, &hot_point); - DCHECK(success); - cursor_loader_->LoadImageCursor(cursor_id, resource_id, hot_point); - } - for (auto cursor_id : kAnimatedCursorIds) { - int resource_id = -1; - gfx::Point hot_point; - bool success = GetAnimatedCursorDataFor( - cursor_size_, cursor_id, device_scale_factor, &resource_id, &hot_point); - DCHECK(success); - cursor_loader_->LoadAnimatedCursor(cursor_id, resource_id, hot_point, - kAnimatedCursorFrameDelayMs); - } -} - -void ImageCursors::SetCursorSize(CursorSize cursor_size) { - if (cursor_size_ == cursor_size) - return; - - cursor_size_ = cursor_size; - - ReloadCursors(); -} - -void ImageCursors::SetPlatformCursor(gfx::NativeCursor* cursor) { - cursor_loader_->SetPlatformCursor(cursor); -} - -} // namespace ui
diff --git a/ui/base/cursor/image_cursors.h b/ui/base/cursor/image_cursors.h deleted file mode 100644 index b5b5ec2..0000000 --- a/ui/base/cursor/image_cursors.h +++ /dev/null
@@ -1,52 +0,0 @@ -// Copyright 2014 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef UI_BASE_CURSOR_IMAGE_CURSORS_H_ -#define UI_BASE_CURSOR_IMAGE_CURSORS_H_ - -#include <memory> - -#include "base/component_export.h" -#include "ui/base/cursor/cursor_size.h" -#include "ui/display/display.h" -#include "ui/gfx/native_widget_types.h" - -namespace ui { - -class CursorLoader; - -// A utility class that provides cursors for NativeCursors for which we have -// image resources. -class COMPONENT_EXPORT(UI_BASE_CURSOR) ImageCursors { - public: - ImageCursors(); - ImageCursors(const ImageCursors&) = delete; - ImageCursors& operator=(const ImageCursors&) = delete; - ~ImageCursors(); - - // Returns the scale and rotation of the currently loaded cursor. - float GetScale() const; - display::Display::Rotation GetRotation() const; - - // Sets the display the cursors are loaded for. |scale_factor| determines the - // size of the image to load. Returns true if the cursor image is reloaded. - bool SetDisplay(const display::Display& display, float scale_factor); - - // Sets the size of the mouse cursor icon. - void SetCursorSize(CursorSize cursor_size); - - // Sets the platform cursor based on the native type of |cursor|. - void SetPlatformCursor(gfx::NativeCursor* cursor); - - private: - // Reloads the all loaded cursors in the cursor loader. - void ReloadCursors(); - - std::unique_ptr<CursorLoader> cursor_loader_; - CursorSize cursor_size_; -}; - -} // namespace ui - -#endif // UI_BASE_CURSOR_IMAGE_CURSORS_H_
diff --git a/ui/base/cursor/ozone/DIR_METADATA b/ui/base/cursor/ozone/DIR_METADATA new file mode 100644 index 0000000..69e7315 --- /dev/null +++ b/ui/base/cursor/ozone/DIR_METADATA
@@ -0,0 +1,11 @@ +# Metadata information for this directory. +# +# For more information on DIR_METADATA files, see: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md +# +# For the schema of this file, see Metadata message: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto + +monorail { + component: "UI>GFX" +} \ No newline at end of file
diff --git a/ui/base/cursor/ozone/OWNERS b/ui/base/cursor/ozone/OWNERS index 1c6f90ab..479c4d8 100644 --- a/ui/base/cursor/ozone/OWNERS +++ b/ui/base/cursor/ozone/OWNERS
@@ -1,4 +1,2 @@ rjkroege@chromium.org spang@chromium.org - -# COMPONENT: UI>GFX
diff --git a/ui/base/dragdrop/DIR_METADATA b/ui/base/dragdrop/DIR_METADATA new file mode 100644 index 0000000..185817f --- /dev/null +++ b/ui/base/dragdrop/DIR_METADATA
@@ -0,0 +1,12 @@ +# Metadata information for this directory. +# +# For more information on DIR_METADATA files, see: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md +# +# For the schema of this file, see Metadata message: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto + +monorail { + component: "Blink>DataTransfer" +} +team_email: "storage-dev@chromium.org" \ No newline at end of file
diff --git a/ui/base/dragdrop/OWNERS b/ui/base/dragdrop/OWNERS index 9f471ef..7baa107 100644 --- a/ui/base/dragdrop/OWNERS +++ b/ui/base/dragdrop/OWNERS
@@ -3,6 +3,3 @@ # Secondary: dcheng@chromium.org - -# TEAM: storage-dev@chromium.org -# COMPONENT: Blink>DataTransfer
diff --git a/ui/base/emoji/DIR_METADATA b/ui/base/emoji/DIR_METADATA new file mode 100644 index 0000000..b05aeb7e --- /dev/null +++ b/ui/base/emoji/DIR_METADATA
@@ -0,0 +1,11 @@ +# Metadata information for this directory. +# +# For more information on DIR_METADATA files, see: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md +# +# For the schema of this file, see Metadata message: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto + +monorail { + component: "Internal>Input" +} \ No newline at end of file
diff --git a/ui/base/emoji/OWNERS b/ui/base/emoji/OWNERS deleted file mode 100644 index 776ce1a..0000000 --- a/ui/base/emoji/OWNERS +++ /dev/null
@@ -1 +0,0 @@ -# COMPONENT: Internal>Input
diff --git a/ui/base/glib/DIR_METADATA b/ui/base/glib/DIR_METADATA new file mode 100644 index 0000000..63fc482 --- /dev/null +++ b/ui/base/glib/DIR_METADATA
@@ -0,0 +1,11 @@ +# Metadata information for this directory. +# +# For more information on DIR_METADATA files, see: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md +# +# For the schema of this file, see Metadata message: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto + +monorail { + component: "Internals" +} \ No newline at end of file
diff --git a/ui/base/glib/OWNERS b/ui/base/glib/OWNERS deleted file mode 100644 index f136fc1..0000000 --- a/ui/base/glib/OWNERS +++ /dev/null
@@ -1 +0,0 @@ -# COMPONENT: Internals
diff --git a/ui/base/idle/DIR_METADATA b/ui/base/idle/DIR_METADATA new file mode 100644 index 0000000..63fc482 --- /dev/null +++ b/ui/base/idle/DIR_METADATA
@@ -0,0 +1,11 @@ +# Metadata information for this directory. +# +# For more information on DIR_METADATA files, see: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md +# +# For the schema of this file, see Metadata message: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto + +monorail { + component: "Internals" +} \ No newline at end of file
diff --git a/ui/base/idle/OWNERS b/ui/base/idle/OWNERS deleted file mode 100644 index f136fc1..0000000 --- a/ui/base/idle/OWNERS +++ /dev/null
@@ -1 +0,0 @@ -# COMPONENT: Internals
diff --git a/ui/base/ime/DIR_METADATA b/ui/base/ime/DIR_METADATA new file mode 100644 index 0000000..40507e1 --- /dev/null +++ b/ui/base/ime/DIR_METADATA
@@ -0,0 +1,11 @@ +# Metadata information for this directory. +# +# For more information on DIR_METADATA files, see: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md +# +# For the schema of this file, see Metadata message: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto + +monorail { + component: "UI>Input>Text>IME" +} \ No newline at end of file
diff --git a/ui/base/ime/OWNERS b/ui/base/ime/OWNERS index 42b1af0..5e184ce 100644 --- a/ui/base/ime/OWNERS +++ b/ui/base/ime/OWNERS
@@ -7,5 +7,4 @@ yukishiino@chromium.org # For Windows. -yukawa@chromium.org -# COMPONENT: UI>Input>Text>IME +yukawa@chromium.org \ No newline at end of file
diff --git a/ui/base/ime/chromeos/input_method_chromeos.cc b/ui/base/ime/chromeos/input_method_chromeos.cc index d945288..fde4168 100644 --- a/ui/base/ime/chromeos/input_method_chromeos.cc +++ b/ui/base/ime/chromeos/input_method_chromeos.cc
@@ -379,7 +379,8 @@ if (IsTextInputTypeNone()) return false; - const gfx::Range composition_range(start, end); + const auto ordered_range = std::minmax(start, end); + const gfx::Range composition_range(ordered_range.first, ordered_range.second); // If we have pending key events, then delay the operation until // |ProcessKeyEventPostIME|. Otherwise, process it immediately.
diff --git a/ui/base/l10n/DIR_METADATA b/ui/base/l10n/DIR_METADATA new file mode 100644 index 0000000..34512e7 --- /dev/null +++ b/ui/base/l10n/DIR_METADATA
@@ -0,0 +1,11 @@ +# Metadata information for this directory. +# +# For more information on DIR_METADATA files, see: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md +# +# For the schema of this file, see Metadata message: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto + +monorail { + component: "UI>Internationalization" +} \ No newline at end of file
diff --git a/ui/base/l10n/OWNERS b/ui/base/l10n/OWNERS index b2ce105..a3be676 100644 --- a/ui/base/l10n/OWNERS +++ b/ui/base/l10n/OWNERS
@@ -1,2 +1 @@ -jshin@chromium.org -# COMPONENT: UI>Internationalization +jshin@chromium.org \ No newline at end of file
diff --git a/ui/base/pointer/DIR_METADATA b/ui/base/pointer/DIR_METADATA new file mode 100644 index 0000000..b05aeb7e --- /dev/null +++ b/ui/base/pointer/DIR_METADATA
@@ -0,0 +1,11 @@ +# Metadata information for this directory. +# +# For more information on DIR_METADATA files, see: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md +# +# For the schema of this file, see Metadata message: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto + +monorail { + component: "Internal>Input" +} \ No newline at end of file
diff --git a/ui/base/pointer/OWNERS b/ui/base/pointer/OWNERS index c55b9d29..b3dbc20 100644 --- a/ui/base/pointer/OWNERS +++ b/ui/base/pointer/OWNERS
@@ -2,5 +2,3 @@ per-file touch_ui_controller*=kylixrd@chromium.org per-file touch_ui_controller*=robliao@chromium.org - -# COMPONENT: Internal>Input
diff --git a/ui/base/resource/DIR_METADATA b/ui/base/resource/DIR_METADATA new file mode 100644 index 0000000..63fc482 --- /dev/null +++ b/ui/base/resource/DIR_METADATA
@@ -0,0 +1,11 @@ +# Metadata information for this directory. +# +# For more information on DIR_METADATA files, see: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md +# +# For the schema of this file, see Metadata message: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto + +monorail { + component: "Internals" +} \ No newline at end of file
diff --git a/ui/base/resource/OWNERS b/ui/base/resource/OWNERS index 1c5b89e..56c2d34 100644 --- a/ui/base/resource/OWNERS +++ b/ui/base/resource/OWNERS
@@ -1,2 +1 @@ -per-file *_android.*=file://chrome/browser/android/OWNERS -# COMPONENT: Internals +per-file *_android.*=file://chrome/browser/android/OWNERS \ No newline at end of file
diff --git a/ui/base/test/DIR_METADATA b/ui/base/test/DIR_METADATA new file mode 100644 index 0000000..5d58609 --- /dev/null +++ b/ui/base/test/DIR_METADATA
@@ -0,0 +1,11 @@ +# Metadata information for this directory. +# +# For more information on DIR_METADATA files, see: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md +# +# For the schema of this file, see Metadata message: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto + +monorail { + component: "Tests" +} \ No newline at end of file
diff --git a/ui/base/test/OWNERS b/ui/base/test/OWNERS index 9c3b6f18..8f38fc9 100644 --- a/ui/base/test/OWNERS +++ b/ui/base/test/OWNERS
@@ -7,5 +7,4 @@ thakis@chromium.org # Clipboard -per-file test_clipboard*=dcheng@chromium.org -# COMPONENT: Tests +per-file test_clipboard*=dcheng@chromium.org \ No newline at end of file
diff --git a/ui/base/text/DIR_METADATA b/ui/base/text/DIR_METADATA new file mode 100644 index 0000000..55a8d578 --- /dev/null +++ b/ui/base/text/DIR_METADATA
@@ -0,0 +1,11 @@ +# Metadata information for this directory. +# +# For more information on DIR_METADATA files, see: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md +# +# For the schema of this file, see Metadata message: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto + +monorail { + component: "UI>Localization" +} \ No newline at end of file
diff --git a/ui/base/text/OWNERS b/ui/base/text/OWNERS index b999cb1..b9e8da9 100644 --- a/ui/base/text/OWNERS +++ b/ui/base/text/OWNERS
@@ -1,3 +1 @@ asvitkine@chromium.org - -# COMPONENT: UI>Localization
diff --git a/ui/base/webui/DIR_METADATA b/ui/base/webui/DIR_METADATA new file mode 100644 index 0000000..cf14990 --- /dev/null +++ b/ui/base/webui/DIR_METADATA
@@ -0,0 +1,11 @@ +# Metadata information for this directory. +# +# For more information on DIR_METADATA files, see: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/README.md +# +# For the schema of this file, see Metadata message: +# https://source.chromium.org/chromium/infra/infra/+/master:go/src/infra/tools/dirmd/proto/dir_metadata.proto + +monorail { + component: "UI>Browser>WebUI" +} \ No newline at end of file
diff --git a/ui/base/webui/OWNERS b/ui/base/webui/OWNERS index 918baa1..a42ad1e 100644 --- a/ui/base/webui/OWNERS +++ b/ui/base/webui/OWNERS
@@ -1,3 +1 @@ file://ui/webui/PLATFORM_OWNERS - -# COMPONENT: UI>Browser>WebUI
diff --git a/ui/chromeos/file_manager_strings.grdp b/ui/chromeos/file_manager_strings.grdp index 69fa5a16..5d3e7698 100644 --- a/ui/chromeos/file_manager_strings.grdp +++ b/ui/chromeos/file_manager_strings.grdp
@@ -962,6 +962,15 @@ <message name="IDS_FILE_BROWSER_CONFIRM_DELETE_SOME" desc="Asks the user if they are sure they want to delete multiple files/directories."> Are you sure you want to delete <ph name="NUMBER_OF_ITEMS">$1<ex>3</ex></ph> items? </message> + <message name="IDS_FILE_BROWSER_UNDO_DELETE_ONE" desc="Confirm to a user that they have deleted a single file and offer to undo"> + <ph name="FILE_NAME">$1<ex>file.txt</ex></ph> deleted + </message> + <message name="IDS_FILE_BROWSER_UNDO_DELETE_SOME" desc="Confirm to a user that they have deleted multiple files and offer to undo"> + <ph name="NUMBER_OF_ITEMS">$1<ex>3</ex></ph> items deleted + </message> + <message name="IDS_FILE_BROWSER_UNDO_DELETE_ACTION_LABEL" desc="Undo label shown on toast to undo delete operation"> + Undo + </message> <message name="IDS_FILE_BROWSER_UNKNOWN_FILESYSTEM_WARNING" desc="Displayed when device contents cannot be read because filesystem is unknown."> This device cannot be opened because its filesystem was not recognized.
diff --git a/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_UNDO_DELETE_ACTION_LABEL.png.sha1 b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_UNDO_DELETE_ACTION_LABEL.png.sha1 new file mode 100644 index 0000000..561598f --- /dev/null +++ b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_UNDO_DELETE_ACTION_LABEL.png.sha1
@@ -0,0 +1 @@ +b025494050650332c0d6964cb82b977199bd9fd0
diff --git a/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_UNDO_DELETE_ONE.png.sha1 b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_UNDO_DELETE_ONE.png.sha1 new file mode 100644 index 0000000..561598f --- /dev/null +++ b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_UNDO_DELETE_ONE.png.sha1
@@ -0,0 +1 @@ +b025494050650332c0d6964cb82b977199bd9fd0
diff --git a/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_UNDO_DELETE_SOME.png.sha1 b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_UNDO_DELETE_SOME.png.sha1 new file mode 100644 index 0000000..a21cc29 --- /dev/null +++ b/ui/chromeos/file_manager_strings_grdp/IDS_FILE_BROWSER_UNDO_DELETE_SOME.png.sha1
@@ -0,0 +1 @@ +8d3b3f36cf84c787244001584e2b8425be3e7549
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb index af7e4eb..c4e93ab 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">ফরাসী</translation> <translation id="3254434849914415189"><ph name="FILE_TYPE" /> ফাইলের জন্য ডিফল্ট অ্যাপ বেছে নিন:</translation> <translation id="3264582393905923483">প্রসঙ্গ</translation> +<translation id="3272909651715601089">"<ph name="PATH" />" খোলা যায়নি</translation> <translation id="3280431534455935878">প্রস্তুতি</translation> <translation id="3280987981688031357">ভিনাইল রেকর্ড</translation> <translation id="3296763833017966289">জর্জিয়ান</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">বুলগেরিয়ান ফনেটিক</translation> <translation id="4479812471636796472">ইউএস দভোরাক কীবোর্ড</translation> <translation id="4522570452068850558">বিশদ বিবরণ</translation> +<translation id="4527800702232535228">এই ফোল্ডার Parallels Desktop-এর সাথে শেয়ার করা হয়েছে</translation> <translation id="4552678318981539154">আরও সঞ্চয়স্থান কিনুন</translation> <translation id="4559767610552730302">বোকে</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ফাইল</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">বাঁদর</translation> <translation id="4697043402264950621">ফাইলের তালিকা <ph name="COLUMN_NAME" />-এর মানের উপর নির্ভর করে ছোট থেকে বড় ক্রমানুযায়ী সাজানো আছে।</translation> <translation id="4711094779914110278">তুর্কি</translation> +<translation id="4712283082407695269">"<ph name="PATH" />" খোলা হচ্ছে</translation> <translation id="4713544552769165154">Macintosh সফ্টওয়্যার ব্যবহার করে এমন একটি কম্পিউটারের জন্য এই ফাইলটি ডিজাইন করা হয়েছে৷ Chrome OS দ্বারা চালিত আপনার ডিভাইসটির সাথে এটি সামঞ্জস্যপূর্ণ নয়৷ একটি উপযুক্ত প্রতিস্থাপনযোগ্য অ্যাপ জন্য অনুগ্রহ করে <ph name="BEGIN_LINK" />Chrome ওয়েব স্টোর<ph name="END_LINK" />-এ সার্চ করুন৷<ph name="BEGIN_LINK_HELP" />আরও জানুন<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" />টি ফটোর ব্যাকআপ নেওয়া হয়েছে</translation> <translation id="4725511304875193254">কর্গি কুকুর</translation> @@ -524,6 +527,7 @@ <translation id="6558280019477628686">একটি ত্রুটি হয়েছে৷ কিছু আইটেম হয়ত মোছা যায়নি।</translation> <translation id="656398493051028875">"<ph name="FILENAME" />" মোছা হচ্ছে...</translation> <translation id="6581162200855843583">Google ড্রাইভ লিঙ্ক</translation> +<translation id="6594855146910089723">এই ফোল্ডার Linux ও Parallels Desktop-এর সাথে শেয়ার করা হয়েছে</translation> <translation id="6607272825297743757">ফাইলের তথ্য</translation> <translation id="6609332149380188670">Parallels Desktop-এর সাথে <ph name="NUMBER_OF_ITEMS" /> ফোল্ডার শেয়ার করা হয়েছে</translation> <translation id="6629841649550503054"><ph name="BEGIN_LINK" />Google ড্রাইভ<ph name="END_LINK" /> এ সবগুলির ব্যাকআপ নেওয়া হয়েছে</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb index 6790e92..42a20136 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
@@ -60,7 +60,7 @@ <translation id="1538729222189715449">Linux fitxategiak irekitzen…</translation> <translation id="1547964879613821194">Ingelesa (Kanada)</translation> <translation id="1556189134700913550">Aplikatu guztiei</translation> -<translation id="1561842594491319104">Chrome-ren gailuak</translation> +<translation id="1561842594491319104">Chrome darabilten gailuak</translation> <translation id="1572585716423026576">Ezarri horma-paper gisa</translation> <translation id="158809615184981282">Teklatu faroetarra</translation> <translation id="1589128298353575783"><ph name="NUMBER_OF_PB" /> PB</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gl.xtb b/ui/chromeos/translations/ui_chromeos_strings_gl.xtb index f8f80e8..a003715f 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_gl.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_gl.xtb
@@ -475,7 +475,7 @@ <translation id="5932901536148835538">Chromebit</translation> <translation id="5949281959820712067">Concede permisos ás aplicacións de Linux para modificar ficheiros en Google Drive. Os cambios sincronizaranse cos demais dispositivos.</translation> <translation id="5955954492236143329"><ph name="NUMBER_OF_ITEMS" /> elementos</translation> -<translation id="5957366693331451795">Chromeboxes</translation> +<translation id="5957366693331451795">Dispositivos Chromebox</translation> <translation id="5982621672636444458">Opcións de ordenación</translation> <translation id="6005282720244019462">Teclado latinoamericano</translation> <translation id="6007237601604674381">Non se puido mover. <ph name="ERROR_MESSAGE" /></translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb index 2f395f2..6123615 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb
@@ -149,7 +149,7 @@ <translation id="2563185590376525700">צפרדע</translation> <translation id="2614589611416690597">קובץ וידאו בפורמט <ph name="VIDEO_TYPE" /></translation> <translation id="2620090360073999360">לא ניתן להגיע אל Google Drive בשלב זה.</translation> -<translation id="2638942478653899953">לא ניתן היה להגיע אל Google Drive. <ph name="BEGIN_LINK" />צא<ph name="END_LINK" /> ואז התחבר שוב.</translation> +<translation id="2638942478653899953">לא ניתן היה להגיע אל Google Drive. <ph name="BEGIN_LINK" />יש לצאת<ph name="END_LINK" /> ואז להתחבר שוב.</translation> <translation id="2649120831653069427">דג</translation> <translation id="2661146741306740526">16x9</translation> <translation id="2664412712123763093">מיקום הקובץ</translation> @@ -252,7 +252,7 @@ <translation id="3749289110408117711">שם קובץ</translation> <translation id="3780536599611287598">אין לך הרשאה להעביר קבצים אל '<ph name="FOLDER_NAME" />'.</translation> <translation id="3786301125658655746">אינך מחובר לאינטרנט</translation> -<translation id="3789841737615482174">התקן</translation> +<translation id="3789841737615482174">התקנה</translation> <translation id="3793469551756281394">נותרו כ-<ph name="REMAINING_TIME_HOUR" /> ו-<ph name="REMAINING_TIME_MINUTE" /></translation> <translation id="3798449238516105146">גרסה</translation> <translation id="3801082500826908679">פארואזית</translation> @@ -288,7 +288,7 @@ <translation id="418179967336296930">מקלדת רוסית פונטית (YaZHert)</translation> <translation id="4193154014135846272">מסמך Google</translation> <translation id="4195249722193633765">התקנת אפליקציה באמצעות Linux (בטא)</translation> -<translation id="4197674956721858839">כווץ את הקבצים שנבחרו</translation> +<translation id="4197674956721858839">כיווץ הקבצים שנבחרו</translation> <translation id="421017592316736757">עליך להיות במצב מקוון כדי לגשת לקובץ זה.</translation> <translation id="4212740939091998969">כבר קיימת תיקייה בשם "<ph name="FOLDER_NAME" />". יש לבחור שם אחר.</translation> <translation id="4215448920900139318">מגבה <ph name="FILE_COUNT" /></translation> @@ -494,7 +494,7 @@ <translation id="6129953537138746214">רווח</translation> <translation id="6133173853026656527">מעביר את <ph name="FILE_NAME" />...</translation> <translation id="6146563240635539929">סרטונים</translation> -<translation id="6150853954427645995">כדי לשמור קובץ זה לשימוש לא מקוון, חזור למצב מקוון, לחץ לחיצה ימנית על הקובץ ובחר את האפשרות <ph name="OFFLINE_CHECKBOX_NAME" />.</translation> +<translation id="6150853954427645995">כדי לשמור קובץ זה לשימוש אופליין, יש לחזור למצב אונליין, ללחוץ לחיצה ימנית על הקובץ ולבחור את האפשרות <ph name="OFFLINE_CHECKBOX_NAME" />.</translation> <translation id="6164412158936057769">פרפרים</translation> <translation id="6170470584681422115">כריך</translation> <translation id="6189412234224385711">פתח באמצעות <ph name="EXTENSION_NAME" /></translation> @@ -628,7 +628,7 @@ <translation id="7705251383879779343">ההעתקה של <ph name="FILE_NAME" /> הסתיימה.</translation> <translation id="7706319470528945664">מקלדת פורטוגזית</translation> <translation id="7711920809702896782">פרטי התמונה</translation> -<translation id="7724603315864178912">חתוך</translation> +<translation id="7724603315864178912">חיתוך</translation> <translation id="7730494089396812859">הצגת פרטים של גיבוי בענן</translation> <translation id="7748626145866214022">אפשרויות נוספות זמינות בסרגל הפעולות. הקשה על Alt + A תדגיש את סרגל הפעולות.</translation> <translation id="7765158879357617694">העברה</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb index 208626cb..1ab6110 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">フランス語</translation> <translation id="3254434849914415189"><ph name="FILE_TYPE" /> ファイルのデフォルト アプリを選択:</translation> <translation id="3264582393905923483">コンテキスト</translation> +<translation id="3272909651715601089">「<ph name="PATH" />」を開けませんでした</translation> <translation id="3280431534455935878">準備中</translation> <translation id="3280987981688031357">レコード</translation> <translation id="3296763833017966289">グルジア語</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">ブルガリア語(表音)</translation> <translation id="4479812471636796472">Dvorak 配列キーボード(米国)</translation> <translation id="4522570452068850558">詳細</translation> +<translation id="4527800702232535228">このフォルダは Parallels Desktop と共有されています</translation> <translation id="4552678318981539154">追加ストレージを購入</translation> <translation id="4559767610552730302">ピンぼけ</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ファイル</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">サル</translation> <translation id="4697043402264950621">ファイルの一覧は <ph name="COLUMN_NAME" /> の昇順で並べ替えられています。</translation> <translation id="4711094779914110278">トルコ語</translation> +<translation id="4712283082407695269">「<ph name="PATH" />」を開いています</translation> <translation id="4713544552769165154">このファイルは Macintosh ソフトウェアを使用するパソコン向けのもので、Chrome OS を実行するデバイスとは互換性がありません。<ph name="BEGIN_LINK" />Chrome ウェブストア<ph name="END_LINK" />で、このデバイスで使用できる代わりのアプリをお探しください。<ph name="BEGIN_LINK_HELP" />詳細<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> 枚の写真をバックアップしました</translation> <translation id="4725511304875193254">コーギー</translation> @@ -525,6 +528,7 @@ <translation id="6558280019477628686">エラーが発生しました。一部の項目が削除されていない可能性があります。</translation> <translation id="656398493051028875">「<ph name="FILENAME" />」を削除しています...</translation> <translation id="6581162200855843583">Google ドライブ リンク</translation> +<translation id="6594855146910089723">このフォルダは Linux および Parallels Desktop と共有されています</translation> <translation id="6607272825297743757">ファイル情報</translation> <translation id="6609332149380188670"><ph name="NUMBER_OF_ITEMS" /> 個のフォルダが Parallels Desktop と共有されています</translation> <translation id="6629841649550503054">すべて <ph name="BEGIN_LINK" />Google ドライブ<ph name="END_LINK" />にバックアップ済みです</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb index 341f786..90b0bc1 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
@@ -203,6 +203,7 @@ <translation id="3252266817569339921">ಫ್ರೆಂಚ್</translation> <translation id="3254434849914415189"><ph name="FILE_TYPE" /> ಫೈಲ್ಗಳಿಗಾಗಿ ಡಿಫಾಲ್ಟ್ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಆರಿಸಿ:</translation> <translation id="3264582393905923483">ಸಂದರ್ಭ</translation> +<translation id="3272909651715601089">"<ph name="PATH" />" ತೆರೆಯಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ</translation> <translation id="3280431534455935878">ತಯಾರಿ ನಡೆಸಲಾಗುತ್ತಿದೆ</translation> <translation id="3280987981688031357">ವಿನೈಲ್ ರೆಕಾರ್ಡ್</translation> <translation id="3296763833017966289">ಜಾರ್ಜಿಯನ್</translation> @@ -305,6 +306,7 @@ <translation id="4477219268485577442">ಬಲ್ಗೇರಿಯನ್ ಫೊನೆಟಿಕ್</translation> <translation id="4479812471636796472">ಯುಎಸ್ ಡಿವೊರಾಕ್ ಕೀಬೋರ್ಡ್</translation> <translation id="4522570452068850558">ವಿವರಗಳು</translation> +<translation id="4527800702232535228">ಈ ಫೋಲ್ಡರ್ ಅನ್ನು Parallels Desktop ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲಾಗಿದೆ</translation> <translation id="4552678318981539154">ಇನ್ನಷ್ಟು ಸಂಗ್ರಹಣೆಯನ್ನು ಖರೀದಿಸಿ</translation> <translation id="4559767610552730302">ಬೊಕೆ</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ಫೈಲ್</translation> @@ -322,6 +324,7 @@ <translation id="4694604912444486114">ಕೋತಿ</translation> <translation id="4697043402264950621">ಫೈಲ್ ಪಟ್ಟಿಯನ್ನು <ph name="COLUMN_NAME" /> ಪ್ರಕಾರವಾಗಿ ಕೆಳಗಿನಿಂದ ಮೇಲೆ ಕ್ರಮದಲ್ಲಿ ವಿಂಗಡಿಸಲಾಗಿದೆ.</translation> <translation id="4711094779914110278">ಟರ್ಕಿಶ್</translation> +<translation id="4712283082407695269">"<ph name="PATH" />" ತೆರೆಯಲಾಗುತ್ತಿದೆ</translation> <translation id="4713544552769165154">Macintosh ಸಾಫ್ಟ್ವೇರ್ ಬಳಸಿಕೊಂಡು ಕಂಪ್ಯೂಟರ್ಗಾಗಿ ಈ ಫೈಲ್ ಅನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ. Chrome OS ಅನ್ನು ರನ್ ಮಾಡುವ ಸಾಧನದ ಜೊತೆಗೆ ಇದು ಹೊಂದಾಣಿಕೆಗೊಳ್ಳುವುದಿಲ್ಲ. ದಯವಿಟ್ಟು ಸೂಕ್ತವಾದ ಬದಲಿ ಅಪ್ಲಿಕೇಶನ್ಗಾಗಿ <ph name="BEGIN_LINK" />Chrome ವೆಬ್ ಸ್ಟೋರ್ನಲ್ಲಿ<ph name="END_LINK" /> ಹುಡುಕಿ.<ph name="BEGIN_LINK_HELP" />ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> ಫೋಟೋಗಳನ್ನು ಬ್ಯಾಕಪ್ ಮಾಡಲಾಗಿದೆ</translation> <translation id="4725511304875193254">ಕಾರ್ಗಿ</translation> @@ -521,6 +524,7 @@ <translation id="6558280019477628686">ದೋಷ ಸಂಭವಿಸಿದೆ. ಕೆಲವು ಐಟಂಗಳನ್ನು ಅಳಿಸಲು ಸಾಧ್ಯವಾಗದಿರಬಹುದು.</translation> <translation id="656398493051028875">"<ph name="FILENAME" />" ಅಳಿಸಲಾಗುತ್ತಿದೆ...</translation> <translation id="6581162200855843583">Google ಡ್ರೈವ್ ಲಿಂಕ್</translation> +<translation id="6594855146910089723">ಈ ಫೋಲ್ಡರ್ ಅನ್ನು Linux ಮತ್ತು Parallels Desktop ಜೊತೆಗೆ ಹಂಚಿಕೊಳ್ಳಲಾಗಿದೆ</translation> <translation id="6607272825297743757">ಫೈಲ್ ಮಾಹಿತಿ</translation> <translation id="6609332149380188670">Parallels Desktop ಮೂಲಕ <ph name="NUMBER_OF_ITEMS" /> ಫೋಲ್ಡರ್ಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಲಾಗಿದೆ</translation> <translation id="6629841649550503054"><ph name="BEGIN_LINK" />Google ಡ್ರೈವ್<ph name="END_LINK" /> ಗೆ ಎಲ್ಲವನ್ನೂ ಬ್ಯಾಕಪ್ ಮಾಡಲಾಗಿದೆ!</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb index 06029f1..fe3076d 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
@@ -236,7 +236,7 @@ <translation id="3583509704582854624">वर्णांक इनपुट (जपानी कीबोर्डसाठी)</translation> <translation id="3603385196401704894">कॅनेडियन फ्रेंच</translation> <translation id="3606220979431771195">तुर्की-F</translation> -<translation id="3609785682760573515">संकालन करत आहे...</translation> +<translation id="3609785682760573515">सिंक करत आहे...</translation> <translation id="3616113530831147358">ऑडिओ</translation> <translation id="3619115746895587757">कॅपिचिनो</translation> <translation id="3620292326130836921">सर्व बॅकअप घेतला!</translation> @@ -329,7 +329,7 @@ <translation id="4697043402264950621"><ph name="COLUMN_NAME" /> नुसार चढत्या क्रमाने क्रमवारी लावलेली फाइल सूची.</translation> <translation id="4711094779914110278">तुर्की</translation> <translation id="4712283082407695269">"<ph name="PATH" />" उघडत आहे</translation> -<translation id="4713544552769165154">ही फाइल Macintosh सॉफ्टवेअर वापरून एका कॉंप्युटरसाठी डिझाइन केली आहे. ही Chrome OS चालवणार्या तुमच्या डिव्हाइसशी सुसंगत नाही. कृपया एका सोयीस्कर रिप्लेसमेंट ॲप साठी <ph name="BEGIN_LINK" />Chrome वेब स्टोअर<ph name="END_LINK" /> शोधा.<ph name="BEGIN_LINK_HELP" />अधिक जाणून घ्या<ph name="END_LINK_HELP" /></translation> +<translation id="4713544552769165154">ही फाइल Macintosh सॉफ्टवेअर वापरून एका कॉंप्युटरसाठी डिझाइन केली आहे. ही Chrome OS चालवणार्या तुमच्या डिव्हाइसशी सुसंगत नाही. कृपया एका सोयीस्कर रिप्लेसमेंट अॅप साठी <ph name="BEGIN_LINK" />Chrome वेब स्टोअर<ph name="END_LINK" /> शोधा.<ph name="BEGIN_LINK_HELP" />अधिक जाणून घ्या<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> फोटोंचा बॅकअप घेतला</translation> <translation id="4725511304875193254">कॉर्गी</translation> <translation id="4732760563705710320">क्षमस्व, आपल्या कास्ट डिव्हाइसद्वारे हा व्हिडिओ समर्थित नाही.</translation> @@ -564,7 +564,7 @@ <ph name="FILE_COUNT" />आढळले</translation> <translation id="6935521024859866267">उलट सुलट</translation> <translation id="6939777852457331078">यूएस कामगार कीबोर्ड</translation> -<translation id="696203921837389374">मोबाइल डेटावर संकालन सुरू करा</translation> +<translation id="696203921837389374">मोबाइल डेटावर सिंक सुरू करा</translation> <translation id="6965382102122355670">ठीक आहे</translation> <translation id="6970230597523682626">बल्गेरियन</translation> <translation id="6973630695168034713">फोल्डर</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb index b9f8718..4749b92 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">फ्रेन्च</translation> <translation id="3254434849914415189"><ph name="FILE_TYPE" /> फाइलहरूको लागि पूर्वनिर्धारित एप छान्नुहोस्:</translation> <translation id="3264582393905923483">सन्दर्भ</translation> +<translation id="3272909651715601089">"<ph name="PATH" />" खोल्न सकिएन</translation> <translation id="3280431534455935878">तैयार गर्दै</translation> <translation id="3280987981688031357">भाइनल रेकर्ड</translation> <translation id="3296763833017966289">जोर्जियन</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">बुल्गेरियन फोनेटिक</translation> <translation id="4479812471636796472">अमेरिकी ड्भोराक किबोर्ड</translation> <translation id="4522570452068850558">विवरणहरू</translation> +<translation id="4527800702232535228">यो फोल्डर Parallels Desktop सँग सेयर गरिएको छ</translation> <translation id="4552678318981539154">थप भण्डारण खरीद गर्नुहोस्</translation> <translation id="4559767610552730302">Bokeh</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" /> फाइल</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">बाँदर</translation> <translation id="4697043402264950621"><ph name="COLUMN_NAME" /> का आधारमा बढ्दो क्रममा क्रमबद्ध गरिएको फाइलको सूची।</translation> <translation id="4711094779914110278">टर्किश</translation> +<translation id="4712283082407695269">"<ph name="PATH" />" खोलिँदै</translation> <translation id="4713544552769165154">यो फाइल Macintosh सफ्टवेयर प्रयोग गरिरहेका कम्प्युटरको लागि तयार गरिएको हो। यो Chrome OS चलाउने तपाईंको यन्त्रसँग मिल्दोजुल्दो छैन। कृपया उपयुक्त प्रतिस्थापन एप्लिकेसनको लागि <ph name="BEGIN_LINK" />Chrome वेब भण्डार<ph name="END_LINK" /> खोज्नुहोस्।<ph name="BEGIN_LINK_HELP" />थप जान्नुहोस्<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> तस्बिरहरू जगेडा गरियो</translation> <translation id="4725511304875193254">कोर्गी</translation> @@ -524,6 +527,7 @@ <translation id="6558280019477628686">एउटा त्रुटि भयो। केही वस्तुहरू नमेटिएका हुनसक्छन्।</translation> <translation id="656398493051028875">"<ph name="FILENAME" />" लाई मेटाउँदै...</translation> <translation id="6581162200855843583">Google ड्राइभ लिङ्क</translation> +<translation id="6594855146910089723">यो फोल्डर Linux र Parallels Desktop सँग सेयर गरिएको छ</translation> <translation id="6607272825297743757">फाइल बारे जानकारी</translation> <translation id="6609332149380188670">Parallels Desktop सँग <ph name="NUMBER_OF_ITEMS" /> वटा फोल्डर सेयर गरियो</translation> <translation id="6629841649550503054">सबै <ph name="BEGIN_LINK" />Google ड्राइभ<ph name="END_LINK" /> मा जगेडा गरियो!</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pa.xtb b/ui/chromeos/translations/ui_chromeos_strings_pa.xtb index 1e81fb1..928ba0e 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pa.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pa.xtb
@@ -207,6 +207,7 @@ <translation id="3252266817569339921">ਫਰੈਂਚ</translation> <translation id="3254434849914415189"><ph name="FILE_TYPE" /> ਫ਼ਾਈਲਾਂ ਲਈ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਐਪ ਚੁਣੋ:</translation> <translation id="3264582393905923483">ਸੰਦਰਭ</translation> +<translation id="3272909651715601089">"<ph name="PATH" />" ਨੂੰ ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ</translation> <translation id="3280431534455935878">ਤਿਆਰੀ ਕਰ ਰਿਹਾ ਹੈ</translation> <translation id="3280987981688031357">ਤਵਾ ਰਿਕਾਰਡ</translation> <translation id="3296763833017966289">Georgian</translation> @@ -309,6 +310,7 @@ <translation id="4477219268485577442">ਬਲਗੇਰੀਅਨ ਧੁਨੀਆਤਮਿਕ</translation> <translation id="4479812471636796472">US Dvorak ਕੀ-ਬੋਰਡ</translation> <translation id="4522570452068850558">ਵੇਰਵੇ</translation> +<translation id="4527800702232535228">ਇਹ ਫੋਲਡਰ Parallels Desktop ਨਾਲ ਸਾਂਝਾ ਕੀਤਾ ਗਿਆ ਹੈ</translation> <translation id="4552678318981539154">ਹੋਰ ਸਟੋਰੇਜ ਖਰੀਦੋ</translation> <translation id="4559767610552730302">ਬੋਕੇਹ</translation> <translation id="4572815280350369984"><ph name="FILE_TYPE" /> ਫਾਈਲ</translation> @@ -326,6 +328,7 @@ <translation id="4694604912444486114">ਬਾਂਦਰ</translation> <translation id="4697043402264950621"><ph name="COLUMN_NAME" /> ਮੁਤਾਬਕ ਵੱਧਦੇ ਕ੍ਰਮ ਵਿੱਚ ਕ੍ਰਮ-ਬੱਧ ਕੀਤੀ ਫ਼ਾਈਲ ਸੂਚੀ।</translation> <translation id="4711094779914110278">Turki</translation> +<translation id="4712283082407695269">"<ph name="PATH" />" ਨੂੰ ਖੋਲ੍ਹਿਆ ਜਾ ਰਿਹਾ ਹੈ</translation> <translation id="4713544552769165154">ਇਹ ਫ਼ਾਈਲ Macintosh ਸਾਫ਼ਟਵੇਅਰ ਵਰਤਣ ਵਾਲੇ ਕੰਪਿਊਟਰ ਲਈ ਤਿਆਰ ਕੀਤੀ ਗਈ ਹੈ। ਇਹ ਤੁਹਾਡੇ Chrome OS ਨਾਲ ਚਲਣ ਵਾਲੇ ਡੀਵਾਈਸ ਦੇ ਅਨੁਕੂਲ ਨਹੀਂ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਇਸ ਦੇ ਬਦਲਾਅ ਵਜੋਂ ਕਿਸੇ ਅਨੁਕੂਲ ਐਪ ਲਈ <ph name="BEGIN_LINK" />Chrome ਵੈੱਬ ਸਟੋਰ<ph name="END_LINK" /> ਖੋਜੋ।<ph name="BEGIN_LINK_HELP" />ਹੋਰ ਜਾਣੋ<ph name="END_LINK_HELP" /></translation> <translation id="4724850507808590449"><ph name="FILE_COUNT" /> ਫ਼ੋਟੋਆਂ ਬੈਕ ਅਪ ਕੀਤਾ</translation> <translation id="4725511304875193254">ਕੋਰਗੀ</translation> @@ -524,6 +527,7 @@ <translation id="6558280019477628686">ਕੋਈ ਗੜਬੜ ਹੋਈ। ਸ਼ਾਇਦ ਕੁਝ ਆਈਟਮਾਂ ਮਿਟਾਈਆਂ ਨਹੀਂ ਗਈਆਂ ਹਨ।</translation> <translation id="656398493051028875">"<ph name="FILENAME" />" ਨੂੰ ਮਿਟਾ ਰਿਹਾ ਹੈ...</translation> <translation id="6581162200855843583">Google Drive ਲਿੰਕ</translation> +<translation id="6594855146910089723">ਇਹ ਫੋਲਡਰ Linux ਅਤੇ Parallels Desktop ਨਾਲ ਸਾਂਝਾ ਕੀਤਾ ਗਿਆ ਹੈ</translation> <translation id="6607272825297743757">ਫ਼ਾਈਲ ਜਾਣਕਾਰੀ</translation> <translation id="6609332149380188670"><ph name="NUMBER_OF_ITEMS" /> ਫੋਲਡਰ Parallels Desktop ਨਾਲ ਸਾਂਝੇ ਕੀਤੇ ਗਏ</translation> <translation id="6629841649550503054">ਸਾਰੇ <ph name="BEGIN_LINK" />Google Drive ਵਿੱਚ ਬੈਕ ਅਪ ਕੀਤੇ ਗਏ!<ph name="END_LINK" /></translation>
diff --git a/ui/file_manager/base/gn/js_test_gen_html.gni b/ui/file_manager/base/gn/js_test_gen_html.gni index cfc27c04..e6ff25d7b 100644 --- a/ui/file_manager/base/gn/js_test_gen_html.gni +++ b/ui/file_manager/base/gn/js_test_gen_html.gni
@@ -27,6 +27,12 @@ # generates HTMLImport instead of <script>. Only the main element is # imported. # +# js_module: +# Boolean indicating that it's a JS module so the HTML file will only +# contain <script type="module" src="..._unittest.m.js"> and traditional +# <script>s for mocks. +# +# # Non-Polymer example: # js_test_gen_html("folder_tests") { # deps = [ @@ -70,6 +76,7 @@ "deps", "mocks", "html_import", + "js_module", ]) testonly = true sources = [] @@ -94,6 +101,10 @@ args += [ "--html_import" ] } + if (defined(js_module) && js_module) { + args += [ "--js_module" ] + } + if (defined(mocks)) { args += [ "--mocks" ] + rebase_path(mocks, root_build_dir) data = mocks
diff --git a/ui/file_manager/base/gn/js_test_gen_html.py b/ui/file_manager/base/gn/js_test_gen_html.py index fe6010c..c64ca4b1 100644 --- a/ui/file_manager/base/gn/js_test_gen_html.py +++ b/ui/file_manager/base/gn/js_test_gen_html.py
@@ -22,9 +22,21 @@ <body> """ -_SCRIPT = r'<script src="%s"></script>' +_CLASSIC_SCRIPT = r'<script src="%s"></script>' +_JS_MODULE = r'<script type="module" src="%s"></script>' +_JS_MODULE_REGISTER_TESTS = r''' +<script> +// Push all entities to global namespace to be visible to the test harness: +// ui/webui/resources/js/webui_resource_test.js +import('%s').then(TestModule => { + for (const name in TestModule) { + window[name] = TestModule[name]; + } +}); +</script> +''' _IMPORT = r'<link rel="import" href="%s">' -_HTML_IMPORT_POLYFIL = _SCRIPT % ( +_HTML_IMPORT_POLYFIL = _CLASSIC_SCRIPT % ( 'chrome://resources/polymer/v1_0/html-imports/html-imports.min.js') _HTML_FOOTER = r""" @@ -33,13 +45,13 @@ """ -def _process_deps(unique_deps, html_import, target_name): +def _process_deps(unique_deps, dep_type, target_name): """Processes all deps strings, yielding each HTML tag to include the dep. Args: unique_deps: Iterator of strings, for all deps to be processed. - html_import: Boolean: Enables the use of HTMLImport for the main Polymer - element being tested. + dep_type: String: 'classic_script' | 'js_module' | + 'js_module_register_tests' | 'html_import'. target_name: Current test target name, used to infer the main Polymer element for HTMLImport. element_unitest => element.js/element.html. @@ -86,12 +98,39 @@ # included, instead we <link rel=import> its HTML file which in turn # includes the JS file. Note that all other JS deps are included as # <script>. - if html_import and dep.endswith(implementation_file): + if dep_type == 'html_import'and dep.endswith(implementation_file): dep = dep.replace('.js', '.html') yield _IMPORT % (dep) + elif dep_type == 'js_module': + yield _JS_MODULE % (dep) + elif dep_type == 'js_module_register_tests': + yield _JS_MODULE_REGISTER_TESTS % (dep) else: # Normal dep, just return the <script src="dep.js"> - yield _SCRIPT % (dep) + yield _CLASSIC_SCRIPT % (dep) + + +def _process_js_module(input_file, output_filename, mocks, target_name): + """Generates the HTML for a unittest based on JS Modules. + + Args: + input_file: The path for the unittest JS module. + output_filename: The path/filename for HTML to be generated. + mocks: List of strings, JS file names that will be included in the bottom to + overwrite JS implementation from deps. + target_name: Current test target name, used to infer the main Polymer + element for HTMLImport. element_unitest => element.js/element.html. + """ + + with open(output_filename, 'w') as out: + out.write(_HTML_FILE) + for dep in _process_deps(mocks, 'js_module', target_name): + out.write(dep + '\n') + for dep in _process_deps([input_file], 'js_module', target_name): + out.write(dep + '\n') + for dep in _process_deps([input_file], 'js_module_register_tests', + target_name): + out.write(dep + '\n') def _process(deps, output_filename, mocks, html_import, target_name): @@ -114,9 +153,10 @@ if html_import: out.write(_HTML_IMPORT_POLYFIL + '\n') - for dep in _process_deps(mocks, html_import, target_name): + dep_type = 'html_import' if html_import else 'classic_script' + for dep in _process_deps(mocks, dep_type, target_name): out.write(dep + '\n') - for dep in _process_deps(deps, html_import, target_name): + for dep in _process_deps(deps, dep_type, target_name): out.write(dep + '\n') out.write(_HTML_FOOTER) @@ -147,8 +187,23 @@ '--html_import', action='store_true', help='Enable HTMLImports, used for Polymer elements') + parser.add_argument( + '--js_module', + action='store_true', + help='Enable JS Modules for the unittest file.') args = parser.parse_args() + if args.js_module: + # Convert from: + # gen/ui/file_manager/file_manager/common/js/example_unittest.m.js_library + # To: + # ui/file_manager/file_manager/common/js/example_unittest.m.js + path_test_file = args.input.replace('gen/', '', 1) + path_test_file = path_test_file.replace('.js_library', '.js') + _process_js_module(path_test_file, args.output, args.mocks, + args.target_name) + return + # Append closure path to sys.path to be able to import js_unit_test. sys.path.append(os.path.join(args.src_path, 'third_party/closure_compiler')) from js_binary import CrawlDepsTree
diff --git a/ui/file_manager/externs/background/file_operation_manager.js b/ui/file_manager/externs/background/file_operation_manager.js index 159647f..232a456 100644 --- a/ui/file_manager/externs/background/file_operation_manager.js +++ b/ui/file_manager/externs/background/file_operation_manager.js
@@ -57,6 +57,14 @@ deleteEntries(entries) {} /** + * Restores files from trash. + * + * @param {Array<!{name: string, filesEntry: !Entry, infoEntry: !FileEntry}>} + * trashItems The trash items. + */ + restoreDeleted(trashItems) {} + + /** * Creates a zip file for the selection of files. * * @param {!Array<!Entry>} selectionEntries The selected entries.
diff --git a/ui/file_manager/externs/file_operation_progress_event.js b/ui/file_manager/externs/file_operation_progress_event.js index 291382ef..433d189 100644 --- a/ui/file_manager/externs/file_operation_progress_event.js +++ b/ui/file_manager/externs/file_operation_progress_event.js
@@ -24,5 +24,8 @@ /** @public {number} */ this.processedBytes; + + /** @public {?Array<!fileOperationUtil.TrashItem>} */ + this.trashedItems; } }
diff --git a/ui/file_manager/externs/file_operation_util.js b/ui/file_manager/externs/file_operation_util.js new file mode 100644 index 0000000..501d6b027 --- /dev/null +++ b/ui/file_manager/externs/file_operation_util.js
@@ -0,0 +1,23 @@ +// 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. + +const fileOperationUtil = {}; + +/** @constructor */ +fileOperationUtil.Error = function() {}; + +/** @constructor */ +fileOperationUtil.EventRouter = function() {}; + +/** @enum {string} */ +fileOperationUtil.EventRouter.EventType = {}; + +/** + * @typedef {{ + * name: string, + * filesEntry: !Entry, + * infoEntry: !FileEntry + * }} + */ +fileOperationUtil.TrashItem;
diff --git a/ui/file_manager/file_manager/background/js/file_operation_manager.js b/ui/file_manager/file_manager/background/js/file_operation_manager.js index da72c85..02ad1e2 100644 --- a/ui/file_manager/file_manager/background/js/file_operation_manager.js +++ b/ui/file_manager/file_manager/background/js/file_operation_manager.js
@@ -400,7 +400,8 @@ entrySize: {}, totalBytes: 0, processedBytes: 0, - cancelRequested: false + cancelRequested: false, + trashedItems: [], })); // Obtains entry size and sum them up. @@ -481,7 +482,10 @@ .removeFileOrDirectory( assert(this.volumeManager_), task.entries[0], /*permanentlyDelete=*/ false) - .then(() => { + .then(trashItem => { + if (trashItem) { + task.trashedItems.push(trashItem); + } this.eventRouter_.sendEntryChangedEvent( util.EntryChangedKind.DELETED, task.entries[0]); task.processedBytes += task.entrySize[task.entries[0].toURL()]; @@ -513,6 +517,15 @@ } /** + * Restores files from trash. + * + * @param {Array<!fileOperationUtil.TrashItem>} trashItems The trash items. + */ + restoreDeleted(trashItems) { + // TODO(crbug.com/953310): to be implemented in crrev.com/c/2469340. + } + + /** * TODO(crbug.com/912236) Remove dead code. * Creates a zip file for the selection of files. *
diff --git a/ui/file_manager/file_manager/background/js/file_operation_util.js b/ui/file_manager/file_manager/background/js/file_operation_util.js index 19db241..9000722 100644 --- a/ui/file_manager/file_manager/background/js/file_operation_util.js +++ b/ui/file_manager/file_manager/background/js/file_operation_util.js
@@ -1247,12 +1247,22 @@ /** * @typedef {{ + * name: string, + * filesEntry: !Entry, + * infoEntry: !FileEntry + * }} + */ +fileOperationUtil.TrashItem; + +/** + * @typedef {{ * entries: Array<Entry>, * taskId: string, * entrySize: Object, * totalBytes: number, * processedBytes: number, - * cancelRequested: boolean + * cancelRequested: boolean, + * trashedItems: Array<!fileOperationUtil.TrashItem>, * }} */ fileOperationUtil.DeleteTask; @@ -1379,6 +1389,7 @@ event.entries = task.entries; event.totalBytes = task.totalBytes; event.processedBytes = task.processedBytes; + event.trashedItems = task.trashedItems; this.dispatchEvent(event); } };
diff --git a/ui/file_manager/file_manager/background/js/mock_file_operation_manager.js b/ui/file_manager/file_manager/background/js/mock_file_operation_manager.js index 7f2d263..c8c5940 100644 --- a/ui/file_manager/file_manager/background/js/mock_file_operation_manager.js +++ b/ui/file_manager/file_manager/background/js/mock_file_operation_manager.js
@@ -94,5 +94,6 @@ hasQueuedTasks() {} filterSameDirectoryEntry() {} deleteEntries() {} + restoreDeleted() {} zipSelection() {} }
diff --git a/ui/file_manager/image_loader/image_request_task.js b/ui/file_manager/image_loader/image_request_task.js index 4d96c5fc1..98c910b 100644 --- a/ui/file_manager/image_loader/image_request_task.js +++ b/ui/file_manager/image_loader/image_request_task.js
@@ -155,6 +155,16 @@ }; /** + * Extracts MIME type of a data URL. + * @param {string|undefined} dataUrl Data URL. + * @return {?string} MIME type string, or null if the URL is invalid. + */ +ImageRequestTask.getDataUrlMimeType = function(dataUrl) { + const dataUrlMatches = (dataUrl || '').match(/^data:([^,;]*)[,;]/); + return dataUrlMatches ? dataUrlMatches[1] : null; +}; + +/** * Returns ID of the request. * @return {string} Request ID. */ @@ -211,7 +221,7 @@ } this.downloadCallback_ = callback; - this.downloadOriginal_( + this.downloadThumbnail_( this.onImageLoad_.bind(this), this.onImageError_.bind(this)); }; @@ -300,7 +310,7 @@ * @param {function()} onFailure Failure callback. * @private */ -ImageRequestTask.prototype.downloadOriginal_ = function(onSuccess, onFailure) { +ImageRequestTask.prototype.downloadThumbnail_ = function(onSuccess, onFailure) { // Load methods below set |this.image_.src|. Call revokeObjectURL(src) to // release resources if the image src was created with createObjectURL(). this.image_.onload = function() { @@ -313,10 +323,11 @@ }.bind(this); // Load dataURL sources directly. - const dataUrlMatches = this.request_.url.match(/^data:([^,;]*)[,;]/); - if (dataUrlMatches) { + const dataUrlMimeType = + ImageRequestTask.getDataUrlMimeType(this.request_.url); + if (dataUrlMimeType) { this.image_.src = this.request_.url; - this.contentType_ = dataUrlMatches[1]; + this.contentType_ = dataUrlMimeType; return; } @@ -333,7 +344,7 @@ onFailure(); } else if (dataUrl) { this.image_.src = dataUrl; - this.contentType_ = 'image/png'; + this.contentType_ = ImageRequestTask.getDataUrlMimeType(dataUrl); } else { onFailure(); } @@ -361,6 +372,18 @@ return; } + // Load DocumentsProvider thumbnail, if supported. + const isDocumentsProviderRequest = !!this.request_.url.match(RegExp( + 'filesystem:chrome-extension://[a-z]+/external/arc-documents-provider/.*')); + if (isDocumentsProviderRequest) { + const {width, height} = this.targetThumbnailSize_(); + resolveLocalFileSystemUrl(this.request_.url, entry => { + chrome.fileManagerPrivate.getArcDocumentsProviderThumbnail( + entry, width, height, onExternalThumbnail); + }); + return; + } + const fileType = FileType.getTypeForName(this.request_.url); // Load RAW image source thumbnail.
diff --git a/ui/file_manager/integration_tests/file_manager/grid_view.js b/ui/file_manager/integration_tests/file_manager/grid_view.js index 211e9cc..c302ab10 100644 --- a/ui/file_manager/integration_tests/file_manager/grid_view.js +++ b/ui/file_manager/integration_tests/file_manager/grid_view.js
@@ -124,3 +124,58 @@ const titleTexts = titles.map((title) => title.text).sort(); chrome.test.checkDeepEq(['Files', 'Folders'], titleTexts); }; + +/** + * Tests that Grid View shows DocumentsProvider thumbnails. + */ +testcase.showGridViewDocumentsProvider = async () => { + const caller = getCaller(); + + // Open Files app. + const appId = await openNewWindow(RootPath.DOWNLOADS); + + // Add files to the DocumentsProvider volume. + await addEntries(['documents_provider'], BASIC_LOCAL_ENTRY_SET); + + // Wait for the DocumentsProvider volume to mount. + const documentsProviderVolumeQuery = + '[has-children="true"] [volume-type-icon="documents_provider"]'; + await remoteCall.waitForElement(appId, documentsProviderVolumeQuery); + + // Click to open the DocumentsProvider volume. + chrome.test.assertTrue( + !!await remoteCall.callRemoteTestUtil( + 'fakeMouseClick', appId, [documentsProviderVolumeQuery]), + 'fakeMouseClick failed'); + + // Click the grid view button. + await remoteCall.waitForElement(appId, '#view-button'); + await remoteCall.callRemoteTestUtil( + 'fakeEvent', appId, ['#view-button', 'click']); + + // Wait for the grid view to load. + await remoteCall.callRemoteTestUtil( + 'queryAllElements', appId, ['grid:not([hidden])']); + + // Check that all DocumentsProvider thumbnails are loaded where expected. + await repeatUntil(async () => { + for (const [fname, hasThumbnail] of [ + [ENTRIES.hello.targetPath, false], + [ENTRIES.world.targetPath, true], + [ENTRIES.desktop.targetPath, true], + [ENTRIES.beautiful.targetPath, false], + [ENTRIES.photos.targetPath, false], + ]) { + const item = await remoteCall.waitForElement( + appId, `#file-list [file-name="${fname}"]`); + const thumbnailLoaded = + item.attributes['class'].split(/\s+/).includes('thumbnail-loaded'); + if (thumbnailLoaded !== hasThumbnail) { + return pending( + caller, 'Unexpected thumbnail state for %j: %j', fname, + hasThumbnail); + } + } + return true; + }); +};
diff --git a/ui/file_manager/integration_tests/test_util.js b/ui/file_manager/integration_tests/test_util.js index fb52b42..7d11e19 100644 --- a/ui/file_manager/integration_tests/test_util.js +++ b/ui/file_manager/integration_tests/test_util.js
@@ -431,6 +431,7 @@ constructor(options) { this.type = options.type; this.sourceFileName = options.sourceFileName || ''; + this.thumbnailFileName = options.thumbnailFileName || ''; this.targetPath = options.targetPath; this.teamDriveName = options.teamDriveName || ''; this.computerName = options.computerName || ''; @@ -484,6 +485,7 @@ world: new TestEntryInfo({ type: EntryType.FILE, sourceFileName: 'video.ogv', + thumbnailFileName: 'image.png', targetPath: 'world.ogv', mimeType: 'video/ogg', lastModifiedTime: 'Jul 4, 2012, 10:35 AM', @@ -539,6 +541,7 @@ desktop: new TestEntryInfo({ type: EntryType.FILE, sourceFileName: 'image.png', + thumbnailFileName: 'image.png', targetPath: 'My Desktop Background.png', mimeType: 'image/png', lastModifiedTime: 'Jan 18, 2038, 1:02 AM',
diff --git a/ui/gl/gl_context_egl.cc b/ui/gl/gl_context_egl.cc index 52407ec..b5219ca 100644 --- a/ui/gl/gl_context_egl.cc +++ b/ui/gl/gl_context_egl.cc
@@ -69,6 +69,11 @@ #define EGL_HIGH_POWER_ANGLE 0x0002 #endif /* EGL_ANGLE_power_preference */ +#ifndef EGL_NV_robustness_video_memory_purge +#define EGL_NV_robustness_video_memory_purge 1 +#define EGL_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x334C +#endif /*EGL_NV_robustness_video_memory_purge */ + using ui::GetLastEGLErrorString; namespace gl { @@ -137,6 +142,12 @@ context_attributes.push_back( EGL_CONTEXT_OPENGL_RESET_NOTIFICATION_STRATEGY_EXT); context_attributes.push_back(EGL_LOSE_CONTEXT_ON_RESET_EXT); + + if (GLSurfaceEGL::IsRobustnessVideoMemoryPurgeSupported()) { + context_attributes.push_back( + EGL_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV); + context_attributes.push_back(EGL_TRUE); + } } } else { // At some point we should require the presence of the robustness
diff --git a/ui/gl/gl_context_glx.cc b/ui/gl/gl_context_glx.cc index a0a3446..6f8948146 100644 --- a/ui/gl/gl_context_glx.cc +++ b/ui/gl/gl_context_glx.cc
@@ -17,6 +17,11 @@ #include "ui/gl/gl_implementation.h" #include "ui/gl/gl_surface_glx.h" +#ifndef GLX_NV_robustness_video_memory_purge +#define GLX_NV_robustness_video_memory_purge 1 +#define GLX_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV 0x20F7 +#endif /* GLX_NV_robustness_video_memory_purge */ + namespace gl { namespace { @@ -33,6 +38,11 @@ if (GLSurfaceGLX::IsCreateContextRobustnessSupported()) { attribs.push_back(GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB); attribs.push_back(GLX_LOSE_CONTEXT_ON_RESET_ARB); + + if (GLSurfaceGLX::IsRobustnessVideoMemoryPurgeSupported()) { + attribs.push_back(GLX_GENERATE_RESET_ON_VIDEO_MEMORY_PURGE_NV); + attribs.push_back(GL_TRUE); + } } if (version.first != 0 || version.second != 0) {
diff --git a/ui/gl/gl_surface_egl.cc b/ui/gl/gl_surface_egl.cc index 0483902..054b4b4 100644 --- a/ui/gl/gl_surface_egl.cc +++ b/ui/gl/gl_surface_egl.cc
@@ -183,6 +183,7 @@ const char* g_egl_extensions = nullptr; bool g_egl_create_context_robustness_supported = false; +bool g_egl_robustness_video_memory_purge_supported = false; bool g_egl_create_context_bind_generates_resource_supported = false; bool g_egl_create_context_webgl_compatability_supported = false; bool g_egl_sync_control_supported = false; @@ -955,6 +956,8 @@ g_egl_create_context_robustness_supported = HasEGLExtension("EGL_EXT_create_context_robustness"); + g_egl_robustness_video_memory_purge_supported = + HasEGLExtension("EGL_NV_robustness_video_memory_purge"); g_egl_create_context_bind_generates_resource_supported = HasEGLExtension("EGL_CHROMIUM_create_context_bind_generates_resource"); g_egl_create_context_webgl_compatability_supported = @@ -1095,6 +1098,7 @@ g_egl_extensions = nullptr; g_egl_create_context_robustness_supported = false; + g_egl_robustness_video_memory_purge_supported = false; g_egl_create_context_bind_generates_resource_supported = false; g_egl_create_context_webgl_compatability_supported = false; g_egl_sync_control_supported = false; @@ -1135,6 +1139,11 @@ return g_egl_create_context_robustness_supported; } +// static +bool GLSurfaceEGL::IsRobustnessVideoMemoryPurgeSupported() { + return g_egl_robustness_video_memory_purge_supported; +} + bool GLSurfaceEGL::IsCreateContextBindGeneratesResourceSupported() { return g_egl_create_context_bind_generates_resource_supported; }
diff --git a/ui/gl/gl_surface_egl.h b/ui/gl/gl_surface_egl.h index 34924467..9bda1ab 100644 --- a/ui/gl/gl_surface_egl.h +++ b/ui/gl/gl_surface_egl.h
@@ -109,6 +109,7 @@ static const char* GetEGLExtensions(); static bool HasEGLExtension(const char* name); static bool IsCreateContextRobustnessSupported(); + static bool IsRobustnessVideoMemoryPurgeSupported(); static bool IsCreateContextBindGeneratesResourceSupported(); static bool IsCreateContextWebGLCompatabilitySupported(); static bool IsEGLSurfacelessContextSupported();
diff --git a/ui/gl/gl_surface_glx.cc b/ui/gl/gl_surface_glx.cc index 1efe079..169f58a 100644 --- a/ui/gl/gl_surface_glx.cc +++ b/ui/gl/gl_surface_glx.cc
@@ -49,6 +49,7 @@ bool g_glx_context_create = false; bool g_glx_create_context_robustness_supported = false; +bool g_glx_robustness_video_memory_purge_supported = false; bool g_glx_create_context_profile_supported = false; bool g_glx_create_context_profile_es2_supported = false; bool g_glx_texture_from_pixmap_supported = false; @@ -518,6 +519,8 @@ g_glx_context_create = HasGLXExtension("GLX_ARB_create_context"); g_glx_create_context_robustness_supported = HasGLXExtension("GLX_ARB_create_context_robustness"); + g_glx_robustness_video_memory_purge_supported = + HasGLXExtension("GLX_NV_robustness_video_memory_purge"); g_glx_create_context_profile_supported = HasGLXExtension("GLX_ARB_create_context_profile"); g_glx_create_context_profile_es2_supported = @@ -542,6 +545,7 @@ initialized_ = false; g_glx_context_create = false; g_glx_create_context_robustness_supported = false; + g_glx_robustness_video_memory_purge_supported = false; g_glx_create_context_profile_supported = false; g_glx_create_context_profile_es2_supported = false; g_glx_texture_from_pixmap_supported = false; @@ -593,6 +597,11 @@ } // static +bool GLSurfaceGLX::IsRobustnessVideoMemoryPurgeSupported() { + return g_glx_robustness_video_memory_purge_supported; +} + +// static bool GLSurfaceGLX::IsCreateContextProfileSupported() { return g_glx_create_context_profile_supported; }
diff --git a/ui/gl/gl_surface_glx.h b/ui/gl/gl_surface_glx.h index 88a1e337..ab612cd 100644 --- a/ui/gl/gl_surface_glx.h +++ b/ui/gl/gl_surface_glx.h
@@ -44,6 +44,7 @@ static bool HasGLXExtension(const char* name); static bool IsCreateContextSupported(); static bool IsCreateContextRobustnessSupported(); + static bool IsRobustnessVideoMemoryPurgeSupported(); static bool IsCreateContextProfileSupported(); static bool IsCreateContextES2ProfileSupported(); static bool IsTextureFromPixmapSupported();
diff --git a/ui/ozone/common/BUILD.gn b/ui/ozone/common/BUILD.gn index b5e8da15..59c8b174 100644 --- a/ui/ozone/common/BUILD.gn +++ b/ui/ozone/common/BUILD.gn
@@ -11,6 +11,8 @@ sources = [ "egl_util.cc", "egl_util.h", + "features.cc", + "features.h", "gl_ozone_egl.cc", "gl_ozone_egl.h", "gl_surface_egl_readback.cc", @@ -19,7 +21,10 @@ "stub_overlay_manager.h", ] - public_deps = [ "//ui/ozone:ozone_base" ] + public_deps = [ + "//build:chromeos_buildflags", + "//ui/ozone:ozone_base", + ] deps = [ "//ui/gfx/ipc/color",
diff --git a/ui/ozone/common/features.cc b/ui/ozone/common/features.cc new file mode 100644 index 0000000..e8f68097 --- /dev/null +++ b/ui/ozone/common/features.cc
@@ -0,0 +1,24 @@ + +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "ui/ozone/common/features.h" +#include "build/chromeos_buildflags.h" + +namespace ui { + +const base::Feature kWaylandOverlayDelegation { + "WaylandOverlayDelegation", +#if BUILDFLAG(IS_LACROS) + base::FEATURE_ENABLED_BY_DEFAULT +#else + base::FEATURE_DISABLED_BY_DEFAULT +#endif +}; + +bool IsWaylandOverlayDelegationEnabled() { + return base::FeatureList::IsEnabled(kWaylandOverlayDelegation); +} + +} // namespace ui
diff --git a/ui/ozone/common/features.h b/ui/ozone/common/features.h new file mode 100644 index 0000000..d4b94d31 --- /dev/null +++ b/ui/ozone/common/features.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 UI_OZONE_COMMON_FEATURES_H_ +#define UI_OZONE_COMMON_FEATURES_H_ + +#include "base/feature_list.h" + +namespace ui { + +extern const base::Feature kWaylandOverlayDelegation; +bool IsWaylandOverlayDelegationEnabled(); + +} // namespace ui + +#endif // UI_OZONE_COMMON_FEATURES_H_
diff --git a/ui/ozone/platform/scenic/sysmem_buffer_collection.cc b/ui/ozone/platform/scenic/sysmem_buffer_collection.cc index 767cf08..a678f39 100644 --- a/ui/ozone/platform/scenic/sysmem_buffer_collection.cc +++ b/ui/ozone/platform/scenic/sysmem_buffer_collection.cc
@@ -446,7 +446,7 @@ VK_IMAGE_USAGE_TRANSFER_DST_BIT; if (usage_ == gfx::BufferUsage::SCANOUT || usage_ == gfx::BufferUsage::SCANOUT_CPU_READ_WRITE) { - vk_image_info->usage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; + vk_image_info->usage |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; } vk_image_info->sharingMode = VK_SHARING_MODE_EXCLUSIVE;
diff --git a/ui/ozone/platform/wayland/BUILD.gn b/ui/ozone/platform/wayland/BUILD.gn index a551ed0..07dadb5c 100644 --- a/ui/ozone/platform/wayland/BUILD.gn +++ b/ui/ozone/platform/wayland/BUILD.gn
@@ -383,6 +383,7 @@ "//ui/gfx/linux:test_support", "//ui/ozone:platform", "//ui/ozone:test_support", + "//ui/ozone/common", "//ui/platform_window/wm", ]
diff --git a/ui/ozone/platform/wayland/gpu/wayland_surface_factory_unittest.cc b/ui/ozone/platform/wayland/gpu/wayland_surface_factory_unittest.cc index 1c5062651..ad0f3bb 100644 --- a/ui/ozone/platform/wayland/gpu/wayland_surface_factory_unittest.cc +++ b/ui/ozone/platform/wayland/gpu/wayland_surface_factory_unittest.cc
@@ -255,7 +255,7 @@ // Prepare overlay plane. gl_surface->ScheduleOverlayPlane( - 0, gfx::OverlayTransform::OVERLAY_TRANSFORM_FLIP_VERTICAL, + INT32_MIN, gfx::OverlayTransform::OVERLAY_TRANSFORM_FLIP_VERTICAL, gl_image.get(), window_->GetBounds(), {}, false, nullptr); std::vector<scoped_refptr<FakeGLImageNativePixmap>> gl_images; @@ -452,8 +452,10 @@ Sync(); } - auto* mock_primary_surface = server_.GetObject<wl::MockSurface>( + auto* root_surface = server_.GetObject<wl::MockSurface>( window_->root_surface()->GetSurfaceId()); + auto* mock_primary_surface = server_.GetObject<wl::MockSurface>( + window_->primary_subsurface()->wayland_surface()->GetSurfaceId()); CallbacksHelper cbs_helper; // Submit a frame with only primary plane @@ -488,9 +490,11 @@ // Also, we expect only one buffer to be committed. EXPECT_CALL(*mock_primary_surface, Attach(_, _, _)).Times(1); - EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(1); + EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(0); EXPECT_CALL(*mock_primary_surface, DamageBuffer(_, _, _, _)).Times(1); EXPECT_CALL(*mock_primary_surface, Commit()).Times(1); + EXPECT_CALL(*root_surface, Frame(_)).Times(1); + EXPECT_CALL(*root_surface, Commit()).Times(1); Sync(); @@ -546,13 +550,15 @@ // Expect one buffer to be committed. EXPECT_CALL(*mock_primary_surface, Attach(_, _, _)).Times(1); - EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(1); + EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(0); EXPECT_CALL(*mock_primary_surface, DamageBuffer(_, _, _, _)).Times(1); EXPECT_CALL(*mock_primary_surface, Commit()).Times(1); + EXPECT_CALL(*root_surface, Frame(_)).Times(1); + EXPECT_CALL(*root_surface, Commit()).Times(1); // Send the frame callback so that pending buffer for swap id=1u is processed // and swapped. - mock_primary_surface->SendFrameCallback(); + root_surface->SendFrameCallback(); Sync(); @@ -604,15 +610,19 @@ base::BindOnce(&CallbacksHelper::BufferPresented, base::Unretained(&cbs_helper), swap_id)); } - // Expect parent surface to be committed without a buffer. + + // Do not expect parent surface to be committed. EXPECT_CALL(*mock_primary_surface, Attach(_, _, _)).Times(0); - EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(1); + EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(0); EXPECT_CALL(*mock_primary_surface, DamageBuffer(_, _, _, _)).Times(0); - EXPECT_CALL(*mock_primary_surface, Commit()).Times(1); + EXPECT_CALL(*mock_primary_surface, Commit()).Times(0); + // Expect root surface to be committed. + EXPECT_CALL(*root_surface, Frame(_)).Times(1); + EXPECT_CALL(*root_surface, Commit()).Times(1); // Send the frame callback so that pending buffer for swap id=2u is processed // and swapped. - mock_primary_surface->SendFrameCallback(); + root_surface->SendFrameCallback(); Sync(); @@ -691,8 +701,10 @@ Sync(); } - auto* mock_primary_surface = server_.GetObject<wl::MockSurface>( + auto* root_surface = server_.GetObject<wl::MockSurface>( window_->root_surface()->GetSurfaceId()); + auto* mock_primary_surface = server_.GetObject<wl::MockSurface>( + window_->primary_subsurface()->wayland_surface()->GetSurfaceId()); CallbacksHelper cbs_helper; // Submit a frame with 1 primary plane and 1 overlay @@ -737,11 +749,13 @@ // Let's sync so that 1) GbmSurfacelessWayland submits the buffer according to // internal queue and fake server processes the request. - // Also, we expect only one buffer to be committed. + // Also, we expect primary buffer to be committed. EXPECT_CALL(*mock_primary_surface, Attach(_, _, _)).Times(1); - EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(1); + EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(0); EXPECT_CALL(*mock_primary_surface, DamageBuffer(_, _, _, _)).Times(1); EXPECT_CALL(*mock_primary_surface, Commit()).Times(1); + EXPECT_CALL(*root_surface, Frame(_)).Times(1); + EXPECT_CALL(*root_surface, Commit()).Times(1); Sync(); @@ -810,21 +824,25 @@ base::Unretained(&cbs_helper), swap_id)); } - // Expect one buffer to be committed. + // Expect primary buffer to be committed. EXPECT_CALL(*mock_primary_surface, Attach(_, _, _)).Times(1); - EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(1); + EXPECT_CALL(*mock_primary_surface, Frame(_)).Times(0); EXPECT_CALL(*mock_primary_surface, DamageBuffer(_, _, _, _)).Times(1); EXPECT_CALL(*mock_primary_surface, Commit()).Times(1); - // Expect one buffer to be committed. + // Expect overlay buffer to be committed. EXPECT_CALL(*mock_overlay_surface, Attach(_, _, _)).Times(1); EXPECT_CALL(*mock_overlay_surface, Frame(_)).Times(0); EXPECT_CALL(*mock_overlay_surface, DamageBuffer(_, _, _, _)).Times(1); EXPECT_CALL(*mock_overlay_surface, Commit()).Times(1); + // Expect root surface to be committed without buffer. + EXPECT_CALL(*root_surface, Frame(_)).Times(1); + EXPECT_CALL(*root_surface, Commit()).Times(1); + // Send the frame callback so that pending buffer for swap id=1u is processed // and swapped. - mock_primary_surface->SendFrameCallback(); + root_surface->SendFrameCallback(); Sync();
diff --git a/ui/ozone/platform/wayland/host/wayland_buffer_manager_host.cc b/ui/ozone/platform/wayland/host/wayland_buffer_manager_host.cc index 5fa747f3..76f938c7 100644 --- a/ui/ozone/platform/wayland/host/wayland_buffer_manager_host.cc +++ b/ui/ozone/platform/wayland/host/wayland_buffer_manager_host.cc
@@ -234,9 +234,11 @@ // If the same buffer has been submitted again right after the client // received OnSubmission for that buffer, just damage the buffer and - // commit the surface again. + // commit the surface again. However, if the buffer is released, it's safe + // to reattach the buffer. if (submitted_buffers_.empty() || - submitted_buffers_.back().buffer_id != buffer->buffer_id) { + submitted_buffers_.back().buffer_id != buffer->buffer_id || + buffer->released) { // Once the BufferRelease is called, the buffer will be released. DCHECK(buffer->released); buffer->released = false; @@ -350,16 +352,27 @@ // Releases may not necessarily come in order, so search the submitted // buffers. WaylandBuffer* buffer = nullptr; - for (const auto& b : submitted_buffers_) { - auto* submitted_buffer = GetBuffer(b.buffer_id); + for (const auto& buff : submitted_buffers_) { + auto* submitted_buffer = GetBuffer(buff.buffer_id); if (submitted_buffer && wl_buffer == submitted_buffer->wl_buffer.get()) { buffer = submitted_buffer; break; } } - DCHECK(buffer); - DCHECK(!buffer->released); - buffer->released = true; + if (!buffer) + return; + + // Some Wayland compositors (e.g. Gnome) do not send buffer.release for + // buffers that are discarded from a wayland subsurface's cached state. In + // such case, later buffer.release implies buffers attached to the same + // wl_surface previously are also unuesed. + for (const auto& buff : submitted_buffers_) { + auto* submitted_buffer = GetBuffer(buff.buffer_id); + DCHECK(!submitted_buffer->released); + submitted_buffer->released = true; + if (submitted_buffer == buffer) + break; + } // A release means we may be able to send OnSubmission for previously // submitted buffers. @@ -923,11 +936,21 @@ if (!surface->HasBuffers() && !surface->HasSurface()) surfaces_.erase(window->root_surface()); } - const auto& subsurfaces = window->wayland_subsurfaces(); - for (const auto& it : subsurfaces) { - Surface* subsurface = GetSurface((*it).wayland_surface()); - if (subsurface) - destroyed_count += subsurface->DestroyBuffer(buffer_id); + if (!destroyed_count) { + surface = GetSurface(window->primary_subsurface()->wayland_surface()); + if (surface) { + destroyed_count = surface->DestroyBuffer(buffer_id); + if (!surface->HasBuffers() && !surface->HasSurface()) + surfaces_.erase(window->root_surface()); + } + } + if (!destroyed_count) { + const auto& subsurfaces = window->wayland_subsurfaces(); + for (const auto& it : subsurfaces) { + Surface* subsurface = GetSurface((*it).wayland_surface()); + if (subsurface) + destroyed_count += subsurface->DestroyBuffer(buffer_id); + } } } else { // Case 3)
diff --git a/ui/ozone/platform/wayland/host/wayland_subsurface.cc b/ui/ozone/platform/wayland/host/wayland_subsurface.cc index 9b27f617..b2bee41 100644 --- a/ui/ozone/platform/wayland/host/wayland_subsurface.cc +++ b/ui/ozone/platform/wayland/host/wayland_subsurface.cc
@@ -19,13 +19,11 @@ int32_t parent_buffer_scale) { // TODO(fangzhoug): Verify the correctness of using ui_scale here, and in // other ozone wayland files. - const auto parent_bounds_dip = - gfx::ScaleToRoundedRect(parent_bounds_px, 1.0 / ui_scale); + // Currently, the subsurface tree is at most 1 depth, gpu already sees buffer + // bounds in the root_surface-local coordinates. So translation is not + // needed for now. const auto bounds_dip = gfx::ScaleToRoundedRect(bounds_px, 1.0 / ui_scale); - auto new_bounds_dip = - wl::TranslateBoundsToParentCoordinates(bounds_dip, parent_bounds_dip); - return gfx::ScaleToRoundedRect(new_bounds_dip, - ui_scale / parent_buffer_scale); + return gfx::ScaleToRoundedRect(bounds_dip, ui_scale / parent_buffer_scale); } } // namespace
diff --git a/ui/ozone/platform/wayland/host/wayland_surface.cc b/ui/ozone/platform/wayland/host/wayland_surface.cc index 3cfccaa..f3092c43 100644 --- a/ui/ozone/platform/wayland/host/wayland_surface.cc +++ b/ui/ozone/platform/wayland/host/wayland_surface.cc
@@ -7,6 +7,7 @@ #include <viewporter-client-protocol.h> #include "ui/gfx/geometry/rect_conversions.h" +#include "ui/gfx/geometry/size.h" #include "ui/gfx/native_widget_types.h" #include "ui/ozone/platform/wayland/common/wayland_util.h" #include "ui/ozone/platform/wayland/host/wayland_connection.h" @@ -96,8 +97,6 @@ if (!display_size_px_.IsEmpty()) { viewport_dst = gfx::ScaleToCeiledSize(display_size_px_, 1.f / buffer_scale_); - wp_viewport_set_destination(viewport(), viewport_dst.width(), - viewport_dst.height()); } if (connection_->compositor_version() >= @@ -159,6 +158,14 @@ buffer_scale_ = new_scale; wl_surface_set_buffer_scale(surface_.get(), buffer_scale_); + + if (!display_size_px_.IsEmpty()) { + gfx::Size viewport_dst = + gfx::ScaleToCeiledSize(display_size_px_, 1.f / buffer_scale_); + wp_viewport_set_destination(viewport(), viewport_dst.width(), + viewport_dst.height()); + } + connection_->ScheduleFlush(); } @@ -200,6 +207,10 @@ wp_viewport_set_destination(viewport(), -1, -1); } display_size_px_ = dest_size_px; + gfx::Size viewport_dst = + gfx::ScaleToCeiledSize(display_size_px_, 1.f / buffer_scale_); + wp_viewport_set_destination(viewport(), viewport_dst.width(), + viewport_dst.height()); } wl::Object<wl_subsurface> WaylandSurface::CreateSubsurface(
diff --git a/ui/ozone/platform/wayland/host/wayland_surface.h b/ui/ozone/platform/wayland/host/wayland_surface.h index 7747c6e..c026bc22 100644 --- a/ui/ozone/platform/wayland/host/wayland_surface.h +++ b/ui/ozone/platform/wayland/host/wayland_surface.h
@@ -74,10 +74,14 @@ // See: // https://cgit.freedesktop.org/wayland/wayland-protocols/tree/stable/viewporter/viewporter.xml // If |src_rect| is empty, the source rectangle is unset. + // Note this method does not send corresponding wayland requests until + // attaching the next buffer. void SetViewportSource(const gfx::RectF& src_rect); // Set the destination size of the associated wl_surface according to // |dest_size_px|, which should be in physical pixels. + // Note this method sends corresponding wayland requests immediately because + // it does not need a new buffer attach to take effect. void SetViewportDestination(const gfx::Size& dest_size_px); // Creates a wl_subsurface relating this surface and a parent surface,
diff --git a/ui/ozone/platform/wayland/host/wayland_window.cc b/ui/ozone/platform/wayland/host/wayland_window.cc index f7e6ae5d..559b2ac 100644 --- a/ui/ozone/platform/wayland/host/wayland_window.cc +++ b/ui/ozone/platform/wayland/host/wayland_window.cc
@@ -14,6 +14,7 @@ #include "ui/events/ozone/events_ozone.h" #include "ui/events/platform/platform_event_source.h" #include "ui/gfx/geometry/point_f.h" +#include "ui/ozone/common/features.h" #include "ui/ozone/platform/wayland/common/wayland_util.h" #include "ui/ozone/platform/wayland/host/wayland_buffer_manager_host.h" #include "ui/ozone/platform/wayland/host/wayland_connection.h" @@ -39,6 +40,7 @@ WaylandConnection* connection) : delegate_(delegate), connection_(connection), + wayland_overlay_delegation_enabled_(IsWaylandOverlayDelegationEnabled()), accelerated_widget_( connection->wayland_window_manager()->AllocateAcceleratedWidget()) {} @@ -47,6 +49,10 @@ PlatformEventSource::GetInstance()->RemovePlatformEventDispatcher(this); + if (wayland_overlay_delegation_enabled_) { + connection_->wayland_window_manager()->RemoveSubsurface( + GetWidget(), primary_subsurface_.get()); + } for (const auto& widget_subsurface : wayland_subsurfaces()) { connection_->wayland_window_manager()->RemoveSubsurface( GetWidget(), widget_subsurface.get()); @@ -351,6 +357,15 @@ if (!OnInitialize(std::move(properties))) return false; + if (wayland_overlay_delegation_enabled_) { + primary_subsurface_ = + std::make_unique<WaylandSubsurface>(connection_, this); + if (!primary_subsurface_->surface()) + return false; + connection_->wayland_window_manager()->AddSubsurface( + GetWidget(), primary_subsurface_.get()); + } + connection_->ScheduleFlush(); PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this); @@ -530,6 +545,10 @@ size_t above = (overlays.end() - split) - num_primary_planes; size_t below = split - overlays.begin(); + + if (overlays.front()->z_order == INT32_MIN) + --below; + // Re-arrange the list of subsurfaces to fit the |overlays|. Request extra // subsurfaces if needed. if (!ArrangeSubsurfaceStack(above, below)) @@ -542,12 +561,14 @@ auto overlay_iter = split - 1; for (auto iter = subsurface_stack_below_.begin(); iter != subsurface_stack_below_.end(); ++iter, --overlay_iter) { - if (overlay_iter >= overlays.begin()) { + if (overlays.front()->z_order == INT32_MIN + ? overlay_iter >= ++overlays.begin() + : overlay_iter >= overlays.begin()) { WaylandSurface* reference_above = nullptr; if (overlay_iter == split - 1) { // It's possible that |overlays| does not contain primary plane, we // still want to place relative to the surface with z_order=0. - reference_above = root_surface(); + reference_above = primary_subsurface_->wayland_surface(); } else { reference_above = (*std::next(iter))->wayland_surface(); } @@ -576,7 +597,7 @@ if (overlay_iter == split + num_primary_planes) { // It's possible that |overlays| does not contain primary plane, we // still want to place relative to the surface with z_order=0. - reference_below = root_surface(); + reference_below = primary_subsurface_->wayland_surface(); } else { reference_below = (*std::prev(iter))->wayland_surface(); } @@ -595,12 +616,30 @@ } } - if (num_primary_planes) { + if (!wayland_overlay_delegation_enabled_) { connection_->buffer_manager_host()->CommitBufferInternal( root_surface(), (*split)->buffer_id, (*split)->damage_region, /*wait_for_frame_callback=*/true); + return true; + } + + if (num_primary_planes) { + primary_subsurface_->ConfigureAndShowSurface( + (*split)->transform, (*split)->crop_rect, (*split)->bounds_rect, + (*split)->enable_blend, nullptr, nullptr); + connection_->buffer_manager_host()->CommitBufferInternal( + primary_subsurface_->wayland_surface(), (*split)->buffer_id, + (*split)->damage_region, /*wait_for_frame_callback=*/false); + } + + root_surface_->SetViewportDestination(bounds_px_.size()); + if (overlays.front()->z_order == INT32_MIN) { + connection_->buffer_manager_host()->CommitBufferInternal( + root_surface(), overlays.front()->buffer_id, + /*damage_region=*/gfx::Rect(0, 0, 1, 1), + /*wait_for_frame_callback=*/true); } else { - // Subsurfaces are set to sync, above operations will only take effects + // Subsurfaces are set to sync, above surface configs will only take effect // when root_surface is committed. connection_->buffer_manager_host()->CommitWithoutBufferInternal( root_surface(), /*wait_for_frame_callback=*/true);
diff --git a/ui/ozone/platform/wayland/host/wayland_window.h b/ui/ozone/platform/wayland/host/wayland_window.h index c341ddb..7e646f5f 100644 --- a/ui/ozone/platform/wayland/host/wayland_window.h +++ b/ui/ozone/platform/wayland/host/wayland_window.h
@@ -59,6 +59,9 @@ void UpdateBufferScale(bool update_bounds); WaylandSurface* root_surface() const { return root_surface_.get(); } + WaylandSubsurface* primary_subsurface() const { + return primary_subsurface_.get(); + } const WidgetSubsurfaceSet& wayland_subsurfaces() const { return wayland_subsurfaces_; } @@ -229,13 +232,19 @@ WaylandWindow* parent_window_ = nullptr; WaylandWindow* child_window_ = nullptr; + // |root_surface_| is a surface for the opaque background. Its z-order is + // INT32_MIN. std::unique_ptr<WaylandSurface> root_surface_; + // |primary_subsurface| is the primary that shows the widget content. + std::unique_ptr<WaylandSubsurface> primary_subsurface_; + // Subsurfaces excluding the primary_subsurface WidgetSubsurfaceSet wayland_subsurfaces_; + bool wayland_overlay_delegation_enabled_; // The stack of sub-surfaces to take effect when Commit() is called. // |subsurface_stack_above_| refers to subsurfaces that are stacked above the - // parent. - // Subsurface at the front of the list is the closest to the parent. + // primary. + // Subsurface at the front of the list is the closest to the primary. std::list<WaylandSubsurface*> subsurface_stack_above_; std::list<WaylandSubsurface*> subsurface_stack_below_;
diff --git a/ui/ozone/platform/wayland/ozone_platform_wayland.cc b/ui/ozone/platform/wayland/ozone_platform_wayland.cc index 14ca3fa..ab143ca 100644 --- a/ui/ozone/platform/wayland/ozone_platform_wayland.cc +++ b/ui/ozone/platform/wayland/ozone_platform_wayland.cc
@@ -22,6 +22,7 @@ #include "ui/events/ozone/layout/keyboard_layout_engine_manager.h" #include "ui/gfx/linux/client_native_pixmap_dmabuf.h" #include "ui/gfx/native_widget_types.h" +#include "ui/ozone/common/features.h" #include "ui/ozone/platform/wayland/common/wayland_util.h" #include "ui/ozone/platform/wayland/gpu/drm_render_node_path_finder.h" #include "ui/ozone/platform/wayland/gpu/wayland_buffer_manager_gpu.h" @@ -65,11 +66,6 @@ namespace { -constexpr OzonePlatform::InitializedHostProperties - kWaylandInitializedHostProperties = { - /*supports_overlays=*/false, -}; - class OzonePlatformWayland : public OzonePlatform { public: OzonePlatformWayland() { CHECK(features::IsUsingOzonePlatform()); } @@ -236,6 +232,13 @@ properties->ignore_screen_bounds_for_menus = true; properties->app_modal_dialogs_use_event_blocker = true; + // Primary planes can be transluscent due to underlay strategy. As a + // result Wayland server draws contents occluded by an accelerated widget. + // To prevent this, an opaque background image is stacked below the + // accelerated widget to occlude contents below. + properties->needs_background_image = + ui::IsWaylandOverlayDelegationEnabled(); + initialised = true; } @@ -243,7 +246,14 @@ } const InitializedHostProperties& GetInitializedHostProperties() override { - return kWaylandInitializedHostProperties; + static base::NoDestructor<OzonePlatform::InitializedHostProperties> + properties; + static bool initialized = false; + if (!initialized) { + properties->supports_overlays = ui::IsWaylandOverlayDelegationEnabled(); + initialized = true; + } + return *properties; } void AddInterfaces(mojo::BinderMap* binders) override {
diff --git a/ui/ozone/platform/wayland/test/wayland_test.cc b/ui/ozone/platform/wayland/test/wayland_test.cc index b155af688f..8d01aba 100644 --- a/ui/ozone/platform/wayland/test/wayland_test.cc +++ b/ui/ozone/platform/wayland/test/wayland_test.cc
@@ -10,6 +10,7 @@ #include "ui/base/ui_base_features.h" #include "ui/events/ozone/layout/keyboard_layout_engine_manager.h" #include "ui/events/ozone/layout/scoped_keyboard_layout_engine.h" +#include "ui/ozone/common/features.h" #include "ui/ozone/platform/wayland/host/wayland_output_manager.h" #include "ui/ozone/platform/wayland/host/wayland_screen.h" #include "ui/ozone/platform/wayland/test/mock_surface.h" @@ -52,7 +53,8 @@ // that automatically through changes done to "variants", which is also // convenient to have locally so that we don't need to worry about that (it's // the Wayland DragAndDrop that relies on the feature). - feature_list_.InitAndEnableFeature(features::kUseOzonePlatform); + feature_list_.InitWithFeatures( + {features::kUseOzonePlatform, ui::kWaylandOverlayDelegation}, {}); ASSERT_TRUE(features::IsUsingOzonePlatform()); ASSERT_TRUE(server_.Start(GetParam()));
diff --git a/ui/ozone/public/ozone_platform.h b/ui/ozone/public/ozone_platform.h index 7737507..e27cd90e 100644 --- a/ui/ozone/public/ozone_platform.h +++ b/ui/ozone/public/ozone_platform.h
@@ -105,6 +105,10 @@ // calculating bounds of menu windows. bool ignore_screen_bounds_for_menus = false; + // Wayland only: determines whether BufferQueue needs a background image to + // be stacked below an AcceleratedWidget to make a widget opaque. + bool needs_background_image = false; + // If true, the platform shows and updates the drag image. bool platform_shows_drag_image = true;
diff --git a/ui/strings/translations/ui_strings_iw.xtb b/ui/strings/translations/ui_strings_iw.xtb index 1e39072..0915cdef 100644 --- a/ui/strings/translations/ui_strings_iw.xtb +++ b/ui/strings/translations/ui_strings_iw.xtb
@@ -114,7 +114,7 @@ <translation id="4202807286478387388">קפיצה</translation> <translation id="4250229828105606438">צילום מסך</translation> <translation id="4266252015790371705">{MONTHS,plural, =1{לפני חודש אחד}two{לפני חודשיים}many{לפני # חודשים}other{לפני # חודשים}}</translation> -<translation id="4289300219472526559">התחל לדבר</translation> +<translation id="4289300219472526559">יש להתחיל לדבר</translation> <translation id="430191667033048642">האפליקציה <ph name="MOVED_APP_NAME" /> הועברה אל התיקייה <ph name="FOLDER_NAME" />.</translation> <translation id="4316910396681052118">כל האפליקציות</translation> <translation id="4491109536499578614">תמונה</translation>
diff --git a/ui/views/widget/desktop_aura/desktop_native_cursor_manager.cc b/ui/views/widget/desktop_aura/desktop_native_cursor_manager.cc index ab7213a3..1a49f90 100644 --- a/ui/views/widget/desktop_aura/desktop_native_cursor_manager.cc +++ b/ui/views/widget/desktop_aura/desktop_native_cursor_manager.cc
@@ -14,8 +14,14 @@ namespace views { -DesktopNativeCursorManager::DesktopNativeCursorManager() - : cursor_loader_(ui::CursorLoader::Create()) {} +DesktopNativeCursorManager::DesktopNativeCursorManager() { +#if BUILDFLAG(IS_LACROS) + const bool use_platform_cursors = false; +#else + const bool use_platform_cursors = true; +#endif + cursor_loader_ = ui::CursorLoader::Create(use_platform_cursors); +} DesktopNativeCursorManager::~DesktopNativeCursorManager() = default; @@ -37,9 +43,8 @@ void DesktopNativeCursorManager::SetDisplay( const display::Display& display, wm::NativeCursorManagerDelegate* delegate) { - cursor_loader_->UnloadAll(); - cursor_loader_->set_rotation(display.rotation()); - cursor_loader_->set_scale(display.device_scale_factor()); + cursor_loader_->SetDisplayData(display.rotation(), + display.device_scale_factor()); SetCursor(delegate->GetCursor(), delegate); }
diff --git a/ui/webui/resources/cr_components/chromeos/network/BUILD.gn b/ui/webui/resources/cr_components/chromeos/network/BUILD.gn index d5e0b10..1a9096bd 100644 --- a/ui/webui/resources/cr_components/chromeos/network/BUILD.gn +++ b/ui/webui/resources/cr_components/chromeos/network/BUILD.gn
@@ -205,6 +205,7 @@ deps = [ ":network_list_types", "//ui/webui/resources/cr_elements:cr_scrollable_behavior", + "//ui/webui/resources/js:list_property_update_behavior", ] } @@ -214,6 +215,7 @@ ":network_list_types", "//ui/webui/resources/js:assert", "//ui/webui/resources/js:i18n_behavior", + "//ui/webui/resources/js/cr/ui:focus_row_behavior", ] } @@ -277,6 +279,10 @@ ":network_siminfo.m", ":onc_mojo.m", ] + + # closure_flags = default_closure_args + [ + # "js_module_root=../../ui/webui/resources/js/", + # "js_module_root=./gen/ui/webui/resources/js/"] } js_library("mojo_interface_provider.m") { @@ -437,6 +443,7 @@ "//third_party/polymer/v3_0/components-chromium/iron-list:iron-list", "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", "//ui/webui/resources/cr_elements:cr_scrollable_behavior.m", + "//ui/webui/resources/js:list_property_update_behavior.m", ] extra_deps = [ ":network_list_module" ] } @@ -446,6 +453,7 @@ deps = [ ":network_list_types.m", "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", + "//ui/webui/resources/js/cr/ui:focus_row_behavior.m", ] extra_deps = [ ":network_list_item_module" ] }
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_list.html b/ui/webui/resources/cr_components/chromeos/network/network_list.html index ceef28d..99152041 100644 --- a/ui/webui/resources/cr_components/chromeos/network/network_list.html +++ b/ui/webui/resources/cr_components/chromeos/network/network_list.html
@@ -6,6 +6,7 @@ <link rel="import" href="../../../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="chrome://resources/polymer/v1_0/iron-list/iron-list.html"> +<link rel="import" href="../../../html/list_property_update_behavior.html"> <dom-module id="network-list"> <template> @@ -36,13 +37,18 @@ </style> <div id="container" class="layout vertical flex" scrollable no-bottom-scroll-border$="[[noBottomScrollBorder]]"> - <iron-list id="networkList" selection-enabled items="[[listItems_]]" - scroll-target="container" selected-item="{{selectedItem}}"> + <iron-list id="networkList" items="[[listItems_]]" + scroll-target="container" preserve-focus> <template> <network-list-item item="[[item]]" show-technology-badge="[[showTechnologyBadge]]" - show-buttons="[[showButtons]]" tabindex$="[[tabIndex]]" + show-buttons="[[showButtons]]" + tabindex$="[[tabIndex]]" + focus-row-index="[[index]]" + iron-list-tab-index="[[tabIndex]]" activation-unavailable="[[activationUnavailable]]" + last-focused="{{lastFocused_}}" + list-blurred="{{listBlurred_}}" device-state="[[deviceState]]"> </network-list-item> </template>
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_list.js b/ui/webui/resources/cr_components/chromeos/network/network_list.js index 77c50eb..7e8190e 100644 --- a/ui/webui/resources/cr_components/chromeos/network/network_list.js +++ b/ui/webui/resources/cr_components/chromeos/network/network_list.js
@@ -74,12 +74,49 @@ return []; }, }, + + /** + * Used by FocusRowBehavior to track the last focused element on a row. + * @private + */ + lastFocused_: Object, + + /** + * Used by FocusRowBehavior to track if the list has been blurred. + * @private + */ + listBlurred_: Boolean, }, - behaviors: [CrScrollableBehavior], + behaviors: [CrScrollableBehavior, ListPropertyUpdateBehavior], observers: ['updateListItems_(networks, customItems)'], + /** @type {ResizeObserver} used to observer size changes to this element */ + resizeObserver_: null, + + /** @override */ + attached() { + // This is a required work around to get the iron-list to display on first + // view. Currently iron-list won't generate item elements on attach if the + // element is not visible. Because there are some instances where this + // component might not be visible when the items are bound, we listen for + // resize events and manually call notifyResize on the iron-list + this.resizeObserver_ = new ResizeObserver(entries => { + const networkList = + /** @type {IronListElement} */ (this.$$('#networkList')); + if (networkList) { + networkList.notifyResize(); + } + }); + this.resizeObserver_.observe(this); + }, + + /** @override */ + detached() { + this.resizeObserver_.disconnect(); + }, + /** @private {boolean} */ focusRequested_: false, @@ -89,16 +126,15 @@ }, /** @private */ - updateListItems_() { - this.saveScroll(/** @type {!IronListElement} */ (this.$.networkList)); - const beforeNetworks = this.customItems.filter(function(item) { - return item.showBeforeNetworksList === true; - }); - const afterNetworks = this.customItems.filter(function(item) { - return item.showBeforeNetworksList !== true; - }); - this.listItems_ = beforeNetworks.concat(this.networks, afterNetworks); - this.restoreScroll(/** @type {!IronListElement} */ (this.$.networkList)); + updateListItems_: function() { + const beforeNetworks = + this.customItems.filter(n => n.showBeforeNetworksList === true); + const afterNetworks = + this.customItems.filter(n => n.showBeforeNetworksList === false); + const newList = beforeNetworks.concat(this.networks, afterNetworks); + + this.updateList('listItems_', item => item.guid, newList); + this.updateScrollableContents(); if (this.focusRequested_) { this.async(function() { @@ -117,28 +153,4 @@ item.focus(); this.focusRequested_ = false; }, - - /** - * Use iron-list selection (which is not the same as focus) to trigger - * tap (requires selection-enabled) or keyboard selection. - * @private - */ - selectedItemChanged_() { - if (this.selectedItem) { - this.onItemAction_(this.selectedItem); - } - }, - - /** - * @param {!NetworkList.NetworkListItemType} item - * @private - */ - onItemAction_(item) { - if (item.hasOwnProperty('customItemName')) { - this.fire('custom-item-selected', item); - } else { - this.fire('selected', item); - this.focusRequested_ = true; - } - }, });
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_list_item.html b/ui/webui/resources/cr_components/chromeos/network/network_list_item.html index 3511883..b68262c 100644 --- a/ui/webui/resources/cr_components/chromeos/network/network_list_item.html +++ b/ui/webui/resources/cr_components/chromeos/network/network_list_item.html
@@ -7,6 +7,7 @@ <link rel="import" href="../../../cr_elements/shared_style_css.html"> <link rel="import" href="../../../cr_elements/shared_vars_css.html"> <link rel="import" href="../../../html/i18n_behavior.html"> +<link rel="import" href="../../../html/cr/ui/focus_row_behavior.html"> <link rel="import" href="cr_policy_network_behavior_mojo.html"> <link rel="import" href="network_icon.html"> <link rel="import" href="network_list_types.html"> @@ -21,6 +22,7 @@ } #divOuter { + height: 100%; padding-inline-end: var(--cr-icon-ripple-padding); } @@ -54,40 +56,60 @@ cr-policy-indicator { padding: 0 var(--cr-controlled-by-spacing); } + + #wrapper { + height: 100%; + } </style> - <div id="divOuter" - class="layout horizontal center flex" actionable> - <template is="dom-if" if="[[networkState]]"> - <network-icon is-list-item - show-technology-badge="[[showTechnologyBadge]]" - network-state="[[networkState]]"> - </network-icon> - </template> - <template is="dom-if" if="[[item.polymerIcon]]"> - <iron-icon icon="[[item.polymerIcon]]"></iron-icon> - </template> - <div id="divText" class="layout horizontal flex"> - <div aria-hidden="true">[[getItemName_(item)]]</div> - <div id="networkStateText" - class="cr-secondary-text" - hidden$="[[!isStateTextVisible_(networkState)]]" - active$="[[isStateTextActive_(networkState, - activationUnavailable)]]"> - [[getNetworkStateText_(networkState, activationUnavailable)]] + <div id="wrapper" focus-row-container + class="layout horizontal center flex"> + <div id="divOuter" + class="layout horizontal center flex" + actionable + focus-row-control + selectable + aria-label$="[[rowLabel]]" + role="button" + focus-type="rowWrapper" + on-keydown="onKeydown_" + on-click="onSelected_"> + <template is="dom-if" if="[[networkState]]"> + <network-icon is-list-item + show-technology-badge="[[showTechnologyBadge]]" + network-state="[[networkState]]"> + </network-icon> + </template> + <template is="dom-if" if="[[item.polymerIcon]]"> + <iron-icon icon="[[item.polymerIcon]]"></iron-icon> + </template> + <div id="divText" class="layout horizontal flex"> + <div aria-hidden="true">[[getItemName_(item)]]</div> + <div id="networkStateText" + class="cr-secondary-text" + hidden$="[[!isStateTextVisible_(networkState)]]" + active$="[[isStateTextActive_(networkState, + activationUnavailable)]]"> + [[getNetworkStateText_(networkState, activationUnavailable)]] + </div> </div> + <template is="dom-if" if="[[isPolicySource(networkState.source)]]"> + <cr-policy-indicator indicator-type="[[getIndicatorTypeForSource( + networkState.source)]]"> + </cr-policy-indicator> + </template> + <template is="dom-if" if="[[isSubpageButtonVisible_(networkState, showButtons)]]" restamp> + <div> + <cr-icon-button class="subpage-arrow" + id="subpage-button" + on-click="onSubpageArrowClick_" + tabindex$="[[tabindex]]" + aria-label$="[[buttonLabel]]" + focus-row-control + focus-type="subpageButton"> + </cr-icon-button> + </div> + </template> </div> - <template is="dom-if" if="[[isPolicySource(networkState.source)]]"> - <cr-policy-indicator indicator-type="[[getIndicatorTypeForSource( - networkState.source)]]"> - </cr-policy-indicator> - </template> - <template is="dom-if" - if="[[isSubpageButtonVisible_(networkState, showButtons)]]" restamp> - <cr-icon-button class="subpage-arrow" id="subpage-button" - on-click="onSubpageArrowClick_" tabindex$="[[tabindex]]" - aria-label$="[[buttonLabel]]"> - </cr-icon-button> - </template> </div> </template> <script src="network_list_item.js"></script>
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_list_item.js b/ui/webui/resources/cr_components/chromeos/network/network_list_item.js index c9a6691..39791089 100644 --- a/ui/webui/resources/cr_components/chromeos/network/network_list_item.js +++ b/ui/webui/resources/cr_components/chromeos/network/network_list_item.js
@@ -13,6 +13,7 @@ behaviors: [ CrPolicyNetworkBehaviorMojo, I18nBehavior, + cr.ui.FocusRowBehavior, ], properties: { @@ -45,7 +46,6 @@ tabindex: { type: Number, value: -1, - reflectToAttribute: true, }, /** @@ -53,11 +53,10 @@ * added as an attribute on this top-level network-list-item, and can * be used by any sub-element which applies it. */ - ariaLabel: { + rowLabel: { type: String, notify: true, - reflectToAttribute: true, - computed: 'getAriaLabel_(item, networkState)', + computed: 'getRowLabel_(item, networkState)', }, buttonLabel: { @@ -162,7 +161,7 @@ * @return {string} * @private */ - getAriaLabel_() { + getRowLabel_() { const NetworkType = chromeos.networkConfig.mojom.NetworkType; const OncSource = chromeos.networkConfig.mojom.OncSource; const SecurityType = chromeos.networkConfig.mojom.SecurityType; @@ -344,15 +343,11 @@ * @private */ onKeydown_(event) { - // The only key event handled by this element is pressing Enter when the - // subpage arrow is focused. - if (event.key !== 'Enter' || - !this.isSubpageButtonVisible_(this.networkState, this.showButtons) || - this.$$('#subpage-button') !== this.shadowRoot.activeElement) { + if (event.key !== 'Enter' && event.key !== ' ') { return; } - this.fireShowDetails_(event); + this.onSelected_(event); // The default event for pressing Enter on a focused button is to simulate a // click on the button. Prevent this action, since it would navigate a @@ -362,6 +357,22 @@ }, /** + * @param {!Event} event + * @private + */ + onSelected_(event) { + if (this.isSubpageButtonVisible_(this.networkState, this.showButtons) && + this.$$('#subpage-button') === this.shadowRoot.activeElement) { + this.fireShowDetails_(event); + } else if (this.item.hasOwnProperty('customItemName')) { + this.fire('custom-item-selected', this.item); + } else { + this.fire('selected', this.item); + this.focusRequested_ = true; + } + }, + + /** * @param {!MouseEvent} event * @private */
diff --git a/ui/webui/resources/cr_components/chromeos/network/network_select.js b/ui/webui/resources/cr_components/chromeos/network/network_select.js index 1cb4d6e2..5c385f2 100644 --- a/ui/webui/resources/cr_components/chromeos/network/network_select.js +++ b/ui/webui/resources/cr_components/chromeos/network/network_select.js
@@ -128,7 +128,7 @@ for (const network of networkList.children) { if (network.is === 'network-list-item' && network.$$('#divText').children[0].innerText === name) { - return network; + return network.shadowRoot.getElementById('divOuter'); } } return null;
diff --git a/ui/webui/resources/cr_components/chromeos/os_cr_components.gni b/ui/webui/resources/cr_components/chromeos/os_cr_components.gni index 5e944ff..b9f33603 100644 --- a/ui/webui/resources/cr_components/chromeos/os_cr_components.gni +++ b/ui/webui/resources/cr_components/chromeos/os_cr_components.gni
@@ -39,5 +39,7 @@ "ui/webui/resources/cr_components/chromeos/quick_unlock/lock_screen_constants.html|recordLockScreenProgress,LockScreenProgress", "ui/webui/resources/cr_components/chromeos/cellular_setup/webview_post_util.html|postDeviceDataToWebview", "ui/webui/resources/html/assert.html|assert,assertNotReached", + "ui/webui/resources/html/cr/ui/focus_row_behavior.html|FocusRowBehavior", + "ui/webui/resources/html/list_property_update_behavior.html|ListPropertyUpdateBehavior", "ui/webui/resources/html/polymer.html|Polymer,flush,html", ]