diff --git a/BUILD.gn b/BUILD.gn index d5cba77..d62cd51 100644 --- a/BUILD.gn +++ b/BUILD.gn
@@ -487,6 +487,7 @@ "//net:quic_client", "//net:quic_server", "//sandbox/linux:chrome_sandbox", + "//sandbox/linux:sandbox_linux_unittests", ] if (!is_clang) { deps += [ "//testing:empty_main" ] @@ -999,8 +1000,8 @@ "//components/exo/wayland:wayland_client_tests", "//media:media_unittests", "//media/capture:capture_unittests", - "//sandbox:sandbox_unittests", "//sandbox/linux:chrome_sandbox", + "//sandbox/linux:sandbox_linux_unittests", "//third_party/breakpad:minidump_stackwalk($host_toolchain)", "//third_party/dawn/src/dawn/tests:dawn_end2end_tests", "//third_party/dawn/src/dawn/tests:dawn_unittests",
diff --git a/DEPS b/DEPS index 38dab94..c82c461 100644 --- a/DEPS +++ b/DEPS
@@ -283,15 +283,15 @@ # 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': 'f0d5285d3ab36bc283aeddef58ef8b95772a0233', + 'skia_revision': 'cef14e607db06caf09e0218ed11af63ce1db9967', # 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': '9383053671627189baa77aee7ef49b4a1b8e1344', + 'v8_revision': '35c454fd7c5aea0f86563e2c6c2600f7e2da1511', # 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': 'a04d6c3ee78335892b5b94b0d9ad1b346e2875ca', + 'angle_revision': 'da9c06780f378840f86e6a0af17636822111d392', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling SwiftShader # and whatever else without interference from each other. @@ -362,7 +362,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': '3a80260722c77d984a637b923cad4883857e57dc', + 'devtools_frontend_revision': '8c025e1c151be163a5f1700ff0392028de88810b', # 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. @@ -398,7 +398,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': '9a32a720acea937bae0e4ab06125b71c3b3e913e', + 'dawn_revision': '2a8c00f53a2e332d837902cde2621aba13a359c9', # Three lines of non-changing comments so that # the commit queue can handle CLs rolling feed # and whatever else without interference from each other. @@ -848,7 +848,7 @@ 'packages': [ { 'package': 'chromium/rts/model/linux-amd64', - 'version': 'rVTs8bldzJNHN_FP9nPBxLt82sty_EL4p4gyanTYt-gC', + 'version': 'c3aMpnAo1ue6RABQnk2axNqx6H43jCYufXngHyx5bCUC', }, ], 'dep_type': 'cipd', @@ -859,7 +859,7 @@ 'packages': [ { 'package': 'chromium/rts/model/mac-amd64', - 'version': 'MDo57w75wgMO-NqyMFcGlI_q9htguRBdR3WguNyAt8kC', + 'version': 'C4igURhSjy8bfAI0tq6BmtRGzeVOAIWCdm3rgPvN-w8C', }, ], 'dep_type': 'cipd', @@ -870,7 +870,7 @@ 'packages': [ { 'package': 'chromium/rts/model/windows-amd64', - 'version': 'qDjsfOEZQS3mvUMeC8ZWpMowljH6tgOBGVEG7XovMZYC', + 'version': 'llEKHacpCZWiQAmEN6QCXjo3fRz5GvFm8h9YpvU8UmwC', }, ], 'dep_type': 'cipd', @@ -1562,7 +1562,7 @@ }, 'src/third_party/perfetto': - Var('android_git') + '/platform/external/perfetto.git' + '@' + '7a33ae4f5f16f74f70b52d8abe5e6a4d902c9279', + Var('android_git') + '/platform/external/perfetto.git' + '@' + '00a6e13924cea678f0054f8e3ba096b6c6d91e5e', 'src/third_party/perl': { 'url': Var('chromium_git') + '/chromium/deps/perl.git' + '@' + '6f3e5028eb65d0b4c5fdd792106ac4c84eee1eb3', @@ -1732,7 +1732,7 @@ Var('chromium_git') + '/external/github.com/gpuweb/cts.git' + '@' + '06954d98b3f95e55b4810f422b64b4bcd440d62f', 'src/third_party/webrtc': - Var('webrtc_git') + '/src.git' + '@' + '046e6d14c27f445259a125f251914db7d034256c', + Var('webrtc_git') + '/src.git' + '@' + '02bfcf513280188ac8fb2280bdb9c680f9c8cbfd', 'src/third_party/libgifcodec': Var('skia_git') + '/libgifcodec' + '@'+ Var('libgifcodec_revision'), @@ -1805,7 +1805,7 @@ Var('chromium_git') + '/v8/v8.git' + '@' + Var('v8_revision'), 'src-internal': { - 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@6fb75f5517e9334df2b8fd6b07c80152b43c1039', + 'url': 'https://chrome-internal.googlesource.com/chrome/src-internal.git@b26dfef6841608a6770368e3d1a3a8d7716a32b1', 'condition': 'checkout_src_internal', },
diff --git a/android_webview/browser/aw_web_contents_delegate.cc b/android_webview/browser/aw_web_contents_delegate.cc index 28a4c10..23d2d07a 100644 --- a/android_webview/browser/aw_web_contents_delegate.cc +++ b/android_webview/browser/aw_web_contents_delegate.cc
@@ -296,7 +296,7 @@ auto* intercept_navigation_delegate = navigation_interception::InterceptNavigationDelegate::Get(web_contents); if (intercept_navigation_delegate) - intercept_navigation_delegate->UpdateLastUserGestureCarryoverTimestamp(); + intercept_navigation_delegate->OnResourceRequestWithGesture(); } scoped_refptr<content::FileSelectListener>
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java index 20f70e752..72263bf 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -689,8 +689,7 @@ // private class InterceptNavigationDelegateImpl extends InterceptNavigationDelegate { @Override - public boolean shouldIgnoreNavigation(NavigationHandle navigationHandle, GURL escapedUrl, - boolean applyUserGestureCarryover) { + public boolean shouldIgnoreNavigation(NavigationHandle navigationHandle, GURL escapedUrl) { // The shouldOverrideUrlLoading call might have resulted in posting messages to the // UI thread. Using sendMessage here (instead of calling onPageStarted directly) // will allow those to run in order.
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java index ecb3d05..15fdead0 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsTest.java
@@ -43,6 +43,7 @@ import org.chromium.android_webview.renderer_priority.RendererPriority; import org.chromium.android_webview.test.TestAwContentsClient.OnDownloadStartHelper; import org.chromium.android_webview.test.util.CommonResources; +import org.chromium.android_webview.test.util.GraphicsTestUtils; import org.chromium.base.ContextUtils; import org.chromium.base.Log; import org.chromium.base.metrics.RecordHistogram; @@ -68,7 +69,6 @@ import java.util.Map; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; -import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; /** @@ -952,45 +952,6 @@ Assert.assertEquals("chrome://safe-browsing/", awContents.getLastCommittedUrl()); } - private void pollForQuadrantColors(AwTestContainerView testView, int[] expectedQuadrantColors) - throws Throwable { - int[] lastQuadrantColors = null; - // Poll for 10s in case raster is slow. - for (int i = 0; i < 100; ++i) { - final CallbackHelper callbackHelper = new CallbackHelper(); - final Object[] resultHolder = new Object[1]; - mActivityTestRule.runOnUiThread(() -> { - testView.readbackQuadrantColors((int[] result) -> { - resultHolder[0] = result; - callbackHelper.notifyCalled(); - }); - }); - try { - callbackHelper.waitForFirst(); - } catch (TimeoutException e) { - Log.w(TAG, "Timeout", e); - continue; - } - int[] quadrantColors = (int[]) resultHolder[0]; - lastQuadrantColors = quadrantColors; - if (quadrantColors != null && expectedQuadrantColors[0] == quadrantColors[0] - && expectedQuadrantColors[1] == quadrantColors[1] - && expectedQuadrantColors[2] == quadrantColors[2] - && expectedQuadrantColors[3] == quadrantColors[3]) { - return; - } - Thread.sleep(100); - } - Assert.assertNotNull(lastQuadrantColors); - // If this test is failing for your CL, then chances are your change is breaking Android - // WebView hardware rendering. Please build the "real" webview and check if this is the - // case and if so, fix your CL. - Assert.assertEquals(expectedQuadrantColors[0], lastQuadrantColors[0]); - Assert.assertEquals(expectedQuadrantColors[1], lastQuadrantColors[1]); - Assert.assertEquals(expectedQuadrantColors[2], lastQuadrantColors[2]); - Assert.assertEquals(expectedQuadrantColors[3], lastQuadrantColors[3]); - } - private void doHardwareRenderingSmokeTest() throws Throwable { AwTestContainerView testView = mActivityTestRule.createAwTestContainerViewOnMainSync(mContentsClient); @@ -1016,7 +977,7 @@ int expectedQuadrantColors[] = {Color.rgb(255, 0, 0), Color.rgb(0, 255, 0), Color.rgb(0, 0, 255), Color.rgb(128, 128, 128)}; - pollForQuadrantColors(testView, expectedQuadrantColors); + GraphicsTestUtils.pollForQuadrantColors(testView, expectedQuadrantColors); } @Test @@ -1448,7 +1409,7 @@ Color.rgb(255, 0, 0), Color.rgb(255, 0, 0), }; - pollForQuadrantColors(testView, expectedQuadrantColors); + GraphicsTestUtils.pollForQuadrantColors(testView, expectedQuadrantColors); assertThat(RenderProcessHostUtils.getCurrentRenderProcessCount(), greaterThan(1)); // Click iframe to navigate. This exercises hit testing code paths. @@ -1465,7 +1426,7 @@ Color.rgb(0, 0, 255), Color.rgb(0, 0, 255), }; - pollForQuadrantColors(testView, expectedQuadrantColors); + GraphicsTestUtils.pollForQuadrantColors(testView, expectedQuadrantColors); assertThat(RenderProcessHostUtils.getCurrentRenderProcessCount(), greaterThan(1)); } finally { webServer.shutdown();
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/FencedFrameTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/FencedFrameTest.java index 151f21b..2d37364 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/FencedFrameTest.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/FencedFrameTest.java
@@ -6,6 +6,7 @@ import static org.chromium.android_webview.test.AwActivityTestRule.WAIT_TIMEOUT_MS; +import android.graphics.Color; import android.support.test.InstrumentationRegistry; import android.util.Pair; import android.webkit.JavascriptInterface; @@ -23,6 +24,7 @@ import org.chromium.android_webview.AwContents; import org.chromium.android_webview.test.util.AwTestTouchUtils; import org.chromium.android_webview.test.util.CommonResources; +import org.chromium.android_webview.test.util.GraphicsTestUtils; import org.chromium.android_webview.test.util.JavascriptEventObserver; import org.chromium.base.test.util.CallbackHelper; import org.chromium.base.test.util.CommandLineFlags; @@ -159,7 +161,7 @@ } /** - * Test that a java object is mirrored in a fenced frame. + * Test that a hit test in a fenced frame produces the correct results on the WebView API. **/ @Test @SmallTest @@ -195,4 +197,37 @@ && "http://foo/".equals(data.hitTestResultExtraData); }); } + + /** + * Test that a fenced frame is rastered correctly. + **/ + @Test + @SmallTest + @Feature({"AndroidWebView", "Android-JavaBridge"}) + public void fencedFrameDrawingSmokeTest() throws Throwable { + String fencedFrameSource = "<html>" + + " <body style=\"" + + " padding: 0;" + + " margin: 0;" + + " display: grid;" + + " display: grid;" + + " grid-template-columns: 50% 50%;" + + " grid-template-rows: 50% 50%;\">" + + " <div style=\"background-color: rgb(255, 0, 0);\"></div>" + + " <div style=\"background-color: rgb(0, 255, 0);\"></div>" + + " <div style=\"background-color: rgb(0, 0, 255);\"></div>" + + " <div style=\"background-color: rgb(128, 128, 128);\"></div>" + + " </body>" + + "</html>"; + String mainUrl = generateFencedFrame(fencedFrameSource); + + mActivityTestRule.loadUrlSync( + mAwContents, mContentsClient.getOnPageFinishedHelper(), mainUrl); + mActivityTestRule.waitForVisualStateCallback(mAwContents); + + int expectedQuadrantColors[] = {Color.rgb(255, 0, 0), Color.rgb(0, 255, 0), + Color.rgb(0, 0, 255), Color.rgb(128, 128, 128)}; + + GraphicsTestUtils.pollForQuadrantColors(mTestView, expectedQuadrantColors); + } }
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/util/GraphicsTestUtils.java b/android_webview/javatests/src/org/chromium/android_webview/test/util/GraphicsTestUtils.java index 93f5d916..b5039ad 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/util/GraphicsTestUtils.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/util/GraphicsTestUtils.java
@@ -9,12 +9,17 @@ import android.graphics.Canvas; import android.view.View; +import org.junit.Assert; + import org.chromium.android_webview.AwContents; import org.chromium.android_webview.test.AwActivityTestRule; import org.chromium.android_webview.test.AwTestContainerView; +import org.chromium.base.test.util.CallbackHelper; import org.chromium.content_public.browser.test.util.TestThreadUtils; import org.chromium.ui.display.DisplayAndroid; +import java.util.concurrent.TimeoutException; + /** * Graphics-related test utils. */ @@ -101,4 +106,42 @@ awContents.onDraw(canvas); return bitmap; } + + public static void pollForQuadrantColors( + AwTestContainerView testView, int[] expectedQuadrantColors) throws Throwable { + int[] lastQuadrantColors = null; + // Poll for 10s in case raster is slow. + for (int i = 0; i < 100; ++i) { + final CallbackHelper callbackHelper = new CallbackHelper(); + final Object[] resultHolder = new Object[1]; + TestThreadUtils.runOnUiThreadBlocking(() -> { + testView.readbackQuadrantColors((int[] result) -> { + resultHolder[0] = result; + callbackHelper.notifyCalled(); + }); + }); + try { + callbackHelper.waitForFirst(); + } catch (TimeoutException e) { + continue; + } + int[] quadrantColors = (int[]) resultHolder[0]; + lastQuadrantColors = quadrantColors; + if (quadrantColors != null && expectedQuadrantColors[0] == quadrantColors[0] + && expectedQuadrantColors[1] == quadrantColors[1] + && expectedQuadrantColors[2] == quadrantColors[2] + && expectedQuadrantColors[3] == quadrantColors[3]) { + return; + } + Thread.sleep(100); + } + Assert.assertNotNull(lastQuadrantColors); + // If this test is failing for your CL, then chances are your change is breaking Android + // WebView hardware rendering. Please build the "real" webview and check if this is the + // case and if so, fix your CL. + Assert.assertEquals(expectedQuadrantColors[0], lastQuadrantColors[0]); + Assert.assertEquals(expectedQuadrantColors[1], lastQuadrantColors[1]); + Assert.assertEquals(expectedQuadrantColors[2], lastQuadrantColors[2]); + Assert.assertEquals(expectedQuadrantColors[3], lastQuadrantColors[3]); + } }
diff --git a/ash/components/arc/mojom/intent_helper.mojom b/ash/components/arc/mojom/intent_helper.mojom index 44f9bd04..0d0f0e2 100644 --- a/ash/components/arc/mojom/intent_helper.mojom +++ b/ash/components/arc/mojom/intent_helper.mojom
@@ -169,8 +169,8 @@ SMARTPRIVACY = 77, PRIVACYHUB = 78, TEXTTOSPEECH = 79, - - // Next value to be used is 80. + AUDIO = 80, + // Next value to be used is 81. }; // Describes an unique chrome app.
diff --git a/ash/strings/ash_strings_as.xtb b/ash/strings/ash_strings_as.xtb index 11fea2b3..23f22a74 100644 --- a/ash/strings/ash_strings_as.xtb +++ b/ash/strings/ash_strings_as.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046"><ph name="DISPLAY_NAME" />ৰ সৈতে মিৰ’ৰ কৰা হৈছে</translation> <translation id="1885785240814121742">ফিংগাৰপ্ৰিণ্টৰ দ্বাৰা আনলক কৰক</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" />এ <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz) সমৰ্থন নকৰে। ৰিজ’লিউশ্বনটো <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />)লৈ সলনি কৰা হৈছে। সালসলনিসমূহ ৰাখিবলৈ নিশ্চিত কৰকত ক্লিক কৰক। পূৰ্বৱৰ্তী ছেটিংসমূহ <ph name="TIMEOUT_SECONDS" />ত পুনঃস্থাপন কৰা হ’ব।</translation> +<translation id="1908992311423394684">নতুনকৈ ইনষ্টল কৰা</translation> <translation id="1915307458270490472">কল শেষ কৰক</translation> <translation id="1918022425394817322">কেমেৰা ওপৰৰ সোঁফালৰ কোণলৈ স্নেপ কৰা হৈছে</translation> <translation id="1919743966458266018">কাৰ্য পৰিচালক খোলা শ্বর্টকাট সলনি কৰা হৈছে। অনুগ্ৰহ কৰি <ph name="OLD_SHORTCUT" />ৰ সলনি <ph name="NEW_SHORTCUT" /> ব্যৱহাৰ কৰক।</translation>
diff --git a/ash/strings/ash_strings_ca.xtb b/ash/strings/ash_strings_ca.xtb index fe150dc..63d78c0 100644 --- a/ash/strings/ash_strings_ca.xtb +++ b/ash/strings/ash_strings_ca.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">S'està replicant <ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">Desbloqueja amb l'empremta digital</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> no admet la resolució <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). La resolució ha canviat a <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Fes clic a Confirma per conservar els canvis. La configuració anterior es restaurarà d'aquí a <ph name="TIMEOUT_SECONDS" />.</translation> +<translation id="1908992311423394684">Instal·lació nova</translation> <translation id="1915307458270490472">Penja</translation> <translation id="1918022425394817322">La càmera s'ha ajustat a l'extrem superior dret</translation> <translation id="1919743966458266018">La drecera per obrir el gestor de tasques ha canviat. Utilitzeu <ph name="NEW_SHORTCUT" /> en lloc de la drecera <ph name="OLD_SHORTCUT" />.</translation>
diff --git a/ash/strings/ash_strings_cs.xtb b/ash/strings/ash_strings_cs.xtb index 55783c70..90ab99c 100644 --- a/ash/strings/ash_strings_cs.xtb +++ b/ash/strings/ash_strings_cs.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">Zrcadlení na displej <ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">Odemknutí otiskem prstu</translation> <translation id="1888656773939766144">Monitor <ph name="DISPLAY_NAME" /> rozlišení <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz) nepodporuje. Rozlišení bylo změněno na <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Změny potvrdíte kliknutím. Předchozí nastavení bude obnoveno za <ph name="TIMEOUT_SECONDS" />.</translation> +<translation id="1908992311423394684">Nová instalace</translation> <translation id="1915307458270490472">Zavěsit</translation> <translation id="1918022425394817322">Kamera byla připnuta do pravého horního rohu</translation> <translation id="1919743966458266018">Zkratka k otevření správce úloh se změnila. Namísto zkratky <ph name="OLD_SHORTCUT" /> používejte zkratku <ph name="NEW_SHORTCUT" />.</translation>
diff --git a/ash/strings/ash_strings_cy.xtb b/ash/strings/ash_strings_cy.xtb index 8f7c61c68..de794f3 100644 --- a/ash/strings/ash_strings_cy.xtb +++ b/ash/strings/ash_strings_cy.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">Wrthi'n adlewyrchu i <ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">Gallwch ddatgloi gyda'ch olion bysedd</translation> <translation id="1888656773939766144">Nid yw <ph name="DISPLAY_NAME" /> yn cefnogi <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Cafodd y cydraniad ei newid i <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Cliciwch Cadarnhau i gadw'r newidiadau. Bydd y gosodiadau blaenorol yn cael eu hadfer mewn <ph name="TIMEOUT_SECONDS" />.</translation> +<translation id="1908992311423394684">Gosodiad newydd</translation> <translation id="1915307458270490472">Dod â'r sgwrs i ben</translation> <translation id="1918022425394817322">Mae'r camera wedi'i snapio i'r gornel dde uchaf</translation> <translation id="1919743966458266018">Mae'r llwybr byr i agor y rheolwr tasgau wedi newid. Defnyddiwch <ph name="NEW_SHORTCUT" /> yn lle <ph name="OLD_SHORTCUT" />.</translation>
diff --git a/ash/strings/ash_strings_da.xtb b/ash/strings/ash_strings_da.xtb index d6d0c7ef..d1b0445 100644 --- a/ash/strings/ash_strings_da.xtb +++ b/ash/strings/ash_strings_da.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">Spejler mod <ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">Lås op med fingeraftryk</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> understøtter ikke <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Opløsningen blev ændret til <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Klik på Bekræft for at anvende ændringerne. De tidligere indstillinger gendannes om <ph name="TIMEOUT_SECONDS" />.</translation> +<translation id="1908992311423394684">Installeret for nylig</translation> <translation id="1915307458270490472">Læg på</translation> <translation id="1918022425394817322">Kameraet er fastgjort til hjørnet øverst til højre</translation> <translation id="1919743966458266018">Genvejen til at åbne Jobliste er ændret. Brug <ph name="NEW_SHORTCUT" /> i stedet for <ph name="OLD_SHORTCUT" />.</translation>
diff --git a/ash/strings/ash_strings_es.xtb b/ash/strings/ash_strings_es.xtb index 85258a72..4129c48 100644 --- a/ash/strings/ash_strings_es.xtb +++ b/ash/strings/ash_strings_es.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">Proyectando en <ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">Desbloquear con huella digital</translation> <translation id="1888656773939766144">La pantalla <ph name="DISPLAY_NAME" /> no admite <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Se ha modificado la resolución a <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Haz clic en "Confirmar" para mantener los cambios. La configuración anterior se restaurará en <ph name="TIMEOUT_SECONDS" />.</translation> +<translation id="1908992311423394684">Nueva instalación</translation> <translation id="1915307458270490472">Colgar</translation> <translation id="1918022425394817322">Cámara ajustada a la esquina superior derecha</translation> <translation id="1919743966458266018">La combinación de teclas para abrir el Administrador de tareas ha cambiado. Utiliza <ph name="NEW_SHORTCUT" /> en lugar de <ph name="OLD_SHORTCUT" />.</translation>
diff --git a/ash/strings/ash_strings_et.xtb b/ash/strings/ash_strings_et.xtb index 22ee7bc7..4ebfe018 100644 --- a/ash/strings/ash_strings_et.xtb +++ b/ash/strings/ash_strings_et.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">Peegeldamine asukohta <ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">Sõrmejäljega avamine</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> ei toeta eraldusvõimet <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Eraldusvõimeks määrati <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Muudatuste säilitamiseks klõpsake nupul Kinnita. Eelmised seaded taastatakse <ph name="TIMEOUT_SECONDS" /> pärast.</translation> +<translation id="1908992311423394684">Uus installimine</translation> <translation id="1915307458270490472">Lõpeta kõne</translation> <translation id="1918022425394817322">Kaamera kinnitati paremasse ülanurka</translation> <translation id="1919743966458266018">Tegumihalduri avamise otseteed on muudetud. Kasutage vana otsetee <ph name="OLD_SHORTCUT" /> asemel uut otseteed <ph name="NEW_SHORTCUT" />.</translation>
diff --git a/ash/strings/ash_strings_eu.xtb b/ash/strings/ash_strings_eu.xtb index 37b9b55..2070efbe 100644 --- a/ash/strings/ash_strings_eu.xtb +++ b/ash/strings/ash_strings_eu.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046"><ph name="DISPLAY_NAME" /> pantailan islatzen</translation> <translation id="1885785240814121742">Desblokeatu hatz-marka bidez</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> pantailak ez du onartzen <ph name="SPECIFIED_RESOLUTION" /> bereizmena (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). <ph name="FALLBACK_RESOLUTION" /> bereizmena ezarri da pantailaren bereizmen gisa (<ph name="FALLBACK_REFRESH_RATE" />). Aldaketak gordetzeko, sakatu berresteko botoia. <ph name="TIMEOUT_SECONDS" /> barru leheneratuko dira aurreko ezarpenak.</translation> +<translation id="1908992311423394684">Berriki instalatu da</translation> <translation id="1915307458270490472">Amaitu deia</translation> <translation id="1918022425394817322">Atxiki egin da kamera goiko eskuinaldeko izkinan</translation> <translation id="1919743966458266018">Aldatu egin da ataza-kudeatzailea irekitzeko lasterbidea. Erabili <ph name="NEW_SHORTCUT" />, eta ez <ph name="OLD_SHORTCUT" />.</translation>
diff --git a/ash/strings/ash_strings_fi.xtb b/ash/strings/ash_strings_fi.xtb index dca76dac..a89c58d 100644 --- a/ash/strings/ash_strings_fi.xtb +++ b/ash/strings/ash_strings_fi.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">Peilataan näyttöön: <ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">Avaa sormenjäljellä</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> ei tue resoluutiota <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Resoluutioksi vaihdettiin <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Pidä muutokset voimassa valitsemalla Vahvista. Aiemman asetuksen palauttamiseen menee <ph name="TIMEOUT_SECONDS" />.</translation> +<translation id="1908992311423394684">Uusi asennus</translation> <translation id="1915307458270490472">Katkaise puhelu</translation> <translation id="1918022425394817322">Kamera kohdistettu oikeaan yläkulmaan</translation> <translation id="1919743966458266018">Tehtävänhallinnan avaamisen pikanäppäin on muuttunut. Käytä uutta pikanäppäintä <ph name="NEW_SHORTCUT" /> vanhan (<ph name="OLD_SHORTCUT" />) sijaan.</translation>
diff --git a/ash/strings/ash_strings_fil.xtb b/ash/strings/ash_strings_fil.xtb index 159071e..16c9dfc 100644 --- a/ash/strings/ash_strings_fil.xtb +++ b/ash/strings/ash_strings_fil.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">Nagmi-mirror sa <ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">I-unlock gamit ang fingerprint</translation> <translation id="1888656773939766144">Hindi sinusuportahan ng <ph name="DISPLAY_NAME" /> ang <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Ginawang <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />) ang resolution. I-click ang kumpirmahin para panatilihin ang mga pagbabago. Ire-restore ang mga nakaraang setting pagkalipas ng <ph name="TIMEOUT_SECONDS" />.</translation> +<translation id="1908992311423394684">Kaka-install lang</translation> <translation id="1915307458270490472">Ibaba</translation> <translation id="1918022425394817322">Nag-snap ang camera sa kanang sulok sa itaas</translation> <translation id="1919743966458266018">Napalitan na ang shortcut para sa pagbubukas sa task manager. Mangyaring gamitin ang <ph name="NEW_SHORTCUT" /> sa halip na gamitin ang <ph name="OLD_SHORTCUT" />.</translation>
diff --git a/ash/strings/ash_strings_gu.xtb b/ash/strings/ash_strings_gu.xtb index f2eb958..1df8118 100644 --- a/ash/strings/ash_strings_gu.xtb +++ b/ash/strings/ash_strings_gu.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046"><ph name="DISPLAY_NAME" /> પર પ્રતિબિંબિત થઈ રહ્યું છે</translation> <translation id="1885785240814121742">ફિંગરપ્રિન્ટથી અનલૉક કરો</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz)ને સપોર્ટ આપતું નથી. રિઝોલ્યુશનને બદલીને <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />) કરવામાં આવ્યું. ફેરફારો જાળવવા માટે કન્ફર્મ કરો પર ક્લિક કરો. અગાઉના સેટિંગ <ph name="TIMEOUT_SECONDS" />માં રિસ્ટોર કરવામાં આવશે.</translation> +<translation id="1908992311423394684">નવી ઇન્સ્ટૉલ કરી છે</translation> <translation id="1915307458270490472">સમાપ્ત કરો</translation> <translation id="1918022425394817322">કૅમેરાને ઉપરના જમણા ખૂણામાં સ્નેપ કર્યો</translation> <translation id="1919743966458266018">Tasks સંચાલક ખોલવાનો શોર્ટકટ બદલાયો છે. કૃપા કરીને <ph name="NEW_SHORTCUT" /> ની બદલે <ph name="OLD_SHORTCUT" /> નો ઉપયોગ કરો.</translation>
diff --git a/ash/strings/ash_strings_hu.xtb b/ash/strings/ash_strings_hu.xtb index 26c612a..d430a78 100644 --- a/ash/strings/ash_strings_hu.xtb +++ b/ash/strings/ash_strings_hu.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">Tükrözés: <ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">Feloldás ujjlenyomattal</translation> <translation id="1888656773939766144">A(z) <ph name="DISPLAY_NAME" /> nem támogatja a következő felbontást: <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). A felbontás erre módosult: <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). A módosítás megtartásához kattintson a Megerősítés gombra. A beállítás <ph name="TIMEOUT_SECONDS" /> múlva visszaáll a korábbi értékre.</translation> +<translation id="1908992311423394684">Frissen telepítve</translation> <translation id="1915307458270490472">Hívás befejezése</translation> <translation id="1918022425394817322">Kamera a jobb felső sarokhoz igazítva</translation> <translation id="1919743966458266018">Megváltozott a feladatkezelő megnyitásának billentyűkódja. A <ph name="OLD_SHORTCUT" /> helyett használja a következőt: <ph name="NEW_SHORTCUT" />.</translation>
diff --git a/ash/strings/ash_strings_hy.xtb b/ash/strings/ash_strings_hy.xtb index 251bac59..025b306 100644 --- a/ash/strings/ash_strings_hy.xtb +++ b/ash/strings/ash_strings_hy.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">Հայելապատճենվում է <ph name="DISPLAY_NAME" />-ին</translation> <translation id="1885785240814121742">Ապակողպում մատնահետքով</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> սարքում չի աջակցվում <ph name="SPECIFIED_RESOLUTION" /> լուծաչափը (<ph name="SPECIFIED_REFRESH_RATE" /> Հց)։ Լուծաչափը դարձել է <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />)։ Փոփոխությունը պահպանելու համար սեղմեք «Հաստատել»։ Նախորդ կարգավորումները կվերականգնվեն <ph name="TIMEOUT_SECONDS" /> վայրկյան հետո։</translation> +<translation id="1908992311423394684">Նոր տեղադրում</translation> <translation id="1915307458270490472">Փակել</translation> <translation id="1918022425394817322">Տեսախցիկի պատկերն ամրացված է վերևի աջ անկյունում</translation> <translation id="1919743966458266018">Խնդիրների կառավարիչը բացելու դյուրանցումը փոխվել է: <ph name="OLD_SHORTCUT" />-ի փոխարեն օգտագործեք <ph name="NEW_SHORTCUT" />:</translation>
diff --git a/ash/strings/ash_strings_id.xtb b/ash/strings/ash_strings_id.xtb index a3249b81..6a6de20e 100644 --- a/ash/strings/ash_strings_id.xtb +++ b/ash/strings/ash_strings_id.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">Mencerminkan ke <ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">Buka kunci dengan sidik jari</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> tidak mendukung <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Resolusi diubah ke <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Klik konfirmasi untuk menyimpan perubahan. Setelan sebelumnya akan dipulihkan dalam <ph name="TIMEOUT_SECONDS" />.</translation> +<translation id="1908992311423394684">Baru diinstal</translation> <translation id="1915307458270490472">Akhiri</translation> <translation id="1918022425394817322">Kamera dipaskan ke pojok kanan atas</translation> <translation id="1919743966458266018">Pintasan untuk membuka pengelola tugas telah berubah. Gunakan <ph name="NEW_SHORTCUT" /> sebagai ganti <ph name="OLD_SHORTCUT" />.</translation>
diff --git a/ash/strings/ash_strings_ja.xtb b/ash/strings/ash_strings_ja.xtb index 4d7df75a..7dc62669 100644 --- a/ash/strings/ash_strings_ja.xtb +++ b/ash/strings/ash_strings_ja.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046"><ph name="DISPLAY_NAME" /> へミラーリング</translation> <translation id="1885785240814121742">指紋でロックを解除する</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> は <ph name="SPECIFIED_RESOLUTION" />(<ph name="SPECIFIED_REFRESH_RATE" /> Hz)に対応していません。解像度を <ph name="FALLBACK_RESOLUTION" />(<ph name="FALLBACK_REFRESH_RATE" />)に変更しました。変更を保存するには確定してください。<ph name="TIMEOUT_SECONDS" /> 秒後に以前の設定に戻ります。</translation> +<translation id="1908992311423394684">新たなインストール</translation> <translation id="1915307458270490472">通話を終了</translation> <translation id="1918022425394817322">カメラは右上にスナップされています</translation> <translation id="1919743966458266018">タスク マネージャを起動するショートカットが変わりました。<ph name="OLD_SHORTCUT" /> ではなく <ph name="NEW_SHORTCUT" /> をご使用ください。</translation>
diff --git a/ash/strings/ash_strings_kk.xtb b/ash/strings/ash_strings_kk.xtb index a79700f2d..c9b0190 100644 --- a/ash/strings/ash_strings_kk.xtb +++ b/ash/strings/ash_strings_kk.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046"><ph name="DISPLAY_NAME" /> арқылы экран көшірмесін көрсету</translation> <translation id="1885785240814121742">Құлыпты саусақ ізімен ашыңыз</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> дисплейі <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Гц) ажыратымдылығын қолдамайды. Ажыратымдылық <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />) болып өзгертілді. Өзгерістерді сақтау үшін "Растау" түймесін басыңыз. Алдыңғы параметрлер <ph name="TIMEOUT_SECONDS" /> кейін қалпына келтіріледі.</translation> +<translation id="1908992311423394684">Жаңадан орнатылған</translation> <translation id="1915307458270490472">Жабу</translation> <translation id="1918022425394817322">Камера жоғарғы оң жақ бұрышқа ауыстырылды.</translation> <translation id="1919743966458266018">Тапсырмалар реттегішін ашатын пернелер тіркесімі өзгертілді. <ph name="OLD_SHORTCUT" /> орнына <ph name="NEW_SHORTCUT" /> пайдаланыңыз.</translation>
diff --git a/ash/strings/ash_strings_ko.xtb b/ash/strings/ash_strings_ko.xtb index 77f3bd0..26806ea 100644 --- a/ash/strings/ash_strings_ko.xtb +++ b/ash/strings/ash_strings_ko.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046"><ph name="DISPLAY_NAME" />에 미러링</translation> <translation id="1885785240814121742">지문으로 잠금 해제</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" />에서 <ph name="SPECIFIED_RESOLUTION" />(<ph name="SPECIFIED_REFRESH_RATE" />Hz) 해상도를 지원하지 않습니다. <ph name="FALLBACK_RESOLUTION" />(<ph name="FALLBACK_REFRESH_RATE" />) 해상도로 변경되었습니다. 변경사항을 적용하려면 확인을 클릭하세요. <ph name="TIMEOUT_SECONDS" /> 후 이전 설정으로 복원됩니다.</translation> +<translation id="1908992311423394684">새로 설치됨</translation> <translation id="1915307458270490472">종료</translation> <translation id="1918022425394817322">카메라 미리보기가 오른쪽 상단으로 맞춰졌습니다</translation> <translation id="1919743966458266018">작업 관리자를 여는 단축키가 변경되었습니다. <ph name="OLD_SHORTCUT" /> 대신 <ph name="NEW_SHORTCUT" />을(를) 사용하세요.</translation>
diff --git a/ash/strings/ash_strings_ms.xtb b/ash/strings/ash_strings_ms.xtb index 21b87611..6dc10fd 100644 --- a/ash/strings/ash_strings_ms.xtb +++ b/ash/strings/ash_strings_ms.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">Mencerminkan <ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">Buka kunci dengan cap jari</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> tidak menyokong <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Peleraian telah diubah kepada <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Klik sahkan untuk menyimpan perubahan. Tetapan terdahulu akan dipulihkan dalam masa <ph name="TIMEOUT_SECONDS" />.</translation> +<translation id="1908992311423394684">Pemasangan baharu</translation> <translation id="1915307458270490472">Tamatkan panggilan</translation> <translation id="1918022425394817322">Kamera diautojajar ke penjuru kanan sebelah atas</translation> <translation id="1919743966458266018">Pintasan untuk membuka pengurus tugas telah berubah. Sila gunakan <ph name="NEW_SHORTCUT" /> dan bukannya <ph name="OLD_SHORTCUT" />.</translation>
diff --git a/ash/strings/ash_strings_ne.xtb b/ash/strings/ash_strings_ne.xtb index 7c4dc61..02aaa29 100644 --- a/ash/strings/ash_strings_ne.xtb +++ b/ash/strings/ash_strings_ne.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046"><ph name="DISPLAY_NAME" /> मा प्रतिबिम्बित गर्दै</translation> <translation id="1885785240814121742">फिंगरप्रिन्टमार्फत अनलक गर्नुहोस्</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> मा <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> हर्ज) रिजोल्युसन प्रयोग गर्न मिल्दैन। रिजोल्युसन परिवर्तन गरी <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />) बनाइयो। यो परिवर्तन सुरक्षित गर्न पुष्टि गर्नुहोस् नामक बटनमा क्लिक गर्नुहोस्। अबको <ph name="TIMEOUT_SECONDS" /> मा यी सेटिङ परिवर्तन गरी पहिलेको जस्तै बनाइने छ।</translation> +<translation id="1908992311423394684">भर्खरै इन्स्टल गरिएको</translation> <translation id="1915307458270490472">ह्याङ्ग अप</translation> <translation id="1918022425394817322">क्यामेरा सिरानको दायाँ कुनामा स्न्याप गरियो</translation> <translation id="1919743966458266018">कार्य प्रबन्धक खोल्ने सर्टकटमा परिवर्तन भएको छ। कृपया <ph name="OLD_SHORTCUT" />को सट्टामा <ph name="NEW_SHORTCUT" /> प्रयोग गर्नुहोस्।</translation>
diff --git a/ash/strings/ash_strings_no.xtb b/ash/strings/ash_strings_no.xtb index b794bb6..64a2db3 100644 --- a/ash/strings/ash_strings_no.xtb +++ b/ash/strings/ash_strings_no.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">Speiler <ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">Lås opp med fingeravtrykk</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> støtter ikke <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Oppløsningen ble endret til <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Klikk på Bekreft for å beholde endringene. De forrige innstillingene blir gjenopprettet om <ph name="TIMEOUT_SECONDS" />.</translation> +<translation id="1908992311423394684">Nylig installert</translation> <translation id="1915307458270490472">Legg på</translation> <translation id="1918022425394817322">Kameraet er festet til øvre høyre hjørne</translation> <translation id="1919743966458266018">Snarveien for å åpne oppgavebehandlingen er endret. Bruk <ph name="NEW_SHORTCUT" /> i stedet for <ph name="OLD_SHORTCUT" />.</translation>
diff --git a/ash/strings/ash_strings_or.xtb b/ash/strings/ash_strings_or.xtb index 9e9fbf6..1516614 100644 --- a/ash/strings/ash_strings_or.xtb +++ b/ash/strings/ash_strings_or.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046"><ph name="DISPLAY_NAME" />ର ପ୍ରତିଫଳନ</translation> <translation id="1885785240814121742">ଟିପଚିହ୍ନ ସାହାଯ୍ୟରେ ଅନ୍ଲକ୍ କରନ୍ତୁ</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz) ସମର୍ଥନ କରେ ନାହିଁ। ରିଜୋଲ୍ୟୁସନ୍ <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />)କୁ ପରିବର୍ତ୍ତନ କରାଯାଇଥିଲା। ପରିବର୍ତ୍ତନଗୁଡ଼ିକ ରଖିବାକୁ "ସୁନିଶ୍ଚିତ କରନ୍ତୁ"ରେ କ୍ଲିକ୍ କରନ୍ତୁ। <ph name="TIMEOUT_SECONDS" />ରେ ପୂର୍ବବର୍ତ୍ତୀ ସେଟିଂସ୍ ରିଷ୍ଟୋର୍ କରାଯିବ।</translation> +<translation id="1908992311423394684">ଏହାକୁ ନୂଆ ଇନଷ୍ଟଲ କରାଯାଇଛି</translation> <translation id="1915307458270490472">ସମାପ୍ତ କରନ୍ତୁ</translation> <translation id="1918022425394817322">କ୍ୟାମେରାକୁ ଉପର ଡାହାଣପାର୍ଶ୍ୱ କୋଣକୁ ସ୍ନାପ କରାଯାଇଛି</translation> <translation id="1919743966458266018">'ଟାସ୍କ୍ ମ୍ୟାନେଜର୍' ଖୋଲିବାକୁ ଥିବା ସର୍ଟ୍କଟ୍ଟି ବଦଳିଯାଇଛି। ଦୟାକରି <ph name="OLD_SHORTCUT" /> ପରିବର୍ତ୍ତେ <ph name="NEW_SHORTCUT" />ଟିକୁ ବ୍ୟବହାର କରନ୍ତୁ।</translation>
diff --git a/ash/strings/ash_strings_pa.xtb b/ash/strings/ash_strings_pa.xtb index 6099d1d..374c723 100644 --- a/ash/strings/ash_strings_pa.xtb +++ b/ash/strings/ash_strings_pa.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046"><ph name="DISPLAY_NAME" /> ਲਈ ਪ੍ਰਤਿਬਿੰਬੀਕਰਨ</translation> <translation id="1885785240814121742">ਫਿੰਗਰਪ੍ਰਿੰਟ ਨਾਲ ਅਣਲਾਕ ਕਰੋ</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz) ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ। ਰੈਜ਼ੋਲਿਊਸ਼ਨ ਨੂੰ <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />) 'ਤੇ ਬਦਲ ਦਿੱਤਾ ਗਿਆ ਸੀ। ਤਬਦੀਲੀਆਂ ਨੂੰ ਰੱਖਣ ਲਈ ਤਸਦੀਕ ਕਰੋ 'ਤੇ ਕਲਿੱਕ ਕਰੋ। ਪਿਛਲੀਆਂ ਸੈਟਿੰਗਾਂ ਨੂੰ <ph name="TIMEOUT_SECONDS" /> ਵਿੱਚ ਮੁੜ-ਬਹਾਲ ਕੀਤਾ ਜਾਵੇਗਾ।</translation> +<translation id="1908992311423394684">ਨਵੀਂ ਸਥਾਪਤ ਕੀਤੀ ਗਈ</translation> <translation id="1915307458270490472">ਸਮਾਪਤ ਕਰੋ</translation> <translation id="1918022425394817322">ਕੈਮਰੇ ਨੂੰ ਉੱਪਰਲੇ ਸੱਜੇ ਕੋਨੇ 'ਤੇ ਵਿਵਸਥਿਤ ਕੀਤਾ ਗਿਆ</translation> <translation id="1919743966458266018">ਕਾਰਜ ਪ੍ਰਬੰਧਕ ਖੋਲ੍ਹਣ ਲਈ ਸ਼ਾਰਟਕੱਟ ਬਦਲ ਗਿਆ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ <ph name="OLD_SHORTCUT" /> ਦੀ ਥਾਂ <ph name="NEW_SHORTCUT" /> ਦੀ ਵਰਤੋਂ ਕਰੋ।</translation>
diff --git a/ash/strings/ash_strings_pl.xtb b/ash/strings/ash_strings_pl.xtb index 92d8b55..1b25473 100644 --- a/ash/strings/ash_strings_pl.xtb +++ b/ash/strings/ash_strings_pl.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">Kopia na <ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">Odblokuj odciskiem palca</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> nie obsługuje ustawienia <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Rozdzielczość została zmieniona na <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Kliknij, by potwierdzić i zachować zmiany. Poprzednie ustawienia zostaną przywrócone za <ph name="TIMEOUT_SECONDS" />.</translation> +<translation id="1908992311423394684">Nowa instalacja</translation> <translation id="1915307458270490472">Rozłącz</translation> <translation id="1918022425394817322">Podgląd z kamery został przyciągnięty do prawego górnego rogu</translation> <translation id="1919743966458266018">Zmieniliśmy skrót, który otwiera menedżera zadań. Zamiast <ph name="OLD_SHORTCUT" /> używaj teraz <ph name="NEW_SHORTCUT" />.</translation>
diff --git a/ash/strings/ash_strings_pt-BR.xtb b/ash/strings/ash_strings_pt-BR.xtb index a751378..5ffcfea 100644 --- a/ash/strings/ash_strings_pt-BR.xtb +++ b/ash/strings/ash_strings_pt-BR.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">Espelhamento de <ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">Desbloqueio por impressão digital</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> não é compatível com <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). A resolução foi modificada para <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Clique em "Confirmar" para manter as mudanças. As configurações anteriores serão restauradas em <ph name="TIMEOUT_SECONDS" />.</translation> +<translation id="1908992311423394684">Nova instalação</translation> <translation id="1915307458270490472">Desligar</translation> <translation id="1918022425394817322">Câmera alinhada ao canto direito de cima</translation> <translation id="1919743966458266018">O atalho para abrir o gerenciador de tarefas foi alterado. Use <ph name="NEW_SHORTCUT" /> em vez de <ph name="OLD_SHORTCUT" />.</translation>
diff --git a/ash/strings/ash_strings_sk.xtb b/ash/strings/ash_strings_sk.xtb index 5a8d5d6..d5c3f90 100644 --- a/ash/strings/ash_strings_sk.xtb +++ b/ash/strings/ash_strings_sk.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">Zrkadlenie na displej <ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">Odomykajte odtlačkom prsta</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> nepodporuje rozlíšenie <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Rozlíšenie bolo zmenené na <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Zmeny ponecháte kliknutím na Potvrdiť. Predchádzajúce nastavenia budú obnovené o <ph name="TIMEOUT_SECONDS" />.</translation> +<translation id="1908992311423394684">Nová inštalácia</translation> <translation id="1915307458270490472">Zložiť</translation> <translation id="1918022425394817322">Kamera bola prichytená do pravého horného rohu</translation> <translation id="1919743966458266018">Skratka otvorenia správcu úloh bola zmenená. Namiesto skratky <ph name="OLD_SHORTCUT" /> používajte kombináciu klávesov <ph name="NEW_SHORTCUT" />.</translation>
diff --git a/ash/strings/ash_strings_sl.xtb b/ash/strings/ash_strings_sl.xtb index 4ec6d08..29802edb 100644 --- a/ash/strings/ash_strings_sl.xtb +++ b/ash/strings/ash_strings_sl.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">Zrcaljenje na <ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">Odklepanje s prstnim odtisom</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> ne podpira <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Ločljivost je bila spremenjena na <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Kliknite »Potrdi«, če želite ohraniti spremembe. Prejšnja nastavitev bo obnovljena čez <ph name="TIMEOUT_SECONDS" />.</translation> +<translation id="1908992311423394684">Nova namestitev</translation> <translation id="1915307458270490472">Prekini</translation> <translation id="1918022425394817322">Fotoaparat je pripet v zgornji desni kot</translation> <translation id="1919743966458266018">Bližnjica za odpiranje upravitelja opravil je spremenjena. Uporabite <ph name="NEW_SHORTCUT" /> namesto <ph name="OLD_SHORTCUT" />.</translation>
diff --git a/ash/strings/ash_strings_ta.xtb b/ash/strings/ash_strings_ta.xtb index 7584c0c..9b279ec 100644 --- a/ash/strings/ash_strings_ta.xtb +++ b/ash/strings/ash_strings_ta.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046"><ph name="DISPLAY_NAME" /> ஐப் பிரதிபலிக்கிறது</translation> <translation id="1885785240814121742">கைரேகை மூலம் அன்லாக் செய்யலாம்</translation> <translation id="1888656773939766144"><ph name="SPECIFIED_RESOLUTION" /> தெளிவுத்திறனை (<ph name="SPECIFIED_REFRESH_RATE" /> Hz) <ph name="DISPLAY_NAME" /> ஆதரிக்கவில்லை. தெளிவுத்திறன் <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />) என்பதற்கு மாற்றப்பட்டது. மாற்றங்களை வைத்திருக்க ‘உறுதிசெய்’ என்பதைக் கிளிக் செய்யவும். இன்னும் <ph name="TIMEOUT_SECONDS" /> இல் முந்தைய அமைப்புகள் மீட்டெடுக்கப்படும்.</translation> +<translation id="1908992311423394684">புதிதாக நிறுவப்பட்டது</translation> <translation id="1915307458270490472">மூடுக</translation> <translation id="1918022425394817322">கேமரா மாதிரிக்காட்சி மேல் வலது மூலையில் பொருத்தப்பட்டது</translation> <translation id="1919743966458266018">செயல் நிர்வாகியைத் திறப்பதற்கான ஷார்ட்கட் மாற்றப்பட்டது. <ph name="OLD_SHORTCUT" /> க்குப் பதிலாக <ph name="NEW_SHORTCUT" /> ஐப் பயன்படுத்தவும்.</translation>
diff --git a/ash/strings/ash_strings_te.xtb b/ash/strings/ash_strings_te.xtb index e813bd5..89112c9 100644 --- a/ash/strings/ash_strings_te.xtb +++ b/ash/strings/ash_strings_te.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046"><ph name="DISPLAY_NAME" />కు మిర్రరింగ్ చేస్తోంది</translation> <translation id="1885785240814121742">వేలిముద్రతో అన్లాక్ చేయండి</translation> <translation id="1888656773939766144"><ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz)ను <ph name="DISPLAY_NAME" /> సపోర్ట్ చేయదు. రిజల్యూషన్ <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />)కు మార్చబడింది. మార్పులను అలాగే ఉంచడానికి 'నిర్ధారించు'ను క్లిక్ చేయండి. మునుపటి సెట్టింగ్లు <ph name="TIMEOUT_SECONDS" />లో రీస్టోర్ చేయబడతాయి.</translation> +<translation id="1908992311423394684">కొత్తగా ఇన్స్టాల్ చేయబడింది</translation> <translation id="1915307458270490472">కాల్ను ముగించు</translation> <translation id="1918022425394817322">కెమెరా ఎగువ కుడి మూలకు స్నాప్ చేయబడింది</translation> <translation id="1919743966458266018">టాస్క్ మేనేజర్ను తెరిచే షార్ట్కట్ మార్చబడింది. దయచేసి <ph name="OLD_SHORTCUT" />కు బదులుగా <ph name="NEW_SHORTCUT" />ను ఉపయోగించండి.</translation>
diff --git a/ash/strings/ash_strings_ur.xtb b/ash/strings/ash_strings_ur.xtb index cc87fa41..ef31130 100644 --- a/ash/strings/ash_strings_ur.xtb +++ b/ash/strings/ash_strings_ur.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046"><ph name="DISPLAY_NAME" /> میں معکوس سازی</translation> <translation id="1885785240814121742">فنگر پرنٹ کی مدد سے غیر مقفل کریں</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> <ph name="SPECIFIED_RESOLUTION" />(Hz<ph name="SPECIFIED_REFRESH_RATE" />) کو سپورٹ نہیں کرتا ہے۔ ریزولیوشن کو تبدیل کر کے <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />) کر دیا گیا۔ تبدیلیاں باقی رکھنے کے لیے تصدیق کریں پر کلک کریں۔ گزشتہ ترتیبات کو <ph name="TIMEOUT_SECONDS" /> میں بحال کر دیا جائے گا۔</translation> +<translation id="1908992311423394684">نئی انسٹال کردہ ایپ</translation> <translation id="1915307458270490472">کال منقطع کریں</translation> <translation id="1918022425394817322">کیمرا اوپری دائیں کونے میں اسنیپ کیا گیا ہے</translation> <translation id="1919743966458266018">ٹاسک مینیجر کھولنے کے شارٹ کٹ کو تبدیل کر دیا گیا ہے۔ براہ کرم <ph name="OLD_SHORTCUT" /> کی بجائے <ph name="NEW_SHORTCUT" /> استعمال کریں۔</translation>
diff --git a/ash/strings/ash_strings_vi.xtb b/ash/strings/ash_strings_vi.xtb index 4ec84ee2..30e23a5 100644 --- a/ash/strings/ash_strings_vi.xtb +++ b/ash/strings/ash_strings_vi.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">Đang phản chiếu tới <ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">Mở khóa bằng vân tay</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> không hỗ trợ <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz). Độ phân giải đã được đổi thành <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />). Hãy nhấp vào xác nhận để lưu các thay đổi. Các tùy chọn cài đặt trước sẽ được khôi phục sau <ph name="TIMEOUT_SECONDS" /> nữa.</translation> +<translation id="1908992311423394684">Mới cài đặt</translation> <translation id="1915307458270490472">Kết thúc</translation> <translation id="1918022425394817322">Máy ảnh đang bám theo góc trên bên phải</translation> <translation id="1919743966458266018">Phím tắt để mở trình quản lý tác vụ đã thay đổi. Vui lòng sử dụng <ph name="NEW_SHORTCUT" /> thay vì <ph name="OLD_SHORTCUT" />.</translation>
diff --git a/ash/strings/ash_strings_zh-CN.xtb b/ash/strings/ash_strings_zh-CN.xtb index bd8b923b..30c50278 100644 --- a/ash/strings/ash_strings_zh-CN.xtb +++ b/ash/strings/ash_strings_zh-CN.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">正在镜像到<ph name="DISPLAY_NAME" /></translation> <translation id="1885785240814121742">使用指纹解锁</translation> <translation id="1888656773939766144">“<ph name="DISPLAY_NAME" />”不支持 <ph name="SPECIFIED_RESOLUTION" />(<ph name="SPECIFIED_REFRESH_RATE" /> 赫兹)。分辨率已改为 <ph name="FALLBACK_RESOLUTION" />(<ph name="FALLBACK_REFRESH_RATE" />)。点击“确认”即可保留更改。系统将在 <ph name="TIMEOUT_SECONDS" />后恢复以前的设置。</translation> +<translation id="1908992311423394684">新安装</translation> <translation id="1915307458270490472">中止</translation> <translation id="1918022425394817322">相机已对准右上角</translation> <translation id="1919743966458266018">用于打开任务管理器的快捷键已更改。请使用 <ph name="NEW_SHORTCUT" />,而不是 <ph name="OLD_SHORTCUT" />。</translation>
diff --git a/ash/strings/ash_strings_zh-HK.xtb b/ash/strings/ash_strings_zh-HK.xtb index b406ccc..9c094e6 100644 --- a/ash/strings/ash_strings_zh-HK.xtb +++ b/ash/strings/ash_strings_zh-HK.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">正在建立<ph name="DISPLAY_NAME" />鏡像</translation> <translation id="1885785240814121742">使用指紋解鎖</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> 不支援 <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz)。解像度已變更為 <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />)。請按一下 [確認] 以保留變更。系統會在 <ph name="TIMEOUT_SECONDS" />後還原先前的設定。</translation> +<translation id="1908992311423394684">最新安裝</translation> <translation id="1915307458270490472">結束通話</translation> <translation id="1918022425394817322">攝錄機已經對齊右上角</translation> <translation id="1919743966458266018">開啟工作管理員的快速鍵已變更,請改用 <ph name="NEW_SHORTCUT" /> 取代 <ph name="OLD_SHORTCUT" /> 。</translation>
diff --git a/ash/strings/ash_strings_zh-TW.xtb b/ash/strings/ash_strings_zh-TW.xtb index 86332a79..96b85e6 100644 --- a/ash/strings/ash_strings_zh-TW.xtb +++ b/ash/strings/ash_strings_zh-TW.xtb
@@ -165,6 +165,7 @@ <translation id="1882897271359938046">正在建立 <ph name="DISPLAY_NAME" /> 鏡像</translation> <translation id="1885785240814121742">使用指紋解鎖</translation> <translation id="1888656773939766144"><ph name="DISPLAY_NAME" /> 不支援 <ph name="SPECIFIED_RESOLUTION" /> (<ph name="SPECIFIED_REFRESH_RATE" /> Hz)。解析度已變更為 <ph name="FALLBACK_RESOLUTION" /> (<ph name="FALLBACK_REFRESH_RATE" />)。請按一下 [確認] 以保留變更。系統會在 <ph name="TIMEOUT_SECONDS" />後還原先前的設定。</translation> +<translation id="1908992311423394684">最新安裝</translation> <translation id="1915307458270490472">掛斷</translation> <translation id="1918022425394817322">攝影機已對齊右上角</translation> <translation id="1919743966458266018">開啟工作管理員的快速鍵已變更,請改用 <ph name="NEW_SHORTCUT" /> (停用 <ph name="OLD_SHORTCUT" />)。</translation>
diff --git a/ash/style/icon_button.cc b/ash/style/icon_button.cc index edef16cc25..151a8bda 100644 --- a/ash/style/icon_button.cc +++ b/ash/style/icon_button.cc
@@ -224,7 +224,6 @@ void IconButton::GetAccessibleNodeData(ui::AXNodeData* node_data) { views::ImageButton::GetAccessibleNodeData(node_data); - node_data->SetName(GetTooltipText(gfx::Point())); if (is_togglable_) { node_data->role = ax::mojom::Role::kToggleButton; node_data->SetCheckedState(toggled_ ? ax::mojom::CheckedState::kTrue
diff --git a/ash/webui/diagnostics_ui/backend/system_routine_controller.cc b/ash/webui/diagnostics_ui/backend/system_routine_controller.cc index 9eb767c..3112e47 100644 --- a/ash/webui/diagnostics_ui/backend/system_routine_controller.cc +++ b/ash/webui/diagnostics_ui/backend/system_routine_controller.cc
@@ -582,17 +582,15 @@ void SystemRoutineController::OnPowerRoutineJsonParsed( mojom::RoutineType routine_type, data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { + if (!result.has_value()) { OnPowerRoutineResult(routine_type, mojom::StandardRoutineResult::kExecutionError, /*percent_change=*/0, /*seconds_elapsed=*/0); - DVLOG(2) << "JSON parsing failed: " << *result.error; + DVLOG(2) << "JSON parsing failed: " << result.error(); return; } - const base::Value& parsed_json = *result.value; - - if (parsed_json.type() != base::Value::Type::DICTIONARY) { + if (!result->is_dict()) { OnPowerRoutineResult(routine_type, mojom::StandardRoutineResult::kExecutionError, /*percent_change=*/0, /*seconds_elapsed=*/0); @@ -600,8 +598,9 @@ return; } - const base::Value* result_details_dict = - parsed_json.FindDictKey(kResultDetailsKey); + const base::Value::Dict& parsed_json = result->GetDict(); + const base::Value::Dict* result_details_dict = + parsed_json.FindDict(kResultDetailsKey); if (!result_details_dict) { OnPowerRoutineResult(routine_type, mojom::StandardRoutineResult::kExecutionError, @@ -612,8 +611,8 @@ absl::optional<double> charge_percent_opt = routine_type == mojom::RoutineType::kBatteryCharge - ? result_details_dict->FindDoubleKey(kChargePercentKey) - : result_details_dict->FindDoubleKey(kDischargePercentKey); + ? result_details_dict->FindDouble(kChargePercentKey) + : result_details_dict->FindDouble(kDischargePercentKey); if (!charge_percent_opt.has_value()) { OnPowerRoutineResult(routine_type, mojom::StandardRoutineResult::kExecutionError,
diff --git a/ash/webui/multidevice_debug/proximity_auth_webui_handler.cc b/ash/webui/multidevice_debug/proximity_auth_webui_handler.cc index e8e4b019..f1fd9c5 100644 --- a/ash/webui/multidevice_debug/proximity_auth_webui_handler.cc +++ b/ash/webui/multidevice_debug/proximity_auth_webui_handler.cc
@@ -158,32 +158,32 @@ } void ProximityAuthWebUIHandler::RegisterMessages() { - web_ui()->RegisterDeprecatedMessageCallback( + web_ui()->RegisterMessageCallback( "onWebContentsInitialized", base::BindRepeating(&ProximityAuthWebUIHandler::OnWebContentsInitialized, base::Unretained(this))); - web_ui()->RegisterDeprecatedMessageCallback( + web_ui()->RegisterMessageCallback( "clearLogBuffer", base::BindRepeating(&ProximityAuthWebUIHandler::ClearLogBuffer, base::Unretained(this))); - web_ui()->RegisterDeprecatedMessageCallback( + web_ui()->RegisterMessageCallback( "getLogMessages", base::BindRepeating(&ProximityAuthWebUIHandler::GetLogMessages, base::Unretained(this))); - web_ui()->RegisterDeprecatedMessageCallback( + web_ui()->RegisterMessageCallback( "getLocalState", base::BindRepeating(&ProximityAuthWebUIHandler::GetLocalState, base::Unretained(this))); - web_ui()->RegisterDeprecatedMessageCallback( + web_ui()->RegisterMessageCallback( "forceEnrollment", base::BindRepeating(&ProximityAuthWebUIHandler::ForceEnrollment, base::Unretained(this))); - web_ui()->RegisterDeprecatedMessageCallback( + web_ui()->RegisterMessageCallback( "forceDeviceSync", base::BindRepeating(&ProximityAuthWebUIHandler::ForceDeviceSync, base::Unretained(this))); @@ -221,7 +221,7 @@ } void ProximityAuthWebUIHandler::OnWebContentsInitialized( - const base::ListValue* args) { + const base::Value::List& args) { if (!web_contents_initialized_) { device_sync_client_->AddObserver(this); multidevice::LogBuffer::GetInstance()->AddObserver(this); @@ -229,7 +229,7 @@ } } -void ProximityAuthWebUIHandler::GetLogMessages(const base::ListValue* args) { +void ProximityAuthWebUIHandler::GetLogMessages(const base::Value::List& args) { base::ListValue json_logs; for (const auto& log : *multidevice::LogBuffer::GetInstance()->logs()) { json_logs.Append( @@ -239,25 +239,25 @@ json_logs); } -void ProximityAuthWebUIHandler::ClearLogBuffer(const base::ListValue* args) { +void ProximityAuthWebUIHandler::ClearLogBuffer(const base::Value::List& args) { // The OnLogBufferCleared() observer function will be called after the buffer // is cleared. multidevice::LogBuffer::GetInstance()->Clear(); } -void ProximityAuthWebUIHandler::ForceEnrollment(const base::ListValue* args) { +void ProximityAuthWebUIHandler::ForceEnrollment(const base::Value::List& args) { device_sync_client_->ForceEnrollmentNow( base::BindOnce(&ProximityAuthWebUIHandler::OnForceEnrollmentNow, weak_ptr_factory_.GetWeakPtr())); } -void ProximityAuthWebUIHandler::ForceDeviceSync(const base::ListValue* args) { +void ProximityAuthWebUIHandler::ForceDeviceSync(const base::Value::List& args) { device_sync_client_->ForceSyncNow( base::BindOnce(&ProximityAuthWebUIHandler::OnForceSyncNow, weak_ptr_factory_.GetWeakPtr())); } -void ProximityAuthWebUIHandler::GetLocalState(const base::ListValue* args) { +void ProximityAuthWebUIHandler::GetLocalState(const base::Value::List& args) { // OnGetDebugInfo() will call NotifyGotLocalState() with the enrollment and // device sync state info. get_local_state_update_waiting_for_debug_info_ = true;
diff --git a/ash/webui/multidevice_debug/proximity_auth_webui_handler.h b/ash/webui/multidevice_debug/proximity_auth_webui_handler.h index 6cf2c71..c37c024a 100644 --- a/ash/webui/multidevice_debug/proximity_auth_webui_handler.h +++ b/ash/webui/multidevice_debug/proximity_auth_webui_handler.h
@@ -46,12 +46,12 @@ void OnNewDevicesSynced() override; // Message handler callbacks. - void OnWebContentsInitialized(const base::ListValue* args); - void GetLogMessages(const base::ListValue* args); - void ClearLogBuffer(const base::ListValue* args); - void GetLocalState(const base::ListValue* args); - void ForceEnrollment(const base::ListValue* args); - void ForceDeviceSync(const base::ListValue* args); + void OnWebContentsInitialized(const base::Value::List& args); + void GetLogMessages(const base::Value::List& args); + void ClearLogBuffer(const base::Value::List& args); + void GetLocalState(const base::Value::List& args); + void ForceEnrollment(const base::Value::List& args); + void ForceDeviceSync(const base::Value::List& args); base::Value::Dict RemoteDeviceToDictionary( const multidevice::RemoteDeviceRef& remote_device);
diff --git a/ash/webui/os_feedback_ui/backend/help_content_provider.cc b/ash/webui/os_feedback_ui/backend/help_content_provider.cc index 7fd6e39..7b912ca 100644 --- a/ash/webui/os_feedback_ui/backend/help_content_provider.cc +++ b/ash/webui/os_feedback_ui/backend/help_content_provider.cc
@@ -279,12 +279,12 @@ data_decoder::DataDecoder::ValueOrError result) { SearchResponsePtr response = SearchResponse::New(); - if (result.value) { - PopulateSearchResponse(*result.value, response); + if (result.has_value()) { + PopulateSearchResponse(*result, response); } else { LOG(ERROR) << "HelpContentProvider data decoder failed to parse json. Error: " - << *result.error; + << result.error(); } std::move(callback).Run(std::move(response));
diff --git a/ash/webui/personalization_app/search/BUILD.gn b/ash/webui/personalization_app/search/BUILD.gn index 82a3c47..7a939c4 100644 --- a/ash/webui/personalization_app/search/BUILD.gn +++ b/ash/webui/personalization_app/search/BUILD.gn
@@ -10,5 +10,5 @@ mojom("mojo_bindings") { sources = [ "search.mojom" ] public_deps = [ "//mojo/public/mojom/base" ] - webui_module_path = "/" + webui_module_path = "/personalization" }
diff --git a/base/allocator/allocator_interception_mac.mm b/base/allocator/allocator_interception_mac.mm index dcac0c2..5c48f7819 100644 --- a/base/allocator/allocator_interception_mac.mm +++ b/base/allocator/allocator_interception_mac.mm
@@ -257,7 +257,7 @@ void* info) { void* result = g_old_cfallocator_system_default(alloc_size, hint, info); if (!result) - TerminateBecauseOutOfMemory(alloc_size); + TerminateBecauseOutOfMemory(static_cast<size_t>(alloc_size)); return result; } @@ -266,7 +266,7 @@ void* info) { void* result = g_old_cfallocator_malloc(alloc_size, hint, info); if (!result) - TerminateBecauseOutOfMemory(alloc_size); + TerminateBecauseOutOfMemory(static_cast<size_t>(alloc_size)); return result; } @@ -275,7 +275,7 @@ void* info) { void* result = g_old_cfallocator_malloc_zone(alloc_size, hint, info); if (!result) - TerminateBecauseOutOfMemory(alloc_size); + TerminateBecauseOutOfMemory(static_cast<size_t>(alloc_size)); return result; }
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 da7dc93..65402ef1 100644 --- a/base/allocator/allocator_shim_default_dispatch_to_partition_alloc.cc +++ b/base/allocator/allocator_shim_default_dispatch_to_partition_alloc.cc
@@ -276,9 +276,9 @@ namespace { #if BUILDFLAG(IS_APPLE) -int g_alloc_flags = 0; +unsigned int g_alloc_flags = 0; #else -constexpr int g_alloc_flags = 0; +constexpr unsigned int g_alloc_flags = 0; #endif } // namespace @@ -301,7 +301,7 @@ void* PartitionMalloc(const AllocatorDispatch*, size_t size, void* context) { ScopedDisallowAllocations guard{}; return Allocator()->AllocWithFlagsNoHooks( - 0 | g_alloc_flags, MaybeAdjustSize(size), + g_alloc_flags, MaybeAdjustSize(size), partition_alloc::PartitionPageSize()); }
diff --git a/base/allocator/allocator_shim_override_linker_wrapped_symbols.h b/base/allocator/allocator_shim_override_linker_wrapped_symbols.h index 04103f9..9ecf0e2 100644 --- a/base/allocator/allocator_shim_override_linker_wrapped_symbols.h +++ b/base/allocator/allocator_shim_override_linker_wrapped_symbols.h
@@ -122,7 +122,10 @@ malloc(kInitialSize)); // Our malloc() doesn't return nullptr. int actual_size = vsnprintf(*strp, kInitialSize, fmt, va_args); - *strp = static_cast<char*>(realloc(*strp, actual_size + 1)); + if (actual_size < 0) + return actual_size; + *strp = + static_cast<char*>(realloc(*strp, static_cast<size_t>(actual_size + 1))); // Now we know the size. This is not very efficient, but we cannot really do // better without accessing internal libc functions, or reimplementing @@ -131,7 +134,7 @@ // This is very lightly used in Chromium in practice, see crbug.com/116558 for // details. if (actual_size >= kInitialSize) - return vsnprintf(*strp, actual_size + 1, fmt, va_args); + return vsnprintf(*strp, static_cast<size_t>(actual_size + 1), fmt, va_args); return actual_size; }
diff --git a/base/allocator/partition_allocator/page_allocator_constants.h b/base/allocator/partition_allocator/page_allocator_constants.h index 5ed440c..7de7a4c 100644 --- a/base/allocator/partition_allocator/page_allocator_constants.h +++ b/base/allocator/partition_allocator/page_allocator_constants.h
@@ -78,7 +78,7 @@ #elif defined(_MIPS_ARCH_LOONGSON) return 14; // 16kB #elif BUILDFLAG(IS_APPLE) && defined(ARCH_CPU_64_BITS) - return vm_page_shift; + return static_cast<size_t>(vm_page_shift); #elif BUILDFLAG(IS_LINUX) && defined(ARCH_CPU_ARM64) // arm64 supports 4kb (shift = 12), 16kb (shift = 14), and 64kb (shift = 16) // page sizes. Retrieve from or initialize cache.
diff --git a/base/allocator/partition_allocator/partition_alloc_check.h b/base/allocator/partition_allocator/partition_alloc_check.h index 7042c619..80e06ee 100644 --- a/base/allocator/partition_allocator/partition_alloc_check.h +++ b/base/allocator/partition_allocator/partition_alloc_check.h
@@ -107,7 +107,7 @@ #endif -// alignas(16) DebugKv causes breakpad_unittests and sandbox_unittests +// alignas(16) DebugKv causes breakpad_unittests and sandbox_linux_unittests // failures on android-marshmallow-x86-rel because of SIGSEGV. #if BUILDFLAG(IS_ANDROID) && defined(ARCH_CPU_X86_FAMILY) && \ defined(ARCH_CPU_32_BITS)
diff --git a/base/allocator/partition_allocator/partition_alloc_constants.h b/base/allocator/partition_allocator/partition_alloc_constants.h index f87c9a2b..f3b7339 100644 --- a/base/allocator/partition_allocator/partition_alloc_constants.h +++ b/base/allocator/partition_allocator/partition_alloc_constants.h
@@ -27,35 +27,30 @@ // Bit flag constants used as `flag` argument of PartitionRoot::AllocWithFlags, // AlignedAllocWithFlags, etc. struct AllocFlags { - // In order to support bit operations like `flag_a | flag_b`, the old- - // fashioned enum (+ surrounding named struct) is used instead of enum class. - enum : unsigned int { - kReturnNull = 1 << 0, - kZeroFill = 1 << 1, - // Don't allow allocation override hooks. Override hooks are expected to - // check for the presence of this flag and return false if it is active. - kNoOverrideHooks = 1 << 2, - // Never let a memory tool like ASan (if active) perform the allocation. - kNoMemoryToolOverride = 1 << 3, - // Don't allow any hooks (override or observers). - kNoHooks = 1 << 4, // Internal only. - // If the allocation requires a "slow path" (such as allocating/committing a - // new slot span), return nullptr instead. Note this makes all large - // allocations return nullptr, such as direct-mapped ones, and even for - // smaller ones, a nullptr value is common. - kFastPathOrReturnNull = 1 << 5, // Internal only. + static constexpr unsigned int kReturnNull = 1 << 0; + static constexpr unsigned int kZeroFill = 1 << 1; + // Don't allow allocation override hooks. Override hooks are expected to + // check for the presence of this flag and return false if it is active. + static constexpr unsigned int kNoOverrideHooks = 1 << 2; + // Never let a memory tool like ASan (if active) perform the allocation. + static constexpr unsigned int kNoMemoryToolOverride = 1 << 3; + // Don't allow any hooks (override or observers). + static constexpr unsigned int kNoHooks = 1 << 4; // Internal. + // If the allocation requires a "slow path" (such as allocating/committing a + // new slot span), return nullptr instead. Note this makes all large + // allocations return nullptr, such as direct-mapped ones, and even for + // smaller ones, a nullptr value is common. + static constexpr unsigned int kFastPathOrReturnNull = 1 << 5; // Internal. - kLastFlag = kFastPathOrReturnNull - }; + static constexpr unsigned int kLastFlag = kFastPathOrReturnNull; }; // Bit flag constants used as `flag` argument of PartitionRoot::FreeWithFlags. struct FreeFlags { - enum : unsigned int { - kNoMemoryToolOverride = 1 << 0, // See AllocFlags::kNoMemoryToolOverride. + // See AllocFlags::kNoMemoryToolOverride. + static constexpr unsigned int kNoMemoryToolOverride = 1 << 0; - kLastFlag = kNoMemoryToolOverride - }; + static constexpr unsigned int kLastFlag = kNoMemoryToolOverride; }; namespace internal {
diff --git a/base/allocator/partition_allocator/partition_tls.h b/base/allocator/partition_allocator/partition_tls.h index f086ca6..da7f0e7 100644 --- a/base/allocator/partition_allocator/partition_tls.h +++ b/base/allocator/partition_allocator/partition_tls.h
@@ -34,7 +34,7 @@ #if BUILDFLAG(IS_MAC) && defined(ARCH_CPU_X86_64) namespace { -PA_ALWAYS_INLINE void* FastTlsGet(intptr_t index) { +PA_ALWAYS_INLINE void* FastTlsGet(PartitionTlsKey index) { // On macOS, pthread_getspecific() is in libSystem, so a call to it has to go // through PLT. However, and contrary to some other platforms, *all* TLS keys // are in a static array in the thread structure. So they are *always* at a @@ -53,7 +53,10 @@ // This function is essentially inlining the content of pthread_getspecific() // here. intptr_t result; - asm("movq %%gs:(,%1,8), %0;" : "=r"(result) : "r"(index)); + static_assert(sizeof index <= sizeof(intptr_t)); + asm("movq %%gs:(,%1,8), %0;" + : "=r"(result) + : "r"(static_cast<intptr_t>(index))); return reinterpret_cast<void*>(result); }
diff --git a/base/bind_unittest.nc b/base/bind_unittest.nc index ee2561d..b8c96b4 100644 --- a/base/bind_unittest.nc +++ b/base/bind_unittest.nc
@@ -93,7 +93,7 @@ method_to_const_cb.Run(); } -#elif defined(NCTEST_METHOD_BIND_NEEDS_REFCOUNTED_OBJECT) // [r"fatal error: static_assert failed due to requirement '!IsPointerV<base::NoRef \*> \|\| IsRefCountedType<base::NoRef, void>::value':? \"?Receivers may not be raw pointers. If using a raw pointer here is safe and has no lifetime concerns, use base::Unretained\(\) and document why it's safe.\"?"] +#elif defined(NCTEST_METHOD_BIND_NEEDS_REFCOUNTED_OBJECT) // [r"fatal error: static_assert failed due to requirement '!IsPointerV<base::NoRef \*> \|\| IsRefCountedType<base::NoRef, void>::value': Receivers may not be raw pointers. If using a raw pointer here is safe and has no lifetime concerns, use base::Unretained\(\) and document why it's safe."] // Method bound to non-refcounted object. @@ -106,7 +106,7 @@ no_ref_cb.Run(); } -#elif defined(NCTEST_CONST_METHOD_BIND_NEEDS_REFCOUNTED_OBJECT) // [r"fatal error: static_assert failed due to requirement '!IsPointerV<base::NoRef \*> \|\| IsRefCountedType<base::NoRef, void>::value':? \"?Receivers may not be raw pointers. If using a raw pointer here is safe and has no lifetime concerns, use base::Unretained\(\) and document why it's safe.\"?"] +#elif defined(NCTEST_CONST_METHOD_BIND_NEEDS_REFCOUNTED_OBJECT) // [r"fatal error: static_assert failed due to requirement '!IsPointerV<base::NoRef \*> \|\| IsRefCountedType<base::NoRef, void>::value': Receivers may not be raw pointers. If using a raw pointer here is safe and has no lifetime concerns, use base::Unretained\(\) and document why it's safe."] // Const Method bound to non-refcounted object. // @@ -118,7 +118,7 @@ no_ref_const_cb.Run(); } -#elif defined(NCTEST_METHOD_BIND_RAW_PTR_RECEIVER_NEEDS_REFCOUNTED_OBJECT) // [r"fatal error: static_assert failed due to requirement '!IsPointerV<base::raw_ptr<base::NoRef, [^>]+>?>> \|\| IsRefCountedType<base::NoRef, void>::value':? \"?Receivers may not be raw pointers. If using a raw pointer here is safe and has no lifetime concerns, use base::Unretained\(\) and document why it's safe.\"?"] +#elif defined(NCTEST_METHOD_BIND_RAW_PTR_RECEIVER_NEEDS_REFCOUNTED_OBJECT) // [r"fatal error: static_assert failed due to requirement '!IsPointerV<base::raw_ptr<base::NoRef, [^>]+>?>> \|\| IsRefCountedType<base::NoRef, void>::value': Receivers may not be raw pointers. If using a raw pointer here is safe and has no lifetime concerns, use base::Unretained\(\) and document why it's safe."] // Method bound to non-refcounted object. @@ -132,7 +132,7 @@ no_ref_cb.Run(); } -#elif defined(NCTEST_CONST_METHOD_BIND_RAW_PTR_RECEIVER_NEEDS_REFCOUNTED_OBJECT) // [r"fatal error: static_assert failed due to requirement '!IsPointerV<base::raw_ptr<base::NoRef, [^>]+>?>> \|\| IsRefCountedType<base::NoRef, void>::value':? \"?Receivers may not be raw pointers. If using a raw pointer here is safe and has no lifetime concerns, use base::Unretained\(\) and document why it's safe.\"?"] +#elif defined(NCTEST_CONST_METHOD_BIND_RAW_PTR_RECEIVER_NEEDS_REFCOUNTED_OBJECT) // [r"fatal error: static_assert failed due to requirement '!IsPointerV<base::raw_ptr<base::NoRef, [^>]+>?>> \|\| IsRefCountedType<base::NoRef, void>::value': Receivers may not be raw pointers. If using a raw pointer here is safe and has no lifetime concerns, use base::Unretained\(\) and document why it's safe."] // Const Method bound to non-refcounted object. // @@ -185,7 +185,7 @@ ref_arg_cb.Run(p); } -#elif defined(NCTEST_BIND_ONCE_WITH_NON_CONST_REF_PARAM) // [r"static_assert failed due to requirement 'BindArgument<0>::ForwardedAs<.+?>::ToParamWithType<.+?>::kNonConstRefParamMustBeWrapped':? \"?Bound argument for non-const reference parameter must be wrapped in std::ref\(\) or base::OwnedRef\(\).\"?"] +#elif defined(NCTEST_BIND_ONCE_WITH_NON_CONST_REF_PARAM) // [r"static_assert failed due to requirement 'BindArgument<0>::ForwardedAs<.+?>::ToParamWithType<.+?>::kNonConstRefParamMustBeWrapped': Bound argument for non-const reference parameter must be wrapped in std::ref\(\) or base::OwnedRef\(\)."] // Binding functions with reference parameters requires `std::ref()` or // 'base::OwnedRef()`. @@ -194,7 +194,7 @@ auto cb = BindOnce(&TakesIntRef, v); } -#elif defined(NCTEST_BIND_REPEATING_WITH_NON_CONST_REF_PARAM) // [r"static_assert failed due to requirement 'BindArgument<0>::ForwardedAs<.+?>::ToParamWithType<.+?>::kNonConstRefParamMustBeWrapped':? \"?Bound argument for non-const reference parameter must be wrapped in std::ref\(\) or base::OwnedRef\(\).\"?"] +#elif defined(NCTEST_BIND_REPEATING_WITH_NON_CONST_REF_PARAM) // [r"static_assert failed due to requirement 'BindArgument<0>::ForwardedAs<.+?>::ToParamWithType<.+?>::kNonConstRefParamMustBeWrapped': Bound argument for non-const reference parameter must be wrapped in std::ref\(\) or base::OwnedRef\(\)."] // Binding functions with reference parameters requires `std::ref()` or // 'base::OwnedRef()`. @@ -203,7 +203,7 @@ auto cb = BindRepeating(&TakesIntRef, v); } -#elif defined(NCTEST_NON_CONST_REF_PARAM_WRONG_TYPE) // [r"static_assert failed due to requirement 'BindArgument<0>::ForwardedAs<.+?>::ToParamWithType<.+?>::kCanBeForwardedToBoundFunctor':? \"?Type mismatch between bound argument and bound functor's parameter.\"?"] +#elif defined(NCTEST_NON_CONST_REF_PARAM_WRONG_TYPE) // [r"static_assert failed due to requirement 'BindArgument<0>::ForwardedAs<.+?>::ToParamWithType<.+?>::kCanBeForwardedToBoundFunctor': Type mismatch between bound argument and bound functor's parameter."] // If the argument and parameter types mismatch then the compile error should be // the generic type mismatch error. @@ -212,7 +212,7 @@ auto cb = BindOnce(&TakesIntRef, f); } -#elif defined(NCTEST_NON_CONST_REF_PARAM_WRONG_TYPE_AND_WRAPPED) // [r"static_assert failed due to requirement 'BindArgument<0>::ForwardedAs<.+?>::ToParamWithType<.+?>::kCanBeForwardedToBoundFunctor':? \"?Type mismatch between bound argument and bound functor's parameter.\"?"] +#elif defined(NCTEST_NON_CONST_REF_PARAM_WRONG_TYPE_AND_WRAPPED) // [r"static_assert failed due to requirement 'BindArgument<0>::ForwardedAs<.+?>::ToParamWithType<.+?>::kCanBeForwardedToBoundFunctor': Type mismatch between bound argument and bound functor's parameter."] // If the argument and parameter types mismatch then the compile error should be // the generic type mismatch error even if the argument is wrapped in @@ -222,7 +222,7 @@ auto cb = BindOnce(&TakesIntRef, base::OwnedRef(f)); } -#elif defined(NCTEST_NO_IMPLICIT_ARRAY_PTR_CONVERSION) // [r"fatal error: static_assert failed due to requirement '!std::is_array_v<base::HasRef\[10\]>':? \"?First bound argument to a method cannot be an array.\"?"] +#elif defined(NCTEST_NO_IMPLICIT_ARRAY_PTR_CONVERSION) // [r"fatal error: static_assert failed due to requirement '!std::is_array_v<base::HasRef\[10\]>': First bound argument to a method cannot be an array."] // A method should not be bindable with an array of objects. // @@ -236,7 +236,7 @@ method_bound_to_array_cb.Run(); } -#elif defined(NCTEST_NO_RVALUE_RAW_PTR_FOR_REFCOUNTED_TYPES) // [r"fatal error: static_assert failed due to requirement '!HasRefCountedTypeAsRawPtr<base::HasRef \*>::value':? \"?A parameter is a refcounted type and needs scoped_refptr.\"?"] +#elif defined(NCTEST_NO_RVALUE_RAW_PTR_FOR_REFCOUNTED_TYPES) // [r"fatal error: static_assert failed due to requirement '!HasRefCountedTypeAsRawPtr<base::HasRef \*>::value': A parameter is a refcounted type and needs scoped_refptr."] // Refcounted types should not be bound as a raw pointer. void WontCompile() { @@ -248,7 +248,7 @@ BindRepeating(&VoidPolymorphic1<HasRef*>, &for_raw_ptr); } -#elif defined(NCTEST_NO_LVALUE_RAW_PTR_FOR_REFCOUNTED_TYPES) // [r"fatal error: static_assert failed due to requirement '!HasRefCountedTypeAsRawPtr<base::HasRef \*>::value':? \"?A parameter is a refcounted type and needs scoped_refptr.\"?"] +#elif defined(NCTEST_NO_LVALUE_RAW_PTR_FOR_REFCOUNTED_TYPES) // [r"fatal error: static_assert failed due to requirement '!HasRefCountedTypeAsRawPtr<base::HasRef \*>::value': A parameter is a refcounted type and needs scoped_refptr."] // Refcounted types should not be bound as a raw pointer. void WontCompile() { @@ -257,7 +257,7 @@ BindRepeating(&VoidPolymorphic1<HasRef*>, for_raw_ptr); } -#elif defined(NCTEST_NO_RVALUE_CONST_RAW_PTR_FOR_REFCOUNTED_TYPES) // [r"fatal error: static_assert failed due to requirement '!HasRefCountedTypeAsRawPtr<const base::HasRef \*>::value':? \"?A parameter is a refcounted type and needs scoped_refptr.\"?"] +#elif defined(NCTEST_NO_RVALUE_CONST_RAW_PTR_FOR_REFCOUNTED_TYPES) // [r"fatal error: static_assert failed due to requirement '!HasRefCountedTypeAsRawPtr<const base::HasRef \*>::value': A parameter is a refcounted type and needs scoped_refptr."] // Refcounted types should not be bound as a raw pointer. void WontCompile() { @@ -266,7 +266,7 @@ BindRepeating(&VoidPolymorphic1<const HasRef*>, &for_raw_ptr); } -#elif defined(NCTEST_NO_LVALUE_CONST_RAW_PTR_FOR_REFCOUNTED_TYPES) // [r"fatal error: static_assert failed due to requirement '!HasRefCountedTypeAsRawPtr<const base::HasRef \*>::value':? \"?A parameter is a refcounted type and needs scoped_refptr.\"?"] +#elif defined(NCTEST_NO_LVALUE_CONST_RAW_PTR_FOR_REFCOUNTED_TYPES) // [r"fatal error: static_assert failed due to requirement '!HasRefCountedTypeAsRawPtr<const base::HasRef \*>::value': A parameter is a refcounted type and needs scoped_refptr."] // Refcounted types should not be bound as a raw pointer. void WontCompile() { @@ -275,7 +275,7 @@ BindRepeating(&VoidPolymorphic1<const HasRef*>, for_raw_ptr); } -#elif defined(NCTEST_WEAKPTR_BIND_MUST_RETURN_VOID) // [r"fatal error: static_assert failed due to requirement 'std::is_void_v<int>':? \"?weak_ptrs can only bind to methods without return values\"?"] +#elif defined(NCTEST_WEAKPTR_BIND_MUST_RETURN_VOID) // [r"fatal error: static_assert failed due to requirement 'std::is_void_v<int>': weak_ptrs can only bind to methods without return values"] // WeakPtrs cannot be bound to methods with return types. void WontCompile() { @@ -301,40 +301,40 @@ BindOnce([i,&j]() {j = i;}); } -#elif defined(NCTEST_DISALLOW_ONCECALLBACK_RUN_ON_LVALUE) // [r"fatal error: static_assert failed due to requirement '!sizeof \(\*this\)':? \"?OnceCallback::Run\(\) may only be invoked on a non-const rvalue, i\.e\. std::move\(callback\).Run\(\).\"?"] +#elif defined(NCTEST_DISALLOW_ONCECALLBACK_RUN_ON_LVALUE) // [r"fatal error: static_assert failed due to requirement '!sizeof \(\*this\)': OnceCallback::Run\(\) may only be invoked on a non-const rvalue, i\.e\. std::move\(callback\).Run\(\)."] void WontCompile() { OnceClosure cb = BindOnce([] {}); cb.Run(); } -#elif defined(NCTEST_DISALLOW_ONCECALLBACK_RUN_ON_CONST_LVALUE) // [r"fatal error: static_assert failed due to requirement '!sizeof \(\*this\)':? \"?OnceCallback::Run\(\) may only be invoked on a non-const rvalue, i\.e\. std::move\(callback\).Run\(\).\"?"] +#elif defined(NCTEST_DISALLOW_ONCECALLBACK_RUN_ON_CONST_LVALUE) // [r"fatal error: static_assert failed due to requirement '!sizeof \(\*this\)': OnceCallback::Run\(\) may only be invoked on a non-const rvalue, i\.e\. std::move\(callback\).Run\(\)."] void WontCompile() { const OnceClosure cb = BindOnce([] {}); cb.Run(); } -#elif defined(NCTEST_DISALLOW_ONCECALLBACK_RUN_ON_CONST_RVALUE) // [r"fatal error: static_assert failed due to requirement '!sizeof \(\*this\)':? \"?OnceCallback::Run\(\) may only be invoked on a non-const rvalue, i\.e\. std::move\(callback\).Run\(\).\"?"] +#elif defined(NCTEST_DISALLOW_ONCECALLBACK_RUN_ON_CONST_RVALUE) // [r"fatal error: static_assert failed due to requirement '!sizeof \(\*this\)': OnceCallback::Run\(\) may only be invoked on a non-const rvalue, i\.e\. std::move\(callback\).Run\(\)."] void WontCompile() { const OnceClosure cb = BindOnce([] {}); std::move(cb).Run(); } -#elif defined(NCTEST_DISALLOW_BIND_ONCECALLBACK) // [r"fatal error: static_assert failed due to requirement '!base::internal::IsOnceCallback<base::OnceCallback<void \(int\)> ?>\(\)':? \"?BindRepeating cannot bind OnceCallback. Use BindOnce with std::move\(\).\"?"] +#elif defined(NCTEST_DISALLOW_BIND_ONCECALLBACK) // [r"fatal error: static_assert failed due to requirement '!base::internal::IsOnceCallback<base::OnceCallback<void \(int\)> ?>\(\)': BindRepeating cannot bind OnceCallback. Use BindOnce with std::move\(\)."] void WontCompile() { BindRepeating(BindOnce([](int) {}), 42); } -#elif defined(NCTEST_DISALLOW_BINDONCE_LVALUE_ONCECALLBACK) // [r"fatal error: static_assert failed due to requirement '!internal::IsOnceCallback<std::decay_t<OnceCallback<void (int)> &> >() || (std::is_rvalue_reference<OnceCallback<void (int)> &>() && !std::is_const<std::remove_reference_t<OnceCallback<void (int)> &> >())':? \"?BindOnce requires non-const rvalue for OnceCallback binding. I.e.: base::BindOnce(std::move(callback)).\"?"] +#elif defined(NCTEST_DISALLOW_BINDONCE_LVALUE_ONCECALLBACK) // [r"fatal error: static_assert failed due to requirement '!internal::IsOnceCallback<std::decay_t<OnceCallback<void (int)> &> >() || (std::is_rvalue_reference<OnceCallback<void (int)> &>() && !std::is_const<std::remove_reference_t<OnceCallback<void (int)> &> >())': BindOnce requires non-const rvalue for OnceCallback binding. I.e.: base::BindOnce(std::move(callback))."] void WontCompile() { auto cb = BindOnce([](int) {}); BindOnce(cb, 42); } -#elif defined(NCTEST_DISALLOW_BINDONCE_RVALUE_CONST_ONCECALLBACK) // [r"fatal error: static_assert failed due to requirement '!internal::IsOnceCallback<std::decay_t<const OnceCallback<void (int)> > >() || (std::is_rvalue_reference<const OnceCallback<void (int)> &&>() && !std::is_const<std::remove_reference_t<const OnceCallback<void (int)> > >())':? \"?BindOnce requires non-const rvalue for OnceCallback binding. I.e.: base::BindOnce(std::move(callback)).\"?"] +#elif defined(NCTEST_DISALLOW_BINDONCE_RVALUE_CONST_ONCECALLBACK) // [r"fatal error: static_assert failed due to requirement '!internal::IsOnceCallback<std::decay_t<const OnceCallback<void (int)> > >() || (std::is_rvalue_reference<const OnceCallback<void (int)> &&>() && !std::is_const<std::remove_reference_t<const OnceCallback<void (int)> > >())': BindOnce requires non-const rvalue for OnceCallback binding. I.e.: base::BindOnce(std::move(callback))."] void WontCompile() { const auto cb = BindOnce([](int) {});
diff --git a/base/bits.h b/base/bits.h index e4622a5..512ea7b 100644 --- a/base/bits.h +++ b/base/bits.h
@@ -35,7 +35,8 @@ } // Round down |size| to a multiple of alignment, which must be a power of two. -inline constexpr size_t AlignDown(size_t size, size_t alignment) { +template <typename T, typename = std::enable_if_t<std::is_integral_v<T>>> +constexpr T AlignDown(T size, T alignment) { DCHECK(IsPowerOfTwo(alignment)); return size & ~(alignment - 1); } @@ -43,13 +44,14 @@ // Move |ptr| back to the previous multiple of alignment, which must be a power // of two. Defined for types where sizeof(T) is one byte. template <typename T, typename = typename std::enable_if<sizeof(T) == 1>::type> -inline T* AlignDown(T* ptr, size_t alignment) { +inline T* AlignDown(T* ptr, uintptr_t alignment) { return reinterpret_cast<T*>( - AlignDown(reinterpret_cast<size_t>(ptr), alignment)); + AlignDown(reinterpret_cast<uintptr_t>(ptr), alignment)); } // Round up |size| to a multiple of alignment, which must be a power of two. -inline constexpr size_t AlignUp(size_t size, size_t alignment) { +template <typename T, typename = std::enable_if_t<std::is_integral_v<T>>> +constexpr T AlignUp(T size, T alignment) { DCHECK(IsPowerOfTwo(alignment)); return (size + alignment - 1) & ~(alignment - 1); } @@ -57,9 +59,9 @@ // Advance |ptr| to the next multiple of alignment, which must be a power of // two. Defined for types where sizeof(T) is one byte. template <typename T, typename = typename std::enable_if<sizeof(T) == 1>::type> -inline T* AlignUp(T* ptr, size_t alignment) { +inline T* AlignUp(T* ptr, uintptr_t alignment) { return reinterpret_cast<T*>( - AlignUp(reinterpret_cast<size_t>(ptr), alignment)); + AlignUp(reinterpret_cast<uintptr_t>(ptr), alignment)); } // CountLeadingZeroBits(value) returns the number of zero bits following the
diff --git a/base/bits_unittest.cc b/base/bits_unittest.cc index 854ee26..7b96b80 100644 --- a/base/bits_unittest.cc +++ b/base/bits_unittest.cc
@@ -52,14 +52,14 @@ TEST(BitsTest, AlignUp) { static constexpr size_t kSizeTMax = std::numeric_limits<size_t>::max(); - EXPECT_EQ(0ul, AlignUp(0, 4)); - EXPECT_EQ(4ul, AlignUp(1, 4)); - EXPECT_EQ(4096ul, AlignUp(1, 4096)); - EXPECT_EQ(4096ul, AlignUp(4096, 4096)); - EXPECT_EQ(4096ul, AlignUp(4095, 4096)); - EXPECT_EQ(8192ul, AlignUp(4097, 4096)); - EXPECT_EQ(kSizeTMax - 31, AlignUp(kSizeTMax - 62, 32)); - EXPECT_EQ(kSizeTMax / 2 + 1, AlignUp(1, kSizeTMax / 2 + 1)); + EXPECT_EQ(0, AlignUp(0, 4)); + EXPECT_EQ(4, AlignUp(1, 4)); + EXPECT_EQ(4096, AlignUp(1, 4096)); + EXPECT_EQ(4096, AlignUp(4096, 4096)); + EXPECT_EQ(4096, AlignUp(4095, 4096)); + EXPECT_EQ(8192, AlignUp(4097, 4096)); + EXPECT_EQ(kSizeTMax - 31, AlignUp(kSizeTMax - 62, size_t{32})); + EXPECT_EQ(kSizeTMax / 2 + 1, AlignUp(size_t{1}, kSizeTMax / 2 + 1)); } TEST(BitsTest, AlignUpPointer) { @@ -85,15 +85,15 @@ TEST(BitsTest, AlignDown) { static constexpr size_t kSizeTMax = std::numeric_limits<size_t>::max(); - EXPECT_EQ(0ul, AlignDown(0, 4)); - EXPECT_EQ(0ul, AlignDown(1, 4)); - EXPECT_EQ(0ul, AlignDown(1, 4096)); - EXPECT_EQ(4096ul, AlignDown(4096, 4096)); - EXPECT_EQ(0ul, AlignDown(4095, 4096)); - EXPECT_EQ(4096ul, AlignDown(4097, 4096)); - EXPECT_EQ(kSizeTMax - 63, AlignDown(kSizeTMax - 62, 32)); - EXPECT_EQ(kSizeTMax - 31, AlignDown(kSizeTMax, 32)); - EXPECT_EQ(0ul, AlignDown(1, kSizeTMax / 2 + 1)); + EXPECT_EQ(0, AlignDown(0, 4)); + EXPECT_EQ(0, AlignDown(1, 4)); + EXPECT_EQ(0, AlignDown(1, 4096)); + EXPECT_EQ(4096, AlignDown(4096, 4096)); + EXPECT_EQ(0, AlignDown(4095, 4096)); + EXPECT_EQ(4096, AlignDown(4097, 4096)); + EXPECT_EQ(kSizeTMax - 63, AlignDown(kSizeTMax - 62, size_t{32})); + EXPECT_EQ(kSizeTMax - 31, AlignDown(kSizeTMax, size_t{32})); + EXPECT_EQ(0ul, AlignDown(size_t{1}, kSizeTMax / 2 + 1)); } TEST(BitsTest, AlignDownPointer) {
diff --git a/base/callback_unittest.nc b/base/callback_unittest.nc index a56575c..bc0d20a3 100644 --- a/base/callback_unittest.nc +++ b/base/callback_unittest.nc
@@ -49,7 +49,7 @@ cb_a = cb_b; } -#elif defined(NCTEST_ONCE_THEN_MISMATCH) // [r"static_assert failed due to requirement '.+':? \"?\|then\| callback's parameter must be constructible from return type of \|this\|\.\"?"] +#elif defined(NCTEST_ONCE_THEN_MISMATCH) // [r"static_assert failed due to requirement '.+': \|then\| callback's parameter must be constructible from return type of \|this\|\."] // Calling Then() with a callback that can't receive the original // callback's return type. Here we would pass `int*` to `float*`. @@ -59,7 +59,7 @@ std::move(original).Then(std::move(then)); } -#elif defined(NCTEST_ONCE_THEN_MISMATCH_VOID_RESULT) // [r"fatal error: static_assert failed due to requirement '.+':? \"?\|then\| callback cannot accept parameters if \|this\| has a void return type\.\"?"] +#elif defined(NCTEST_ONCE_THEN_MISMATCH_VOID_RESULT) // [r"fatal error: static_assert failed due to requirement '.+': \|then\| callback cannot accept parameters if \|this\| has a void return type\."] // Calling Then() with a callback that can't receive the original // callback's return type. Here we would pass `void` to `float`. @@ -69,7 +69,7 @@ std::move(original).Then(std::move(then)); } -#elif defined(NCTEST_ONCE_THEN_MISMATCH_VOID_PARAM) // [r"fatal error: static_assert failed due to requirement '.+':? \"?\|then\| callback must accept exactly one parameter if \|this\| has a non-void return type\.\"?"] +#elif defined(NCTEST_ONCE_THEN_MISMATCH_VOID_PARAM) // [r"fatal error: static_assert failed due to requirement '.+': \|then\| callback must accept exactly one parameter if \|this\| has a non-void return type\."] // Calling Then() with a callback that can't receive the original // callback's return type. Here we would pass `int` to `void`. @@ -79,7 +79,7 @@ std::move(original).Then(std::move(then)); } -#elif defined(NCTEST_REPEATINGRVALUE_THEN_MISMATCH) // [r"static_assert failed due to requirement '.+':? \"?\|then\| callback's parameter must be constructible from return type of \|this\|\.\"?"] +#elif defined(NCTEST_REPEATINGRVALUE_THEN_MISMATCH) // [r"static_assert failed due to requirement '.+': \|then\| callback's parameter must be constructible from return type of \|this\|\."] // Calling Then() with a callback that can't receive the original // callback's return type. Here we would pass `int*` to `float*`. @@ -89,7 +89,7 @@ std::move(original).Then(std::move(then)); } -#elif defined(NCTEST_REPEATINGRVALUE_THEN_MISMATCH_VOID_RESULT) // [r"fatal error: static_assert failed due to requirement '.+':? \"?\|then\| callback cannot accept parameters if \|this\| has a void return type\.\"?"] +#elif defined(NCTEST_REPEATINGRVALUE_THEN_MISMATCH_VOID_RESULT) // [r"fatal error: static_assert failed due to requirement '.+': \|then\| callback cannot accept parameters if \|this\| has a void return type\."] // Calling Then() with a callback that can't receive the original // callback's return type. Here we would pass `void` to `float`. @@ -99,7 +99,7 @@ std::move(original).Then(std::move(then)); } -#elif defined(NCTEST_REPEATINGRVALUE_THEN_MISMATCH_VOID_PARAM) // [r"fatal error: static_assert failed due to requirement '.+':? \"?\|then\| callback must accept exactly one parameter if \|this\| has a non-void return type\.\"?"] +#elif defined(NCTEST_REPEATINGRVALUE_THEN_MISMATCH_VOID_PARAM) // [r"fatal error: static_assert failed due to requirement '.+': \|then\| callback must accept exactly one parameter if \|this\| has a non-void return type\."] // Calling Then() with a callback that can't receive the original // callback's return type. Here we would pass `int` to `void`. @@ -109,7 +109,7 @@ std::move(original).Then(std::move(then)); } -#elif defined(NCTEST_REPEATINGLVALUE_THEN_MISMATCH) // [r"static_assert failed due to requirement '.+':? \"?\|then\| callback's parameter must be constructible from return type of \|this\|\.\"?"] +#elif defined(NCTEST_REPEATINGLVALUE_THEN_MISMATCH) // [r"static_assert failed due to requirement '.+': \|then\| callback's parameter must be constructible from return type of \|this\|\."] // Calling Then() with a callback that can't receive the original // callback's return type. Here we would pass `int*` to `float*`. @@ -119,7 +119,7 @@ original.Then(then); } -#elif defined(NCTEST_REPEATINGLVALUE_THEN_MISMATCH_VOID_RESULT) // [r"fatal error: static_assert failed due to requirement '.+':? \"?\|then\| callback cannot accept parameters if \|this\| has a void return type\.\"?"] +#elif defined(NCTEST_REPEATINGLVALUE_THEN_MISMATCH_VOID_RESULT) // [r"fatal error: static_assert failed due to requirement '.+': \|then\| callback cannot accept parameters if \|this\| has a void return type\."] // Calling Then() with a callback that can't receive the original // callback's return type. Here we would pass `void` to `float`. @@ -129,7 +129,7 @@ original.Then(then); } -#elif defined(NCTEST_REPEATINGLVALUE_THEN_MISMATCH_VOID_PARAM) // [r"fatal error: static_assert failed due to requirement '.+':? \"?\|then\| callback must accept exactly one parameter if \|this\| has a non-void return type\.\"?"] +#elif defined(NCTEST_REPEATINGLVALUE_THEN_MISMATCH_VOID_PARAM) // [r"fatal error: static_assert failed due to requirement '.+': \|then\| callback must accept exactly one parameter if \|this\| has a non-void return type\."] // Calling Then() with a callback that can't receive the original // callback's return type. Here we would pass `int` to `void`.
diff --git a/base/containers/buffer_iterator_unittest.nc b/base/containers/buffer_iterator_unittest.nc index ae484f0a..e0d514b0 100644 --- a/base/containers/buffer_iterator_unittest.nc +++ b/base/containers/buffer_iterator_unittest.nc
@@ -21,7 +21,7 @@ std::string string_; }; -#if defined(NCTEST_BUFFER_ITERATOR_CREATE_TYPE_UINT16) // [r"fatal error: static_assert failed due to requirement 'std::is_same<unsigned short, char>::value || std::is_same<unsigned short, unsigned char>::value':? \"?Underlying buffer type must be char-type.\"?"] +#if defined(NCTEST_BUFFER_ITERATOR_CREATE_TYPE_UINT16) // [r"fatal error: static_assert failed due to requirement 'std::is_same<unsigned short, char>::value || std::is_same<unsigned short, unsigned char>::value': Underlying buffer type must be char-type."] void WontCompile() { constexpr size_t size = 64;
diff --git a/base/containers/enum_set_unittest.nc b/base/containers/enum_set_unittest.nc index bd88e53..063e7c5 100644 --- a/base/containers/enum_set_unittest.nc +++ b/base/containers/enum_set_unittest.nc
@@ -10,7 +10,7 @@ namespace base { namespace { -#if defined(NCTEST_ALL_METHOD_DISALLOWED_ON_LARGE_SPARSE_ENUM) // [r"fatal error: static_assert failed due to requirement 'kValueCount <= 64':? \"?Max number of enum values is 64 for constexpr constructor\"?"] +#if defined(NCTEST_ALL_METHOD_DISALLOWED_ON_LARGE_SPARSE_ENUM) // [r"fatal error: static_assert failed due to requirement 'kValueCount <= 64': Max number of enum values is 64 for constexpr constructor"] void WontCompile() { enum class TestEnumSparse {
diff --git a/base/containers/span_unittest.nc b/base/containers/span_unittest.nc index 09464b18..78218b4 100644 --- a/base/containers/span_unittest.nc +++ b/base/containers/span_unittest.nc
@@ -21,7 +21,7 @@ class Derived : Base { }; -#if defined(NCTEST_DEFAULT_SPAN_WITH_NON_ZERO_STATIC_EXTENT_DISALLOWED) // [r"fatal error: static_assert failed due to requirement '1UL == dynamic_extent || 1UL == 0':? \"?Invalid Extent\"?"] +#if defined(NCTEST_DEFAULT_SPAN_WITH_NON_ZERO_STATIC_EXTENT_DISALLOWED) // [r"fatal error: static_assert failed due to requirement '1UL == dynamic_extent || 1UL == 0': Invalid Extent"] // A default constructed span must have an extent of 0 or dynamic_extent. void WontCompile() { @@ -126,7 +126,7 @@ span<int> span(set); } -#elif defined(NCTEST_STATIC_FRONT_WITH_EXCEEDING_COUNT_DISALLOWED) // [r" fatal error: static_assert failed due to requirement '3UL == dynamic_extent || 4UL <= 3UL':? \"?Count must not exceed Extent\"?"] +#elif defined(NCTEST_STATIC_FRONT_WITH_EXCEEDING_COUNT_DISALLOWED) // [r" fatal error: static_assert failed due to requirement '3UL == dynamic_extent || 4UL <= 3UL': Count must not exceed Extent"] // Static first called on a span with static extent must not exceed the size. void WontCompile() { @@ -135,7 +135,7 @@ auto first = span.first<4>(); } -#elif defined(NCTEST_STATIC_LAST_WITH_EXCEEDING_COUNT_DISALLOWED) // [r"fatal error: static_assert failed due to requirement '3UL == dynamic_extent || 4UL <= 3UL':? \"?Count must not exceed Extent\"?"] +#elif defined(NCTEST_STATIC_LAST_WITH_EXCEEDING_COUNT_DISALLOWED) // [r"fatal error: static_assert failed due to requirement '3UL == dynamic_extent || 4UL <= 3UL': Count must not exceed Extent"] // Static last called on a span with static extent must not exceed the size. void WontCompile() { @@ -144,7 +144,7 @@ auto last = span.last<4>(); } -#elif defined(NCTEST_STATIC_SUBSPAN_WITH_EXCEEDING_OFFSET_DISALLOWED) // [r"fatal error: static_assert failed due to requirement '3UL == dynamic_extent || 4UL <= 3UL':? \"?Count must not exceed Extent\"?"] +#elif defined(NCTEST_STATIC_SUBSPAN_WITH_EXCEEDING_OFFSET_DISALLOWED) // [r"fatal error: static_assert failed due to requirement '3UL == dynamic_extent || 4UL <= 3UL': Count must not exceed Extent"] // Static subspan called on a span with static extent must not exceed the size. void WontCompile() { @@ -153,7 +153,7 @@ auto subspan = span.subspan<4>(); } -#elif defined(NCTEST_STATIC_SUBSPAN_WITH_EXCEEDING_COUNT_DISALLOWED) // [r"fatal error: static_assert failed due to requirement '3UL == dynamic_extent || 4UL == dynamic_extent || 4UL <= 3UL - 0UL':? \"?Count must not exceed Extent - Offset\"?"] +#elif defined(NCTEST_STATIC_SUBSPAN_WITH_EXCEEDING_COUNT_DISALLOWED) // [r"fatal error: static_assert failed due to requirement '3UL == dynamic_extent || 4UL == dynamic_extent || 4UL <= 3UL - 0UL': Count must not exceed Extent - Offset"] // Static subspan called on a span with static extent must not exceed the size. void WontCompile() {
diff --git a/base/debug/activity_tracker.cc b/base/debug/activity_tracker.cc index 47e4a43..106de5cb 100644 --- a/base/debug/activity_tracker.cc +++ b/base/debug/activity_tracker.cc
@@ -482,7 +482,7 @@ // into a uint16_t. size_t full_size = std::min({base_size + value_extent, available_, - bits::AlignDown(std::numeric_limits<uint16_t>::max(), + bits::AlignDown(size_t{std::numeric_limits<uint16_t>::max()}, kMemoryAlignment)}); // If the value is actually a single byte, see if it can be stuffed at the
diff --git a/base/debug/activity_tracker.h b/base/debug/activity_tracker.h index 1199cae..dc1d38c 100644 --- a/base/debug/activity_tracker.h +++ b/base/debug/activity_tracker.h
@@ -506,7 +506,7 @@ private: FRIEND_TEST_ALL_PREFIXES(ActivityTrackerTest, UserDataTest); - enum : size_t { kMemoryAlignment = sizeof(uint64_t) }; + static constexpr size_t kMemoryAlignment = sizeof(uint64_t); // A structure that defines the structure header in memory. struct MemoryHeader {
diff --git a/base/debug/crash_logging_unittest.nc b/base/debug/crash_logging_unittest.nc index 1594efe..0d1da16 100644 --- a/base/debug/crash_logging_unittest.nc +++ b/base/debug/crash_logging_unittest.nc
@@ -7,7 +7,7 @@ #include "base/debug/crash_logging.h" -#if defined(NCTEST_SCOPED_CRASH_KEY_BOOL_ON_NON_BOOL_ARG) // [r"static_assert failed due to requirement 'std::is_same<int, bool>::value':? \"?SCOPED_CRASH_KEY_BOOL must be passed a boolean value\.\"?"] +#if defined(NCTEST_SCOPED_CRASH_KEY_BOOL_ON_NON_BOOL_ARG) // [r"static_assert failed due to requirement 'std::is_same<int, bool>::value': SCOPED_CRASH_KEY_BOOL must be passed a boolean value\."] void WontCompile() { SCOPED_CRASH_KEY_BOOL(category, name, 1);
diff --git a/base/debug/elf_reader.cc b/base/debug/elf_reader.cc index 0a1806c..5c42ae6 100644 --- a/base/debug/elf_reader.cc +++ b/base/debug/elf_reader.cc
@@ -88,8 +88,8 @@ } } - size_t section_size = bits::AlignUp(current_note->n_namesz, 4) + - bits::AlignUp(current_note->n_descsz, 4) + + size_t section_size = bits::AlignUp(current_note->n_namesz, 4u) + + bits::AlignUp(current_note->n_descsz, 4u) + sizeof(Nhdr); if (section_size > static_cast<size_t>(section_end - current_section)) return 0; @@ -107,7 +107,7 @@ // Write out the build ID as a null-terminated hex string. const uint8_t* build_id_raw = reinterpret_cast<const uint8_t*>(current_note) + sizeof(Nhdr) + - bits::AlignUp(current_note->n_namesz, 4); + bits::AlignUp(current_note->n_namesz, 4u); size_t i = 0; for (i = 0; i < current_note->n_descsz; ++i) { strings::SafeSNPrintf(&build_id[i * 2], 3, (uppercase ? "%02X" : "%02x"), @@ -154,7 +154,9 @@ strtab_addr = reinterpret_cast<const char*>(dynamic_iter->d_un.d_ptr); #endif } else if (dynamic_iter->d_tag == DT_SONAME) { - soname_strtab_offset = dynamic_iter->d_un.d_val; + // The Android NDK wrongly defines `d_val` as an Elf32_Sword for 32 bits + // and thus needs this cast. + soname_strtab_offset = static_cast<Xword>(dynamic_iter->d_un.d_val); } } if (soname_strtab_offset && strtab_addr)
diff --git a/base/debug/test_elf_image_builder.cc b/base/debug/test_elf_image_builder.cc index 5a8dbea..e54d994 100644 --- a/base/debug/test_elf_image_builder.cc +++ b/base/debug/test_elf_image_builder.cc
@@ -64,10 +64,10 @@ StringPiece name, span<const uint8_t> desc) { const size_t name_with_null_size = name.size() + 1; - std::vector<uint8_t> buffer(sizeof(Nhdr) + - bits::AlignUp(name_with_null_size, 4) + - bits::AlignUp(desc.size(), 4), - '\0'); + std::vector<uint8_t> buffer( + sizeof(Nhdr) + bits::AlignUp(name_with_null_size, size_t{4}) + + bits::AlignUp(desc.size(), size_t{4}), + '\0'); uint8_t* loc = &buffer.front(); Nhdr* nhdr = reinterpret_cast<Nhdr*>(loc); nhdr->n_namesz = name_with_null_size; @@ -77,10 +77,10 @@ memcpy(loc, name.data(), name.size()); *(loc + name.size()) = '\0'; - loc += bits::AlignUp(name_with_null_size, 4); + loc += bits::AlignUp(name_with_null_size, size_t{4}); memcpy(loc, &desc.front(), desc.size()); - loc += bits::AlignUp(desc.size(), 4); + loc += bits::AlignUp(desc.size(), size_t{4}); DCHECK_EQ(&buffer.front() + buffer.size(), loc);
diff --git a/base/files/file_enumerator.h b/base/files/file_enumerator.h index bd94cb0a..d208c23 100644 --- a/base/files/file_enumerator.h +++ b/base/files/file_enumerator.h
@@ -194,7 +194,9 @@ // Set of visited directories. Used to prevent infinite looping along // circular symlinks. - std::unordered_set<ino_t> visited_directories_; + // The Android NDK (r23) does not declare `st_ino` as an `ino_t`, hence the + // need for the ugly decltype. + std::unordered_set<decltype(stat_wrapper_t::st_ino)> visited_directories_; // The next entry to use from the directory_entries_ vector size_t current_directory_entry_;
diff --git a/base/files/file_path_watcher_inotify.cc b/base/files/file_path_watcher_inotify.cc index 8b61091..18943cc 100644 --- a/base/files/file_path_watcher_inotify.cc +++ b/base/files/file_path_watcher_inotify.cc
@@ -113,9 +113,14 @@ // http://crbug.com/38174 class InotifyReader { public: - using Watch = int; // Watch descriptor used by AddWatch() and RemoveWatch(). - static constexpr Watch kInvalidWatch = -1; - static constexpr Watch kWatchLimitExceeded = -2; + // Watch descriptor used by AddWatch() and RemoveWatch(). +#if BUILDFLAG(IS_ANDROID) + using Watch = uint32_t; +#else + using Watch = int; +#endif + static constexpr Watch kInvalidWatch = static_cast<Watch>(-1); + static constexpr Watch kWatchLimitExceeded = static_cast<Watch>(-2); InotifyReader(const InotifyReader&) = delete; InotifyReader& operator=(const InotifyReader&) = delete; @@ -352,12 +357,13 @@ AutoLock auto_lock(lock_); ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::WILL_BLOCK); - Watch watch = inotify_add_watch(inotify_fd_, path.value().c_str(), - IN_ATTRIB | IN_CREATE | IN_DELETE | - IN_CLOSE_WRITE | IN_MOVE | IN_ONLYDIR); - - if (watch == kInvalidWatch) + const int watch_int = + inotify_add_watch(inotify_fd_, path.value().c_str(), + IN_ATTRIB | IN_CREATE | IN_DELETE | IN_CLOSE_WRITE | + IN_MOVE | IN_ONLYDIR); + if (watch_int == -1) return kInvalidWatch; + const Watch watch = static_cast<Watch>(watch_int); watchers_[watch].emplace(std::make_pair( watcher, WatcherEntry{watcher->GetTaskRunner(), watcher->GetWeakPtr()})); @@ -396,7 +402,7 @@ // In racing conditions, RemoveWatch() could grab `lock_` first and remove // the entry for `event->wd`. - auto watchers_it = watchers_.find(event->wd); + auto watchers_it = watchers_.find(static_cast<Watch>(event->wd)); if (watchers_it == watchers_.end()) return; @@ -406,7 +412,8 @@ watcher_entry.task_runner->PostTask( FROM_HERE, BindOnce(&FilePathWatcherImpl::OnFilePathChanged, watcher_entry.watcher, - event->wd, child, event->mask & (IN_CREATE | IN_MOVED_TO), + static_cast<Watch>(event->wd), child, + event->mask & (IN_CREATE | IN_MOVED_TO), event->mask & (IN_DELETE | IN_MOVED_FROM), event->mask & IN_ISDIR)); }
diff --git a/base/files/file_posix.cc b/base/files/file_posix.cc index cd2a290..76eaa7c 100644 --- a/base/files/file_posix.cc +++ b/base/files/file_posix.cc
@@ -223,7 +223,7 @@ int File::Read(int64_t offset, char* data, int size) { ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK); DCHECK(IsValid()); - if (size < 0) + if (size < 0 || !IsValueInRangeForNumericType<off_t>(offset + size - 1)) return -1; SCOPED_FILE_TRACE_WITH_SIZE("Read", size); @@ -233,7 +233,7 @@ do { rv = HANDLE_EINTR(pread(file_.get(), data + bytes_read, static_cast<size_t>(size - bytes_read), - offset + bytes_read)); + static_cast<off_t>(offset + bytes_read))); if (rv <= 0) break; @@ -268,12 +268,13 @@ int File::ReadNoBestEffort(int64_t offset, char* data, int size) { ScopedBlockingCall scoped_blocking_call(FROM_HERE, BlockingType::MAY_BLOCK); DCHECK(IsValid()); - if (size < 0) + if (size < 0 || !IsValueInRangeForNumericType<off_t>(offset)) return -1; SCOPED_FILE_TRACE_WITH_SIZE("ReadNoBestEffort", size); - return checked_cast<int>(HANDLE_EINTR( - pread(file_.get(), data, static_cast<size_t>(size), offset))); + return checked_cast<int>( + HANDLE_EINTR(pread(file_.get(), data, static_cast<size_t>(size), + static_cast<off_t>(offset)))); } int File::ReadAtCurrentPosNoBestEffort(char* data, int size) {
diff --git a/base/files/file_util_posix.cc b/base/files/file_util_posix.cc index a630e20..1da777f0 100644 --- a/base/files/file_util_posix.cc +++ b/base/files/file_util_posix.cc
@@ -540,8 +540,10 @@ return false; // Clears the existing permission bits, and adds the new ones. - mode_t updated_mode_bits = - stat_buf.st_mode & ~static_cast<mode_t>(FILE_PERMISSION_MASK); + // The casting here is because the Android NDK does not declare `st_mode` as a + // `mode_t`. + mode_t updated_mode_bits = static_cast<mode_t>(stat_buf.st_mode); + updated_mode_bits &= static_cast<mode_t>(~FILE_PERMISSION_MASK); updated_mode_bits |= mode & FILE_PERMISSION_MASK; if (HANDLE_EINTR(chmod(path.value().c_str(), updated_mode_bits)) != 0) @@ -924,6 +926,7 @@ // (though not UB). if (!IsValueInRangeForNumericType<int64_t>(size) || !IsValueInRangeForNumericType<off_t>(size) || + !IsValueInRangeForNumericType<off_t>(new_file_len) || !file->SetLength(std::max(original_file_len, new_file_len))) { DPLOG(ERROR) << "ftruncate " << file->GetPlatformFile(); return false; @@ -967,15 +970,15 @@ static_cast<size_t>(original_file_len), static_cast<size_t>(block_size))); for (int64_t i = extension_start; i < new_file_len; i += block_size) { char existing_byte; - if (HANDLE_EINTR(pread(file->GetPlatformFile(), &existing_byte, 1, i)) != - 1) { + if (HANDLE_EINTR(pread(file->GetPlatformFile(), &existing_byte, 1, + static_cast<off_t>(i))) != 1) { return false; // Can't read? Not viable. } if (existing_byte != 0) { continue; // Block has data so must already exist. } - if (HANDLE_EINTR(pwrite(file->GetPlatformFile(), &existing_byte, 1, i)) != - 1) { + if (HANDLE_EINTR(pwrite(file->GetPlatformFile(), &existing_byte, 1, + static_cast<off_t>(i))) != 1) { return false; // Can't write? Not viable. } }
diff --git a/base/files/memory_mapped_file.cc b/base/files/memory_mapped_file.cc index 4a13ba84..f21b4f8 100644 --- a/base/files/memory_mapped_file.cc +++ b/base/files/memory_mapped_file.cc
@@ -135,12 +135,13 @@ int32_t* offset) { // Sadly, on Windows, the mmap alignment is not just equal to the page size. uint64_t mask = SysInfo::VMAllocationGranularity() - 1; - DCHECK(IsValueInRangeForNumericType<int32_t>(mask)); + CHECK(IsValueInRangeForNumericType<int32_t>(mask)); *offset = static_cast<int32_t>(static_cast<uint64_t>(start) & mask); *aligned_start = static_cast<int64_t>(static_cast<uint64_t>(start) & ~mask); // The DCHECK above means bit 31 is not set in `mask`, which in turn means - // *offset is positive. Therefore this cast is safe. - *aligned_size = (size + static_cast<size_t>(*offset) + mask) & ~mask; + // *offset is positive. Therefore casting it to a size_t is safe. + *aligned_size = + (size + static_cast<size_t>(*offset) + static_cast<size_t>(mask)) & ~mask; } #endif // !BUILDFLAG(IS_NACL)
diff --git a/base/memory/discardable_shared_memory.cc b/base/memory/discardable_shared_memory.cc index c0a5b6e75..57acf86 100644 --- a/base/memory/discardable_shared_memory.cc +++ b/base/memory/discardable_shared_memory.cc
@@ -524,7 +524,7 @@ shared_memory_mapping_, pmd); // TODO(ssid): Clean this by a new api to inherit size of parent dump once the // we send the full PMD and calculate sizes inside chrome, crbug.com/704203. - size_t resident_size = shared_memory_dump->GetSizeInternal(); + uint64_t resident_size = shared_memory_dump->GetSizeInternal(); local_segment_dump->AddScalar(trace_event::MemoryAllocatorDump::kNameSize, trace_event::MemoryAllocatorDump::kUnitsBytes, resident_size);
diff --git a/base/memory/platform_shared_memory_region.cc b/base/memory/platform_shared_memory_region.cc index 0f7d28e1..35a32b4 100644 --- a/base/memory/platform_shared_memory_region.cc +++ b/base/memory/platform_shared_memory_region.cc
@@ -77,9 +77,10 @@ // The backing mapper expects offset to be aligned to // `SysInfo::VMAllocationGranularity()`. - size_t aligned_offset = - bits::AlignDown(offset, SysInfo::VMAllocationGranularity()); - size_t adjustment_for_alignment = offset - aligned_offset; + uint64_t aligned_offset = + bits::AlignDown(offset, uint64_t{SysInfo::VMAllocationGranularity()}); + size_t adjustment_for_alignment = + static_cast<size_t>(offset - aligned_offset); bool write_allowed = mode_ != Mode::kReadOnly; auto result = mapper->Map(GetPlatformHandle(), write_allowed, aligned_offset,
diff --git a/base/memory/ref_counted_unittest.nc b/base/memory/ref_counted_unittest.nc index 591cffb..e2d5312 100644 --- a/base/memory/ref_counted_unittest.nc +++ b/base/memory/ref_counted_unittest.nc
@@ -15,7 +15,7 @@ ~InitialRefCountIsZero() {} }; -#if defined(NCTEST_ADOPT_REF_TO_ZERO_START) // [r"fatal error: static_assert failed due to requirement 'std::is_same<base::subtle::StartRefCountFromOneTag, base::subtle::StartRefCountFromZeroTag>::value':? \"?Use AdoptRef only if the reference count starts from one\.\"?"] +#if defined(NCTEST_ADOPT_REF_TO_ZERO_START) // [r"fatal error: static_assert failed due to requirement 'std::is_same<base::subtle::StartRefCountFromOneTag, base::subtle::StartRefCountFromZeroTag>::value': Use AdoptRef only if the reference count starts from one\."] void WontCompile() { AdoptRef(new InitialRefCountIsZero()); @@ -23,7 +23,7 @@ #endif -#if defined(NCTEST_WRONG_REFCOUNT_BASE_CLASS) // [r"fatal error: static_assert failed due to requirement 'std::is_base_of_v<base::Foo, base::Bar>':? \"?T implements RefCounted<U>, but U is not a base of T\.\"?"] +#if defined(NCTEST_WRONG_REFCOUNT_BASE_CLASS) // [r"fatal error: static_assert failed due to requirement 'std::is_base_of_v<base::Foo, base::Bar>': T implements RefCounted<U>, but U is not a base of T\."] class Foo : public base::RefCounted<Foo> { private: @@ -43,7 +43,7 @@ #endif -#if defined(NCTEST_WRONG_REFCOUNT_THREADSAFE_BASE_CLASS) // [r"fatal error: static_assert failed due to requirement 'std::is_base_of_v<base::Foo, base::Bar>':? \"?T implements RefCountedThreadSafe<U>, but U is not a base of T\.\"?"] +#if defined(NCTEST_WRONG_REFCOUNT_THREADSAFE_BASE_CLASS) // [r"fatal error: static_assert failed due to requirement 'std::is_base_of_v<base::Foo, base::Bar>': T implements RefCountedThreadSafe<U>, but U is not a base of T\."] class Foo : public base::RefCountedThreadSafe<Foo> { private: @@ -63,7 +63,7 @@ #endif -#if defined(NCTEST_WRONG_REFCOUNT_ON_SEQUENCE_BASE_CLASS) // [r"fatal error: static_assert failed due to requirement 'std::is_base_of_v<base::Foo, base::Bar>':? \"?T implements RefCountedDeleteOnSequence<U>, but U is not a base of T\.\"?"] +#if defined(NCTEST_WRONG_REFCOUNT_ON_SEQUENCE_BASE_CLASS) // [r"fatal error: static_assert failed due to requirement 'std::is_base_of_v<base::Foo, base::Bar>': T implements RefCountedDeleteOnSequence<U>, but U is not a base of T\."] class Foo : public base::RefCountedDeleteOnSequence<Foo> { private: @@ -85,7 +85,7 @@ #endif -#if defined(NCTEST_SUBCLASS_OVERRIDES_REFCOUNT_PREFERENCE) // [r"fatal error: static_assert failed due to requirement .*:? \"?It's unsafe to override the ref count preference\. Please remove REQUIRE_ADOPTION_FOR_REFCOUNTED_TYPE from subclasses\.\"?"] +#if defined(NCTEST_SUBCLASS_OVERRIDES_REFCOUNT_PREFERENCE) // [r"fatal error: static_assert failed due to requirement .*: It's unsafe to override the ref count preference\. Please remove REQUIRE_ADOPTION_FOR_REFCOUNTED_TYPE from subclasses\."] class Base : public base::RefCounted<Base> { protected: @@ -104,7 +104,7 @@ #endif -#if defined(NCTEST_SUBCLASS_OVERRIDES_REFCOUNT_PREFERENCE_THREADSAFE) // [r"fatal error: static_assert failed due to requirement .*:? \"?It's unsafe to override the ref count preference\. Please remove REQUIRE_ADOPTION_FOR_REFCOUNTED_TYPE from subclasses\.\"?"] +#if defined(NCTEST_SUBCLASS_OVERRIDES_REFCOUNT_PREFERENCE_THREADSAFE) // [r"fatal error: static_assert failed due to requirement .*: It's unsafe to override the ref count preference\. Please remove REQUIRE_ADOPTION_FOR_REFCOUNTED_TYPE from subclasses\."] class Base : public base::RefCountedThreadSafe<Base> { protected: @@ -123,7 +123,7 @@ #endif -#if defined(NCTEST_SUBCLASS_OVERRIDES_REFCOUNT_PREFERENCE_SEQUENCE) // [r"fatal error: static_assert failed due to requirement .*:? \"?It's unsafe to override the ref count preference\. Please remove REQUIRE_ADOPTION_FOR_REFCOUNTED_TYPE from subclasses\.\"?"] +#if defined(NCTEST_SUBCLASS_OVERRIDES_REFCOUNT_PREFERENCE_SEQUENCE) // [r"fatal error: static_assert failed due to requirement .*: It's unsafe to override the ref count preference\. Please remove REQUIRE_ADOPTION_FOR_REFCOUNTED_TYPE from subclasses\."] class Base : public base::RefCountedDeleteOnSequence<Base> { protected:
diff --git a/base/memory/shared_memory_security_policy.cc b/base/memory/shared_memory_security_policy.cc index 4d12c52..542aa7a 100644 --- a/base/memory/shared_memory_security_policy.cc +++ b/base/memory/shared_memory_security_policy.cc
@@ -6,6 +6,7 @@ #include <algorithm> #include <atomic> +#include <limits> #include "base/bits.h" #include "base/memory/page_size.h" @@ -22,7 +23,7 @@ #if defined(ARCH_CPU_32_BITS) || BUILDFLAG(IS_NACL) // No effective limit on 32-bit, since there simply isn't enough address space // for ASLR to be particularly effective. -constexpr size_t kTotalMappedSizeLimit = -1; +constexpr size_t kTotalMappedSizeLimit = std::numeric_limits<size_t>::max(); #elif defined(ARCH_CPU_64_BITS) // 32 GB of mappings ought to be enough for anybody. constexpr size_t kTotalMappedSizeLimit = 32ULL * 1024 * 1024 * 1024;
diff --git a/base/memory/weak_ptr_unittest.nc b/base/memory/weak_ptr_unittest.nc index 76af11f..39c2a21e 100644 --- a/base/memory/weak_ptr_unittest.nc +++ b/base/memory/weak_ptr_unittest.nc
@@ -115,14 +115,14 @@ WeakPtr<Unrelated> ptr = AsWeakPtr<Unrelated>(&f); } -#elif defined(NCTEST_COMPLETELY_UNRELATED_HELPER) // [r"fatal error: static_assert failed due to requirement 'std::is_base_of<base::internal::SupportsWeakPtrBase, base::Unrelated>::value':? \"?AsWeakPtr argument must inherit from SupportsWeakPtr\"?"] +#elif defined(NCTEST_COMPLETELY_UNRELATED_HELPER) // [r"fatal error: static_assert failed due to requirement 'std::is_base_of<base::internal::SupportsWeakPtrBase, base::Unrelated>::value': AsWeakPtr argument must inherit from SupportsWeakPtr"] void WontCompile() { Unrelated f; WeakPtr<Unrelated> ptr = AsWeakPtr(&f); } -#elif defined(NCTEST_DERIVED_COMPLETELY_UNRELATED_HELPER) // [r"fatal error: static_assert failed due to requirement 'std::is_base_of<base::internal::SupportsWeakPtrBase, base::DerivedUnrelated>::value':? \"?AsWeakPtr argument must inherit from SupportsWeakPtr\"?"] +#elif defined(NCTEST_DERIVED_COMPLETELY_UNRELATED_HELPER) // [r"fatal error: static_assert failed due to requirement 'std::is_base_of<base::internal::SupportsWeakPtrBase, base::DerivedUnrelated>::value': AsWeakPtr argument must inherit from SupportsWeakPtr"] void WontCompile() { DerivedUnrelated f;
diff --git a/base/message_loop/message_pump_android.cc b/base/message_loop/message_pump_android.cc index 81e9ae6..b94d865 100644 --- a/base/message_loop/message_pump_android.cc +++ b/base/message_loop/message_pump_android.cc
@@ -356,7 +356,8 @@ struct itimerspec ts; ts.it_interval.tv_sec = 0; // Don't repeat. ts.it_interval.tv_nsec = 0; - ts.it_value.tv_sec = nanos / TimeTicks::kNanosecondsPerSecond; + ts.it_value.tv_sec = + static_cast<time_t>(nanos / TimeTicks::kNanosecondsPerSecond); ts.it_value.tv_nsec = nanos % TimeTicks::kNanosecondsPerSecond; int ret = timerfd_settime(delayed_fd_, TFD_TIMER_ABSTIME, &ts, nullptr);
diff --git a/base/message_loop/message_pump_libevent.cc b/base/message_loop/message_pump_libevent.cc index 83245f9a..dc8b03a 100644 --- a/base/message_loop/message_pump_libevent.cc +++ b/base/message_loop/message_pump_libevent.cc
@@ -245,7 +245,7 @@ // Setup a timer to break out of the event loop at the right time. struct timeval poll_tv; - poll_tv.tv_sec = delay.InSeconds(); + poll_tv.tv_sec = static_cast<time_t>(delay.InSeconds()); poll_tv.tv_usec = delay.InMicroseconds() % Time::kMicrosecondsPerSecond; event_set(timer_event.get(), -1, 0, timer_callback, event_base_); event_base_set(event_base_, timer_event.get());
diff --git a/base/metrics/histogram_unittest.nc b/base/metrics/histogram_unittest.nc index c26ce53..8879bbed3 100644 --- a/base/metrics/histogram_unittest.nc +++ b/base/metrics/histogram_unittest.nc
@@ -34,7 +34,7 @@ UMA_HISTOGRAM_ENUMERATION("", TypeA::A, B); } -#elif defined(NCTEST_NEGATIVE_ENUM_MAX) // [r"fatal error: static_assert failed due to requirement 'static_cast<uintmax_t>\(TypeA::A\) < static_cast<uintmax_t>\(std::numeric_limits<int>::max\(\)\)':? \"?|boundary| is out of range of HistogramBase::Sample\"?"] +#elif defined(NCTEST_NEGATIVE_ENUM_MAX) // [r"fatal error: static_assert failed due to requirement 'static_cast<uintmax_t>\(TypeA::A\) < static_cast<uintmax_t>\(std::numeric_limits<int>::max\(\)\)': |boundary| is out of range of HistogramBase::Sample"] void WontCompile() { // Buckets for enumeration start from 0, so a boundary < 0 is illegal. @@ -42,7 +42,7 @@ UMA_HISTOGRAM_ENUMERATION("", TypeA::A, TypeA::A); } -#elif defined(NCTEST_ENUM_MAX_OUT_OF_RANGE) // [r"fatal error: static_assert failed due to requirement 'static_cast<uintmax_t>\(TypeA::A\) < static_cast<uintmax_t>\(std::numeric_limits<int>::max\(\)\)':? \"?|boundary| is out of range of HistogramBase::Sample\"?"] +#elif defined(NCTEST_ENUM_MAX_OUT_OF_RANGE) // [r"fatal error: static_assert failed due to requirement 'static_cast<uintmax_t>\(TypeA::A\) < static_cast<uintmax_t>\(std::numeric_limits<int>::max\(\)\)': |boundary| is out of range of HistogramBase::Sample"] void WontCompile() { // HistogramBase::Sample is an int and can't hold larger values. @@ -50,7 +50,7 @@ UMA_HISTOGRAM_ENUMERATION("", TypeA::A, TypeA::A); } -#elif defined(NCTEST_SAMPLE_NOT_ENUM) // [r"fatal error: static_assert failed due to requirement 'static_cast<uintmax_t>\(TypeA::A\) < static_cast<uintmax_t>\(std::numeric_limits<int>::max\(\)\)':? \"?|boundary| is out of range of HistogramBase::Sample\"?"] +#elif defined(NCTEST_SAMPLE_NOT_ENUM) // [r"fatal error: static_assert failed due to requirement 'static_cast<uintmax_t>\(TypeA::A\) < static_cast<uintmax_t>\(std::numeric_limits<int>::max\(\)\)': |boundary| is out of range of HistogramBase::Sample"] void WontCompile() { enum TypeA { A };
diff --git a/base/metrics/persistent_memory_allocator.cc b/base/metrics/persistent_memory_allocator.cc index 2691a8f..5cf7e6d6 100644 --- a/base/metrics/persistent_memory_allocator.cc +++ b/base/metrics/persistent_memory_allocator.cc
@@ -88,18 +88,6 @@ namespace base { -// All allocations and data-structures must be aligned to this byte boundary. -// Alignment as large as the physical bus between CPU and RAM is _required_ -// for some architectures, is simply more efficient on other CPUs, and -// generally a Good Idea(tm) for all platforms as it reduces/eliminates the -// chance that a type will span cache lines. Alignment mustn't be less -// than 8 to ensure proper alignment for all types. The rest is a balance -// between reducing spans across multiple cache lines and wasted space spent -// padding out allocations. An alignment of 16 would ensure that the block -// header structure always sits in a single cache line. An average of about -// 1/2 this value will be wasted with every allocation. -const uint32_t PersistentMemoryAllocator::kAllocAlignment = 8; - // The block-header is placed at the top of every allocation within the // segment to describe the data that follows it. struct PersistentMemoryAllocator::BlockHeader {
diff --git a/base/metrics/persistent_memory_allocator.h b/base/metrics/persistent_memory_allocator.h index 2ec56ff..23c720aea 100644 --- a/base/metrics/persistent_memory_allocator.h +++ b/base/metrics/persistent_memory_allocator.h
@@ -643,7 +643,17 @@ private: struct SharedMetadata; struct BlockHeader; - static const uint32_t kAllocAlignment; + // All allocations and data-structures must be aligned to this byte boundary. + // Alignment as large as the physical bus between CPU and RAM is _required_ + // for some architectures, is simply more efficient on other CPUs, and + // generally a Good Idea(tm) for all platforms as it reduces/eliminates the + // chance that a type will span cache lines. Alignment mustn't be less + // than 8 to ensure proper alignment for all types. The rest is a balance + // between reducing spans across multiple cache lines and wasted space spent + // padding out allocations. An alignment of 16 would ensure that the block + // header structure always sits in a single cache line. An average of about + // 1/2 this value will be wasted with every allocation. + static constexpr size_t kAllocAlignment = 8; static const Reference kReferenceQueue; // The shared metadata is always located at the top of the memory segment.
diff --git a/base/no_destructor_unittest.nc b/base/no_destructor_unittest.nc index c0add58..2244e61c 100644 --- a/base/no_destructor_unittest.nc +++ b/base/no_destructor_unittest.nc
@@ -11,14 +11,14 @@ namespace base { -#if defined(NCTEST_NODESTRUCTOR_REQUIRES_NONTRIVIAL_DESTRUCTOR) // [r"fatal error: static_assert failed due to requirement '!std::is_trivially_destructible<bool>::value || std::is_same<nullptr_t, base::AllowForTriviallyDestructibleType>::value':? \"?base::NoDestructor is not needed because the templated class has a trivial destructor\"?"] +#if defined(NCTEST_NODESTRUCTOR_REQUIRES_NONTRIVIAL_DESTRUCTOR) // [r"fatal error: static_assert failed due to requirement '!std::is_trivially_destructible<bool>::value || std::is_same<nullptr_t, base::AllowForTriviallyDestructibleType>::value': base::NoDestructor is not needed because the templated class has a trivial destructor"] // Attempt to make a NoDestructor for a type with a trivial destructor. void WontCompile() { NoDestructor<bool> nd; } -#elif defined(NCTEST_NODESTRUCTOR_PARAMETER) // [r"fatal error: static_assert failed due to requirement 'std::is_same<std::string, base::AllowForTriviallyDestructibleType>::value || std::is_same<std::string, nullptr_t>::value':? \"?AllowForTriviallyDestructibleType is the only valid option for the second template parameter of NoDestructor\"?"] +#elif defined(NCTEST_NODESTRUCTOR_PARAMETER) // [r"fatal error: static_assert failed due to requirement 'std::is_same<std::string, base::AllowForTriviallyDestructibleType>::value || std::is_same<std::string, nullptr_t>::value': AllowForTriviallyDestructibleType is the only valid option for the second template parameter of NoDestructor"] // Attempt to make a NoDestructor for a type with an invalid option. void WontCompile() {
diff --git a/base/observer_list_unittest.nc b/base/observer_list_unittest.nc index 500fd84d..93efa7a5d 100644 --- a/base/observer_list_unittest.nc +++ b/base/observer_list_unittest.nc
@@ -11,7 +11,7 @@ namespace base { -#if defined(NCTEST_CHECKED_OBSERVER_USING_UNCHECKED_LIST) // [r"fatal error: static_assert failed due to requirement '!std::is_base_of<base::CheckedObserver, Observer>::value':? \"?CheckedObserver classes must not use ObserverList<T>::Unchecked.\"?"] +#if defined(NCTEST_CHECKED_OBSERVER_USING_UNCHECKED_LIST) // [r"fatal error: static_assert failed due to requirement '!std::is_base_of<base::CheckedObserver, Observer>::value': CheckedObserver classes must not use ObserverList<T>::Unchecked."] void WontCompile() { struct Observer : public CheckedObserver { @@ -22,7 +22,7 @@ observer.OnObserve(); } -#elif defined(NCTEST_UNCHECKED_OBSERVER_USING_CHECKED_LIST) // [r"fatal error: static_assert failed due to requirement 'std::is_base_of<base::CheckedObserver, UncheckedObserver>::value':? \"?Observers should inherit from base::CheckedObserver. Use ObserverList<T>::Unchecked to observe with raw pointers.\"?"] +#elif defined(NCTEST_UNCHECKED_OBSERVER_USING_CHECKED_LIST) // [r"fatal error: static_assert failed due to requirement 'std::is_base_of<base::CheckedObserver, UncheckedObserver>::value': Observers should inherit from base::CheckedObserver. Use ObserverList<T>::Unchecked to observe with raw pointers."] void WontCompile() { struct UncheckedObserver {
diff --git a/base/os_compat_android.cc b/base/os_compat_android.cc index 80a0a10..854091a 100644 --- a/base/os_compat_android.cc +++ b/base/os_compat_android.cc
@@ -53,7 +53,7 @@ time64_t result = timegm64(t); if (result < kTimeMin || result > kTimeMax) return -1; - return result; + return static_cast<time_t>(result); } #endif @@ -120,11 +120,11 @@ return nullptr; } - const int path_len = strlen(path); + const size_t path_len = strlen(path); // The last six characters of 'path' must be XXXXXX. const base::StringPiece kSuffix("XXXXXX"); - const int kSuffixLen = kSuffix.length(); + const size_t kSuffixLen = kSuffix.length(); if (!base::EndsWith(base::StringPiece(path, path_len), kSuffix)) { errno = EINVAL; return nullptr; @@ -156,7 +156,7 @@ // number of tries. for (int i = 0; i < kMaxTries; ++i) { // Fill the suffix XXXXXX with a random string composed of a-z chars. - for (int pos = 0; pos < kSuffixLen; ++pos) { + for (size_t pos = 0; pos < kSuffixLen; ++pos) { char rand_char = static_cast<char>(base::RandInt('a', 'z')); path[path_len - kSuffixLen + pos] = rand_char; }
diff --git a/base/process/process_metrics.h b/base/process/process_metrics.h index 6000d9a..34675dd0 100644 --- a/base/process/process_metrics.h +++ b/base/process/process_metrics.h
@@ -450,10 +450,10 @@ // Serializes the platform specific fields to value. Value ToValue() const; - unsigned long pswpin = 0; - unsigned long pswpout = 0; - unsigned long pgmajfault = 0; - unsigned long oom_kill = 0; + uint64_t pswpin = 0; + uint64_t pswpout = 0; + uint64_t pgmajfault = 0; + uint64_t oom_kill = 0; }; // Retrieves data from /proc/vmstat about system-wide vm operations.
diff --git a/base/process/process_metrics_linux.cc b/base/process/process_metrics_linux.cc index c3289d7..398a7f8 100644 --- a/base/process/process_metrics_linux.cc +++ b/base/process/process_metrics_linux.cc
@@ -682,8 +682,8 @@ Value VmStatInfo::ToValue() const { Value res(Value::Type::DICTIONARY); - // TODO(crbug.com/1334256): Make base::Value able to hold unsigned long and - // remove casts below. + // TODO(crbug.com/1334256): Make base::Value able to hold uint64_t and remove + // casts below. res.SetIntKey("pswpin", static_cast<int>(pswpin)); res.SetIntKey("pswpout", static_cast<int>(pswpout)); res.SetIntKey("pgmajfault", static_cast<int>(pgmajfault));
diff --git a/base/profiler/chrome_unwinder_android_v2.cc b/base/profiler/chrome_unwinder_android_v2.cc index c4ee990d..772cb94d 100644 --- a/base/profiler/chrome_unwinder_android_v2.cc +++ b/base/profiler/chrome_unwinder_android_v2.cc
@@ -55,7 +55,7 @@ unsigned shift = 0; do { DCHECK_LE(shift, sizeof(uintptr_t) * 8); // ULEB128 must not overflow. - value += (*bytes & 0x7f) << shift; + value += (*bytes & 0x7fu) << shift; shift += 7; } while (*bytes++ & 0x80); return value; @@ -181,7 +181,7 @@ if (GetTopBits(*instruction, 2) == 0b00) { // 00xxxxxx // vsp = vsp + (xxxxxx << 2) + 4. Covers range 0x04-0x100 inclusive. - const uintptr_t offset = ((*instruction++ & 0b00111111) << 2) + 4; + const uintptr_t offset = ((*instruction++ & 0b00111111u) << 2) + 4; const auto new_sp = CheckedNumeric<uintptr_t>(RegisterContextStackPointer(thread_context)) + @@ -192,7 +192,7 @@ } else if (GetTopBits(*instruction, 2) == 0b01) { // 01xxxxxx // vsp = vsp - (xxxxxx << 2) - 4. Covers range 0x04-0x100 inclusive. - const uintptr_t offset = ((*instruction++ & 0b00111111) << 2) + 4; + const uintptr_t offset = ((*instruction++ & 0b00111111u) << 2) + 4; const auto new_sp = CheckedNumeric<uintptr_t>(RegisterContextStackPointer(thread_context)) - offset; @@ -214,8 +214,8 @@ } else if (GetTopBits(*instruction, 5) == 0b10101) { // 10101nnn // Pop r4-r[4+nnn], r14 - const uint8_t max_register_index = (*instruction++ & 0b00000111) + 4; - for (int n = 4; n <= max_register_index; n++) { + const uint8_t max_register_index = (*instruction++ & 0b00000111u) + 4; + for (uint8_t n = 4; n <= max_register_index; n++) { if (!PopRegister(thread_context, n)) { return UnwindInstructionResult::kAborted; } @@ -230,11 +230,11 @@ return UnwindInstructionResult::kAborted; } else if (GetTopBits(*instruction, 4) == 0b1000) { const uint32_t register_bitmask = - ((*instruction & 0xf) << 8) + *(instruction + 1); + ((*instruction & 0xfu) << 8) + *(instruction + 1); instruction += 2; // 1000iiii iiiiiiii // Pop up to 12 integer registers under masks {r15-r12}, {r11-r4} - for (int register_index = 4; register_index < 16; register_index++) { + for (uint8_t register_index = 4; register_index < 16; register_index++) { if (register_bitmask & (1 << (register_index - 4))) { if (!PopRegister(thread_context, register_index)) { return UnwindInstructionResult::kAborted; @@ -325,14 +325,16 @@ } const span<const FunctionTableEntry>::const_iterator - function_table_entry_start = function_offset_table_indices.begin() + - page_start_instructions[page_number]; + function_table_entry_start = + function_offset_table_indices.begin() + + checked_cast<ptrdiff_t>(page_start_instructions[page_number]); const span<const FunctionTableEntry>::const_iterator function_table_entry_end = page_number == page_start_instructions.size() - 1 ? function_offset_table_indices.end() : function_offset_table_indices.begin() + - page_start_instructions[page_number + 1]; + checked_cast<ptrdiff_t>( + page_start_instructions[page_number + 1]); // `std::upper_bound` finds first element that > target in range // [function_table_entry_start, function_table_entry_end). @@ -386,7 +388,8 @@ // multiple pages. uint16_t function_start_page_number = page_number; while (function_offset_table_indices.begin() + - page_start_instructions[function_start_page_number] > + checked_cast<ptrdiff_t>( + page_start_instructions[function_start_page_number]) > entry_location) { // First page in page table must not be empty. DCHECK_NE(function_start_page_number, 0); @@ -394,12 +397,12 @@ }; const uint32_t function_start_address_instruction_offset = - (function_start_page_number << 16) + + (uint32_t{function_start_page_number} << 16) + entry_location->function_start_address_page_instruction_offset; const int instruction_offset_from_function_start = - (instruction_byte_offset_from_text_section_start >> 1) - - function_start_address_instruction_offset; + static_cast<int>((instruction_byte_offset_from_text_section_start >> 1) - + function_start_address_instruction_offset); DCHECK_GE(instruction_offset_from_function_start, 0); return FunctionOffsetTableIndex{
diff --git a/base/strings/utf_string_conversion_utils.cc b/base/strings/utf_string_conversion_utils.cc index 4b900bd..47fbbd7 100644 --- a/base/strings/utf_string_conversion_utils.cc +++ b/base/strings/utf_string_conversion_utils.cc
@@ -57,7 +57,7 @@ size_t* char_index, base_icu::UChar32* code_point) { // Conversion is easy since the source is 32-bit. - *code_point = src[*char_index]; + *code_point = static_cast<base_icu::UChar32>(src[*char_index]); // Validate the value. return IsValidCodepoint(*code_point);
diff --git a/base/strings/utf_string_conversions.cc b/base/strings/utf_string_conversions.cc index bf0d322..cd85637 100644 --- a/base/strings/utf_string_conversions.cc +++ b/base/strings/utf_string_conversions.cc
@@ -88,7 +88,7 @@ void UnicodeAppendUnsafe(Char* out, size_t* size, base_icu::UChar32 code_point) { - out[(*size)++] = code_point; + out[(*size)++] = static_cast<Char>(code_point); } // DoUTFConversion ------------------------------------------------------------ @@ -171,7 +171,7 @@ bool success = true; for (size_t i = 0; i < src_len; ++i) { - base_icu::UChar32 code_point = src[i]; + auto code_point = static_cast<base_icu::UChar32>(src[i]); if (!IsValidCodepoint(code_point)) { success = false;
diff --git a/base/synchronization/condition_variable_posix.cc b/base/synchronization/condition_variable_posix.cc index 0a903e7..3b56c10 100644 --- a/base/synchronization/condition_variable_posix.cc +++ b/base/synchronization/condition_variable_posix.cc
@@ -91,7 +91,8 @@ int64_t usecs = max_time.InMicroseconds(); struct timespec relative_time; - relative_time.tv_sec = usecs / Time::kMicrosecondsPerSecond; + relative_time.tv_sec = + static_cast<time_t>(usecs / Time::kMicrosecondsPerSecond); relative_time.tv_nsec = (usecs % Time::kMicrosecondsPerSecond) * Time::kNanosecondsPerMicrosecond;
diff --git a/base/task/bind_post_task_unittest.nc b/base/task/bind_post_task_unittest.nc index f90387a..a5213cc 100644 --- a/base/task/bind_post_task_unittest.nc +++ b/base/task/bind_post_task_unittest.nc
@@ -17,7 +17,7 @@ return 5; } -#if defined(NCTEST_ONCE_NON_VOID_RETURN) // [r"fatal error: static_assert failed due to requirement 'std::is_same<int, void>::value':? \"?OnceCallback must have void return type in order to produce a closure for PostTask\(\). Use base::IgnoreResult\(\) to drop the return value if desired.\"?"] +#if defined(NCTEST_ONCE_NON_VOID_RETURN) // [r"fatal error: static_assert failed due to requirement 'std::is_same<int, void>::value': OnceCallback must have void return type in order to produce a closure for PostTask\(\). Use base::IgnoreResult\(\) to drop the return value if desired."] // OnceCallback with non-void return type. void WontCompile() { OnceCallback<int()> cb = BindOnce(&ReturnInt); @@ -25,7 +25,7 @@ std::move(post_cb).Run(); } -#elif defined(NCTEST_REPEATING_NON_VOID_RETURN) // [r"fatal error: static_assert failed due to requirement 'std::is_same<int, void>::value':? \"?RepeatingCallback must have void return type in order to produce a closure for PostTask\(\). Use base::IgnoreResult\(\) to drop the return value if desired.\"?"] +#elif defined(NCTEST_REPEATING_NON_VOID_RETURN) // [r"fatal error: static_assert failed due to requirement 'std::is_same<int, void>::value': RepeatingCallback must have void return type in order to produce a closure for PostTask\(\). Use base::IgnoreResult\(\) to drop the return value if desired."] // RepeatingCallback with non-void return type. void WontCompile() { RepeatingCallback<int()> cb = BindRepeating(&ReturnInt);
diff --git a/base/third_party/cityhash/city.cc b/base/third_party/cityhash/city.cc index 913d91f4..db7afa1e 100644 --- a/base/third_party/cityhash/city.cc +++ b/base/third_party/cityhash/city.cc
@@ -190,7 +190,7 @@ uint32 b = 0; uint32 c = 9; for (size_t i = 0; i < len; i++) { - signed char v = s[i]; + signed char v = static_cast<signed char>(s[i]); b = b * c1 + static_cast<uint32>(v); c ^= b; }
diff --git a/base/threading/platform_thread_posix.cc b/base/threading/platform_thread_posix.cc index 23e18d1..a39ed33 100644 --- a/base/threading/platform_thread_posix.cc +++ b/base/threading/platform_thread_posix.cc
@@ -287,9 +287,9 @@ // Break the duration into seconds and nanoseconds. // NOTE: TimeDelta's microseconds are int64s while timespec's // nanoseconds are longs, so this unpacking must prevent overflow. - sleep_time.tv_sec = duration.InSeconds(); + sleep_time.tv_sec = static_cast<time_t>(duration.InSeconds()); duration -= Seconds(sleep_time.tv_sec); - sleep_time.tv_nsec = duration.InMicroseconds() * 1000; // nanoseconds + sleep_time.tv_nsec = static_cast<long>(duration.InMicroseconds() * 1000); while (nanosleep(&sleep_time, &remaining) == -1 && errno == EINTR) sleep_time = remaining;
diff --git a/base/time/time.cc b/base/time/time.cc index 65d263f..32c9207 100644 --- a/base/time/time.cc +++ b/base/time/time.cc
@@ -159,8 +159,9 @@ if (is_null()) return 0; // Preserve 0 so we can tell it doesn't exist. if (!is_inf() && ((std::numeric_limits<int64_t>::max() - - kTimeTToMicrosecondsOffset) > us_)) - return (*this - UnixEpoch()).InSeconds(); + kTimeTToMicrosecondsOffset) > us_)) { + return static_cast<time_t>((*this - UnixEpoch()).InSeconds()); + } return (us_ < 0) ? std::numeric_limits<time_t>::min() : std::numeric_limits<time_t>::max(); }
diff --git a/base/time/time_conversion_posix.cc b/base/time/time_conversion_posix.cc index 7d6c0a9..5a58626 100644 --- a/base/time/time_conversion_posix.cc +++ b/base/time/time_conversion_posix.cc
@@ -24,7 +24,7 @@ int64_t microseconds = InMicroseconds(); time_t seconds = 0; if (microseconds >= Time::kMicrosecondsPerSecond) { - seconds = InSeconds(); + seconds = static_cast<time_t>(InSeconds()); microseconds -= seconds * Time::kMicrosecondsPerSecond; } struct timespec result = { @@ -59,7 +59,7 @@ return result; } int64_t us = us_ - kTimeTToMicrosecondsOffset; - result.tv_sec = us / Time::kMicrosecondsPerSecond; + result.tv_sec = static_cast<time_t>(us / Time::kMicrosecondsPerSecond); result.tv_usec = us % Time::kMicrosecondsPerSecond; return result; }
diff --git a/base/trace_event/cpufreq_monitor_android.cc b/base/trace_event/cpufreq_monitor_android.cc index 001edff..79e6da6f 100644 --- a/base/trace_event/cpufreq_monitor_android.cc +++ b/base/trace_event/cpufreq_monitor_android.cc
@@ -88,7 +88,7 @@ base::SplitResult::SPLIT_WANT_NONEMPTY)) { unsigned int cpu_id; if (base::StringToUint(str_piece, &cpu_id)) { - if (cpu_id != i && cpu_id >= 0 && cpu_id <= kernel_max_cpu) + if (cpu_id != i && cpu_id <= kernel_max_cpu) cpus_to_monitor[cpu_id] = 0; } } @@ -194,10 +194,10 @@ lseek(fd, 0L, SEEK_SET); char data[kNumBytesToReadForSampling]; - size_t bytes_read = read(fd, data, kNumBytesToReadForSampling); + ssize_t bytes_read = read(fd, data, kNumBytesToReadForSampling); if (bytes_read > 0) { - if (bytes_read < kNumBytesToReadForSampling) - data[bytes_read] = '\0'; + if (static_cast<size_t>(bytes_read) < kNumBytesToReadForSampling) + data[static_cast<size_t>(bytes_read)] = '\0'; int ret = sscanf(data, "%d", &freq); if (ret == 0 || ret == std::char_traits<char>::eof()) freq = 0;
diff --git a/base/trace_event/trace_event_android.cc b/base/trace_event/trace_event_android.cc index 4fa1b1de..794b7cb 100644 --- a/base/trace_event/trace_event_android.cc +++ b/base/trace_event/trace_event_android.cc
@@ -34,7 +34,7 @@ fd, buffer + total_written, size - total_written)); if (written <= 0) break; - total_written += written; + total_written += static_cast<size_t>(written); } // Tracing might have been disabled before we were notified about it, which // triggers EBADF. Since enabling and disabling atrace is racy, ignore the @@ -62,15 +62,17 @@ out += ';'; out += arg_names[i]; out += '='; - std::string::size_type value_start = out.length(); + size_t value_start = out.length(); args.values()[i].AppendAsJSON(args.types()[i], &out); // Remove the quotes which may confuse the atrace script. ReplaceSubstringsAfterOffset(&out, value_start, "\\\"", "'"); ReplaceSubstringsAfterOffset(&out, value_start, "\"", ""); // Replace chars used for separators with similar chars in the value. - std::replace(out.begin() + value_start, out.end(), ';', ','); - std::replace(out.begin() + value_start, out.end(), '|', '!'); + std::replace(out.begin() + static_cast<ptrdiff_t>(value_start), out.end(), + ';', ','); + std::replace(out.begin() + static_cast<ptrdiff_t>(value_start), out.end(), + '|', '!'); } out += '|';
diff --git a/base/values.cc b/base/values.cc index c1430e37..6496c24 100644 --- a/base/values.cc +++ b/base/values.cc
@@ -1229,10 +1229,6 @@ return GetDict().FindStringByDottedPath(path); } -const Value::BlobStorage* Value::FindBlobPath(StringPiece path) const { - return GetDict().FindBlobByDottedPath(path); -} - const Value* Value::FindDictPath(StringPiece path) const { return FindPathOfType(path, Type::DICTIONARY); }
diff --git a/base/values.h b/base/values.h index edc710de..2ce0121 100644 --- a/base/values.h +++ b/base/values.h
@@ -902,10 +902,6 @@ // dots. const std::string* FindStringPath(StringPiece path) const; std::string* FindStringPath(StringPiece path); - // DEPRECATED: Use `Value::Dict::FindBlobByDottedPath()`, or - // `Value::Dict::FindBlob()` if the path only has one component, i.e. has no - // dots. - const BlobStorage* FindBlobPath(StringPiece path) const; // DEPRECATED: Use `Value::Dict::FindDictByDottedPath()`, or // `Value::Dict::FindDict()` if the path only has one component, i.e. has no // dots.
diff --git a/build/android/BUILD.gn b/build/android/BUILD.gn index 2d8ecacbe..b7275da3 100644 --- a/build/android/BUILD.gn +++ b/build/android/BUILD.gn
@@ -87,6 +87,7 @@ python_library("test_result_presentations_py") { pydeps_file = "pylib/results/presentation/test_results_presentation.pydeps" + data = [ "//build/android/pylib/results/presentation/template" ] } python_library("devil_chromium_py") {
diff --git a/build/android/pylib/gtest/gtest_config.py b/build/android/pylib/gtest/gtest_config.py index 31b6d83c..3ac1955 100644 --- a/build/android/pylib/gtest/gtest_config.py +++ b/build/android/pylib/gtest/gtest_config.py
@@ -35,7 +35,7 @@ 'media_unittests', 'midi_unittests', 'net_unittests', - 'sandbox_unittests', + 'sandbox_linux_unittests', 'skia_unittests', 'sql_unittests', 'storage_unittests', @@ -49,7 +49,7 @@ # http://crbug.com/344868 ASAN_EXCLUDED_TEST_SUITES = [ 'breakpad_unittests', - 'sandbox_unittests', + 'sandbox_linux_unittests', # The internal ASAN recipe cannot run step "unit_tests_apk", this is the # only internal recipe affected. See http://crbug.com/607850
diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index 0c315ce..eb5464f4 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn
@@ -1522,6 +1522,9 @@ cflags += [ # TODO(crbug.com/1343303) Evaluate and possibly enable. "-Wno-array-parameter", + + # TODO(crbug.com/1343975) Evaluate and possibly enable. + "-Wno-deprecated-builtins", ] }
diff --git a/build/fuchsia/linux_internal.sdk.sha1 b/build/fuchsia/linux_internal.sdk.sha1 index 3de816c..7001529 100644 --- a/build/fuchsia/linux_internal.sdk.sha1 +++ b/build/fuchsia/linux_internal.sdk.sha1
@@ -1 +1 @@ -8.20220713.0.1 +8.20220713.2.1
diff --git a/cc/paint/image_transfer_cache_entry.cc b/cc/paint/image_transfer_cache_entry.cc index 5e5179e..6c32b6c2 100644 --- a/cc/paint/image_transfer_cache_entry.cc +++ b/cc/paint/image_transfer_cache_entry.cc
@@ -300,7 +300,7 @@ // 4-byte boundary. safe_size += 4; safe_size += pixmap_->computeByteSize(); - size_ = base::bits::AlignUp(safe_size.ValueOrDefault(0), + size_ = base::bits::AlignUp(size_t{safe_size.ValueOrDefault(0)}, PaintOpWriter::Alignment()); } @@ -350,7 +350,7 @@ safe_size += decoded_color_space_size + align; // SkColorSpace for YUVA image for (size_t i = 0; i < num_yuva_pixmaps; ++i) safe_size += SafeSizeForPixmap(*yuv_pixmaps_->at(i)); - size_ = base::bits::AlignUp(safe_size.ValueOrDefault(0), + size_ = base::bits::AlignUp(size_t{safe_size.ValueOrDefault(0)}, PaintOpWriter::Alignment()); }
diff --git a/cc/paint/paint_op_buffer_fuzzer.cc b/cc/paint/paint_op_buffer_fuzzer.cc index 3324ae0..a20a5050 100644 --- a/cc/paint/paint_op_buffer_fuzzer.cc +++ b/cc/paint/paint_op_buffer_fuzzer.cc
@@ -130,8 +130,9 @@ if (bytes_for_fonts > size) bytes_for_fonts = size / 2; // PaintOpBuffer only accepts 4 bytes aligned buffer. - bytes_for_fonts = - base::bits::AlignDown(bytes_for_fonts, cc::PaintOpWriter::Alignment()); + bytes_for_fonts = base::bits::AlignDown( + bytes_for_fonts, + base::checked_cast<uint32_t>(cc::PaintOpWriter::Alignment())); FontSupport font_support; scoped_refptr<gpu::ServiceFontManager> font_manager(
diff --git a/chrome/BUILD.gn b/chrome/BUILD.gn index f9cb21e8..f42cc96 100644 --- a/chrome/BUILD.gn +++ b/chrome/BUILD.gn
@@ -1607,10 +1607,6 @@ sources = [ "browser/android/bookmarks/partner_bookmarks_reader.h" ] } - java_cpp_enum("quick_action_category_enum_javagen") { - sources = [ "browser/android/contextualsearch/resolved_search_term.h" ] - } - java_cpp_enum("offline_pages_enum_javagen") { sources = [ "browser/offline_pages/offline_page_utils.h" ] }
diff --git a/chrome/VERSION b/chrome/VERSION index f4f2b8a6..a0f292e 100644 --- a/chrome/VERSION +++ b/chrome/VERSION
@@ -1,4 +1,4 @@ MAJOR=105 MINOR=0 -BUILD=5178 +BUILD=5179 PATCH=0
diff --git a/chrome/android/BUILD.gn b/chrome/android/BUILD.gn index b545cdc5..07cde42 100644 --- a/chrome/android/BUILD.gn +++ b/chrome/android/BUILD.gn
@@ -678,7 +678,6 @@ "//chrome:instant_apps_reasons_enum_javagen", "//chrome:offline_pages_enum_javagen", "//chrome:partner_bookmarks_javagen", - "//chrome:quick_action_category_enum_javagen", "//chrome:supervised_user_url_filter_enum_javagen", "//chrome/browser:screenshot_mode_enum", "//chrome/browser:sharing_dialog_type_generated_enum", @@ -689,6 +688,7 @@ "//chrome/browser/ui:duplicate_download_enums_java", "//components/browsing_data/core:browsing_data_utils_java", "//components/browsing_data/core:clear_browsing_data_tab_java", + "//components/contextual_search/core/browser:quick_action_category_enum_javagen", "//components/dom_distiller/core:distiller_type_java", "//components/ntp_tiles:ntp_tiles_enums_java", "//components/offline_pages/core:offline_page_model_enums_java",
diff --git a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiTest.java b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiTest.java index 2a036c4..dd42a88b 100644 --- a/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiTest.java +++ b/chrome/android/features/tab_ui/javatests/src/org/chromium/chrome/browser/tasks/tab_management/TabGroupUiTest.java
@@ -158,7 +158,6 @@ @Test @LargeTest @Feature({"RenderTest"}) - @DisabledTest(message = "https://crbug.com/1208386") public void testRenderStrip_Select10thTabIn10Tabs() throws IOException { final ChromeTabbedActivity cta = mActivityTestRule.getActivity(); AtomicReference<RecyclerView> recyclerViewReference = new AtomicReference<>();
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelContent.java b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelContent.java index 60a39f0..733861a 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelContent.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/compositor/bottombar/OverlayPanelContent.java
@@ -161,8 +161,7 @@ } @Override - public boolean shouldIgnoreNavigation(NavigationHandle navigationHandle, GURL escapedUrl, - boolean applyUserGestureCarryover) { + public boolean shouldIgnoreNavigation(NavigationHandle navigationHandle, GURL escapedUrl) { // If either of the required params for the delegate are null, do not call the // delegate and ignore the navigation. if (mExternalNavHandler == null || navigationHandle == null) return true;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchContext.java b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchContext.java index 011dfda..066cd65 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchContext.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/contextualsearch/ContextualSearchContext.java
@@ -11,6 +11,7 @@ import androidx.annotation.VisibleForTesting; import org.chromium.base.annotations.CalledByNative; +import org.chromium.base.annotations.NativeClassQualifiedName; import org.chromium.base.annotations.NativeMethods; /** @@ -460,18 +461,26 @@ @NativeMethods interface Natives { + @NativeClassQualifiedName("NativeContextualSearchContext") long init(ContextualSearchContext caller); + @NativeClassQualifiedName("NativeContextualSearchContext") void destroy(long nativeContextualSearchContext, ContextualSearchContext caller); + @NativeClassQualifiedName("NativeContextualSearchContext") void setResolveProperties(long nativeContextualSearchContext, ContextualSearchContext caller, String homeCountry, boolean doSendBasePageUrl); + @NativeClassQualifiedName("NativeContextualSearchContext") void adjustSelection(long nativeContextualSearchContext, ContextualSearchContext caller, int startAdjust, int endAdjust); + @NativeClassQualifiedName("NativeContextualSearchContext") String detectLanguage(long nativeContextualSearchContext, ContextualSearchContext caller); + @NativeClassQualifiedName("NativeContextualSearchContext") void setTranslationLanguages(long nativeContextualSearchContext, ContextualSearchContext caller, String detectedLanguage, String targetLanguage, String fluentLanguages); + @NativeClassQualifiedName("NativeContextualSearchContext") void prepareToResolve(long nativeContextualSearchContext, ContextualSearchContext caller, boolean isExactSearch, String relatedSearchesStamp); + @NativeClassQualifiedName("NativeContextualSearchContext") void setSurroundingsAndSelection(long nativeContextualSearchContext, ContextualSearchContext caller, String surroundings, int startOffset, int endOffset);
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java index c1e66af..9c45de9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/dom_distiller/ReaderModeManager.java
@@ -228,8 +228,8 @@ mCustomTabNavigationDelegate = new InterceptNavigationDelegate() { @Override - public boolean shouldIgnoreNavigation(NavigationHandle navigationHandle, - GURL escapedUrl, boolean applyUserGestureCarryover) { + public boolean shouldIgnoreNavigation( + NavigationHandle navigationHandle, GURL escapedUrl) { if (DomDistillerUrlUtils.isDistilledPage(navigationHandle.getUrl()) || navigationHandle.isExternalProtocol()) { return false;
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/media/PictureInPictureActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/media/PictureInPictureActivity.java index ce9306d..145ffe2 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/media/PictureInPictureActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/media/PictureInPictureActivity.java
@@ -87,6 +87,9 @@ // If present, this is the video's aspect ratio. private Rational mAspectRatio; + // Maximum pip width, in pixels, to prevent resizes that are too big. + private int mMaxWidth; + private BroadcastReceiver mMediaSessionReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { @@ -186,6 +189,11 @@ public void finishNativeInitialization() { super.finishNativeInitialization(); + // Compute a somewhat arbitrary cut-off of 90% of the window's display width. The PiP + // window can't be anywhere near this big, so the exact value doesn't matter. We'll ignore + // resizes messages that are above it, since they're spurious. + mMaxWidth = (int) ((getWindowAndroid().getDisplay().getDisplayWidth()) * 0.9); + mCompositorView = CompositorViewFactory.create( this, getWindowAndroid(), new ThinWebViewConstraints()); addContentView(mCompositorView.getView(), @@ -200,8 +208,13 @@ // We sometimes get an initial update of zero before getting something reasonable. if (top == bottom || left == right) return; + // On close, sometimes we get a size update that's almost the entire display width. + // Pip window's can't be that big, so ignore it. + final int width = right - left; + if (width > mMaxWidth) return; + PictureInPictureActivityJni.get().onViewSizeChanged( - sNativeOverlayWindowAndroid, right - left, bottom - top); + sNativeOverlayWindowAndroid, width, bottom - top); } }); @@ -454,6 +467,11 @@ return original; } + @VisibleForTesting + /* package */ View getViewForTesting() { + return mCompositorView.getView(); + } + @NativeMethods public interface Natives { void onActivityStart(long nativeOverlayWindowAndroid, PictureInPictureActivity self,
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java index ee8996d..dcc3b5ef12 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/externalnav/UrlOverridingTest.java
@@ -17,6 +17,7 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.net.Uri; +import android.os.SystemClock; import android.support.test.InstrumentationRegistry; import android.support.test.runner.lifecycle.Stage; import android.text.TextUtils; @@ -35,6 +36,7 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; +import org.mockito.Spy; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import org.mockito.quality.Strictness; @@ -133,8 +135,6 @@ BASE_PATH + "navigation_from_xhr_callback_parent_frame.html"; private static final String NAVIGATION_FROM_XHR_CALLBACK_AND_SHORT_TIMEOUT_PAGE = BASE_PATH + "navigation_from_xhr_callback_and_short_timeout.html"; - private static final String NAVIGATION_FROM_XHR_CALLBACK_AND_LONG_TIMEOUT_PAGE = - BASE_PATH + "navigation_from_xhr_callback_and_long_timeout.html"; private static final String NAVIGATION_WITH_FALLBACK_URL_PAGE = BASE_PATH + "navigation_with_fallback_url.html"; private static final String NAVIGATION_WITH_FALLBACK_URL_PARENT_FRAME_PAGE = @@ -171,6 +171,9 @@ @Mock private RedirectHandler mRedirectHandler; + @Spy + private RedirectHandler mSpyRedirectHandler; + private static class TestTabObserver extends EmptyTabObserver { private final CallbackHelper mFinishCallback; private final CallbackHelper mFailCallback; @@ -579,11 +582,30 @@ @Test @SmallTest - public void testNavigationFromXHRCallbackAndLongTimeout() { + public void testNavigationFromXHRCallbackAndLongTimeout() throws Exception { mActivityTestRule.startMainActivityOnBlankPage(); - loadUrlAndWaitForIntentUrl( - mTestServer.getURL(NAVIGATION_FROM_XHR_CALLBACK_AND_LONG_TIMEOUT_PAGE), true, + + final Tab tab = mActivityTestRule.getActivity().getActivityTab(); + TestThreadUtils.runOnUiThreadBlocking( + () -> RedirectHandlerTabHelper.swapHandlerFor(tab, mSpyRedirectHandler)); + + // This is a little fragile to code changes, but better than waiting 15 real seconds. + Mockito.doReturn(SystemClock.elapsedRealtime()) // Initial Navigation create + .doReturn(SystemClock.elapsedRealtime()) // Initial Navigation shouldOverride + .doReturn(SystemClock.elapsedRealtime()) // XHR Navigation create + .doReturn(SystemClock.elapsedRealtime() + + RedirectHandler.NAVIGATION_CHAIN_TIMEOUT_MILLIS + 1) // xhr callback + .when(mSpyRedirectHandler) + .currentRealtime(); + + @OverrideUrlLoadingResultType + int result = loadUrlAndWaitForIntentUrl( + mTestServer.getURL(NAVIGATION_FROM_XHR_CALLBACK_AND_SHORT_TIMEOUT_PAGE), true, false); + + Assert.assertEquals(OverrideUrlLoadingResultType.OVERRIDE_WITH_ASYNC_ACTION, result); + + assertMessagePresent(); } @Test
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/media/PictureInPictureActivityTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/media/PictureInPictureActivityTest.java index a3b6b18..9285a1f 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/media/PictureInPictureActivityTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/media/PictureInPictureActivityTest.java
@@ -5,6 +5,7 @@ package org.chromium.chrome.browser.media; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -17,6 +18,7 @@ import android.os.Bundle; import android.support.test.InstrumentationRegistry; import android.util.Rational; +import android.view.View; import androidx.annotation.RequiresApi; import androidx.test.filters.MediumTest; @@ -31,6 +33,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.chromium.base.test.util.Batch; import org.chromium.base.test.util.CommandLineFlags; import org.chromium.base.test.util.Criteria; import org.chromium.base.test.util.CriteriaHelper; @@ -52,6 +55,7 @@ * Tests for PictureInPictureActivity. */ @RunWith(ChromeJUnit4ClassRunner.class) +@Batch(Batch.PER_CLASS) @CommandLineFlags.Add({ChromeSwitches.DISABLE_FIRST_RUN_EXPERIENCE}) @RequiresApi(Build.VERSION_CODES.O) public class PictureInPictureActivityTest { @@ -154,6 +158,25 @@ verify(mNativeMock, times(1)).onBackToTab(NATIVE_OVERLAY); } + @Test + @MediumTest + @MinAndroidSdkLevel(Build.VERSION_CODES.O) + public void testResize() throws Throwable { + PictureInPictureActivity activity = startPictureInPictureActivity(); + // Resize to some reasonable size, and verify that native is told about it. + final int reasonableSize = 10; + View view = activity.getViewForTesting(); + TestThreadUtils.runOnUiThreadBlocking( + () -> view.layout(0, 0, reasonableSize, reasonableSize)); + verify(mNativeMock, times(1)) + .onViewSizeChanged(NATIVE_OVERLAY, reasonableSize, reasonableSize); + // An unreasonably large size should not generate a resize event. + final int unreasonableSize = activity.getWindowAndroid().getDisplay().getDisplayWidth(); + TestThreadUtils.runOnUiThreadBlocking( + () -> view.layout(0, 0, unreasonableSize, unreasonableSize)); + verify(mNativeMock, times(0)).onViewSizeChanged(anyInt(), anyInt(), anyInt()); + } + private WebContents getWebContents() { return mActivityTestRule.getActivity().getCurrentWebContents(); }
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/InterceptNavigationDelegateTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/InterceptNavigationDelegateTest.java index 06ce745..77cee83 100644 --- a/chrome/android/javatests/src/org/chromium/chrome/browser/tab/InterceptNavigationDelegateTest.java +++ b/chrome/android/javatests/src/org/chromium/chrome/browser/tab/InterceptNavigationDelegateTest.java
@@ -111,11 +111,10 @@ new InterceptNavigationDelegateClientImpl(tab); InterceptNavigationDelegateImpl delegate = new InterceptNavigationDelegateImpl(client) { @Override - public boolean shouldIgnoreNavigation(NavigationHandle navigationHandle, - GURL escapedUrl, boolean applyUserGestureCarryover) { + public boolean shouldIgnoreNavigation( + NavigationHandle navigationHandle, GURL escapedUrl) { mNavParamHistory.add(navigationHandle); - return super.shouldIgnoreNavigation( - navigationHandle, escapedUrl, applyUserGestureCarryover); + return super.shouldIgnoreNavigation(navigationHandle, escapedUrl); } }; client.initializeWithDelegate(delegate);
diff --git a/chrome/app/bookmarks_strings.grdp b/chrome/app/bookmarks_strings.grdp index 30eaa7c6..8bf7ea18 100644 --- a/chrome/app/bookmarks_strings.grdp +++ b/chrome/app/bookmarks_strings.grdp
@@ -280,6 +280,9 @@ <message name="IDS_BOOKMARK_FOLDER_EDITOR_WINDOW_TITLE_NEW" desc="Window title of editor for new bookmark folders"> New folder </message> + <message name="IDS_UNNAMED_BOOKMARK_FOLDER" desc="Tooltip for unnamed bookmark folders"> + Unnamed folder + </message> <message name="IDS_BOOKMARK_ALL_TABS_DIALOG_TITLE" desc="The title of the Bookmark All Tabs dialog."> Bookmark all tabs </message> @@ -297,6 +300,9 @@ <message name="IDS_BOOKMARK_FOLDER_EDITOR_WINDOW_TITLE_NEW" desc="In Title Case: Window title of editor for new bookmark folders"> New Folder </message> + <message name="IDS_UNNAMED_BOOKMARK_FOLDER" desc="In Title Case: Tooltip for unnamed bookmark folders"> + Unnamed Folder + </message> <message name="IDS_BOOKMARK_ALL_TABS_DIALOG_TITLE" desc="In Title Case: The title of the Bookmark All Tabs dialog."> Bookmark All Tabs </message>
diff --git a/chrome/app/bookmarks_strings_grdp/IDS_UNNAMED_BOOKMARK_FOLDER.png.sha1 b/chrome/app/bookmarks_strings_grdp/IDS_UNNAMED_BOOKMARK_FOLDER.png.sha1 new file mode 100644 index 0000000..9747153 --- /dev/null +++ b/chrome/app/bookmarks_strings_grdp/IDS_UNNAMED_BOOKMARK_FOLDER.png.sha1
@@ -0,0 +1 @@ +0f05e1a78d106cb19aeb1b3adadb988558caee97 \ No newline at end of file
diff --git a/chrome/app/resources/generated_resources_af.xtb b/chrome/app/resources/generated_resources_af.xtb index 97eb138..4380cf40 100644 --- a/chrome/app/resources/generated_resources_af.xtb +++ b/chrome/app/resources/generated_resources_af.xtb
@@ -1279,6 +1279,7 @@ <translation id="2180620921879609685">Blokkeer inhoud op enige bladsy</translation> <translation id="2182058453334755893">Gekopieer na jou knipbord</translation> <translation id="2184515124301515068">Laat Chrome kies wanneer webwerwe klank kan speel (aanbeveel)</translation> +<translation id="2186206192313702726">Google Lens</translation> <translation id="2186711480981247270">Bladsy van 'n ander toestel af gedeel</translation> <translation id="2187675480456493911">Is met ander toestelle in jou rekening gesinkroniseer. Instellings wat deur ander gebruikers gewysig is, sal nie gesinkroniseer word nie. <ph name="LINK_BEGIN" />Kom meer te wete<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Bedienersertifikaat-invoerfout</translation> @@ -4238,7 +4239,6 @@ <translation id="5054374119096692193">Sien alle kaartopsies in <ph name="BEGIN_LINK" />Pasmaak Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Koppel tans aan die houer</translation> <translation id="5057110919553308744">Wanneer jy die uitbreiding klik</translation> -<translation id="505776528429481161">Verbind toestelle in die omtrek maklik en stel hulle op</translation> <translation id="5059241099014281248">Beperk aanmelding</translation> <translation id="5059526285558225588">Kies wat om te deel</translation> <translation id="5060332552815861872">Daar is 1 drukker beskikbaar om te stoor.</translation>
diff --git a/chrome/app/resources/generated_resources_am.xtb b/chrome/app/resources/generated_resources_am.xtb index f037298..dc53852 100644 --- a/chrome/app/resources/generated_resources_am.xtb +++ b/chrome/app/resources/generated_resources_am.xtb
@@ -4229,7 +4229,6 @@ <translation id="5054374119096692193">በ<ph name="BEGIN_LINK" />Chrome አብጅ<ph name="END_LINK" /> ውስጥ ሁሉንም የካርድ አማራጮች ይመልከቱ</translation> <translation id="5056950756634735043">ከመያዣው ጋር በመገናኘት ላይ</translation> <translation id="5057110919553308744">ቅጥያውን ጠቅ ሲያደርጉ</translation> -<translation id="505776528429481161">በአቅራቢያ ያሉ መሣሪያዎችን በቀላሉ ያገናኙ እና ያዋቅሩ</translation> <translation id="5059241099014281248">በመለያ መግባትን ገድብ</translation> <translation id="5059526285558225588">ምን እንደሚያጋሩ ይምረጡ</translation> <translation id="5060332552815861872">ለማስቀመጥ ሊገኝ የሚችል 1 አታሚ አለ።</translation>
diff --git a/chrome/app/resources/generated_resources_ar.xtb b/chrome/app/resources/generated_resources_ar.xtb index 63c3ee08..f821307 100644 --- a/chrome/app/resources/generated_resources_ar.xtb +++ b/chrome/app/resources/generated_resources_ar.xtb
@@ -1270,6 +1270,7 @@ <translation id="2180620921879609685">حظر المحتوى على أي صفحة</translation> <translation id="2182058453334755893">تم النسخ إلى الحافظة.</translation> <translation id="2184515124301515068">السماح لمتصفِّح Chrome باختيار الوقت الذي يمكن للمواقع الإلكترونية تشغيل الصوت فيه (مُوصى به)</translation> +<translation id="2186206192313702726">عدسة Google</translation> <translation id="2186711480981247270">صفحة تمت مشاركتها من جهاز آخر</translation> <translation id="2187675480456493911">تمت مزامنة الشبكة مع الأجهزة الأخرى المرتبطة بحسابك. ولن تتم مزامنة الإعدادات التي عدَّلها المستخدمون. <ph name="LINK_BEGIN" />مزيد من المعلومات<ph name="LINK_END" /></translation> <translation id="2187895286714876935">خط استيراد شهادة الخادم</translation> @@ -4224,7 +4225,6 @@ <translation id="5054374119096692193">الاطّلاع على كل خيارات البطاقة في القسم <ph name="BEGIN_LINK" />تخصيص Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">جارٍ الاتصال بالحاوية</translation> <translation id="5057110919553308744">عند النقر على "الإضافة"</translation> -<translation id="505776528429481161">يمكنك الاتصال بالأجهزة القريبة وإعدادها بسهولة.</translation> <translation id="5059241099014281248">حظر تسجيل الدخول على مستخدمين محددين</translation> <translation id="5059526285558225588">اختيار ما تريد مشاركته</translation> <translation id="5060332552815861872">تتوفّر طابعة واحدة للحفظ.</translation>
diff --git a/chrome/app/resources/generated_resources_as.xtb b/chrome/app/resources/generated_resources_as.xtb index 5efe1f7..fd65af16 100644 --- a/chrome/app/resources/generated_resources_as.xtb +++ b/chrome/app/resources/generated_resources_as.xtb
@@ -1257,6 +1257,7 @@ <translation id="2159488579268505102">ইউএছবি-চি</translation> <translation id="216169395504480358">ৱাই-ফাই যোগ কৰক…</translation> <translation id="2162155940152307086">আপুনি ছিংকৰ ছেটিংসমূহৰ পৰা আঁতৰি যোৱাৰ লগে লগে ছিংক আৰম্ভ হ‘ব</translation> +<translation id="2162705204091149050">আপোনাৰ ব্ৰাউজাৰ, OS, ডিভাইচ, ইনষ্টল কৰি থোৱা ছফ্টৱেৰ আৰু ফাইলৰ বিষয়ে তথ্য পঢ়ক</translation> <translation id="2162926944953615670">কোনো ই-ছিমৰ প্ৰ’ফাইল উপলব্ধ নহয়</translation> <translation id="2163470535490402084">আপোনাৰ <ph name="DEVICE_TYPE" />ত ছাইন ইন কৰিবলৈ ইণ্টাৰনেট সংযোগ কৰক।</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> আৰু অন্য ১ টা ছুইচ</translation> @@ -2505,6 +2506,7 @@ <translation id="3359256513598016054">প্ৰমাণপত্ৰৰ নীতিৰ সীমাবদ্ধতা</translation> <translation id="3360297538363969800">প্ৰিণ্টিং কৰিব পৰা নগ’ল। আপোনাৰ প্ৰিণ্টাৰ পৰীক্ষা কৰি পুনৰ চেষ্টা কৰক।</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" />এ আপোনাৰ সৈতে <ph name="ATTACHMENTS" /> শ্বেয়াৰ কৰি আছে।}one{<ph name="DEVICE_NAME" />এ আপোনাৰ সৈতে <ph name="ATTACHMENTS" /> শ্বেয়াৰ কৰি আছে।}other{<ph name="DEVICE_NAME" />এ আপোনাৰ সৈতে <ph name="ATTACHMENTS" /> শ্বেয়াৰ কৰি আছে।}}</translation> +<translation id="3363202073972776113">এই নতুন প্ৰ’ফাইলটো আপোনাৰ প্ৰতিষ্ঠানে পৰিচালনা কৰিব। <ph name="BEGIN_LINK" />অধিক জানক<ph name="END_LINK" /></translation> <translation id="3364986687961713424">আপোনাৰ প্ৰশাসকৰ পৰা: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">হয় Ctrl নহয় Alt ব্যৱহাৰ কৰক</translation> <translation id="3368922792935385530">সংযোগ কৰা হ’ল</translation> @@ -2539,6 +2541,7 @@ <translation id="339722927132407568">স্থিৰ হৈ যায়</translation> <translation id="3399432415385675819">জাননী অক্ষম কৰা হ’ব</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> হাৰ্টজ) - একত্ৰিত</translation> +<translation id="3401484564516348917">আপোনাৰ ব্ৰাউজাৰ, OS, ডিভাইচ, ইনষ্টল কৰি থোৱা ছফ্টৱেৰ, ৰেজিষ্ট্ৰীৰ মান আৰু ফাইলৰ বিষয়ে তথ্য পঢ়ক</translation> <translation id="3402059702184703067">{COUNT,plural, =1{এই ডিভাইচটোত {COUNT} টা পাছৱৰ্ড ষ্ট'ৰ কৰা আছে}one{এই ডিভাইচটোত {COUNT} টা পাছৱৰ্ড ষ্ট'ৰ কৰা আছে}other{এই ডিভাইচটোত {COUNT} টা পাছৱৰ্ড ষ্ট'ৰ কৰা আছে}}</translation> <translation id="3402255108239926910">এটা অৱতাৰ বাছনি কৰক</translation> <translation id="3402585168444815892">ডেম’ ম’ডত পঞ্জীয়ন কৰি থকা হৈছে</translation> @@ -2785,6 +2788,7 @@ <translation id="3627879631695760395"><ph name="APP" /> ইনষ্টল কৰক ...</translation> <translation id="3628275722731025472">ব্লুটুথ অফ কৰক</translation> <translation id="3629631988386925734">স্মাৰ্ট লক সক্ষম কৰিবলৈ নিজৰ পাছৱৰ্ড দিয়ক। আগলৈ আপোনাৰ ফ’নটোৱে আপোনাৰ <ph name="DEVICE_TYPE" /> আনলক কৰিব। আপুনি ছেটিংসমূহ-লৈ গৈ স্মাৰ্ট লক অফ কৰিব পাৰে।</translation> +<translation id="3629664892718440872">এই বাছনিটো মনত ৰাখিব</translation> <translation id="3630132874740063857">আপোনাৰ ফ'ন</translation> <translation id="3630995161997703415">এই ছাইটটো যিকোনো সময়তে ব্যৱহাৰ কৰিবলৈ সেইটো আপোনাৰ শ্বেল্ফত যোগ কৰক</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />আপোনাৰ ChromeOS ডিভাইচক স্বয়ংক্ৰিয় ৰিপ’ৰ্ট পঠিওৱাৰ অনুমতি দিয়াটোৱে ChromeOSত কি সমস্যাৰ সমাধান কৰিব আৰু কি উন্নতি সাধিব লাগে তাত অগ্ৰাধিকাৰ দিয়াত আমাক সহায় কৰে। এই ৰিপ’ৰ্টসমূহত ChromeOS কেতিয়া ক্ৰেশ্ব হয়, আপুনি কোনবোৰ সুবিধা ব্যৱহাৰ কৰে, সচৰাচৰ আপুনি কিমান মেম’ৰি ব্যৱহাৰ কৰে আদিৰ দৰে বস্তুবোৰ অন্তৰ্ভুক্ত হ’ব পাৰে।<ph name="END_PARAGRAPH1" /> @@ -3273,6 +3277,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">MIDI ডিভাইচসমূহৰ সম্পূৰ্ণ নিয়ন্ত্ৰণ অস্বীকাৰ কৰা হৈছে</translation> +<translation id="4087328411748538168">সোঁফালে দেখুৱাওক</translation> <translation id="4089235344645910861">ছেটিংসমূহ ছেভ কৰা হ’ল। ছিংক কৰা আৰম্ভ হ’ল।</translation> <translation id="4090103403438682346">প্ৰমাণিত এক্সেছ সক্ষম কৰক</translation> <translation id="4090947011087001172"><ph name="SITE" />ৰ ছাইট অনুমতি ৰিছেট কৰিব নেকি?</translation> @@ -3966,6 +3971,7 @@ <translation id="4779766576531456629">ই-ছিমৰ চেলুলাৰ নেটৱৰ্কৰ নতুন নাম দিয়ক</translation> <translation id="4780321648949301421">এই হিচাপ ছেভ কৰক…</translation> <translation id="4781443161433589743">আপুনি Chromeৰ আটাইতকৈ বৰ্ধিত সুৰক্ষাৰ সুবিধা লাভ কৰি আছে</translation> +<translation id="4782861709165039462">ডিভাইচৰ হাৰ্ডৱেৰ ছুইচৰ জৰিয়তে আটাইবোৰ মাইক্ৰ’ফ’ন নিষ্ক্ৰিয় কৰা হয়</translation> <translation id="4785719467058219317">আপুনি ব্যৱহাৰ কৰি থকা সুৰক্ষা চাবিটো এই ৱেবছাইটটোত পঞ্জীকৃত নহয়</translation> <translation id="4785914069240823137">ক্ৰপ কৰাটো বাতিল কৰক</translation> <translation id="4788092183367008521">আপোনাৰ নেটৱৰ্ক সংযোগ পৰীক্ষা কৰি পুনৰ চেষ্টা কৰক।</translation> @@ -4234,7 +4240,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />Chrome কাষ্টমাইজ কৰক<ph name="END_LINK" />ত থকা কাৰ্ডৰ আটাইবোৰ বিকল্প চাওক</translation> <translation id="5056950756634735043">কণ্টেইনাৰৰ সৈতে সংযোগ কৰি থকা হৈছে</translation> <translation id="5057110919553308744">যেতিয়া আপুনি এক্সটেনশ্বনটো ক্লিক কৰে</translation> -<translation id="505776528429481161">সহজে সংযোগ কৰক আৰু কাষৰ ডিভাইচ ছেট আপ কৰক</translation> <translation id="5059241099014281248">ছাইন ইন সীমাবদ্ধ কৰক</translation> <translation id="5059526285558225588">কি শ্বেয়াৰ কৰিব সেয়া বাছনি কৰক</translation> <translation id="5060332552815861872">ছেভ কৰিবলৈ ১ টা প্ৰিণ্টাৰ উপলব্ধ।</translation> @@ -4733,6 +4738,7 @@ <translation id="5548075230008247516">আটাইবোৰ সামগ্ৰী বাছনিৰ পৰা বাদ দিয়া হৈছে, বাছনি কৰাৰ ম’ড বন্ধ হৈছে।</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" আৰু অন্য ১টা টেব}one{"<ph name="TAB_TITLE" />" আৰু অন্য #টা টেব}other{"<ph name="TAB_TITLE" />" আৰু অন্য #টা টেব}}</translation> <translation id="5548606607480005320">সুৰক্ষা পৰীক্ষা</translation> +<translation id="5548644592758170183">বাওঁফালে দেখুৱাওক</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">কীব’র্ড আৰু পাঠ ইনপুট</translation> <translation id="5553089923092577885">প্ৰমাণপত্ৰৰ নীতি মেপিং</translation> @@ -8216,6 +8222,7 @@ <translation id="8980345560318123814">মতামতৰ ৰিপ’ৰ্টসমূহ</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - ক্ৰেশ্ব হ’ল</translation> <translation id="8981825781894055334">কাগজ কম আছে</translation> +<translation id="8983018820925880511">এই নতুন প্ৰ’ফাইলটো <ph name="DOMAIN" />এ পৰিচালনা কৰিব। <ph name="BEGIN_LINK" />অধিক জানক<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" />এ <ph name="FILENAME" />ক সম্পাদনা কৰিব পাৰে</translation> <translation id="8984694057134206124">আপুনি <ph name="MINUTES" /> মিনিটৰ কাৰণে সকলোৰে বাবে দৃশ্যমান হ’ব। <ph name="LINK_BEGIN" />অধিক জানক<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Chromebookৰ বাবে Steamলৈ স্বাগতম</translation> @@ -8312,6 +8319,7 @@ <translation id="9075413375877487220">এই এক্সটেনশ্বনটো বৰ্ধিত সুৰক্ষিত ব্ৰাউজিঙৰ সুবিধাটোৱে বিশ্বাস নকৰে।</translation> <translation id="9076283476770535406">ইয়াত প্ৰাপ্তবয়স্কৰ সমল থাকিব পাৰে</translation> <translation id="9076523132036239772">দুঃখিত, আপোনাৰ ইমেইল বা পাছৱর্ড সত্যাপন কৰিব পৰা নগ'ল। প্ৰথমে কোনো নেটৱর্কত সংযোগ হ'বলৈ চেষ্টা কৰক।</translation> +<translation id="9076821103818989526">ছাইডৰ পেনেল</translation> <translation id="9076977315710973122">SMB শ্বেয়াৰ</translation> <translation id="9078193189520575214">সালসলনি প্ৰয়োগ কৰি থকা হৈছে...</translation> <translation id="9078316009970372699">তাৎক্ষণিক টেডাৰিং অক্ষম কৰক</translation>
diff --git a/chrome/app/resources/generated_resources_az.xtb b/chrome/app/resources/generated_resources_az.xtb index 3b69279..3c5f812f 100644 --- a/chrome/app/resources/generated_resources_az.xtb +++ b/chrome/app/resources/generated_resources_az.xtb
@@ -1264,6 +1264,7 @@ <translation id="2180620921879609685">Məzmunu istənilən səhifədə bloklayın</translation> <translation id="2182058453334755893">Buferə kopyalandı</translation> <translation id="2184515124301515068">Saytların avtomatik oxutma vaxtını Chrome'un seçməsinə icazə verin (məsləhətlidir)</translation> +<translation id="2186206192313702726">Google Linza</translation> <translation id="2186711480981247270">Səhifə başqa cihazdan paylaşılıb</translation> <translation id="2187675480456493911">Hesabınızdakı digər cihazlarla sinxronlaşdırılıb. Digər istifadəçilər tərəfindən dəyişdirilən ayarlar sinxronlaşdırılmayacaq. <ph name="LINK_BEGIN" />Ətraflı məlumat<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Server Sertifikatını İmport Xətası</translation> @@ -4224,7 +4225,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />Chrome'u Fərdiləşdirin<ph name="END_LINK" /> bölməsində bütün kart seçimlərini görə bilərsiniz</translation> <translation id="5056950756634735043">Konteynerə qoşulur</translation> <translation id="5057110919553308744">Artırmaya kliklədiyiniz vaxt</translation> -<translation id="505776528429481161">Yaxınlıqdakı cihazları asanlıqla qoşun və ayarlayın</translation> <translation id="5059241099014281248">Girişi məhdudlaşdırın</translation> <translation id="5059526285558225588">Nəyi paylaşacağınızı seçin</translation> <translation id="5060332552815861872">Yadda saxlanıla biləcək 1 printer var.</translation>
diff --git a/chrome/app/resources/generated_resources_be.xtb b/chrome/app/resources/generated_resources_be.xtb index 97b8729..80531c54 100644 --- a/chrome/app/resources/generated_resources_be.xtb +++ b/chrome/app/resources/generated_resources_be.xtb
@@ -4224,7 +4224,6 @@ <translation id="5054374119096692193">Праглядзіце ўсе варыянты картак у раздзеле <ph name="BEGIN_LINK" />Наладзіць Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Ідзе падключэнне да кантэйнера</translation> <translation id="5057110919553308744">Пры націсканні на пашырэнне</translation> -<translation id="505776528429481161">Лёгкае падключэнне і наладжванне прылад паблізу</translation> <translation id="5059241099014281248">Задаць абмежаванні на ўваход</translation> <translation id="5059526285558225588">Выберыце, што абагульваць</translation> <translation id="5060332552815861872">Даступны 1 прынтар, які можна захаваць.</translation>
diff --git a/chrome/app/resources/generated_resources_bg.xtb b/chrome/app/resources/generated_resources_bg.xtb index f890c2c..91ec0e5 100644 --- a/chrome/app/resources/generated_resources_bg.xtb +++ b/chrome/app/resources/generated_resources_bg.xtb
@@ -4236,7 +4236,6 @@ <translation id="5054374119096692193">Вижте всички опции за картите на <ph name="BEGIN_LINK" />страницата за персонализиране на Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Установява се връзка с контейнера</translation> <translation id="5057110919553308744">При кликване върху разширението</translation> -<translation id="505776528429481161">Свързване и настройване на устройствата наблизо по лесен начин</translation> <translation id="5059241099014281248">Ограничаване на влизането в профил</translation> <translation id="5059526285558225588">Изберете какво да споделите</translation> <translation id="5060332552815861872">За запазване е налице 1 принтер.</translation>
diff --git a/chrome/app/resources/generated_resources_bn.xtb b/chrome/app/resources/generated_resources_bn.xtb index ba2a41d89..1125735 100644 --- a/chrome/app/resources/generated_resources_bn.xtb +++ b/chrome/app/resources/generated_resources_bn.xtb
@@ -4245,7 +4245,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />কাস্টমাইজ Chrome<ph name="END_LINK" />-এ সমস্ত কার্ডের বিকল্পগুলি দেখুন</translation> <translation id="5056950756634735043">কন্টেনারে কানেক্ট করা হচ্ছে</translation> <translation id="5057110919553308744">যখন আপনি এক্সটেনশনে ক্লিক করেন</translation> -<translation id="505776528429481161">আশেপাশের ডিভাইসে সহজেই কানেক্ট করে সেট আপ করুন</translation> <translation id="5059241099014281248">সাইন-ইন করা সীমিত করুন</translation> <translation id="5059526285558225588">কী শেয়ার করতে চান তা বেছে নিন</translation> <translation id="5060332552815861872">সেভ করার জন্য ১টি প্রিন্টার উপলভ্য আছে।</translation>
diff --git a/chrome/app/resources/generated_resources_bs.xtb b/chrome/app/resources/generated_resources_bs.xtb index 605ad21..d28c872e 100644 --- a/chrome/app/resources/generated_resources_bs.xtb +++ b/chrome/app/resources/generated_resources_bs.xtb
@@ -356,6 +356,7 @@ <translation id="1340527397989195812">Napravite sigurnosnu kopiju medija s uređaja koristeći aplikaciju Files.</translation> <translation id="1343865611738742294">Pruža Linux aplikacijama odobrenje za pristup USB uređajima. Linux neće zapamtiti USB uređaj nakon što ga uklonite.</translation> <translation id="1343920184519992513">Nastavite gdje ste stali i otvorite poseban skup stranica</translation> +<translation id="1344377983938103876">Otvara se <ph name="URL" />...</translation> <translation id="134589511016534552">Kartice medija se prikazuju i u odjeljku otvorenih kartica</translation> <translation id="1346630054604077329">Potvrdi i ponovo pokreni</translation> <translation id="1346748346194534595">Desno</translation> @@ -1279,7 +1280,7 @@ <translation id="2180620921879609685">blokirati sadržaj na bilo kojoj stranici</translation> <translation id="2182058453334755893">Kopirano u međumemoriju</translation> <translation id="2184515124301515068">Dozvolite da Chrome odabere kada web lokacije mogu reproducirati zvuk (preporučeno)</translation> -<translation id="2186206192313702726">Google objektiv</translation> +<translation id="2186206192313702726">Google Objektiv</translation> <translation id="2186711480981247270">Stranica je podijeljena s drugog uređaja</translation> <translation id="2187675480456493911">Mreža je sinhronizirana s drugim uređajima na vašem računu. Postavke koje drugi korisnici mijenjaju se neće sinhronizirati. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Greška pri uvozu potvrde za server</translation> @@ -4243,7 +4244,6 @@ <translation id="5054374119096692193">Pogledajte sve opcije kartica u odjeljku <ph name="BEGIN_LINK" />Prilagodite Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Povezivanje sa spremnikom</translation> <translation id="5057110919553308744">Kada kliknete na ekstenziju</translation> -<translation id="505776528429481161">Jednostavno se povežite i postavite uređaje blizu</translation> <translation id="5059241099014281248">Ograniči prijavu</translation> <translation id="5059526285558225588">Odaberite šta ćete dijeliti</translation> <translation id="5060332552815861872">Dostupan je 1 štampač koji možete sačuvati.</translation> @@ -6971,6 +6971,7 @@ <translation id="7753735457098489144">Instalacija nije uspjela jer nedostaje prostora za pohranu. Da oslobodite prostor, izbrišite fajlove iz pohrane uređaja.</translation> <translation id="7754347746598978109">Nije dozvoljeno korištenje Javascripta</translation> <translation id="7754704193130578113">Pitaj gdje spremiti svaku datoteku prije preuzimanja</translation> +<translation id="7755134875397410803">Radi lakšeg završavanja zadataka, Google će primati URL-ove i sadržaj web lokacija na kojima koristite Asistenta, kao i informacije koje pošaljete putem Asistenta. Ove informacije se mogu pohraniti na vaš Google račun. Možete isključiti Asistenta u postavkama Chromea. <ph name="LEARN_MORE" /></translation> <translation id="7755287808199759310">Roditelj može deblokirati tu web lokaciju</translation> <translation id="7757592200364144203">Promijenite naziv uređaja</translation> <translation id="7757739382819740102">Kontakti u blizini mogu dijeliti s vama. Bit će potrebno odobrenje.</translation>
diff --git a/chrome/app/resources/generated_resources_ca.xtb b/chrome/app/resources/generated_resources_ca.xtb index 34fac431..df32e28 100644 --- a/chrome/app/resources/generated_resources_ca.xtb +++ b/chrome/app/resources/generated_resources_ca.xtb
@@ -1247,6 +1247,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Afegeix una Wi-Fi...</translation> <translation id="2162155940152307086">La sincronització començarà quan surtis de la configuració de la sincronització</translation> +<translation id="2162705204091149050">Llegir informació sobre el navegador, el sistema operatiu, el dispositiu, el programari instal·lat i els fitxers</translation> <translation id="2162926944953615670">No hi ha cap perfil d'eSIM disponible</translation> <translation id="2163470535490402084">Connecteu-vos a Internet per iniciar la sessió al dispositiu <ph name="DEVICE_TYPE" />.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> i 1 interruptor més</translation> @@ -1267,6 +1268,7 @@ <translation id="2180620921879609685">Bloqueja el contingut en qualsevol pàgina</translation> <translation id="2182058453334755893">S'ha copiat al porta-retalls</translation> <translation id="2184515124301515068">Deixa que Chrome triï quan poden reproduir so els llocs web (opció recomanada)</translation> +<translation id="2186206192313702726">Google Lens</translation> <translation id="2186711480981247270">Pàgina compartida des d'un altre dispositiu</translation> <translation id="2187675480456493911">Està sincronitzada amb altres dispositius del teu compte. Les opcions de configuració que modifiquin altres usuaris no se sincronitzaran. <ph name="LINK_BEGIN" />Més informació<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Error d'importació del certificat del servidor</translation> @@ -2493,6 +2495,7 @@ <translation id="3359256513598016054">Restriccions de normes de certificats</translation> <translation id="3360297538363969800">Hi ha hagut un error en imprimir. Comproveu la impressora i torneu-ho a provar.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> està compartint <ph name="ATTACHMENTS" /> amb tu.}other{<ph name="DEVICE_NAME" /> està compartint <ph name="ATTACHMENTS" /> amb tu.}}</translation> +<translation id="3363202073972776113">La teva organització gestionarà aquest perfil nou. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation> <translation id="3364986687961713424">De part de l'administrador: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Utilitza Ctrl o Alt</translation> <translation id="3368922792935385530">Connectat</translation> @@ -2527,6 +2530,7 @@ <translation id="339722927132407568">Es bloqueja</translation> <translation id="3399432415385675819">Les notificacions es desactivaran</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> hertzs), entrellaçat</translation> +<translation id="3401484564516348917">Llegir informació sobre el navegador, el sistema operatiu, el dispositiu, el programari instal·lat, els valors del registre i els fitxers</translation> <translation id="3402059702184703067">{COUNT,plural, =1{S'ha emmagatzemat {COUNT} contrasenya en aquest dispositiu}other{S'han emmagatzemat {COUNT} contrasenyes en aquest dispositiu}}</translation> <translation id="3402255108239926910">Tria un avatar</translation> <translation id="3402585168444815892">S'està fent la inscripció en mode de demostració</translation> @@ -2773,6 +2777,7 @@ <translation id="3627879631695760395">Instal·la <ph name="APP" />...</translation> <translation id="3628275722731025472">Desactiva el Bluetooth</translation> <translation id="3629631988386925734">Introdueix la contrasenya per activar Smart Lock. La propera vegada, <ph name="DEVICE_TYPE" /> es desbloquejarà amb el telèfon. Pots desactivar Smart Lock des de Configuració.</translation> +<translation id="3629664892718440872">Recorda aquesta selecció</translation> <translation id="3630132874740063857">El teu telèfon</translation> <translation id="3630995161997703415">Afegeix aquest lloc web al teu prestatge per utilitzar-lo en qualsevol moment</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Si permets que els dispositius Chrome OS ens enviïn informes automàtics, ens ajudaràs a prioritzar què s'ha de corregir i millorar a Chrome OS. Aquests informes poden incloure dades com ara quan es bloqueja Chrome OS, quines funcions fas servir i quanta memòria utilitzes normalment.<ph name="END_PARAGRAPH1" /> @@ -3261,6 +3266,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">S'ha denegat el control total dels dispositius MIDI</translation> +<translation id="4087328411748538168">Mostra a la dreta</translation> <translation id="4089235344645910861">La configuració s'ha desat i ha començat la sincronització.</translation> <translation id="4090103403438682346">Activa l'accés verificat</translation> <translation id="4090947011087001172">Vols restablir els permisos del lloc web <ph name="SITE" />?</translation> @@ -3953,6 +3959,7 @@ <translation id="4779766576531456629">Canvia el nom de la xarxa mòbil de l'eSIM</translation> <translation id="4780321648949301421">Anomena i desa la pàgina...</translation> <translation id="4781443161433589743">Utilitzes la seguretat més efectiva de Chrome</translation> +<translation id="4782861709165039462">Tots els micròfons desactivats per l'interruptor del maquinari dels dispositius</translation> <translation id="4785719467058219317">Estàs utilitzant una clau de seguretat que no està registrada en aquest lloc web</translation> <translation id="4785914069240823137">Cancel·la la retallada</translation> <translation id="4788092183367008521">Comprova la connexió a la xarxa i torna-ho a provar.</translation> @@ -4221,7 +4228,6 @@ <translation id="5054374119096692193">Mostra totes les opcions de targetes a <ph name="BEGIN_LINK" />Personalitza Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">S'està connectant al contenidor</translation> <translation id="5057110919553308744">Quan facis clic a l'extensió</translation> -<translation id="505776528429481161">Connecta i configura fàcilment els dispositius que siguin a prop</translation> <translation id="5059241099014281248">Restringeix l'inici de sessió</translation> <translation id="5059526285558225588">Selecciona què vols compartir</translation> <translation id="5060332552815861872">Hi ha 1 impressora disponible per desar.</translation> @@ -4260,7 +4266,7 @@ <translation id="5090637338841444533">Sense permís per fer un seguiment de la posició de la càmera</translation> <translation id="5093569275467863761">Submarc d'incògnit desat a la memòria cau back-forward: <ph name="BACK_FORWARD_CACHE_INCOGNITO_PAGE_URL" /></translation> <translation id="5094176498302660097">Amb aquesta aplicació pots obrir i editar fitxers admesos des de l'aplicació Fitxers o des d'altres aplicacions. Si vols controlar quins fitxers s'obren amb aquesta aplicació de manera predeterminada, <ph name="BEGIN_LINK" />obtén més informació sobre com pots establir aplicacions predeterminades al dispositiu<ph name="END_LINK" />.</translation> -<translation id="5094721898978802975">Comunicació amb aplicacions natives cooperatives</translation> +<translation id="5094721898978802975">Comunicar-se amb aplicacions natives cooperatives</translation> <translation id="5097002363526479830">S'ha produït un error en connectar amb la xarxa "<ph name="NAME" />": <ph name="DETAILS" /></translation> <translation id="5097306410549350357">Més informació sobre com s'utilitza la ubicació</translation> <translation id="5097649414558628673">Eina: <ph name="PRINT_NAME" /></translation> @@ -4721,6 +4727,7 @@ <translation id="5548075230008247516">S'han desseleccionat tots els elements; s'ha sortit del mode de selecció.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" i 1 pestanya més}other{"<ph name="TAB_TITLE" />" i # pestanyes més}}</translation> <translation id="5548606607480005320">Comprovació de seguretat</translation> +<translation id="5548644592758170183">Mostra a l'esquerra</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Teclat i introducció de text</translation> <translation id="5553089923092577885">Assignacions de normes de certificats</translation> @@ -8202,6 +8209,7 @@ <translation id="8980345560318123814">Informes de suggeriments</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" />: ha fallat</translation> <translation id="8981825781894055334">S'està quedant sense paper</translation> +<translation id="8983018820925880511"><ph name="DOMAIN" /> gestionarà aquest perfil nou. <ph name="BEGIN_LINK" />Més informació<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> pot editar <ph name="FILENAME" /></translation> <translation id="8984694057134206124">Tothom podrà veure el teu dispositiu durant <ph name="MINUTES" /> minuts. <ph name="LINK_BEGIN" />Més informació<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Et donem la benvinguda a Steam per a Chromebook</translation> @@ -8298,6 +8306,7 @@ <translation id="9075413375877487220">Navegació segura millorada no confia en aquesta extensió.</translation> <translation id="9076283476770535406">Pot incloure contingut no apte per a menors</translation> <translation id="9076523132036239772">No s'ha pogut verificar el correu electrònic o la contrasenya. Prova de connectar-te primer a una xarxa.</translation> +<translation id="9076821103818989526">Tauler lateral</translation> <translation id="9076977315710973122">Fitxers compartits de PIME</translation> <translation id="9078193189520575214">S'estan aplicant els canvis...</translation> <translation id="9078316009970372699">Desactiva la compartició de xarxa instantània</translation>
diff --git a/chrome/app/resources/generated_resources_cs.xtb b/chrome/app/resources/generated_resources_cs.xtb index 51d92d48..c31ade3f 100644 --- a/chrome/app/resources/generated_resources_cs.xtb +++ b/chrome/app/resources/generated_resources_cs.xtb
@@ -354,6 +354,7 @@ <translation id="1340527397989195812">Zálohujte média ze zařízení pomocí aplikace Soubory.</translation> <translation id="1343865611738742294">Udělte linuxovým aplikacím oprávnění k používání zařízení USB. Po odebrání si Linux nebude zařízení USB pamatovat.</translation> <translation id="1343920184519992513">Pokračujte, kde jste skončili, a otevírejte vybrané stránky</translation> +<translation id="1344377983938103876">Otevírá se <ph name="URL" />...</translation> <translation id="134589511016534552">V sekci Otevřené karty se zobrazují i mediální karty</translation> <translation id="1346630054604077329">Potvrdit a restartovat</translation> <translation id="1346748346194534595">Doprava</translation> @@ -1249,6 +1250,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Přidat Wi-Fi...</translation> <translation id="2162155940152307086">Synchronizace bude zahájena, až opustíte nastavení</translation> +<translation id="2162705204091149050">Čtení informací o prohlížeči, operačním systému, zařízení, nainstalovaném softwaru a souborech</translation> <translation id="2162926944953615670">Nejsou k dispozici žádné profily eSIM</translation> <translation id="2163470535490402084">Chcete-li se přihlásit do zařízení <ph name="DEVICE_TYPE" />, připojte se k internetu.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> a 1 další přepínač</translation> @@ -2495,6 +2497,7 @@ <translation id="3359256513598016054">Omezení zásad certifikátu</translation> <translation id="3360297538363969800">Tisk se nezdařil. Zkontrolujte tiskárnu a zkuste to znovu.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> s vámi sdílí <ph name="ATTACHMENTS" />.}few{<ph name="DEVICE_NAME" /> s vámi sdílí <ph name="ATTACHMENTS" />.}many{<ph name="DEVICE_NAME" /> s vámi sdílí <ph name="ATTACHMENTS" />.}other{<ph name="DEVICE_NAME" /> s vámi sdílí <ph name="ATTACHMENTS" />.}}</translation> +<translation id="3363202073972776113">Tento nový profil bude spravovat vaše organizace. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation> <translation id="3364986687961713424">Od vašeho administrátora: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Použijte buď Ctrl, nebo Alt</translation> <translation id="3368922792935385530">Připojeno</translation> @@ -2529,6 +2532,7 @@ <translation id="339722927132407568">Zamrzá</translation> <translation id="3399432415385675819">Oznámení budou zakázána</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> × <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Hz) – prokládané</translation> +<translation id="3401484564516348917">Čtení informací o prohlížeči, operačním systému, zařízení, nainstalovaném softwaru, hodnotách registru a souborech</translation> <translation id="3402059702184703067">{COUNT,plural, =1{{COUNT} heslo je uložená na tomto zařízení}few{{COUNT} hesla jsou uložená na tomto zařízení}many{{COUNT} hesla je uloženého na tomto zařízení}other{{COUNT} hesel je uložených na tomto zařízení}}</translation> <translation id="3402255108239926910">Vyberte si avatar</translation> <translation id="3402585168444815892">Registrace v ukázkovém režimu</translation> @@ -2775,6 +2779,7 @@ <translation id="3627879631695760395">Nainstalovat aplikaci <ph name="APP" />...</translation> <translation id="3628275722731025472">Vypnout Bluetooth</translation> <translation id="3629631988386925734">Chcete-li zapnout funkci Smart Lock, zadejte heslo. Příště váš telefon zařízení <ph name="DEVICE_TYPE" /> odemkne. Funkci Smart Lock můžete vypnout v Nastavení.</translation> +<translation id="3629664892718440872">Zapamatovat tuto volbu</translation> <translation id="3630132874740063857">Váš telefon</translation> <translation id="3630995161997703415">Pokud si tento web přidáte na poličku, budete jej moci kdykoliv použít</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Povolením odesílání automatických zpráv v systému ChromeOS nám pomůžete určit, které opravy a vylepšení systému ChromeOS mají prioritu. Tyto zprávy mohou zahrnovat údaje, jako jsou datum a čas selhání systému ChromeOS, používané funkce a typické využití paměti.<ph name="END_PARAGRAPH1" /> @@ -3263,6 +3268,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">Úplné ovládání zařízení MIDI bylo odepřeno</translation> +<translation id="4087328411748538168">Zobrazit vpravo</translation> <translation id="4089235344645910861">Nastavení byla uložena. Synchronizace byla zahájena.</translation> <translation id="4090103403438682346">Aktivuje ověřený přístup.</translation> <translation id="4090947011087001172">Resetovat oprávnění webu <ph name="SITE" />?</translation> @@ -3955,6 +3961,7 @@ <translation id="4779766576531456629">Přejmenovat mobilní síť eSIM</translation> <translation id="4780321648949301421">Uložit stránku jako...</translation> <translation id="4781443161433589743">Používáte nejsilnější zabezpečení Chromu</translation> +<translation id="4782861709165039462">Všechny mikrofony deaktivovány hardwarovým přepínačem na zařízeních</translation> <translation id="4785719467058219317">Používáte bezpečnostní klíč, který pro tento web není zaregistrován</translation> <translation id="4785914069240823137">Zrušit oříznutí</translation> <translation id="4788092183367008521">Zkontrolujte připojení k síti a zkuste to znovu.</translation> @@ -4223,7 +4230,6 @@ <translation id="5054374119096692193">Všechny možnosti karet najdete v sekci <ph name="BEGIN_LINK" />Přizpůsobit Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Připojování ke kontejneru</translation> <translation id="5057110919553308744">Když kliknete na rozšíření</translation> -<translation id="505776528429481161">Snadno se připojte k zařízením v okolí a nastavte je</translation> <translation id="5059241099014281248">Omezit přihlášení</translation> <translation id="5059526285558225588">Vybrat, co budete sdílet</translation> <translation id="5060332552815861872">Je k dispozici 1 tiskárna k uložení.</translation> @@ -4722,6 +4728,7 @@ <translation id="5548075230008247516">Výběr všech položek byl zrušen. Režim výběru byl ukončen.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{„<ph name="TAB_TITLE" />“}=1{„<ph name="TAB_TITLE" />“ a 1 další karta}few{„<ph name="TAB_TITLE" />“ a # další karty}many{„<ph name="TAB_TITLE" />“ a # další karty}other{„<ph name="TAB_TITLE" />“ a # dalších karet}}</translation> <translation id="5548606607480005320">Bezpečnostní kontrola</translation> +<translation id="5548644592758170183">Zobrazit vlevo</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Klávesnice a zadávání textu</translation> <translation id="5553089923092577885">Mapování zásad certifikátu</translation> @@ -6947,6 +6954,7 @@ <translation id="7753735457098489144">Instalace se z důvodu nedostatku místa v úložišti nezdařila. Místo uvolníte smazáním souborů z úložiště zařízení.</translation> <translation id="7754347746598978109">Zákaz používat JavaScript</translation> <translation id="7754704193130578113">Před stažením se vždy zeptat na místo uložení každého souboru</translation> +<translation id="7755134875397410803">Abyste mohli provádět akce, Google bude dostávat adresy URL a obsah webů, ve kterých používáte Asistenta, a informace, které prostřednictvím Asistenta odesíláte. Tyto informace mohou být ukládány do vašeho účtu Google. Asistenta můžete vypnout v nastavení Chromu. <ph name="LEARN_MORE" /></translation> <translation id="7755287808199759310">Rodič ti jej může odblokovat.</translation> <translation id="7757592200364144203">Změnit název zařízení</translation> <translation id="7757739382819740102">Kontakty v okolí s vámi mohou sdílet obsah. Bude vyžadováno schválení.</translation> @@ -8206,6 +8214,7 @@ <translation id="8980345560318123814">Zprávy zpětné vazby</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> – selhalo</translation> <translation id="8981825781894055334">Dochází papír</translation> +<translation id="8983018820925880511">Tento nový profil bude spravovat doména <ph name="DOMAIN" />. <ph name="BEGIN_LINK" />Další informace<ph name="END_LINK" /></translation> <translation id="8983632908660087688">Web <ph name="ORIGIN" /> může upravovat soubor <ph name="FILENAME" /></translation> <translation id="8984694057134206124">Budete viditelní pro všechny po dobu <ph name="MINUTES" /> minut. <ph name="LINK_BEGIN" />Další informace<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Vítá vás Steam pro Chromebooky</translation> @@ -8302,6 +8311,7 @@ <translation id="9075413375877487220">Vylepšené Bezpečné prohlížení tomuto rozšíření nedůvěřuje.</translation> <translation id="9076283476770535406">Může obsahovat materiály pouze pro dospělé</translation> <translation id="9076523132036239772">Litujeme, e-mailovou adresu nebo heslo nelze ověřit. Zkuste se nejdříve připojit k síti.</translation> +<translation id="9076821103818989526">Boční panel</translation> <translation id="9076977315710973122">Sdílení SMB</translation> <translation id="9078193189520575214">Aplikují se změny…</translation> <translation id="9078316009970372699">Deaktivovat dynamický tethering</translation>
diff --git a/chrome/app/resources/generated_resources_cy.xtb b/chrome/app/resources/generated_resources_cy.xtb index 6c774920..816e8c6 100644 --- a/chrome/app/resources/generated_resources_cy.xtb +++ b/chrome/app/resources/generated_resources_cy.xtb
@@ -1262,6 +1262,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Ychwanegu Wi-Fi...</translation> <translation id="2162155940152307086">Bydd cysoni'n dechrau ar ôl i chi adael gosodiadau cysoni</translation> +<translation id="2162705204091149050">Darllen gwybodaeth am eich porwr, OS, dyfais, meddalwedd sydd wedi'i gosod a ffeiliau</translation> <translation id="2162926944953615670">Nid oes unrhyw broffiliau eSIM ar gael</translation> <translation id="2163470535490402084">Cysylltwch i'r Rhyngrwyd i fewngofnodi i'ch <ph name="DEVICE_TYPE" />.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" />, ac 1 switsh arall</translation> @@ -2511,6 +2512,7 @@ <translation id="3359256513598016054">Cyfyngiadau Polisi Tystysgrif</translation> <translation id="3360297538363969800">Wedi methu ag argraffu. Gwiriwch eich argraffydd a rhowch gynnig arall arni.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{Mae <ph name="DEVICE_NAME" /> yn rhannu <ph name="ATTACHMENTS" /> â chi.}zero{Mae <ph name="DEVICE_NAME" /> yn rhannu <ph name="ATTACHMENTS" /> â chi.}two{Mae <ph name="DEVICE_NAME" /> yn rhannu <ph name="ATTACHMENTS" /> â chi.}few{Mae <ph name="DEVICE_NAME" /> yn rhannu <ph name="ATTACHMENTS" /> â chi.}many{Mae <ph name="DEVICE_NAME" /> yn rhannu <ph name="ATTACHMENTS" /> â chi.}other{Mae <ph name="DEVICE_NAME" /> yn rhannu <ph name="ATTACHMENTS" /> â chi.}}</translation> +<translation id="3363202073972776113">Bydd y proffil newydd hwn yn cael ei reoli gan eich sefydliad. <ph name="BEGIN_LINK" />Dysgu rhagor<ph name="END_LINK" /></translation> <translation id="3364986687961713424">Gan eich gweinyddwr: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Defnyddiwch naill ai Ctrl neu Alt</translation> <translation id="3368922792935385530">Wedi cysylltu</translation> @@ -2545,6 +2547,7 @@ <translation id="339722927132407568">Rhewi</translation> <translation id="3399432415385675819">Bydd hysbysiadau'n cael eu diffodd</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Hertz) - wedi'i gydblethu</translation> +<translation id="3401484564516348917">Darllen gwybodaeth am eich porwr, OS, dyfais, meddalwedd sydd wedi'i gosod, gwerthoedd cofrestrfa a ffeiliau</translation> <translation id="3402059702184703067">{COUNT,plural, =1{{COUNT} cyfrinair sydd wedi'i storio ar y ddyfais hon}zero{{COUNT} cyfrinair sydd wedi'u storio ar y ddyfais hon}two{{COUNT} gyfrinair sydd wedi'u storio ar y ddyfais hon}few{{COUNT} chyfrinair sydd wedi'u storio ar y ddyfais hon}many{{COUNT} chyfrinair sydd wedi'u storio ar y ddyfais hon}other{{COUNT} cyfrinair sydd wedi'u storio ar y ddyfais hon}}</translation> <translation id="3402255108239926910">Dewiswch rithffurf</translation> <translation id="3402585168444815892">Wrthi'n cofrestru yn y Modd Demo</translation> @@ -2791,6 +2794,7 @@ <translation id="3627879631695760395">Gosod <ph name="APP" />...</translation> <translation id="3628275722731025472">Diffodd Bluetooth</translation> <translation id="3629631988386925734">Rhowch eich cyfrinair i alluogi Smart Lock Y tro nesaf, bydd eich ffôn yn datgloi eich <ph name="DEVICE_TYPE" />. Gallwch ddiffodd Smart Lock yn y gosodiadau.</translation> +<translation id="3629664892718440872">Cofiwch y dewis hwn</translation> <translation id="3630132874740063857">Eich ffôn</translation> <translation id="3630995161997703415">Ychwanegwch y wefan hon at eich silff i'w defnyddio ar unrhyw adeg</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Mae caniatáu i'ch dyfeisiau ChromeOS anfon adroddiadau awtomatig yn ein helpu i flaenoriaethu beth i'w drwsio a'i wella yn ChromeOS. Gall yr adroddiadau hyn gynnwys pethau megis pan fyddai ChromeOS yn torri, pa nodweddion rydych yn eu defnyddio a faint o gof rydych yn ei ddefnyddio yn nodweddiadol.<ph name="END_PARAGRAPH1" /> @@ -3280,6 +3284,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">Gwrthodwyd rheolaeth lawn ar ddyfeisiau MIDI</translation> +<translation id="4087328411748538168">Dangos ar y dde</translation> <translation id="4089235344645910861">Mae'r gosodiadau wedi'u cadw. Wedi dechrau cysoni.</translation> <translation id="4090103403438682346">Galluogi Mynediad a Ddilyswyd</translation> <translation id="4090947011087001172">Ailosod caniatadau gwefan ar gyfer <ph name="SITE" />?</translation> @@ -3973,6 +3978,7 @@ <translation id="4779766576531456629">Ail-enwi rhwydwaith symudol eSIM</translation> <translation id="4780321648949301421">Cadw Tudalen Fel...</translation> <translation id="4781443161433589743">Mae gennych ddiogelwch cryfaf Chrome</translation> +<translation id="4782861709165039462">Pob meicroffon wedi'i analluogi gan switsh caledwedd dyfeisiau</translation> <translation id="4785719467058219317">Rydych yn defnyddio allwedd ddiogelwch nad yw wedi'i chofrestru gyda'r wefan hon</translation> <translation id="4785914069240823137">Canslo Tocio</translation> <translation id="4788092183367008521">Gwiriwch eich cysylltiad rhwydwaith a rhowch gynnig arall arni.</translation> @@ -4241,7 +4247,6 @@ <translation id="5054374119096692193">Gweld pob opsiwn cerdyn yn <ph name="BEGIN_LINK" />Personoleiddio Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Wrthi'n cysylltu â'r cynhwysydd</translation> <translation id="5057110919553308744">Pan fyddwch yn clicio'r estyniad</translation> -<translation id="505776528429481161">Cysylltu'n hawdd a gosod dyfeisiau gerllaw</translation> <translation id="5059241099014281248">Cyfyngu mewngofnodi</translation> <translation id="5059526285558225588">Dewis beth i'w rannu</translation> <translation id="5060332552815861872">Mae 1 argraffydd ar gael i'w gadw.</translation> @@ -4740,6 +4745,7 @@ <translation id="5548075230008247516">Mae pob eitem wedi'i ddad-ddewis, wedi gadael y modd dewis.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" ac 1 Tab Arall}two{"<ph name="TAB_TITLE" />" ac # Dab Arall}few{"<ph name="TAB_TITLE" />" ac # Thab Arall}many{"<ph name="TAB_TITLE" />" ac # Thab Arall}other{"<ph name="TAB_TITLE" />" ac # Tab Arall}}</translation> <translation id="5548606607480005320">Gwiriad diogelwch</translation> +<translation id="5548644592758170183">Dangos ar y chwith</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Bysellfwrdd a mewnbwn testun</translation> <translation id="5553089923092577885">Mapiadau Polisi Tystysgrif</translation> @@ -8233,6 +8239,7 @@ <translation id="8980345560318123814">Adroddiadau adborth</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - Wedi torri</translation> <translation id="8981825781894055334">Mae'r lefel papur yn isel</translation> +<translation id="8983018820925880511">Bydd y proffil newydd hwn yn cael ei reoli gan <ph name="DOMAIN" />. <ph name="BEGIN_LINK" />Dysgu rhagor<ph name="END_LINK" /></translation> <translation id="8983632908660087688">Gall <ph name="ORIGIN" /> olygu <ph name="FILENAME" /></translation> <translation id="8984694057134206124">Byddwch yn weladwy i bawb am <ph name="MINUTES" /> o funudau. <ph name="LINK_BEGIN" />Dysgu rhagor<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Croeso i Steam ar gyfer Chromebook</translation> @@ -8329,6 +8336,7 @@ <translation id="9075413375877487220">Nid yw Gwell Pori'n Ddiogel yn ymddiried yn yr estyniad hwn.</translation> <translation id="9076283476770535406">Mae'n bosib bod ganddo gynnwys aeddfed</translation> <translation id="9076523132036239772">Mae'n ddrwg gennym, ni ellid dilysu'ch e-bost na'ch cyfrinair. Rhowch gynnig ar gysylltu i rwydwaith yn gyntaf.</translation> +<translation id="9076821103818989526">Panel ochr</translation> <translation id="9076977315710973122">Cyfran SMB</translation> <translation id="9078193189520575214">Wrthi'n cymhwyso newidiadau...</translation> <translation id="9078316009970372699">Analluogi Rhannu Cysylltiad Sydyn</translation>
diff --git a/chrome/app/resources/generated_resources_da.xtb b/chrome/app/resources/generated_resources_da.xtb index c374f69..5d48abd 100644 --- a/chrome/app/resources/generated_resources_da.xtb +++ b/chrome/app/resources/generated_resources_da.xtb
@@ -1260,6 +1260,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Tilføj Wi-Fi...</translation> <translation id="2162155940152307086">Synkroniseringen starter, når du forlader indstillingerne for synkronisering</translation> +<translation id="2162705204091149050">Læs oplysninger om browseren, operativsystemet, enheden, installeret software og filer</translation> <translation id="2162926944953615670">Der er ingen tilgængelige eSIM-profiler</translation> <translation id="2163470535490402084">Du skal oprette forbindelse til internettet for at kunne logge ind på din <ph name="DEVICE_TYPE" />.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> og 1 anden kontakt</translation> @@ -2509,6 +2510,7 @@ <translation id="3359256513598016054">Begrænsninger for certifikatpolitik</translation> <translation id="3360297538363969800">Udskrivning mislykkedes. Kontrollér din printer, og prøv igen.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> deler <ph name="ATTACHMENTS" /> med dig.}one{<ph name="DEVICE_NAME" /> is sharing <ph name="ATTACHMENTS" /> with you.}other{<ph name="DEVICE_NAME" /> deler <ph name="ATTACHMENTS" /> med dig.}}</translation> +<translation id="3363202073972776113">Denne nye profil administreres af din organisation. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation> <translation id="3364986687961713424">Fra din administrator: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Brug enten Ctrl eller Alt</translation> <translation id="3368922792935385530">Tilsluttet</translation> @@ -2543,6 +2545,7 @@ <translation id="339722927132407568">Fryser</translation> <translation id="3399432415385675819">Notifikationer deaktiveres</translation> <translation id="3400390787768057815"><ph name="WIDTH" />x<ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> hertz) – sammenflettet</translation> +<translation id="3401484564516348917">Læs oplysninger om browseren, operativsystemet, enheden, installeret software, værdier i registreringsdatabasen og filer</translation> <translation id="3402059702184703067">{COUNT,plural, =1{{COUNT} adgangskode er gemt på denne enhed}one{{COUNT} adgangskode er gemt på denne enhed}other{{COUNT} adgangskoder er gemt på denne enhed}}</translation> <translation id="3402255108239926910">Vælg en avatar</translation> <translation id="3402585168444815892">Tilmelder dig i demotilstand</translation> @@ -2789,6 +2792,7 @@ <translation id="3627879631695760395">Installer <ph name="APP" />...</translation> <translation id="3628275722731025472">Deaktiver Bluetooth</translation> <translation id="3629631988386925734">Angiv din adgangskode for at aktivere Smart Lock. Næste gang låser din telefon din <ph name="DEVICE_TYPE" /> op. Du kan deaktivere Smart Lock i Indstillinger.</translation> +<translation id="3629664892718440872">Husk dette valg</translation> <translation id="3630132874740063857">Din telefon</translation> <translation id="3630995161997703415">Føj dette website til din hylde for at bruge det når som helst</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Ved at give dine Chrome OS-enheder tilladelse til at sende automatiske rapporter gør du det nemmere for os at prioritere, hvad der skal rettes og forbedres i Chrome OS. Disse rapporter kan f.eks. indeholde oplysninger om, hvornår Chrome OS oplever nedbrud, hvilke funktioner du bruger, og hvor meget hukommelse du normalt anvender.<ph name="END_PARAGRAPH1" /> @@ -3278,6 +3282,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">Fuld kontrol over MIDI-enheder blev afvist</translation> +<translation id="4087328411748538168">Vis i højre side</translation> <translation id="4089235344645910861">Indstillingerne blev gemt, og synkroniseringen er nu startet.</translation> <translation id="4090103403438682346">Aktivér Bekræftet adgang</translation> <translation id="4090947011087001172">Vil du nulstille tilladelserne for <ph name="SITE" />?</translation> @@ -3971,6 +3976,7 @@ <translation id="4779766576531456629">Omdøb eSIM-mobilnetværk</translation> <translation id="4780321648949301421">Gem side som...</translation> <translation id="4781443161433589743">Du anvender Chromes stærkeste beskyttelse</translation> +<translation id="4782861709165039462">Alle mikrofoner er deaktiveret af hardwarekontakten på enhederne</translation> <translation id="4785719467058219317">Du bruger en sikkerhedsnøgle, som ikke er registreret på dette website</translation> <translation id="4785914069240823137">Annuller beskæring</translation> <translation id="4788092183367008521">Tjek din netværksforbindelse, og prøv igen.</translation> @@ -4239,7 +4245,6 @@ <translation id="5054374119096692193">Se alle kortmuligheder i <ph name="BEGIN_LINK" />Tilpas Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Opretter forbindelse til containeren</translation> <translation id="5057110919553308744">Når du klikker på udvidelsen</translation> -<translation id="505776528429481161">Forbind og konfigurer nemt enheder i nærheden</translation> <translation id="5059241099014281248">Begræns login</translation> <translation id="5059526285558225588">Vælg, hvad du vil dele</translation> <translation id="5060332552815861872">Der er 1 printer, som kan gemmes.</translation> @@ -4738,6 +4743,7 @@ <translation id="5548075230008247516">Markeringen af alle elementer er fjernet, og markeringstilstanden er afsluttet.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" og 1 anden fane}one{"<ph name="TAB_TITLE" />" og # anden fane}other{"<ph name="TAB_TITLE" />" og # andre faner}}</translation> <translation id="5548606607480005320">Sikkerhedstjek</translation> +<translation id="5548644592758170183">Vis i venstre side</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Tastatur og tekstindtastning</translation> <translation id="5553089923092577885">Beskrivelse af certifikatpolitik</translation> @@ -8223,6 +8229,7 @@ <translation id="8980345560318123814">Feedbackrapporter</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> – gået ned</translation> <translation id="8981825781894055334">Lavt papirniveau</translation> +<translation id="8983018820925880511">Denne nye profil administreres af <ph name="DOMAIN" />. <ph name="BEGIN_LINK" />Få flere oplysninger<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> kan redigere <ph name="FILENAME" /></translation> <translation id="8984694057134206124">Du vil være synlig for alle i <ph name="MINUTES" /> minutter. <ph name="LINK_BEGIN" />Få flere oplysninger<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Her er Steam til Chromebook</translation> @@ -8319,6 +8326,7 @@ <translation id="9075413375877487220">Denne udvidelse er ikke pålidelig ifølge Udvidet beskyttet browsing.</translation> <translation id="9076283476770535406">Der er muligvis indhold for voksne på websitet</translation> <translation id="9076523132036239772">Din mail eller adgangskode blev ikke bekræftet. Prøv at oprette forbindelse til et netværk først.</translation> +<translation id="9076821103818989526">Sidepanel</translation> <translation id="9076977315710973122">SMV-deling</translation> <translation id="9078193189520575214">Anvender ændringer...</translation> <translation id="9078316009970372699">Deaktiver Automatisk netdeling</translation>
diff --git a/chrome/app/resources/generated_resources_de.xtb b/chrome/app/resources/generated_resources_de.xtb index bd38a2a..e97df2c 100644 --- a/chrome/app/resources/generated_resources_de.xtb +++ b/chrome/app/resources/generated_resources_de.xtb
@@ -4219,7 +4219,6 @@ <translation id="5054374119096692193">Unter <ph name="BEGIN_LINK" />Chrome anpassen<ph name="END_LINK" /> kannst du dir alle Kartenoptionen ansehen</translation> <translation id="5056950756634735043">Verbindung zum Container wird hergestellt</translation> <translation id="5057110919553308744">Wenn die Erweiterung angeklickt wird</translation> -<translation id="505776528429481161">Einfache Verbindung und Einrichtung von Geräten in der Nähe</translation> <translation id="5059241099014281248">Anmeldung beschränken</translation> <translation id="5059526285558225588">Auswählen, was geteilt werden soll</translation> <translation id="5060332552815861872">Es ist 1 Drucker verfügbar, der gespeichert werden kann.</translation>
diff --git a/chrome/app/resources/generated_resources_el.xtb b/chrome/app/resources/generated_resources_el.xtb index 556756c..6878bf5 100644 --- a/chrome/app/resources/generated_resources_el.xtb +++ b/chrome/app/resources/generated_resources_el.xtb
@@ -4245,7 +4245,6 @@ <translation id="5054374119096692193">Δείτε όλες τις επιλογές καρτών στην ενότητα <ph name="BEGIN_LINK" />Προσαρμογή του Chrome<ph name="END_LINK" />.</translation> <translation id="5056950756634735043">Σύνδεση στο κοντέινερ</translation> <translation id="5057110919553308744">Όταν κάνετε κλικ στην επέκταση</translation> -<translation id="505776528429481161">Εύκολη σύνδεση και ρύθμιση κοντινών συσκευών</translation> <translation id="5059241099014281248">Περιορισμός σύνδεσης</translation> <translation id="5059526285558225588">Επιλέξτε τι θα μοιράζεστε</translation> <translation id="5060332552815861872">Υπάρχει 1 διαθέσιμος εκτυπωτής για αποθήκευση.</translation>
diff --git a/chrome/app/resources/generated_resources_en-GB.xtb b/chrome/app/resources/generated_resources_en-GB.xtb index 829ec29..3a454967 100644 --- a/chrome/app/resources/generated_resources_en-GB.xtb +++ b/chrome/app/resources/generated_resources_en-GB.xtb
@@ -4246,7 +4246,6 @@ <translation id="5054374119096692193">See all card options in <ph name="BEGIN_LINK" />Customise Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Connecting to the container</translation> <translation id="5057110919553308744">When you click the extension</translation> -<translation id="505776528429481161">Easily connect and set up devices close by</translation> <translation id="5059241099014281248">Restrict sign-in</translation> <translation id="5059526285558225588">Choose what to share</translation> <translation id="5060332552815861872">There is 1 printer available to save.</translation>
diff --git a/chrome/app/resources/generated_resources_es-419.xtb b/chrome/app/resources/generated_resources_es-419.xtb index 3672e7f..8ec266a 100644 --- a/chrome/app/resources/generated_resources_es-419.xtb +++ b/chrome/app/resources/generated_resources_es-419.xtb
@@ -3485,7 +3485,7 @@ <translation id="4312701113286993760">{COUNT,plural, =1{1 Cuenta de Google}other{<ph name="EXTRA_ACCOUNTS" /> Cuentas de Google}}</translation> <translation id="4312866146174492540">Bloquear (predeterminado)</translation> <translation id="4314497418046265427">Conecta tu teléfono a <ph name="DEVICE_TYPE" /> para mejorar tu productividad</translation> -<translation id="4314815835985389558">Administrar la sincronización</translation> +<translation id="4314815835985389558">Administrar sincronización</translation> <translation id="4315933848520197627">Desvincular cuenta</translation> <translation id="4316850752623536204">Sitio web del programador</translation> <translation id="4317733381297736564">Compras directas desde la app</translation> @@ -4219,7 +4219,6 @@ <translation id="5054374119096692193">Consulta todas las opciones de tarjetas en <ph name="BEGIN_LINK" />Personalizar Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Conectando al contenedor</translation> <translation id="5057110919553308744">Cuando haces clic en la extensión</translation> -<translation id="505776528429481161">Conéctate a dispositivos cercanos y configúralos fácilmente</translation> <translation id="5059241099014281248">Restringir el acceso</translation> <translation id="5059526285558225588">Elegir lo que quieres compartir</translation> <translation id="5060332552815861872">Hay 1 impresora disponible para guardar.</translation>
diff --git a/chrome/app/resources/generated_resources_es.xtb b/chrome/app/resources/generated_resources_es.xtb index 500bb0e..b0f94cc 100644 --- a/chrome/app/resources/generated_resources_es.xtb +++ b/chrome/app/resources/generated_resources_es.xtb
@@ -1247,6 +1247,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Añadir Wi-Fi...</translation> <translation id="2162155940152307086">La sincronización empezará cuando salgas de la configuración</translation> +<translation id="2162705204091149050">Leer información sobre tu navegador, tu SO, tu dispositivo, el software que tienes instalado y tus archivos</translation> <translation id="2162926944953615670">No hay perfiles de eSIM disponibles</translation> <translation id="2163470535490402084">Conéctate a Internet para iniciar sesión en tu <ph name="DEVICE_TYPE" />.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> y 1 interruptor más</translation> @@ -2493,6 +2494,7 @@ <translation id="3359256513598016054">Restricciones de políticas de certificados</translation> <translation id="3360297538363969800">Se ha producido un error al imprimir. Comprueba la impresora y vuelve a intentarlo.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> quiere compartir <ph name="ATTACHMENTS" /> contigo.}other{<ph name="DEVICE_NAME" /> quiere compartir <ph name="ATTACHMENTS" /> contigo.}}</translation> +<translation id="3363202073972776113">Tu organización gestionará este nuevo perfil. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> <translation id="3364986687961713424">De tu administrador: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Usa Ctrl o Alt</translation> <translation id="3368922792935385530">Conectado</translation> @@ -2527,6 +2529,7 @@ <translation id="339722927132407568">Se bloquea</translation> <translation id="3399432415385675819">Se inhabilitarán las notificaciones</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Hz) - entrelazado</translation> +<translation id="3401484564516348917">Leer información sobre tu navegador, tu SO, tu dispositivo, el software que tienes instalado, tus valores del registro y tus archivos</translation> <translation id="3402059702184703067">{COUNT,plural, =1{Hay {COUNT} contraseña guardada en este dispositivo}other{Hay {COUNT} contraseñas guardadas en este dispositivo}}</translation> <translation id="3402255108239926910">Elige un avatar</translation> <translation id="3402585168444815892">Registrándose en modo Demo</translation> @@ -2773,6 +2776,7 @@ <translation id="3627879631695760395">Instalar <ph name="APP" />...</translation> <translation id="3628275722731025472">Desactivar Bluetooth</translation> <translation id="3629631988386925734">Introduce tu contraseña para habilitar Smart Lock. La próxima vez, el teléfono desbloqueará tu <ph name="DEVICE_TYPE" />. Puedes desactivar Smart Lock en la configuración.</translation> +<translation id="3629664892718440872">Recordar esta opción</translation> <translation id="3630132874740063857">Tu teléfono</translation> <translation id="3630995161997703415">Añade este sitio web a tu estantería para usarlo en cualquier momento</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Si permites que tus dispositivos Chrome OS nos envíen informes de forma automática, nos ayudarás a priorizar qué debemos arreglar y mejorar en Chrome OS. Estos informes pueden incluir información como cuándo ha fallado Chrome OS, qué funciones utilizas y cuánta memoria sueles usar.<ph name="END_PARAGRAPH1" /> @@ -3261,6 +3265,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">Control total de los dispositivos MIDI rechazado</translation> +<translation id="4087328411748538168">Mostrar a la derecha</translation> <translation id="4089235344645910861">Se ha guardado la configuración y se ha iniciado la sincronización.</translation> <translation id="4090103403438682346">Habilitar acceso verificado</translation> <translation id="4090947011087001172">¿Quieres borrar los permisos del sitio web <ph name="SITE" />?</translation> @@ -3953,6 +3958,7 @@ <translation id="4779766576531456629">Cambiar nombre de la red móvil de eSIM</translation> <translation id="4780321648949301421">Guardar página como...</translation> <translation id="4781443161433589743">Estás usando la seguridad más potente de Chrome.</translation> +<translation id="4782861709165039462">Todos los micrófonos inhabilitados mediante interruptor de hardware del dispositivo</translation> <translation id="4785719467058219317">Estás usando una llave de seguridad que no se ha registrado en este sitio web</translation> <translation id="4785914069240823137">Cancelar recorte</translation> <translation id="4788092183367008521">Revisa tu conexión de red y vuelve a intentarlo.</translation> @@ -4221,7 +4227,6 @@ <translation id="5054374119096692193">Consulta todas las opciones de las tarjetas en <ph name="BEGIN_LINK" />Personalizar Chrome<ph name="END_LINK" />.</translation> <translation id="5056950756634735043">Conectando con el contenedor</translation> <translation id="5057110919553308744">Al hacer clic en la extensión</translation> -<translation id="505776528429481161">Conecta y configura dispositivos que estén cerca fácilmente</translation> <translation id="5059241099014281248">Restringir inicio de sesión</translation> <translation id="5059526285558225588">Elige lo que quieres compartir</translation> <translation id="5060332552815861872">Hay 1 impresora que se puede guardar.</translation> @@ -4720,6 +4725,7 @@ <translation id="5548075230008247516">Todos los elementos deseleccionados, se ha salido del modo de selección.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" y 1 pestaña más}other{"<ph name="TAB_TITLE" />" y # pestañas más}}</translation> <translation id="5548606607480005320">Comprobación de seguridad</translation> +<translation id="5548644592758170183">Mostrar a la izquierda</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Teclado e introducción de texto</translation> <translation id="5553089923092577885">Asignaciones de políticas de certificados</translation> @@ -8202,6 +8208,7 @@ <translation id="8980345560318123814">Informes de comentarios</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" />: ha fallado</translation> <translation id="8981825781894055334">Queda poco papel</translation> +<translation id="8983018820925880511"><ph name="DOMAIN" /> gestionará este nuevo perfil. <ph name="BEGIN_LINK" />Más información<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> puede editar <ph name="FILENAME" /></translation> <translation id="8984694057134206124">Otros usuarios podrán verte durante <ph name="MINUTES" /> minutos. <ph name="LINK_BEGIN" />Más información<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Te damos la bienvenida a Steam para Chromebook</translation> @@ -8298,6 +8305,7 @@ <translation id="9075413375877487220">Navegación segura mejorada no confía en esta extensión.</translation> <translation id="9076283476770535406">Es posible que incluya contenido para adultos</translation> <translation id="9076523132036239772">Tu dirección de correo electrónico y tu contraseña no se han podido verificar. Intenta conectarte primero a una red.</translation> +<translation id="9076821103818989526">Panel lateral</translation> <translation id="9076977315710973122">Sistema de archivos compartidos SMB</translation> <translation id="9078193189520575214">Aplicando cambios...</translation> <translation id="9078316009970372699">Inhabilitar conexión compartida instantánea</translation>
diff --git a/chrome/app/resources/generated_resources_et.xtb b/chrome/app/resources/generated_resources_et.xtb index b9e20be..5eabfbdf 100644 --- a/chrome/app/resources/generated_resources_et.xtb +++ b/chrome/app/resources/generated_resources_et.xtb
@@ -1250,6 +1250,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Lisa WiFi ...</translation> <translation id="2162155940152307086">Sünkroonimine algab, kui sünkroonimisseadetest väljute</translation> +<translation id="2162705204091149050">Teabe lugemine teie brauseri, OS-i, seadme, installitud tarkvara ja failide kohta</translation> <translation id="2162926944953615670">Saadaval ei ole ühtki eSIM-i profiili</translation> <translation id="2163470535490402084">Seadmesse <ph name="DEVICE_TYPE" /> sisselogimiseks looge ühendus Internetiga.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> ja veel 1 lüliti</translation> @@ -2500,6 +2501,7 @@ <translation id="3359256513598016054">Sertifikaadi eeskirjade piirangud</translation> <translation id="3360297538363969800">Printimine ebaõnnestus. Kontrollige printerit ja proovige uuesti.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> jagab teiega järgmist: <ph name="ATTACHMENTS" />.}other{<ph name="DEVICE_NAME" /> jagab teiega järgmist: <ph name="ATTACHMENTS" />.}}</translation> +<translation id="3363202073972776113">Seda uut profiili haldab teie organisatsioon. <ph name="BEGIN_LINK" />Lisateave<ph name="END_LINK" /></translation> <translation id="3364986687961713424">Teie administraatorilt: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Kasutage klahvi Ctrl või Alt</translation> <translation id="3368922792935385530">Ühendatud</translation> @@ -2534,6 +2536,7 @@ <translation id="339722927132407568">Hangub</translation> <translation id="3399432415385675819">Märguanded keelatakse</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> × <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> hertsi) – ülereaskannimine</translation> +<translation id="3401484564516348917">Teabe lugemine teie brauseri, OS-i, seadme, installitud tarkvara, registriväärtuste ja failide kohta</translation> <translation id="3402059702184703067">{COUNT,plural, =1{Sellesse seadmesse on salvestatud {COUNT} parool}other{Sellesse seadmesse on salvestatud {COUNT} parooli}}</translation> <translation id="3402255108239926910">Valige avatar</translation> <translation id="3402585168444815892">Demorežiimis registreerumine</translation> @@ -2780,6 +2783,7 @@ <translation id="3627879631695760395">Rakenduse <ph name="APP" /> installimine …</translation> <translation id="3628275722731025472">Lülitage Bluetooth välja</translation> <translation id="3629631988386925734">Sisestage oma parool, et Smart Lock sisse lülitada. Järgmisel korral avab seadme <ph name="DEVICE_TYPE" /> teie telefon. Funktsiooni Smart Lock saab välja lülitada menüüs Seaded.</translation> +<translation id="3629664892718440872">Jäta valik meelde</translation> <translation id="3630132874740063857">Teie telefon</translation> <translation id="3630995161997703415">Lisage sait riiulisse, et see oleks alati käepärast</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Kui lubate oma Chrome OS-i seadmetel meile saata automaatseid aruandeid, aitab see meil prioriseerida, mida Chrome OS-is parandada ja täiustada. Need aruanded hõlmavad näiteks teavet selle kohta, millal Chrome OS kokku jookseb ning milliseid funktsioone ja kui palju mälumahtu te tavaliselt kasutate.<ph name="END_PARAGRAPH1" /> @@ -3269,6 +3273,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">MIDI-seadmete täielikku juhtimisõigust ei antud</translation> +<translation id="4087328411748538168">Kuva paremal</translation> <translation id="4089235344645910861">Seaded on salvestatud. Sünkroonimine algas.</translation> <translation id="4090103403438682346">Luba kinnitatud juurdepääs</translation> <translation id="4090947011087001172">Kas lähtestada saidi <ph name="SITE" /> load?</translation> @@ -3961,6 +3966,7 @@ <translation id="4779766576531456629">eSIM-i mobiilsidevõrgu ümbernimetamine</translation> <translation id="4780321648949301421">Salvesta leht &nimega...</translation> <translation id="4781443161433589743">Kasutate Chrome'i parimaid turbefunktsioone</translation> +<translation id="4782861709165039462">Kõik mikrofonid on seadmete riistvara lülitiga keelatud</translation> <translation id="4785719467058219317">Kasutate turvavõtit, mis ei ole sellel veebisaidil registreeritud</translation> <translation id="4785914069240823137">Kärpimisest loobumine</translation> <translation id="4788092183367008521">Kontrollige võrguühendust ja proovige uuesti.</translation> @@ -4229,7 +4235,6 @@ <translation id="5054374119096692193">Kuva kõik kaardivalikud jaotises <ph name="BEGIN_LINK" />Chrome'i kohandamine<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Ühenduse loomine konteineriga</translation> <translation id="5057110919553308744">Laiendusel klõpsamisel</translation> -<translation id="505776528429481161">Lähedusesolevate seadmete lihtne ühendamine ja seadistamine</translation> <translation id="5059241099014281248">Sisselogimise piiramine</translation> <translation id="5059526285558225588">Valige, mida jagada</translation> <translation id="5060332552815861872">Salvestamiseks on saadaval 1 printer.</translation> @@ -4728,6 +4733,7 @@ <translation id="5548075230008247516">Kõik üksused on valimata. Valikurežiimist väljuti.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{„<ph name="TAB_TITLE" />”}=1{„<ph name="TAB_TITLE" />” ja veel 1 vaheleht}other{„<ph name="TAB_TITLE" />” ja veel # vahelehte}}</translation> <translation id="5548606607480005320">Ohutuskontroll</translation> +<translation id="5548644592758170183">Kuva vasakul</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Klaviatuur ja tekstisisestus</translation> <translation id="5553089923092577885">Sertifikaadi reeglite vastendused</translation> @@ -8210,6 +8216,7 @@ <translation id="8980345560318123814">Tagasiside aruanded</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> – jooksis kokku</translation> <translation id="8981825781894055334">Paber hakkab otsa saama</translation> +<translation id="8983018820925880511">Seda uut profiili haldab <ph name="DOMAIN" />. <ph name="BEGIN_LINK" />Lisateave<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> saab faili <ph name="FILENAME" /> muuta</translation> <translation id="8984694057134206124">Olete <ph name="MINUTES" /> minutit kõigile nähtav. <ph name="LINK_BEGIN" />Lisateave<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Tere tulemast Chromebookile mõeldud Steami!</translation> @@ -8306,6 +8313,7 @@ <translation id="9075413375877487220">Täiustatud ohutu sirvimine ei usalda seda laiendust.</translation> <translation id="9076283476770535406">See võib sisaldada täiskasvanutele mõeldud sisu</translation> <translation id="9076523132036239772">Kahjuks ei õnnestunud teie e-posti aadressi või parooli kinnitada. Proovige kõigepealt luua ühendus võrguga.</translation> +<translation id="9076821103818989526">Külgpaneel</translation> <translation id="9076977315710973122">SMB võrguhoidla</translation> <translation id="9078193189520575214">Muudatuste rakendamine …</translation> <translation id="9078316009970372699">Automaatse jagamise keelamine</translation>
diff --git a/chrome/app/resources/generated_resources_eu.xtb b/chrome/app/resources/generated_resources_eu.xtb index d5ca075..959ccd4 100644 --- a/chrome/app/resources/generated_resources_eu.xtb +++ b/chrome/app/resources/generated_resources_eu.xtb
@@ -1247,6 +1247,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Gehitu Wi-Fi konexioa…</translation> <translation id="2162155940152307086">Sinkronizazio-ezarpenetatik irteten zarenean hasiko da edukia sinkronizatzen</translation> +<translation id="2162705204091149050">Arakatzaileari, sistema eragileari, gailuari, instalatutako softwareari eta fitxategiei buruzko informazioa irakurri.</translation> <translation id="2162926944953615670">Ez dago eSIMaren profil erabilgarririk</translation> <translation id="2163470535490402084">Konektatu Internetera <ph name="DEVICE_TYPE" /> gailuan saioa hasteko.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> eta beste erabilerraztasun-etengailu bat</translation> @@ -1267,6 +1268,7 @@ <translation id="2180620921879609685">Edozein orritako edukia blokeatu</translation> <translation id="2182058453334755893">Arbelean kopiatu da</translation> <translation id="2184515124301515068">Utzi Chrome-k erabaki dezan zer webguneri baimenduko dion soinua erreproduzitzea (gomendatua)</translation> +<translation id="2186206192313702726">Google Lens</translation> <translation id="2186711480981247270">Beste gailu batetik partekatutako orria</translation> <translation id="2187675480456493911">Kontuko beste gailu batzuekin sinkronizatuta dago. Ez dira sinkronizatuko beste erabiltzaileek aldatutako ezarpenak. <ph name="LINK_BEGIN" />Lortu informazio gehiago<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Errore bat gertatu da zerbitzariaren ziurtagiria inportatzean</translation> @@ -2492,6 +2494,7 @@ <translation id="3359256513598016054">Ziurtagiri-gidalerroaren murriztapenak</translation> <translation id="3360297538363969800">Ezin izan da inprimatu. Egiaztatu inprimagailua eta saiatu berriro.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="ATTACHMENTS" /> partekatzen ari dira zurekin <ph name="DEVICE_NAME" /> gailuaren bidez.}other{<ph name="ATTACHMENTS" /> partekatzen ari dira zurekin <ph name="DEVICE_NAME" /> gailuaren bidez.}}</translation> +<translation id="3363202073972776113">Zure erakundeak kudeatuko du profil berria. <ph name="BEGIN_LINK" />Lortu informazio gehiago<ph name="END_LINK" /></translation> <translation id="3364986687961713424">Zure administratzaileak hau dio: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Erabili Ktrl edo Alt</translation> <translation id="3368922792935385530">Konektatuta</translation> @@ -2526,6 +2529,7 @@ <translation id="339722927132407568">Gelditu egiten da</translation> <translation id="3399432415385675819">Desgaitu egingo dira jakinarazpenak</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> × <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> hertz) - gurutzatuta</translation> +<translation id="3401484564516348917">Arakatzaileari, sistema eragileari, gailuari, instalatutako softwareari, erregistro-balioei eta fitxategiei buruzko informazioa irakurri.</translation> <translation id="3402059702184703067">{COUNT,plural, =1{{COUNT} pasahitz dago gordeta gailu honetan}other{{COUNT} pasahitz daude gordeta gailu honetan}}</translation> <translation id="3402255108239926910">Aukeratu abatarra</translation> <translation id="3402585168444815892">Demo moduan erregistratzen</translation> @@ -2772,6 +2776,7 @@ <translation id="3627879631695760395">Instalatu <ph name="APP" />…</translation> <translation id="3628275722731025472">Desaktibatu Bluetooth-a</translation> <translation id="3629631988386925734">Smart Lock gaitzeko, idatzi pasahitza. Hurrengoan, telefonoak desblokeatuko du <ph name="DEVICE_TYPE" /> gailua. Smart Lock desaktibatzeko, joan ezarpenetara.</translation> +<translation id="3629664892718440872">Gogoratu aukera hau</translation> <translation id="3630132874740063857">Zure telefonoa</translation> <translation id="3630995161997703415">Gehitu webgunea apalean edonoiz erabili ahal izateko</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Chrome OS-ko gailuei txosten automatikoak bidaltzeko baimena emanez gero, Chrome OS-n zer konpondu eta hobetu behar den lehenesten lagunduko diguzu. Txosten horietan hauek sar daitezke, bestek beste: Chrome OS-n gertatzen diren hutsegiteak, erabiltzen dituzun eginbideak eta zenbat memoria erabili ohi duzun.<ph name="END_PARAGRAPH1" /> @@ -3261,6 +3266,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">Ukatu da MIDI gailuak erabat kontrolatzeko aukera</translation> +<translation id="4087328411748538168">Erakutsi eskuinean</translation> <translation id="4089235344645910861">Gorde dira ezarpenak. Hasi da sinkronizazioa.</translation> <translation id="4090103403438682346">Gaitu egiaztatutako sarbidea</translation> <translation id="4090947011087001172"><ph name="SITE" /> webgunearen baimenak berrezarri nahi dituzu?</translation> @@ -3953,6 +3959,7 @@ <translation id="4779766576531456629">Aldatu izena eSIM txartelaren sare mugikorrari</translation> <translation id="4780321648949301421">Gorde orria honela…</translation> <translation id="4781443161433589743">Chrome-ren segurtasun-aukerarik sendoena darabilzu</translation> +<translation id="4782861709165039462">Mikrofono guztiak gailuaren etengailu fisikoaren bidez desgaituta daude</translation> <translation id="4785719467058219317">Webgune honetan erregistratuta ez dagoen segurtasun-giltza bat erabiltzen ari zara</translation> <translation id="4785914069240823137">Utzi ebaketa bertan behera</translation> <translation id="4788092183367008521">Egiaztatu sarera konektatuta zaudela eta saiatu berriro.</translation> @@ -4221,7 +4228,6 @@ <translation id="5054374119096692193">Ikusi txartelen aukera guztiak <ph name="BEGIN_LINK" />Pertsonalizatu Chrome<ph name="END_LINK" /> atalean</translation> <translation id="5056950756634735043">Edukiontzira konektatzen</translation> <translation id="5057110919553308744">Luzapena sakatzen duzunean</translation> -<translation id="505776528429481161">Konektatu eta konfiguratu erraz gertu dauden gailuak</translation> <translation id="5059241099014281248">Murriztu saioa hasteko aukera</translation> <translation id="5059526285558225588">Aukeratu zer partekatu</translation> <translation id="5060332552815861872">1 inprimagailu dago gordetzeko.</translation> @@ -4720,6 +4726,7 @@ <translation id="5548075230008247516">Elementu guztiak desautatu dira, eta hautapen modutik irten zara.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" eta beste fitxa bat}other{"<ph name="TAB_TITLE" />" eta beste # fitxa}}</translation> <translation id="5548606607480005320">Segurtasun-egiaztapena</translation> +<translation id="5548644592758170183">Erakutsi ezkerrean</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Teklatua eta testu-idazketa</translation> <translation id="5553089923092577885">Ziurtagiri-gidalerroen esleipenak</translation> @@ -8197,6 +8204,7 @@ <translation id="8980345560318123814">Oharren txostenak</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - Huts eginda</translation> <translation id="8981825781894055334">Paper gutxi dago</translation> +<translation id="8983018820925880511">Zure erakundeak (<ph name="DOMAIN" />) kudeatuko du profil berria. <ph name="BEGIN_LINK" />Lortu informazio gehiago<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> webguneak <ph name="FILENAME" /> edita dezake</translation> <translation id="8984694057134206124">Guztientzat egongo zara ikusgai <ph name="MINUTES" /> minutuz. <ph name="LINK_BEGIN" />Lortu informazio gehiago<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Ongi etorri Chromebook-erako Steam-era</translation> @@ -8293,6 +8301,7 @@ <translation id="9075413375877487220">"Arakatze seguru hobetua" eginbideak ez du jotzen fidagarritzat luzapena.</translation> <translation id="9076283476770535406">Helduentzako edukia izan dezake</translation> <translation id="9076523132036239772">Ezin izan da helbide elektronikoa edo pasahitza egiaztatu. Saiatu sare batera konektatzen lehendabizi.</translation> +<translation id="9076821103818989526">Alboko panela</translation> <translation id="9076977315710973122">SMB bidez partekatzea</translation> <translation id="9078193189520575214">Aldaketak aplikatzen…</translation> <translation id="9078316009970372699">Desgaitu Konexioa bizkor partekatzeko eginbidea</translation>
diff --git a/chrome/app/resources/generated_resources_fa.xtb b/chrome/app/resources/generated_resources_fa.xtb index 3454ea5..57a8b65 100644 --- a/chrome/app/resources/generated_resources_fa.xtb +++ b/chrome/app/resources/generated_resources_fa.xtb
@@ -4235,7 +4235,6 @@ <translation id="5054374119096692193">همه گزینههای کارت را در <ph name="BEGIN_LINK" />سفارشی کردن Chrome<ph name="END_LINK" /> ببینید</translation> <translation id="5056950756634735043">درحال اتصال به محتوی</translation> <translation id="5057110919553308744">وقتی روی افزونه کلیک میکنید</translation> -<translation id="505776528429481161">بهآسانی به دستگاههای نزدیکتان متصل شوید و آنها را راهاندازی کنید</translation> <translation id="5059241099014281248">محدود کردن ورود به سیستم</translation> <translation id="5059526285558225588">انتخاب موارد برای همرسانی</translation> <translation id="5060332552815861872">۱ چاپگر برای ذخیره در دسترس است.</translation>
diff --git a/chrome/app/resources/generated_resources_fi.xtb b/chrome/app/resources/generated_resources_fi.xtb index ec07acaa..4b5c3bf 100644 --- a/chrome/app/resources/generated_resources_fi.xtb +++ b/chrome/app/resources/generated_resources_fi.xtb
@@ -1258,6 +1258,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Lisää Wi-Fi-yhteys...</translation> <translation id="2162155940152307086">Synkronointi alkaa, kun poistut synkronointiasetuksista</translation> +<translation id="2162705204091149050">Tietojen lukeminen selaimesta, käyttöjärjestelmästä, laitteesta, asennetusta ohjelmistosta ja tiedostoista</translation> <translation id="2162926944953615670">Ei eSIM-profiileja saatavilla</translation> <translation id="2163470535490402084">Kirjaudu laitteelle <ph name="DEVICE_TYPE" /> muodostamalla verkkoyhteys.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> ja 1 muu kytkin</translation> @@ -2508,6 +2509,7 @@ <translation id="3359256513598016054">Varmennekäytännön rajoitteet</translation> <translation id="3360297538363969800">Tulostus epäonnistui. Tarkista tulostin ja yritä uudelleen.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> jakaa <ph name="ATTACHMENTS" /> kanssasi.}other{<ph name="DEVICE_NAME" /> jakaa <ph name="ATTACHMENTS" /> kanssasi.}}</translation> +<translation id="3363202073972776113">Organisaatiosi ylläpitää tätä uutta profiilia. <ph name="BEGIN_LINK" />Lue lisää<ph name="END_LINK" /></translation> <translation id="3364986687961713424">Järjestelmänvalvojalta: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Käytä joko Ctrl- tai Alt-näppäintä</translation> <translation id="3368922792935385530">Yhdistetty</translation> @@ -2542,6 +2544,7 @@ <translation id="339722927132407568">Jumiutuu</translation> <translation id="3399432415385675819">Ilmoitukset poistetaan käytöstä.</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> hertsiä) – lomitettu</translation> +<translation id="3401484564516348917">Tietojen lukeminen selaimesta, käyttöjärjestelmästä, laitteesta, asennetusta ohjelmistosta, rekisteriarvoista ja tiedostoista</translation> <translation id="3402059702184703067">{COUNT,plural, =1{Tälle laitteelle on tallennettu {COUNT} salasana}other{Tälle laitteelle on tallennettu {COUNT} salasanaa}}</translation> <translation id="3402255108239926910">Valitse avatar</translation> <translation id="3402585168444815892">Liitytään demotilaan</translation> @@ -2788,6 +2791,7 @@ <translation id="3627879631695760395">Asenna <ph name="APP" />…</translation> <translation id="3628275722731025472">Poista Bluetooth käytöstä</translation> <translation id="3629631988386925734">Ota Smart Lock käyttöön kirjoittamalla salasanasi. Seuraavalla kerralla <ph name="DEVICE_TYPE" /> voidaan avata puhelimellasi. Voit poistaa Smart Lockin käytöstä asetuksissa.</translation> +<translation id="3629664892718440872">Muista valinta</translation> <translation id="3630132874740063857">Oma puhelin</translation> <translation id="3630995161997703415">Lisää tämä sivusto hyllyysi, niin voit käyttää sitä milloin tahansa.</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Antamalla ChromeOS-laitteiden lähettää raportteja automaattisesti voit auttaa meitä korjaamaan ja kehittämään ChromeOS:n ominaisuuksia. Raportteihin voi sisältyä esimerkiksi tietoja ChromeOS:n kaatumisista ja käytetyistä ominaisuuksista sekä tyypillisestä muistin käytöstä.<ph name="END_PARAGRAPH1" /> @@ -3274,6 +3278,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">MIDI-laitteiden täysi käyttöoikeus estetty</translation> +<translation id="4087328411748538168">Näytä oikealla</translation> <translation id="4089235344645910861">Asetukset tallennettiin. Synkronointi aloitettiin.</translation> <translation id="4090103403438682346">Ota käyttöön vahvistettu käyttö</translation> <translation id="4090947011087001172">Nollataanko sivuston <ph name="SITE" /> käyttöoikeudet?</translation> @@ -3967,6 +3972,7 @@ <translation id="4779766576531456629">Nimeä eSIM-mobiiliverkko uudelleen</translation> <translation id="4780321648949301421">Tallenna sivu nimellä...</translation> <translation id="4781443161433589743">Sinulla on käytössä Chromen tehokkain suojaus</translation> +<translation id="4782861709165039462">Kaikki mikrofonit poistettu käytöstä laitteiston valitsimella</translation> <translation id="4785719467058219317">Käytät suojausavainta, jota ei ole rekisteröity tällä sivustolla.</translation> <translation id="4785914069240823137">Peru rajaus</translation> <translation id="4788092183367008521">Tarkista verkkoyhteys ja yritä uudelleen.</translation> @@ -4235,7 +4241,6 @@ <translation id="5054374119096692193">Katso kaikki korttivaihtoehdot <ph name="BEGIN_LINK" />Yksilöi Chromea<ph name="END_LINK" /> ‑osiosta</translation> <translation id="5056950756634735043">Muodostetaan yhteyttä säilöön</translation> <translation id="5057110919553308744">Kun klikkaat laajennusta</translation> -<translation id="505776528429481161">Yhdistä helposti ja ota käyttöön lähellä olevia laitteita</translation> <translation id="5059241099014281248">Rajoita kirjautumista</translation> <translation id="5059526285558225588">Valitse, mitä jaat</translation> <translation id="5060332552815861872">Tallennettavia tulostimia on yksi.</translation> @@ -4734,6 +4739,7 @@ <translation id="5548075230008247516">Kaikkien kohteiden valinnat on poistettu ja valintatilasta on poistuttu.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{<ph name="TAB_TITLE" />}=1{<ph name="TAB_TITLE" /> ja yksi muu välilehti}other{<ph name="TAB_TITLE" /> ja # muuta välilehteä}}</translation> <translation id="5548606607480005320">Turvatarkistus</translation> +<translation id="5548644592758170183">Näytä vasemmalla</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Näppäimistö ja tekstinsyöttö</translation> <translation id="5553089923092577885">Varmenteen käytäntökytkennät</translation> @@ -8215,6 +8221,7 @@ <translation id="8980345560318123814">Palauteraportit</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> – kaatunut</translation> <translation id="8981825781894055334">Paperi vähissä</translation> +<translation id="8983018820925880511"><ph name="DOMAIN" /> ylläpitää tätä uutta profiilia. <ph name="BEGIN_LINK" />Lue lisää<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> saa muokata tiedostoa <ph name="FILENAME" /></translation> <translation id="8984694057134206124">Näyt kaikille <ph name="MINUTES" /> minuutin ajan. <ph name="LINK_BEGIN" />Lue lisää<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Tervetuloa käyttämään Steamia Chromebookilla</translation> @@ -8311,6 +8318,7 @@ <translation id="9075413375877487220">Parannettu selaussuoja ei luota tähän laajennukseen.</translation> <translation id="9076283476770535406">Se saattaa sisältää vain aikuisille tarkoitettua sisältöä.</translation> <translation id="9076523132036239772">Sähköpostiosoitettasi tai salasanaasi ei voi vahvistaa. Muodosta ensin verkkoyhteys.</translation> +<translation id="9076821103818989526">Sivupaneeli</translation> <translation id="9076977315710973122">SMB-jako</translation> <translation id="9078193189520575214">Otetaan muutoksia käyttöön…</translation> <translation id="9078316009970372699">Poista yhteyden pikajakaminen käytöstä</translation>
diff --git a/chrome/app/resources/generated_resources_fil.xtb b/chrome/app/resources/generated_resources_fil.xtb index eb4cdb45..ec8b8ed 100644 --- a/chrome/app/resources/generated_resources_fil.xtb +++ b/chrome/app/resources/generated_resources_fil.xtb
@@ -1260,6 +1260,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Magdagdag ng Wi-Fi...</translation> <translation id="2162155940152307086">Magsisimula ang pag-sync sa sandaling umalis ka sa mga setting ng pag-sync</translation> +<translation id="2162705204091149050">Basahin ang impormasyon tungkol sa iyong browser, OS, device, naka-install na software, at mga file</translation> <translation id="2162926944953615670">Walang available na profile ng eSIM</translation> <translation id="2163470535490402084">Mangyaring kumonekta sa Internet upang mag-sign in sa iyong <ph name="DEVICE_TYPE" />.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" />, at 1 pang switch</translation> @@ -2509,6 +2510,7 @@ <translation id="3359256513598016054">Mga Limitasyon sa Patakaran ng Certificate</translation> <translation id="3360297538363969800">Hindi nakapag-print. Pakisuri ang iyong printer at subukang muli.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{Nagbabahagi sa iyo ang <ph name="DEVICE_NAME" /> ng <ph name="ATTACHMENTS" />.}one{Nagbabahagi sa iyo ang <ph name="DEVICE_NAME" /> ng <ph name="ATTACHMENTS" />.}other{Nagbabahagi sa iyo ang <ph name="DEVICE_NAME" /> ng <ph name="ATTACHMENTS" />.}}</translation> +<translation id="3363202073972776113">Papamahalaan ng iyong organisasyon ang bagong profile na ito. <ph name="BEGIN_LINK" />Matuto pa<ph name="END_LINK" /></translation> <translation id="3364986687961713424">Mula sa iyong administrator: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Isa lang sa Ctrl o Alt ang gamitin</translation> <translation id="3368922792935385530">Nakakonekta</translation> @@ -2543,6 +2545,7 @@ <translation id="339722927132407568">Nagfi-freeze</translation> <translation id="3399432415385675819">Madi-disable ang mga notification</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Hertz) - naka-interlace</translation> +<translation id="3401484564516348917">Basahin ang impormasyon tungkol sa iyong browser, OS, naka-install na software, mga value sa registry, at mga file</translation> <translation id="3402059702184703067">{COUNT,plural, =1{{COUNT} password ang naka-store sa device na ito}one{{COUNT} password ang naka-store sa device na ito}other{{COUNT} na password ang naka-store sa device na ito}}</translation> <translation id="3402255108239926910">Pumili ng avatar</translation> <translation id="3402585168444815892">Ine-enroll sa Demo Mode</translation> @@ -2789,6 +2792,7 @@ <translation id="3627879631695760395">I-install ang <ph name="APP" />...</translation> <translation id="3628275722731025472">I-off ang Bluetooth</translation> <translation id="3629631988386925734">Ilagay ang iyong password para i-enable ang Smart Lock. Sa susunod, ia-unlock ng iyong telepono ang <ph name="DEVICE_TYPE" /> mo. Puwede mong i-off ang Smart Lock sa Mga Setting.</translation> +<translation id="3629664892718440872">Tandaan ang pagpipiliang ito</translation> <translation id="3630132874740063857">Iyong telepono</translation> <translation id="3630995161997703415">Idagdag ang site na ito sa iyong shelf upang magamit ito anumang oras</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Kapag pinayagan ang iyong mga ChromeOS device na magpadala ng mga awtomatikong ulat, makakatulong ito sa aming bigyang-priyoridad kung ano ang dapat ayusin at pahusayin sa ChromeOS. Puwedeng kasama sa mga ulat na ito ang mga bagay gaya ng mga pag-crash ng ChromeOS, kung aling mga feature ang ginagamit mo at gaano karaming memory ang karaniwang ginagamit mo.<ph name="END_PARAGRAPH1" /> @@ -3278,6 +3282,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">Tinanggihan ang ganap na kontrol sa mga MIDI device</translation> +<translation id="4087328411748538168">Ipakita sa kanan</translation> <translation id="4089235344645910861">Na-save ang mga setting. Nasimulan ang pag-sync.</translation> <translation id="4090103403438682346">I-enable ang Bine-verify na Access</translation> <translation id="4090947011087001172">I-reset ang mga pahintulot sa site para sa <ph name="SITE" />?</translation> @@ -3971,6 +3976,7 @@ <translation id="4779766576531456629">I-rename ang Cellular network ng eSIM</translation> <translation id="4780321648949301421">I-save ang Page Bilang...</translation> <translation id="4781443161433589743">Ginagamit mo ang pinakamahusay na seguridad ng Chrome</translation> +<translation id="4782861709165039462">Na-disable ang lahat ng mikropono sa pamamagitan ng switch ng hardware ng mga device</translation> <translation id="4785719467058219317">Gumagamit ka ng security key na hindi nakarehistro sa website na ito</translation> <translation id="4785914069240823137">Kanselahin ang Pag-crop</translation> <translation id="4788092183367008521">Pakisuri ang iyong koneksyon sa network at subukang muli.</translation> @@ -4239,7 +4245,6 @@ <translation id="5054374119096692193">Tingnan ang lahat ng opsyon sa card sa <ph name="BEGIN_LINK" />I-customize ang Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Kumokonekta sa container</translation> <translation id="5057110919553308744">Kapag iki-click mo ang extension</translation> -<translation id="505776528429481161">Kumonekta at mag-set up ng malalapit na device nang walang kahirap-hirap</translation> <translation id="5059241099014281248">Paghigpitan ang pag-sign in</translation> <translation id="5059526285558225588">Piliin kung ano ang ibabahagi</translation> <translation id="5060332552815861872">May 1 printer na available na i-save.</translation> @@ -4738,6 +4743,7 @@ <translation id="5548075230008247516">Na-unselect ang lahat ng item, lumabas sa selection mode.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" at 1 Pang Tab}one{"<ph name="TAB_TITLE" />" at # Pang Tab}other{"<ph name="TAB_TITLE" />" at # Pang Tab}}</translation> <translation id="5548606607480005320">Pag-check sa kaligtasan</translation> +<translation id="5548644592758170183">Ipakita sa kaliwa</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Keyboard at pag-input ng text</translation> <translation id="5553089923092577885">Certificate Policy Mappings</translation> @@ -8225,6 +8231,7 @@ <translation id="8980345560318123814">Mga ulat ng feedback</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - Nag-crash</translation> <translation id="8981825781894055334">Kaunti na ang papel</translation> +<translation id="8983018820925880511">Papamahalaan ng <ph name="DOMAIN" /> ang bagong profile na ito. <ph name="BEGIN_LINK" />Matuto pa<ph name="END_LINK" /></translation> <translation id="8983632908660087688">Puwedeng i-edit ng <ph name="ORIGIN" /> ang <ph name="FILENAME" /></translation> <translation id="8984694057134206124">Makikita ka ng lahat sa loob ng <ph name="MINUTES" /> (na) minuto. <ph name="LINK_BEGIN" />Matuto pa<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Welcome sa Steam para sa Chromebook</translation> @@ -8321,6 +8328,7 @@ <translation id="9075413375877487220">Hindi pinagkakatiwalaan ng Pinahusay na Ligtas na Pag-browse ang extension na ito.</translation> <translation id="9076283476770535406">Maaaring mayroon itong mature content</translation> <translation id="9076523132036239772">Paumanhin, hindi ma-verify ang iyong email o password. Subukan munang kumonekta sa network.</translation> +<translation id="9076821103818989526">Panel sa gilid</translation> <translation id="9076977315710973122">Pagbabahagi ng SMB</translation> <translation id="9078193189520575214">Inilalapat ang mga pagbabago...</translation> <translation id="9078316009970372699">I-disable ang Instant na Pag-tether</translation>
diff --git a/chrome/app/resources/generated_resources_fr-CA.xtb b/chrome/app/resources/generated_resources_fr-CA.xtb index 5a2d577d..7bd61cf 100644 --- a/chrome/app/resources/generated_resources_fr-CA.xtb +++ b/chrome/app/resources/generated_resources_fr-CA.xtb
@@ -1268,6 +1268,7 @@ <translation id="2180620921879609685">Bloquer le contenu sur n'importe quelle page</translation> <translation id="2182058453334755893">Copié dans votre presse-papiers</translation> <translation id="2184515124301515068">Autoriser Chrome à choisir lorsque des sites peuvent faire jouer du son (recommandé)</translation> +<translation id="2186206192313702726">Lentille Google</translation> <translation id="2186711480981247270">Page partagée à partir d'un autre appareil</translation> <translation id="2187675480456493911">Synchronisé avec d'autres appareils associés à votre compte. Les modifications apportées par d'autres utilisateurs ne seront pas synchronisées. <ph name="LINK_BEGIN" />En savoir plus<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Erreur d'importation du certificat serveur</translation> @@ -4224,7 +4225,6 @@ <translation id="5054374119096692193">Voir toutes les options de cartes dans <ph name="BEGIN_LINK" />Personnaliser Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Connexion au conteneur en cours…</translation> <translation id="5057110919553308744">Lorsque vous cliquez sur l'extension</translation> -<translation id="505776528429481161">Connectez et configurez facilement les appareils à proximité</translation> <translation id="5059241099014281248">Restreindre les connexions</translation> <translation id="5059526285558225588">Choisir quoi partager</translation> <translation id="5060332552815861872">Il y a 1 imprimante à enregistrer.</translation>
diff --git a/chrome/app/resources/generated_resources_fr.xtb b/chrome/app/resources/generated_resources_fr.xtb index 9346822..e1f44655 100644 --- a/chrome/app/resources/generated_resources_fr.xtb +++ b/chrome/app/resources/generated_resources_fr.xtb
@@ -4223,7 +4223,6 @@ <translation id="5054374119096692193">Consultez toutes les options des fiches dans <ph name="BEGIN_LINK" />Personnaliser Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Connexion au conteneur</translation> <translation id="5057110919553308744">Lorsque vous cliquez sur l'extension</translation> -<translation id="505776528429481161">Connectez-vous à des appareils à proximité et configurez-les facilement</translation> <translation id="5059241099014281248">Restreindre les connexions</translation> <translation id="5059526285558225588">Choisir ce que vous partagez</translation> <translation id="5060332552815861872">1 imprimante peut être enregistrée.</translation>
diff --git a/chrome/app/resources/generated_resources_gl.xtb b/chrome/app/resources/generated_resources_gl.xtb index d33b776a..0451ba14 100644 --- a/chrome/app/resources/generated_resources_gl.xtb +++ b/chrome/app/resources/generated_resources_gl.xtb
@@ -4220,7 +4220,6 @@ <translation id="5054374119096692193">Consulta todas as opcións relativas ás tarxetas en <ph name="BEGIN_LINK" />Personalizar Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Conectando co contedor</translation> <translation id="5057110919553308744">Cando fagas clic na extensión</translation> -<translation id="505776528429481161">Conéctate con dispositivos que estean preto de ti e configúraos con facilidade</translation> <translation id="5059241099014281248">Restrinxir inicio de sesión</translation> <translation id="5059526285558225588">Escoller o que se compartirá</translation> <translation id="5060332552815861872">Hai 1 impresora dispoñible para gardar.</translation>
diff --git a/chrome/app/resources/generated_resources_gu.xtb b/chrome/app/resources/generated_resources_gu.xtb index ab9979ed..5b5bd13b 100644 --- a/chrome/app/resources/generated_resources_gu.xtb +++ b/chrome/app/resources/generated_resources_gu.xtb
@@ -1244,6 +1244,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">વાઇ-ફાઇ ઉમેરો...</translation> <translation id="2162155940152307086">એકવાર તમે સિંકના સેટિંગમાંથી બહાર નીકળશો એટલે સિંક શરૂ થઈ જશે</translation> +<translation id="2162705204091149050">તમારા બ્રાઉઝર, OS, ડિવાઇસ, ઇન્સ્ટૉલ કરેલા સૉફ્ટવેર અને ફાઇલો વિશેની માહિતી વાંચો</translation> <translation id="2162926944953615670">કોઈ ઇ-સિમ પ્રોફાઇલ ઉપલબ્ધ નથી</translation> <translation id="2163470535490402084">કૃપા કરીને તમારા <ph name="DEVICE_TYPE" /> માં સાઇન ઇન કરવા માટે ઇન્ટરનેટથી કનેક્ટ કરો.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> અને વધુ 1 સ્વિચ</translation> @@ -2491,6 +2492,7 @@ <translation id="3359256513598016054">પ્રમાણપત્ર નીતિની મર્યાદાઓ</translation> <translation id="3360297538363969800">છાપવાનું નિષ્ફળ થયું. કૃપા કરીને તમારું પ્રિન્ટર તપાસો અને ફરી પ્રયાસ કરો.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> તમારી સાથે <ph name="ATTACHMENTS" /> શેર કરી રહ્યું છે.}one{<ph name="DEVICE_NAME" /> તમારી સાથે <ph name="ATTACHMENTS" /> શેર કરી રહ્યું છે.}other{<ph name="DEVICE_NAME" /> તમારી સાથે <ph name="ATTACHMENTS" /> શેર કરી રહ્યું છે.}}</translation> +<translation id="3363202073972776113">આ નવી પ્રોફાઇલ તમારી સંસ્થા દ્વારા મેનેજ કરવામાં આવશે. <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" /></translation> <translation id="3364986687961713424">તમારા વ્યવસ્થાપક તરફથી: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Ctrl અથવા Altનો ઉપયોગ કરો</translation> <translation id="3368922792935385530">કનેક્ટેડ</translation> @@ -2525,6 +2527,7 @@ <translation id="339722927132407568">થોભી જતો</translation> <translation id="3399432415385675819">સૂચનાઓ અક્ષમ કરવામાં આવશે</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> હર્ટ્ઝ) - ઇન્ટર્લેસ</translation> +<translation id="3401484564516348917">તમારા બ્રાઉઝર, OS, ડિવાઇસ, ઇન્સ્ટૉલ કરેલા સૉફ્ટવેર, રજિસ્ટ્રી મૂલ્યો અને ફાઇલો વિશેની માહિતી વાંચો</translation> <translation id="3402059702184703067">{COUNT,plural, =1{આ ડિવાઇસ પર {COUNT} પાસવર્ડ સ્ટોર કરવામાં આવ્યો છે}one{આ ડિવાઇસ પર {COUNT} પાસવર્ડ સ્ટોર કરવામાં આવ્યો છે}other{આ ડિવાઇસ પર {COUNT} પાસવર્ડ સ્ટોર કરવામાં આવ્યા છે}}</translation> <translation id="3402255108239926910">અવતાર પસંદ કરો</translation> <translation id="3402585168444815892">ડેમો મોડ માટે નોંધણી કરાવી રહ્યાં છીએ</translation> @@ -2771,6 +2774,7 @@ <translation id="3627879631695760395"><ph name="APP" /> ઇન્સ્ટૉલ કરો...</translation> <translation id="3628275722731025472">બ્લૂટૂથ બંધ કરો</translation> <translation id="3629631988386925734">Smart Lock ચાલુ કરવા માટે તમારો પાસવર્ડ દાખલ કરો. આગલી વખતે, તમારો ફોન તમારા <ph name="DEVICE_TYPE" />ને અનલૉક કરશે. તમે સેટિંગમાં Smart Lock બંધ કરી શકો છો.</translation> +<translation id="3629664892718440872">આ પસંદ યાદ રાખો</translation> <translation id="3630132874740063857">તમારો ફોન</translation> <translation id="3630995161997703415">આ સાઇટને ગમે ત્યારે ઉપયોગમાં લેવા માટે તેને તમારા શેલ્ફમાં ઉમેરો</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />તમારાં ChromeOS ડિવાઇસને ઑટોમૅટિક રિપોર્ટ મોકલવાની મંજૂરી આપવાથી, અમને ChromeOSમાં શું સુધારવું અને શું બહેતર બનાવવું તેને પ્રાધાન્ય આપવામાં સહાય મળે છે. આ રિપોર્ટમાં ChromeOS ક્યારે ક્રૅશ થાય છે, તમે કઈ સુવિધાઓનો ઉપયોગ કરો છો અને તમે સામાન્ય રીતે કેટલી મેમરીનો ઉપયોગ કરો છો, તેના જેવી બાબતોનો સમાવેશ થઈ શકે છે.<ph name="END_PARAGRAPH1" /> @@ -3260,6 +3264,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">MIDI ડિવાઇસનું સંપૂર્ણ નિયંત્રણ નકારવામાં આવ્યું</translation> +<translation id="4087328411748538168">જમણી બાજુએ બતાવો</translation> <translation id="4089235344645910861">સેટિંગ સાચવી. સિંક શરૂ થયું.</translation> <translation id="4090103403438682346">ચકાસાયેલો ઍક્સેસ ચાલુ કરો</translation> <translation id="4090947011087001172"><ph name="SITE" /> માટે સાઇટ પરવાનગીને રીસેટ કરીએ?</translation> @@ -3952,6 +3957,7 @@ <translation id="4779766576531456629">ઇ-સિમ સેલ્યુલર નેટવર્કનું નામ બદલો</translation> <translation id="4780321648949301421">પેજ આ રીતે સાચવો...</translation> <translation id="4781443161433589743">તમારી પાસે Chromeની સૌથી વધુ મજબૂત સુરક્ષા છે</translation> +<translation id="4782861709165039462">ડિવાઇસના હાર્ડવેર સ્વિચ દ્વારા તમામ માઇક્રોફોન બંધ કરવામાં આવ્યા છે</translation> <translation id="4785719467058219317">તમે આ વેબસાઇટમાં રજિસ્ટર ન થયેલા સુરક્ષા કોડનો ઉપયોગ કરી રહ્યા છો</translation> <translation id="4785914069240823137">કાપવાનું રદ કરો</translation> <translation id="4788092183367008521">કૃપા કરીને તમારું નેટવર્ક કનેક્શન ચેક કરો અને ફરી પ્રયાસ કરો.</translation> @@ -4220,7 +4226,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />Chromeને કસ્ટમાઇઝ કરો<ph name="END_LINK" />માં કાર્ડના તમામ વિકલ્પો જુઓ</translation> <translation id="5056950756634735043">કન્ટેનર સાથે કનેક્ટ કરી રહ્યાં છીએ</translation> <translation id="5057110919553308744">તમે એક્સ્ટેંશનને ક્લિક કરો ત્યારે</translation> -<translation id="505776528429481161">નજીક હોય એવા ડિવાઇસ સાથે સરળતાથી કનેક્ટ કરો અને તેમનું સેટઅપ કરો</translation> <translation id="5059241099014281248">સાઇન ઇન કરવાનું પ્રતિબંધિત કરો</translation> <translation id="5059526285558225588">શું શેર કરવું તે પસંદ કરો</translation> <translation id="5060332552815861872">1 પ્રિન્ટર સાચવવા માટે ઉપલબ્ધ છે.</translation> @@ -4719,6 +4724,7 @@ <translation id="5548075230008247516">બધી આઇટમ નાપસંદ કરી, પસંદગી મોડમાંથી બહાર નીકળ્યાં.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" અને 1 અન્ય ટૅબ}one{"<ph name="TAB_TITLE" />" અને # અન્ય ટૅબ}other{"<ph name="TAB_TITLE" />" અને # અન્ય ટૅબ}}</translation> <translation id="5548606607480005320">સલામતી માટે તપાસ</translation> +<translation id="5548644592758170183">ડાબી બાજુએ બતાવો</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">કીબોર્ડ અને ટેક્સ્ટ ઇનપુટ</translation> <translation id="5553089923092577885">પ્રમાણપત્ર પૉલિસી મેપિંગ</translation> @@ -8200,6 +8206,7 @@ <translation id="8980345560318123814">પ્રતિસાદ રિપોર્ટ</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - ક્રેશ થયું</translation> <translation id="8981825781894055334">પેપર ઓછા છે</translation> +<translation id="8983018820925880511">આ નવી પ્રોફાઇલ <ph name="DOMAIN" /> દ્વારા મેનેજ કરવામાં આવશે. <ph name="BEGIN_LINK" />વધુ જાણો<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> <ph name="FILENAME" />માં ફેરફાર કરી શકે છે</translation> <translation id="8984694057134206124"><ph name="MINUTES" /> મિનિટ માટે દરેક વ્યક્તિ તમારું ડિવાઇસ જોઈ શકશે. <ph name="LINK_BEGIN" />વધુ જાણો<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Chromebook માટેની Steam પર આપનું સ્વાગત છે</translation> @@ -8296,6 +8303,7 @@ <translation id="9075413375877487220">આ એક્સ્ટેન્શન Safe Browsingમાં વધારેલી સુરક્ષા દ્વારા વિશ્વસનીય નથી.</translation> <translation id="9076283476770535406">તેમાં વયસ્ક કન્ટેન્ટ હોઈ શકે છે</translation> <translation id="9076523132036239772">માફ કરશો, તમારો ઇમેઇલ અથવા પાસવર્ડ માન્ય કરી શકાયો નથી. સૌ પ્રથમ નેટવર્કથી કનેક્ટ કરવાનો પ્રયાસ કરો. </translation> +<translation id="9076821103818989526">બાજુની પૅનલ</translation> <translation id="9076977315710973122">SMB શેર કરવાના સેટિંગ</translation> <translation id="9078193189520575214">ફેરફારો લાગુ કરી રહ્યાં છીએ...</translation> <translation id="9078316009970372699">ઝટપટ ઇન્ટરનેટ શેર કરવાની સુવિધા બંધ કરો</translation>
diff --git a/chrome/app/resources/generated_resources_hi.xtb b/chrome/app/resources/generated_resources_hi.xtb index 4135e20..36eb0f5d 100644 --- a/chrome/app/resources/generated_resources_hi.xtb +++ b/chrome/app/resources/generated_resources_hi.xtb
@@ -4237,7 +4237,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />Chrome को पसंद के मुताबिक बनाएं<ph name="END_LINK" /> सेक्शन में, कार्ड से जुड़े सभी विकल्प देखें</translation> <translation id="5056950756634735043">कंटेनर से जोड़ा जा रहा है</translation> <translation id="5057110919553308744">जब आप एक्सटेंशन को क्लिक करते हैं</translation> -<translation id="505776528429481161">आस-पास के डिवाइसों को आसानी से कनेक्ट और सेट अप करें</translation> <translation id="5059241099014281248">साइन-इन करने पर पाबंदी लगाएं</translation> <translation id="5059526285558225588">चुनें कि क्या शेयर करना है</translation> <translation id="5060332552815861872">सेव करने के लिए एक प्रिंटर उपलब्ध है.</translation>
diff --git a/chrome/app/resources/generated_resources_hr.xtb b/chrome/app/resources/generated_resources_hr.xtb index ab17a4e..55beb857 100644 --- a/chrome/app/resources/generated_resources_hr.xtb +++ b/chrome/app/resources/generated_resources_hr.xtb
@@ -354,6 +354,7 @@ <translation id="1340527397989195812">Napravite sigurnosnu kopiju medija s uređaja pomoću aplikacije Datoteke.</translation> <translation id="1343865611738742294">Dajte Linux aplikacijama dopuštenje za pristup USB uređajima. Linux neće zapamtiti USB uređaj nakon njegovog uklanjanja.</translation> <translation id="1343920184519992513">Nastavite tamo gdje ste stali i otvorite određeni skup stranica</translation> +<translation id="1344377983938103876">Otvara se <ph name="URL" />...</translation> <translation id="134589511016534552">Medijske kartice koje se prikazuju i u odjeljku Otvorene kartice</translation> <translation id="1346630054604077329">Potvrdi i ponovo pokreni</translation> <translation id="1346748346194534595">Udesno</translation> @@ -4232,7 +4233,6 @@ <translation id="5054374119096692193">Pogledajte sve opcije kartica u odjeljku <ph name="BEGIN_LINK" />Prilagodba Chromea<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Povezivanje sa spremnikom</translation> <translation id="5057110919553308744">Kada kliknete proširenje</translation> -<translation id="505776528429481161">Lako se povežite s uređajima u blizini i postavite ih</translation> <translation id="5059241099014281248">Ograničenje prijave</translation> <translation id="5059526285558225588">Odaberite što želite dijeliti</translation> <translation id="5060332552815861872">Jedan je pisač dostupan za spremanje.</translation> @@ -6957,6 +6957,7 @@ <translation id="7753735457098489144">Instaliranje nije uspjelo jer nema dovoljno prostora za pohranu. Da biste oslobodili prostor, izbrišite datoteke iz pohrane uređaja.</translation> <translation id="7754347746598978109">Nije dopuštena upotreba JavaScripta</translation> <translation id="7754704193130578113">Pitaj gdje spremiti svaku datoteku prije preuzimanja</translation> +<translation id="7755134875397410803">Da bi vam pomogao sa zadacima, Google će primati URL-ove i sadržaje web-lokacija na kojima upotrebljavate Asistenta, kao i informacije koje šaljete putem Asistenta. Te se informacije mogu spremati na vaš Google račun. Asistenta možete isključiti u Chromeovim postavkama. <ph name="LEARN_MORE" /></translation> <translation id="7755287808199759310">Roditelj je može deblokirati</translation> <translation id="7757592200364144203">Promijenite naziv uređaja</translation> <translation id="7757739382819740102">Kontakti u blizini mogu dijeliti s vama. Potrebno je dopuštenje.</translation>
diff --git a/chrome/app/resources/generated_resources_hu.xtb b/chrome/app/resources/generated_resources_hu.xtb index 598d330..584f3f04 100644 --- a/chrome/app/resources/generated_resources_hu.xtb +++ b/chrome/app/resources/generated_resources_hu.xtb
@@ -1258,6 +1258,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Wi-Fi hozzáadása...</translation> <translation id="2162155940152307086">A szinkronizálás akkor kezdődik el, amikor Ön kilép a szinkronizálási beállításokból.</translation> +<translation id="2162705204091149050">A böngészővel, az operációs rendszerrel, az eszközzel, a telepített szoftverekkel és a fájlokkal kapcsolatos információk olvasása</translation> <translation id="2162926944953615670">Nincsenek rendelkezésre álló eSIM-profilok</translation> <translation id="2163470535490402084">Csatlakozzon az internethez, hogy be tudjon jelentkezni <ph name="DEVICE_TYPE" /> eszközére.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> és 1 további kapcsoló</translation> @@ -2506,6 +2507,7 @@ <translation id="3359256513598016054">Tanúsítvány-irányelvi megkötések</translation> <translation id="3360297538363969800">A nyomtatás sikertelen. Ellenőrizze a nyomtatót, majd próbálja újra.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> <ph name="ATTACHMENTS" /> Önnel való megosztására készül.}other{<ph name="DEVICE_NAME" /> <ph name="ATTACHMENTS" /> Önnel való megosztására készül.}}</translation> +<translation id="3363202073972776113">Ezt az új profilt a szervezete fogja kezelni. <ph name="BEGIN_LINK" />További információ<ph name="END_LINK" />.</translation> <translation id="3364986687961713424">A rendszergazdától: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Vagy a Ctrl vagy az Alt billentyűt használja</translation> <translation id="3368922792935385530">Kapcsolódva</translation> @@ -2540,6 +2542,7 @@ <translation id="339722927132407568">Lefagy</translation> <translation id="3399432415385675819">Az értesítések le lesznek tiltva</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> × <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Hertz) – váltottsoros</translation> +<translation id="3401484564516348917">A böngészővel, az operációs rendszerrel, az eszközzel, a telepített szoftverekkel, a regisztrációs adatbázis értékeivel és a fájlokkal kapcsolatos információk olvasása</translation> <translation id="3402059702184703067">{COUNT,plural, =1{{COUNT} jelszót tárol ez az eszköz}other{{COUNT} jelszót tárol ez az eszköz}}</translation> <translation id="3402255108239926910">Válasszon avatart</translation> <translation id="3402585168444815892">Regisztráció a demó módra</translation> @@ -2786,6 +2789,7 @@ <translation id="3627879631695760395">A(z) <ph name="APP" /> telepítése…</translation> <translation id="3628275722731025472">Bluetooth kikapcsolása</translation> <translation id="3629631988386925734">Adja meg jelszavát a Smart Lock bekapcsolásához. Legközelebb a telefonjával oldhatja fel <ph name="DEVICE_TYPE" /> eszköze lezárását. A Smart Lock funkciót a Beállításokban kapcsolhatja ki.</translation> +<translation id="3629664892718440872">Választás megjegyzése</translation> <translation id="3630132874740063857">Telefon</translation> <translation id="3630995161997703415">Adja hozzá ezt a webhelyet a polchoz, hogy bármikor használhassa</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Ha engedélyezi a Chrome OS-t futtató eszközöknek az automatikus jelentésküldést, azzal segít nekünk a Chrome OS hibajavításaival és fejlesztéseivel kapcsolatos prioritások meghatározásában. A jelentések tartalmazhatják például, hogy mikor omlik össze a Chrome OS, valamint hogy Ön milyen funkciókat, illetve jellemzően mennyi memóriát használ.<ph name="END_PARAGRAPH1" /> @@ -3274,6 +3278,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">A MIDI-eszközökhöz való teljes hozzáférés elutasítva</translation> +<translation id="4087328411748538168">Megjelenítés a jobb oldalon</translation> <translation id="4089235344645910861">Beállítások mentve, a szinkronizálás megkezdődött.</translation> <translation id="4090103403438682346">Ellenőrzött hozzáférés engedélyezése</translation> <translation id="4090947011087001172">Visszavonja a(z) <ph name="SITE" /> minden webhelyengedélyét?</translation> @@ -3967,6 +3972,7 @@ <translation id="4779766576531456629">Az eSIM-hez kapcsolódó mobilhálózat átnevezése</translation> <translation id="4780321648949301421">Oldal mentése &másként...</translation> <translation id="4781443161433589743">A Chrome legbiztonságosabb rendszerét használja</translation> +<translation id="4782861709165039462">Az eszköz hardveres kapcsolója az összes mikrofont letiltja</translation> <translation id="4785719467058219317">Olyan biztonsági hardverkulcsot használ, amely nincs regisztrálva ezen a webhelyen</translation> <translation id="4785914069240823137">Kivágás visszavonása</translation> <translation id="4788092183367008521">Ellenőrizze a hálózati kapcsolatot, és próbálkozzon újra.</translation> @@ -4235,7 +4241,6 @@ <translation id="5054374119096692193">Az összes kártyabeállítást <ph name="BEGIN_LINK" />A Chrome személyre szabása<ph name="END_LINK" /> pontban tekintheti át</translation> <translation id="5056950756634735043">Csatlakozás a tárolóhoz</translation> <translation id="5057110919553308744">Amikor a bővítményre kattint</translation> -<translation id="505776528429481161">Könnyen csatlakozhat a közeli eszközökhöz, és beállíthatja őket</translation> <translation id="5059241099014281248">Korlátozott bejelentkezés</translation> <translation id="5059526285558225588">A megosztandó tartalmak kiválasztása</translation> <translation id="5060332552815861872">1 menthető nyomtató található.</translation> @@ -4735,6 +4740,7 @@ <translation id="5548075230008247516">Az összes elem kijelölése megszüntetve; kilépett a kijelölési módból.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{„<ph name="TAB_TITLE" />”}=1{„<ph name="TAB_TITLE" />” és 1 másik lap}other{„<ph name="TAB_TITLE" />” és # másik lap}}</translation> <translation id="5548606607480005320">Biztonsági ellenőrzés</translation> +<translation id="5548644592758170183">Megjelenítés a bal oldalon</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Billentyűzet és szövegbevitel</translation> <translation id="5553089923092577885">Tanúsítvány-irányelv leképezések</translation> @@ -8217,6 +8223,7 @@ <translation id="8980345560318123814">Visszajelzési jelentések</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> – Összeomlott</translation> <translation id="8981825781894055334">Kevés a papír</translation> +<translation id="8983018820925880511">Ezt az új profilt a következő fogja kezelni: <ph name="DOMAIN" />. <ph name="BEGIN_LINK" />További információ<ph name="END_LINK" />.</translation> <translation id="8983632908660087688">A(z) <ph name="ORIGIN" /> szerkesztheti a(z) <ph name="FILENAME" /> fájlt</translation> <translation id="8984694057134206124">Eszköze mindenki számára látható lesz <ph name="MINUTES" /> percig. <ph name="LINK_BEGIN" />További információ<ph name="LINK_END" />.</translation> <translation id="8985191021574400965">Üdvözli a Steam Chromebook-verziója</translation> @@ -8313,6 +8320,7 @@ <translation id="9075413375877487220">Ez a bővítmény nem megbízható a fokozott védelemmel ellátott Biztonságos Böngészés szerint.</translation> <translation id="9076283476770535406">Lehet, hogy felnőtt tartalommal rendelkezik</translation> <translation id="9076523132036239772">Elnézést kérünk, de e-mail címének vagy jelszavának ellenőrzése sikertelen volt. Próbáljon csatlakozni egy hálózathoz.</translation> +<translation id="9076821103818989526">Oldalsó panel</translation> <translation id="9076977315710973122">SMB-megosztás</translation> <translation id="9078193189520575214">Módosítások alkalmazása…</translation> <translation id="9078316009970372699">Azonnali internetmegosztás letiltása</translation>
diff --git a/chrome/app/resources/generated_resources_hy.xtb b/chrome/app/resources/generated_resources_hy.xtb index 82c8e5f3..a00bab57 100644 --- a/chrome/app/resources/generated_resources_hy.xtb +++ b/chrome/app/resources/generated_resources_hy.xtb
@@ -1249,6 +1249,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Ավելացնել Wi-Fi…</translation> <translation id="2162155940152307086">Համաժամացումը կսկսվի, երբ դուրս գաք համաժամացման կարգավորումներից</translation> +<translation id="2162705204091149050">Կարդալ տեղեկություններ ձեր դիտարկիչի, օպերացիոն համակարգի, սարքի, տեղադրված ծրագրերի և ֆայլերի մասին</translation> <translation id="2162926944953615670">Հասանելի eSIM պրոֆիլներ չկան։</translation> <translation id="2163470535490402084"><ph name="DEVICE_TYPE" /> սարք մուտք գործելու համար միացեք համացանցին:</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> ու ևս 1 փոխանջատիչ</translation> @@ -2493,6 +2494,7 @@ <translation id="3359256513598016054">Վկայագրերի քաղաքականության սահմանափակումներ</translation> <translation id="3360297538363969800">Չհաջողվեց տպել: Ստուգեք ձեր տպիչը և կրկին փորձեք:</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> սարքը ձեզ է ուղարկում <ph name="ATTACHMENTS" />։}one{<ph name="DEVICE_NAME" /> սարքը ձեզ է ուղարկում <ph name="ATTACHMENTS" />։}other{<ph name="DEVICE_NAME" /> սարքը ձեզ է ուղարկում <ph name="ATTACHMENTS" />։}}</translation> +<translation id="3363202073972776113">Այս նոր պրոֆիլը կկառավարվի ձեր կազմակերպության կողմից։ <ph name="BEGIN_LINK" />Իմանալ ավելին<ph name="END_LINK" /></translation> <translation id="3364986687961713424">Ձեր ադմինիստրատորից. «<ph name="ADMIN_MESSAGE" />»</translation> <translation id="3365598184818502391">Օգտագործեք Ctrl կամ Alt</translation> <translation id="3368922792935385530">Միացված է</translation> @@ -2527,6 +2529,7 @@ <translation id="339722927132407568">Կախում է</translation> <translation id="3399432415385675819">Ծանուցումները կանջատվեն</translation> <translation id="3400390787768057815"><ph name="WIDTH" />x<ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Հց), միահյուսված</translation> +<translation id="3401484564516348917">Կարդալ տեղեկություններ ձեր դիտարկիչի, օպերացիոն համակարգի, սարքի, տեղադրված ծրագրերի, գրանցամատյանի արժեքների և ֆայլերի մասին</translation> <translation id="3402059702184703067">{COUNT,plural, =1{Այս սարքում պահված է {COUNT} գաղտնաբառ}one{Այս սարքում պահված է {COUNT} գաղտնաբառ}other{Այս սարքում պահված է {COUNT} գաղտնաբառ}}</translation> <translation id="3402255108239926910">Ընտրեք ավատար</translation> <translation id="3402585168444815892">Գրանցում դեմո ռեժիմում</translation> @@ -2773,6 +2776,7 @@ <translation id="3627879631695760395">Տեղադրել «<ph name="APP" />» հավելվածը…</translation> <translation id="3628275722731025472">Անջատել Bluetooth-ը</translation> <translation id="3629631988386925734">Smart Lock-ը միացնելու համար մուտքագրեք ձեր գաղտնաբառը։ Դրանից հետո ձեր հեռախոսով կարող եք ապակողպել <ph name="DEVICE_TYPE" /> սարքը։ Smart Lock-ը կարող եք անջատել կարգավորումներում։</translation> +<translation id="3629664892718440872">Հիշել այս ընտրությունը</translation> <translation id="3630132874740063857">Հեռախոս</translation> <translation id="3630995161997703415">Ավելացրեք այս կայքը ձեր դարակում՝ այն ցանկացած ժամանակ օգտագործելու համար</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Դուք կարող եք թույլ տալ, որ ձեր ChromeOS սարքերն ավտոմատ կերպով հաշվետվություններ ուղարկեն Google-ին։ Դա մեզ կօգնի որոշել, թե ինչն առաջնահերթ բարելավման կարիք ունի։ Նման հաշվետվությունները կարող են պարունակել տեղեկություններ այն մասին, թե ինչ գործառույթներից եք օգտվում, որքան հիշողություն եք սովորաբար սպառում, ինչպես նաև տվյալներ ChromeOS-ի խափանումների մասին։<ph name="END_PARAGRAPH1" /> @@ -3262,6 +3266,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">MIDI սարքերի նկատմամբ ամբողջական վերահսկողությունն արգելվել է</translation> +<translation id="4087328411748538168">Ցուցադրել աջ կողմում</translation> <translation id="4089235344645910861">Կարգավորումները պահվեցին: Համաժամացումը սկսվեց:</translation> <translation id="4090103403438682346">Միացնել ստուգված մուտքի ծառայությունը</translation> <translation id="4090947011087001172">Վերակայե՞լ թույլտվությունները <ph name="SITE" /> կայքի համար:</translation> @@ -3953,6 +3958,7 @@ <translation id="4779766576531456629">Վերանվանել eSIM-ի բջջային ցանցը</translation> <translation id="4780321648949301421">Save Page As...</translation> <translation id="4781443161433589743">Կիրառվում է Chrome-ի ամենաուժեղ պաշտպանությունը</translation> +<translation id="4782861709165039462">Բոլոր խոսափողներն անջատված են սարքի ապարատային փոխանջատիչի միջոցով</translation> <translation id="4785719467058219317">Դուք օգտագործում եք անվտանգության բանալի, որը գրանցված չէ այս կայքում</translation> <translation id="4785914069240823137">Չեղարկել եզրատումը</translation> <translation id="4788092183367008521">Ստուգեք կապը և նորից փորձեք:</translation> @@ -4222,7 +4228,6 @@ <translation id="5054374119096692193">Տեսեք քարտերի բոլոր տարբերակները <ph name="BEGIN_LINK" />Անհատականացնել Chrome-ը<ph name="END_LINK" /> բաժնում</translation> <translation id="5056950756634735043">Միացում կոնտեյներին</translation> <translation id="5057110919553308744">Երբ դուք սեղմում եք ընդլայնման վրա</translation> -<translation id="505776528429481161">Հեշտությամբ միացեք մոտակայքում գտնվող սարքերին և կարգավորեք դրանք</translation> <translation id="5059241099014281248">Սահմանափակ մուտք</translation> <translation id="5059526285558225588">Ինչ տվյալներ հասանելի դարձնել</translation> <translation id="5060332552815861872">Կա 1 տպիչ, որը կարող եք պահել։</translation> @@ -4723,6 +4728,7 @@ <translation id="5548075230008247516">Բոլոր տարրերի նշումը չեղարկվեց, և դուք դուրս եկաք նշման ռեժիմից։</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{«<ph name="TAB_TITLE" />»}=1{«<ph name="TAB_TITLE" />» ու ևս 1 ներդիր}one{«<ph name="TAB_TITLE" />» ու ևս # ներդիր}other{«<ph name="TAB_TITLE" />» ու ևս # ներդիր}}</translation> <translation id="5548606607480005320">Անվտանգության ստուգում</translation> +<translation id="5548644592758170183">Ցուցադրել ձախ կողմում</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Ստեղնաշար և տեքստի մուտքագրում</translation> <translation id="5553089923092577885">Վկայագրի քաղաքականությունների համադրում</translation> @@ -8202,6 +8208,7 @@ <translation id="8980345560318123814">Հաշվետվություններ</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> – Խափանվել է</translation> <translation id="8981825781894055334">Թուղթը սպառվում է</translation> +<translation id="8983018820925880511">Այս նոր պրոֆիլը կկառավարվի <ph name="DOMAIN" /> տիրույթի կողմից։ <ph name="BEGIN_LINK" />Իմանալ ավելին<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> կայքը կարող է փոփոխել <ph name="FILENAME" /> ֆայլը</translation> <translation id="8984694057134206124">Ձեր սարքը <ph name="MINUTES" /> րոպե տեսանելի կլինի բոլոր օգտատերերին։ <ph name="LINK_BEGIN" />Իմանալ ավելին<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Բարի գալուստ Steam Chromebook-ի համար</translation> @@ -8298,6 +8305,7 @@ <translation id="9075413375877487220">Այս ընդլայնումը վստահելի չէ բարելավված Ապահով դիտարկման համար։</translation> <translation id="9076283476770535406">Այն կարող է մեծահասակների համար բովանդակություն պարունակել</translation> <translation id="9076523132036239772">Ձեր էլփոստը կամ գաղտնաբառը չհաստատվեցին: Նախ կապակցվեք ցանցին:</translation> +<translation id="9076821103818989526">Կողային վահանակ</translation> <translation id="9076977315710973122">SMB պահեստ</translation> <translation id="9078193189520575214">Փոփոխությունների կիրառում…</translation> <translation id="9078316009970372699">Անջատել ակնթարթային մուտքի կետը</translation>
diff --git a/chrome/app/resources/generated_resources_id.xtb b/chrome/app/resources/generated_resources_id.xtb index 7cd52c7..7068b89a 100644 --- a/chrome/app/resources/generated_resources_id.xtb +++ b/chrome/app/resources/generated_resources_id.xtb
@@ -1259,6 +1259,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Tambahkan Wi-Fi...</translation> <translation id="2162155940152307086">Sinkronisasi akan dimulai setelah Anda meninggalkan setelan sinkronisasi</translation> +<translation id="2162705204091149050">Membaca informasi tentang browser, OS, perangkat, software terinstal, dan file</translation> <translation id="2162926944953615670">Tidak ada profil eSIM yang tersedia</translation> <translation id="2163470535490402084">Sambungkan ke internet untuk masuk ke <ph name="DEVICE_TYPE" /> Anda.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" />, dan 1 tombol lainnya</translation> @@ -2508,6 +2509,7 @@ <translation id="3359256513598016054">Kendala Kebijakan Sertifikat</translation> <translation id="3360297538363969800">Gagal mencetak. Periksa printer Anda dan coba lagi.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> akan membagikan <ph name="ATTACHMENTS" /> kepada Anda.}other{<ph name="DEVICE_NAME" /> akan membagikan <ph name="ATTACHMENTS" /> kepada Anda.}}</translation> +<translation id="3363202073972776113">Profil baru ini akan dikelola oleh organisasi Anda. <ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" /></translation> <translation id="3364986687961713424">Dari administrator Anda: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Gunakan Ctrl atau Alt</translation> <translation id="3368922792935385530">Terhubung</translation> @@ -2542,6 +2544,7 @@ <translation id="339722927132407568">Berhenti berputar</translation> <translation id="3399432415385675819">Notifikasi akan dinonaktifkan</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Hertz) - saling bertautan</translation> +<translation id="3401484564516348917">Membaca informasi tentang browser, OS, perangkat, software terinstal, nilai registry, dan file</translation> <translation id="3402059702184703067">{COUNT,plural, =1{{COUNT} sandi disimpan di perangkat ini}other{{COUNT} sandi disimpan di perangkat ini}}</translation> <translation id="3402255108239926910">Pilih avatar</translation> <translation id="3402585168444815892">Mendaftar ke Mode Demo</translation> @@ -2788,6 +2791,7 @@ <translation id="3627879631695760395">Menginstal <ph name="APP" />...</translation> <translation id="3628275722731025472">Nonaktifkan Bluetooth</translation> <translation id="3629631988386925734">Masukkan sandi Anda untuk mengaktifkan Smart Lock. Saat digunakan lagi, ponsel Anda akan membuka kunci <ph name="DEVICE_TYPE" /> ini. Anda dapat menonaktifkan Smart Lock di Setelan.</translation> +<translation id="3629664892718440872">Ingat pilihan ini</translation> <translation id="3630132874740063857">Ponsel Anda</translation> <translation id="3630995161997703415">Tambahkan situs ini ke rak Anda agar dapat digunakan setiap saat</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Mengizinkan perangkat ChromeOS Anda mengirim laporan otomatis akan membantu kami memprioritaskan hal-hal yang harus diperbaiki dan ditingkatkan di ChromeOS. Laporan tersebut dapat mencakup informasi seperti kapan ChromeOS mengalami error, fitur mana yang Anda gunakan, dan berapa banyak memori yang biasanya Anda gunakan.<ph name="END_PARAGRAPH1" /> @@ -3277,6 +3281,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">Kontrol penuh perangkat MIDI ditolak</translation> +<translation id="4087328411748538168">Tampilkan di sebelah kanan</translation> <translation id="4089235344645910861">Setelan disimpan. Sinkronisasi dimulai.</translation> <translation id="4090103403438682346">Mengaktifkan Akses Terverifikasi</translation> <translation id="4090947011087001172">Reset izin situs untuk <ph name="SITE" />?</translation> @@ -3970,6 +3975,7 @@ <translation id="4779766576531456629">Ganti nama jaringan Seluler eSIM</translation> <translation id="4780321648949301421">Simpan Halaman Sebagai...</translation> <translation id="4781443161433589743">Anda memiliki perlindungan keamanan terkuat di Chrome</translation> +<translation id="4782861709165039462">Semua mikrofon dinonaktifkan oleh tombol hardware perangkat</translation> <translation id="4785719467058219317">Anda menggunakan kunci keamanan yang tidak terdaftar di situs ini</translation> <translation id="4785914069240823137">Batalkan Pemangkasan</translation> <translation id="4788092183367008521">Periksa koneksi jaringan Anda, lalu coba lagi.</translation> @@ -4238,7 +4244,6 @@ <translation id="5054374119096692193">Lihat semua opsi kartu di menu <ph name="BEGIN_LINK" />Sesuaikan Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Menghubungkan ke penampung</translation> <translation id="5057110919553308744">Saat Anda mengklik ekstensi</translation> -<translation id="505776528429481161">Hubungkan dan siapkan perangkat di dekat Anda dengan mudah</translation> <translation id="5059241099014281248">Batasi login</translation> <translation id="5059526285558225588">Pilih hal yang akan dibagikan</translation> <translation id="5060332552815861872">Ada 1 printer yang tersedia untuk disimpan.</translation> @@ -4737,6 +4742,7 @@ <translation id="5548075230008247516">Semua item batal dipilih, mode pemilihan ditutup.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" dan 1 Tab Lainnya}other{"<ph name="TAB_TITLE" />" dan # Tab Lainnya}}</translation> <translation id="5548606607480005320">Pemeriksaan keamanan</translation> +<translation id="5548644592758170183">Tampilkan di sebelah kiri</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Input teks dan keyboard</translation> <translation id="5553089923092577885">Pemetaan Kebijakan Sertifikat</translation> @@ -8219,6 +8225,7 @@ <translation id="8980345560318123814">Laporan masukan</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - Mogok</translation> <translation id="8981825781894055334">Kertas hampir habis</translation> +<translation id="8983018820925880511">Profil baru ini akan dikelola oleh <ph name="DOMAIN" />. <ph name="BEGIN_LINK" />Pelajari lebih lanjut<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> dapat mengedit <ph name="FILENAME" /></translation> <translation id="8984694057134206124">Anda akan terlihat oleh semua orang selama <ph name="MINUTES" /> menit. <ph name="LINK_BEGIN" />Pelajari lebih lanjut<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Selamat datang di Steam untuk Chromebook</translation> @@ -8315,6 +8322,7 @@ <translation id="9075413375877487220">Ekstensi ini tidak dipercaya oleh Safe Browsing yang Disempurnakan.</translation> <translation id="9076283476770535406">Situs mungkin berisi konten dewasa</translation> <translation id="9076523132036239772">Maaf, email atau sandi Anda tidak dapat diverifikasi. Coba sambungkan ke jaringan terlebih dulu.</translation> +<translation id="9076821103818989526">Panel samping</translation> <translation id="9076977315710973122">Berbagi SMB</translation> <translation id="9078193189520575214">Menerapkan perubahan ...</translation> <translation id="9078316009970372699">Nonaktifkan Tethering Instan</translation>
diff --git a/chrome/app/resources/generated_resources_is.xtb b/chrome/app/resources/generated_resources_is.xtb index e157bd5c..540740b 100644 --- a/chrome/app/resources/generated_resources_is.xtb +++ b/chrome/app/resources/generated_resources_is.xtb
@@ -4238,7 +4238,6 @@ <translation id="5054374119096692193">Sjáðu alla valkosti spjalda í <ph name="BEGIN_LINK" />Sérsníða Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Tengist geyminum</translation> <translation id="5057110919553308744">Þegar þú smellir á viðbótina</translation> -<translation id="505776528429481161">Tengdu og settu upp nálæg tæki á einfaldan hátt</translation> <translation id="5059241099014281248">Takmarka innskráningu</translation> <translation id="5059526285558225588">Veldu hverju þú deilir</translation> <translation id="5060332552815861872">Einn prentari er tiltækur til að vista.</translation>
diff --git a/chrome/app/resources/generated_resources_it.xtb b/chrome/app/resources/generated_resources_it.xtb index a995a88c..61ca7af1 100644 --- a/chrome/app/resources/generated_resources_it.xtb +++ b/chrome/app/resources/generated_resources_it.xtb
@@ -4222,7 +4222,6 @@ <translation id="5054374119096692193">Visualizza tutte le opzioni relative alle schede nella sezione <ph name="BEGIN_LINK" />Personalizza Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Connessione al contenitore in corso…</translation> <translation id="5057110919553308744">Quando fai clic sull'estensione</translation> -<translation id="505776528429481161">Collega e configura facilmente i dispositivi nelle vicinanze</translation> <translation id="5059241099014281248">Limitare accesso</translation> <translation id="5059526285558225588">Scegli cosa condividere</translation> <translation id="5060332552815861872">C'è una stampante disponibile da salvare.</translation>
diff --git a/chrome/app/resources/generated_resources_iw.xtb b/chrome/app/resources/generated_resources_iw.xtb index eae4530..e6a4172 100644 --- a/chrome/app/resources/generated_resources_iw.xtb +++ b/chrome/app/resources/generated_resources_iw.xtb
@@ -4238,7 +4238,6 @@ <translation id="5054374119096692193">הצגת כל אפשרויות הכרטיסים ב<ph name="BEGIN_LINK" />התאמה האישית של Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">מתבצעת התחברות למאגר</translation> <translation id="5057110919553308744">בלחיצה על התוסף</translation> -<translation id="505776528429481161">חיבור והגדרה של מכשירים בסביבה בקלות</translation> <translation id="5059241099014281248">הגבלת הכניסה</translation> <translation id="5059526285558225588">בחירת הפרטים לשיתוף</translation> <translation id="5060332552815861872">יש מדפסת אחת זמינה לשמירה.</translation>
diff --git a/chrome/app/resources/generated_resources_ja.xtb b/chrome/app/resources/generated_resources_ja.xtb index 5969178..f8376c58 100644 --- a/chrome/app/resources/generated_resources_ja.xtb +++ b/chrome/app/resources/generated_resources_ja.xtb
@@ -1244,6 +1244,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Wi-Fi を追加...</translation> <translation id="2162155940152307086">同期設定を閉じると同期が開始します</translation> +<translation id="2162705204091149050">ブラウザ、OS、デバイス、インストール済みソフトウェア、ファイルに関する情報の読み取り</translation> <translation id="2162926944953615670">eSIM プロファイルがありません</translation> <translation id="2163470535490402084">お使いの <ph name="DEVICE_TYPE" /> にログインするにはインターネットに接続してください。</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />、<ph name="SECOND_SWITCH" />、<ph name="THIRD_SWITCH" />、他 1 個のスイッチ</translation> @@ -2486,6 +2487,7 @@ <translation id="3359256513598016054">証明書ポリシーの制約</translation> <translation id="3360297538363969800">印刷できませんでした。プリンタを確認してもう一度お試しください。</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> が <ph name="ATTACHMENTS" />を共有しています。}other{<ph name="DEVICE_NAME" /> が <ph name="ATTACHMENTS" />を共有しています。}}</translation> +<translation id="3363202073972776113">この新しいプロフィールは組織によって管理されます。<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation> <translation id="3364986687961713424">管理者からのメッセージ: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Ctrl キーまたは Alt キーのいずれかを使用してください</translation> <translation id="3368922792935385530">接続済み</translation> @@ -2520,6 +2522,7 @@ <translation id="339722927132407568">固まる</translation> <translation id="3399432415385675819">通知が無効になります</translation> <translation id="3400390787768057815"><ph name="WIDTH" />x<ph name="HEIGHT" />(<ph name="REFRESH_RATE" /> Hz)インターレース</translation> +<translation id="3401484564516348917">ブラウザ、OS、デバイス、インストール済みソフトウェア、レジストリ値、ファイルに関する情報の読み取り</translation> <translation id="3402059702184703067">{COUNT,plural, =1{{COUNT} 件のパスワードがこのデバイスに保存されています}other{{COUNT} 件のパスワードがこのデバイスに保存されています}}</translation> <translation id="3402255108239926910">アバターを選択</translation> <translation id="3402585168444815892">デモモードでの登録</translation> @@ -2766,6 +2769,7 @@ <translation id="3627879631695760395">「<ph name="APP" />」をインストール...</translation> <translation id="3628275722731025472">Bluetooth のオフ</translation> <translation id="3629631988386925734">パスワードを入力すると Smart Lock が有効になり、次回から、スマートフォンで <ph name="DEVICE_TYPE" /> のロックを解除できます。Smart Lock を無効にするには [設定] をご利用ください。</translation> +<translation id="3629664892718440872">この設定を保存</translation> <translation id="3630132874740063857">スマートフォン</translation> <translation id="3630995161997703415">このサイトをシェルフに追加するといつでも使えるようになります</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Chrome OS デバイスが自動レポートを送信することを許可して、Google が優先度の高い順に Chrome OS を修正および改善する取り組みにご協力ください。自動レポートでは、Chrome OS がクラッシュした時間、使用されている機能、通常のメモリ使用量などの情報が送信されます。<ph name="END_PARAGRAPH1" /> @@ -3253,6 +3257,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">MIDI デバイスのフル コントロールは許可されていません</translation> +<translation id="4087328411748538168">右側に表示</translation> <translation id="4089235344645910861">設定が保存され、同期が始まりました。</translation> <translation id="4090103403438682346">確認済みアクセスを有効にする</translation> <translation id="4090947011087001172"><ph name="SITE" /> のサイト権限をリセットしますか?</translation> @@ -3942,6 +3947,7 @@ <translation id="4779766576531456629">eSIM モバイル ネットワークの名前変更</translation> <translation id="4780321648949301421">ページを別名で保存...</translation> <translation id="4781443161433589743">Chrome の最高のセキュリティ強度で保護されています</translation> +<translation id="4782861709165039462">デバイスのハードウェア スイッチによりすべてのマイクが無効になっています</translation> <translation id="4785719467058219317">このウェブサイトに登録されていないセキュリティ キーを使用しています</translation> <translation id="4785914069240823137">切り抜きをキャンセル</translation> <translation id="4788092183367008521">ネットワーク接続を確認してからもう一度お試しください。</translation> @@ -4210,7 +4216,6 @@ <translation id="5054374119096692193">[<ph name="BEGIN_LINK" />Chrome をカスタマイズ<ph name="END_LINK" />] ですべてのカード オプションをご覧ください</translation> <translation id="5056950756634735043">コンテナに接続しています</translation> <translation id="5057110919553308744">拡張機能をクリックしたとき</translation> -<translation id="505776528429481161">近くのデバイスと簡単に接続して設定できます</translation> <translation id="5059241099014281248">ログイン制限</translation> <translation id="5059526285558225588">共有する内容を選択</translation> <translation id="5060332552815861872">保存できるプリンタが 1 件あります。</translation> @@ -4707,6 +4712,7 @@ <translation id="5548075230008247516">すべての項目の選択を解除し、選択モードを終了しました。</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{「<ph name="TAB_TITLE" />」}=1{「<ph name="TAB_TITLE" />」と他 1 個のタブ}other{「<ph name="TAB_TITLE" />」と他 # 個のタブ}}</translation> <translation id="5548606607480005320">安全確認</translation> +<translation id="5548644592758170183">左側に表示</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">キーボードとテキスト入力</translation> <translation id="5553089923092577885">証明書ポリシーのマッピング</translation> @@ -8181,6 +8187,7 @@ <translation id="8980345560318123814">フィードバック レポート</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - クラッシュしました</translation> <translation id="8981825781894055334">用紙が残り少なくなっています</translation> +<translation id="8983018820925880511">この新しいプロフィールは <ph name="DOMAIN" /> によって管理されます。<ph name="BEGIN_LINK" />詳細<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> は「<ph name="FILENAME" />」を編集できます</translation> <translation id="8984694057134206124">あなたのデバイスは誰でも <ph name="MINUTES" /> 分間検出できるようになります。<ph name="LINK_BEGIN" />詳細<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Chromebook 向け Steam へようこそ</translation> @@ -8277,6 +8284,7 @@ <translation id="9075413375877487220">この拡張機能は、セーフ ブラウジング保護強化機能で信頼されていません。</translation> <translation id="9076283476770535406">成人向けコンテンツが含まれている可能性があります</translation> <translation id="9076523132036239772">メール アドレスまたはパスワードを確認できませんでした。まずネットワークに接続してください。</translation> +<translation id="9076821103818989526">サイドパネル</translation> <translation id="9076977315710973122">SMB 共有</translation> <translation id="9078193189520575214">変更を適用しています...</translation> <translation id="9078316009970372699">インスタント テザリングを無効にする</translation>
diff --git a/chrome/app/resources/generated_resources_ka.xtb b/chrome/app/resources/generated_resources_ka.xtb index 0d82b64..7d4bdd6e7 100644 --- a/chrome/app/resources/generated_resources_ka.xtb +++ b/chrome/app/resources/generated_resources_ka.xtb
@@ -352,6 +352,7 @@ <translation id="1340527397989195812">ფაილების აპლიკაციის გამოყენებით მოწყობილობიდან მედია მასალების სათადარიგო შენახვა.</translation> <translation id="1343865611738742294">Linux აპებისთვის USB მოწყობილობებზე წვდომის დაშვება. Linux არ დაიმახსოვრებს USB-მოწყობილობას მისი ამოღების შემდეგ.</translation> <translation id="1343920184519992513">გააგრძელეთ იქიდან, სადაც შეჩერდით, და გახსენით გვერდების კონკრეტული წყობა</translation> +<translation id="1344377983938103876">იხსნება <ph name="URL" />...</translation> <translation id="134589511016534552">გახსნილი ჩანართების სექციაში გამოჩნდება მედიაჩანართებიც</translation> <translation id="1346630054604077329">დადასტურება და გადატვირთვა</translation> <translation id="1346748346194534595">მარჯვნივ</translation> @@ -1268,6 +1269,7 @@ <translation id="2180620921879609685">კონტენტის დაბლოკვა ნებისმიერ გვერდზე</translation> <translation id="2182058453334755893">დაკოპირდა თქვენს გაცვლის ბუფერში</translation> <translation id="2184515124301515068">საიტებისთვის ხმის დაკვრის დაშვების Chrome-ისთვის მინდობა (რეკომენდებული)</translation> +<translation id="2186206192313702726">Google Lens</translation> <translation id="2186711480981247270">სხვა მოწყობილობიდან გაზიარებული გვერდი</translation> <translation id="2187675480456493911">სინქრონიზებულია თქვენს ანგარიშთან დაკავშირებულ სხვა მოწყობილობებს შორის. სხვა მომხმარებლების მიერ შეცვლილი პარამეტრები არ იქნება სინქრონიზებული. <ph name="LINK_BEGIN" />შეიტყვეთ მეტი<ph name="LINK_END" /></translation> <translation id="2187895286714876935">სერვერის სერტიფიკატის იმპორტის შეცდომა</translation> @@ -4228,7 +4230,6 @@ <translation id="5054374119096692193">გაეცანით ბარათებთან დაკავშირებულ ყველა ვარიანტს „<ph name="BEGIN_LINK" />Chrome-ის მორგების<ph name="END_LINK" />“ სექციიდან</translation> <translation id="5056950756634735043">მიმდინარეობს კონტეინერთან დაკავშირება</translation> <translation id="5057110919553308744">გაფართოებაზე დაწკაპუნებისას</translation> -<translation id="505776528429481161">მარტივად დაუკავშირდით და დააყენეთ ახლომდებარე მოწყობილობები</translation> <translation id="5059241099014281248">შესვლის შეზღუდვა</translation> <translation id="5059526285558225588">აირჩიეთ, რა გაზიარდეს</translation> <translation id="5060332552815861872">შესანახად ხელმისაწვდომია 1 პრინტერი.</translation> @@ -6952,6 +6953,7 @@ <translation id="7753735457098489144">ინსტალაცია ვერ მოხერხდა არასაკმარისი მეხსიერების გამო. მეხსიერების გათავისუფლება შეგიძლიათ მოწყობილობიდან ფაილების წაშლით.</translation> <translation id="7754347746598978109">JavaScript-ის გამოყენება დაუშვებელია</translation> <translation id="7754704193130578113">მკითხე, სად შეინახოს თითოეული ფაილი ჩამოტვირთვამდე</translation> +<translation id="7755134875397410803">ამოცანების შესრულებაში რომ დაგეხმაროთ, Google მიიღებს იმ საიტების URL-ებსა და კონტენტს, რომლებზეც ასისტენტს იყენებთ, ასევე, თქვენ მიერ ასისტენტის მეშვეობით გადაგზავნილ ინფორმაციას. აღნიშნული ინფორმაცია შეიძლება შეინახოს თქვენს Google ანგარიშში. ასისტენტის გამორთვა შეგიძლიათ Chrome-ის პარამეტრებიდან. <ph name="LEARN_MORE" /></translation> <translation id="7755287808199759310">მისი განბლოკვა თქვენს მშობელს შეუძლია</translation> <translation id="7757592200364144203">მოწყობილობის გადარქმევა</translation> <translation id="7757739382819740102">თქვენთვის გაზიარება შეუძლია კონტაქტებს, რომლებიც ახლომახლო იმყოფებიან. საჭირო იქნება დადასტურება.</translation>
diff --git a/chrome/app/resources/generated_resources_kk.xtb b/chrome/app/resources/generated_resources_kk.xtb index d5f1149..3aa1578 100644 --- a/chrome/app/resources/generated_resources_kk.xtb +++ b/chrome/app/resources/generated_resources_kk.xtb
@@ -1244,6 +1244,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Wi-Fi желісін қосу…</translation> <translation id="2162155940152307086">Синхрондау, сіз параметрлерден шыққан кезде, басталады.</translation> +<translation id="2162705204091149050">Браузер, операциялық жүйе, құрылғы, орнатылған бағдарламалық құрал және файлдар туралы ақпаратты оқу.</translation> <translation id="2162926944953615670">Қолжетімді eSIM профильдері жоқ.</translation> <translation id="2163470535490402084"><ph name="DEVICE_TYPE" /> құрылғысына кіру үшін, интернетке қосылыңыз.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> және тағы 1 ауыстырғыш</translation> @@ -2489,6 +2490,7 @@ <translation id="3359256513598016054">Сертификат саясатының шектеулері</translation> <translation id="3360297538363969800">Басып шығару әрекеті сәтсіз аяқталды. Принтерді тексеріп, әрекетті қайталаңыз.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> сізге <ph name="ATTACHMENTS" /> жіберіп жатыр.}other{<ph name="DEVICE_NAME" /> сізге <ph name="ATTACHMENTS" /> жіберіп жатыр.}}</translation> +<translation id="3363202073972776113">Бұл жаңа профильді ұйымыңыз басқарады. <ph name="BEGIN_LINK" />Толығырақ<ph name="END_LINK" /></translation> <translation id="3364986687961713424">Әкімшіден: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Ctrl не Alt пернесі пайдаланылуы керек</translation> <translation id="3368922792935385530">Қосылған</translation> @@ -2523,6 +2525,7 @@ <translation id="339722927132407568">Қатып қалады</translation> <translation id="3399432415385675819">Хабарландырулар өшіріледі</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Герц) – байланысқан</translation> +<translation id="3401484564516348917">Браузер, операциялық жүйе, құрылғы, орнатылған бағдарламалық құрал, тізілім мәндері және файлдар туралы ақпаратты оқу.</translation> <translation id="3402059702184703067">{COUNT,plural, =1{Осы құрылғыда {COUNT} құпия сөз сақталған.}other{Осы құрылғыда {COUNT} құпия сөз сақталған.}}</translation> <translation id="3402255108239926910">Аватар таңдаңыз.</translation> <translation id="3402585168444815892">Демо режимінде тіркелуде</translation> @@ -2769,6 +2772,7 @@ <translation id="3627879631695760395"><ph name="APP" /> орнату...</translation> <translation id="3628275722731025472">Bluetooth желісін өшіру</translation> <translation id="3629631988386925734">Құпия сөзді енгізіп, Smart Lock функциясын қосыңыз. Келесіде телефоныңыз <ph name="DEVICE_TYPE" /> құрылғысының құлпын ашады. Smart Lock функциясын "Параметрлер" бөлімінен өшіруге болады.</translation> +<translation id="3629664892718440872">Таңдауды еске сақтау</translation> <translation id="3630132874740063857">Телефоныңыз</translation> <translation id="3630995161997703415">Бұл сайтты кез келген уақытта пайдалану үшін оны сөреңізге енгізіңіз</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />ChromeOS құрылғыларына автоматты түрде жасалған есептерді жіберуге рұқсат берсеңіз, бізге ChromeOS жүйесіндегі ақауларды жойып, оны жетілдіруде басымдықты дұрыс анықтауға көмектесесіз. Мұндай есептерде ChromeOS бұзылатын кездер, қолданыстағы функциялар және әдетте пайдаланылатын жад көлемі сияқты ақпарат қамтылуы мүмкін.<ph name="END_PARAGRAPH1" /> @@ -3258,6 +3262,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">MIDI құрылғыларын толықтай басқаруға тыйым салынды</translation> +<translation id="4087328411748538168">Оң жақта көрсету</translation> <translation id="4089235344645910861">Параметрлер сақталды. Синхрондау басталды.</translation> <translation id="4090103403438682346">Расталған кіру құқығын қосу</translation> <translation id="4090947011087001172"><ph name="SITE" /> сайты үшін рұқсаттар бастапқы күйіне қайтарылсын ба?</translation> @@ -3950,6 +3955,7 @@ <translation id="4779766576531456629">eSIM ұялы байланыс желісінің атауын өзгерту</translation> <translation id="4780321648949301421">Бетті басқаша сақтау…</translation> <translation id="4781443161433589743">Chrome-ның ең күшті қорғанысы қолданылуда.</translation> +<translation id="4782861709165039462">Барлық микрофон құрылғының аппараттық ауыстырғышымен өшірілді.</translation> <translation id="4785719467058219317">Веб-сайтта тіркелмеген қауіпсіздік кілтін пайдаланып жатырсыз.</translation> <translation id="4785914069240823137">Қиюдан бас тарту</translation> <translation id="4788092183367008521">Желі байланысын тексеріп, әрекетті қайталаңыз.</translation> @@ -4218,7 +4224,6 @@ <translation id="5054374119096692193">Картаның барлық параметрін <ph name="BEGIN_LINK" />Chrome-ды реттеу<ph name="END_LINK" /> бөлімінен қараңыз.</translation> <translation id="5056950756634735043">Контейнерге қосылуда</translation> <translation id="5057110919553308744">Кеңейтім басылғанда</translation> -<translation id="505776528429481161">Жақын орналасқан құрылғыларды оңай қосып, реттеуге болады.</translation> <translation id="5059241099014281248">Кіруді шектеу</translation> <translation id="5059526285558225588">Бөлісілетін мазмұнды таңдаңыз</translation> <translation id="5060332552815861872">1 принтерді сақтауға болады.</translation> @@ -4717,6 +4722,7 @@ <translation id="5548075230008247516">Барлық таңдалған элементтер алынып тасталды, таңдау режимі өшірілді.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" және тағы 1 қойынды}other{"<ph name="TAB_TITLE" />" және тағы # қойынды}}</translation> <translation id="5548606607480005320">Қауіпсіздік шарасы</translation> +<translation id="5548644592758170183">Сол жақта көрсету</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Пернетақта және мәтін енгізу</translation> <translation id="5553089923092577885">Сертификат саясатының салыстырулары</translation> @@ -8194,6 +8200,7 @@ <translation id="8980345560318123814">Пікір есептері</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> – бұзылды</translation> <translation id="8981825781894055334">Қағаз азайды.</translation> +<translation id="8983018820925880511">Бұл жаңа профильді <ph name="DOMAIN" /> басқарады. <ph name="BEGIN_LINK" />Толығырақ<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> <ph name="FILENAME" /> файлын өңдей алады.</translation> <translation id="8984694057134206124">Құрылғыңыз барлығына <ph name="MINUTES" /> минут бойы көрінеді. <ph name="LINK_BEGIN" />Толығырақ<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Chromebook құрылғысына арналған Steam қолданбасына қош келдіңіз!</translation> @@ -8290,6 +8297,7 @@ <translation id="9075413375877487220">Күшейтілген Safe Browsing қорғанысы бұл кеңейтімді сенімді деп санамайды.</translation> <translation id="9076283476770535406">Мұнда ересектерге арналған мазмұн болуы мүмкін</translation> <translation id="9076523132036239772">Кешіріңіз, электрондық поштаңызды немесе құпия сөзіңізді растау мүмкін емес. Алдымен желіге қосылып көріңіз.</translation> +<translation id="9076821103818989526">Бүйірлік панель</translation> <translation id="9076977315710973122">SMB ортақ қалтасы</translation> <translation id="9078193189520575214">Өзгерістер күшіне енуде…</translation> <translation id="9078316009970372699">Жылдам тетерингті өшіру</translation>
diff --git a/chrome/app/resources/generated_resources_km.xtb b/chrome/app/resources/generated_resources_km.xtb index ec89eb2..d90ce59 100644 --- a/chrome/app/resources/generated_resources_km.xtb +++ b/chrome/app/resources/generated_resources_km.xtb
@@ -354,6 +354,7 @@ <translation id="1340527397989195812">បម្រុងឯកសារកំសាន្តចេញពីឧបករណ៍របស់អ្នកដោយប្រើកម្មវិធីឯកសារ។</translation> <translation id="1343865611738742294">ផ្ដល់ការអនុញ្ញាតឱ្យកម្មវិធី Linux ចូលប្រើឧបករណ៍ USB ។ កម្មវិធី Linux នឹងមិនចងចាំឧបករណ៍ USB ទេ បន្ទាប់ពីដកឧបករណ៍ USB ចេញ។</translation> <translation id="1343920184519992513">បន្តត្រង់ចំណុចដែលអ្នកបានចាកចេញ និងបើកបណ្ដុំទំព័រជាក់លាក់</translation> +<translation id="1344377983938103876">កំពុងបើក <ph name="URL" />...</translation> <translation id="134589511016534552">ផ្ទាំងមេឌៀក៏បង្ហាញនៅក្នុងផ្នែកផ្ទាំងដែលបានបើកផងដែរ</translation> <translation id="1346630054604077329">បញ្ជាក់ និងចាប់ផ្ដើមឡើងវិញ</translation> <translation id="1346748346194534595">ស្តាំ</translation> @@ -4239,7 +4240,6 @@ <translation id="5054374119096692193">មើលជម្រើសកាតទាំងអស់នៅក្នុងផ្នែក "<ph name="BEGIN_LINK" />ប្ដូរ Chrome តាមបំណង<ph name="END_LINK" />"</translation> <translation id="5056950756634735043">កំពុងភ្ជាប់ជាមួយទម្រង់ផ្ទុក</translation> <translation id="5057110919553308744">នៅពេលអ្នកចុចកម្មវិធីបន្ថែម</translation> -<translation id="505776528429481161">ងាយស្រួលភ្ជាប់ និងរៀបចំឧបករណ៍ដែលនៅជិត</translation> <translation id="5059241099014281248">រឹតបន្តឹងការចូលគណនី</translation> <translation id="5059526285558225588">ជ្រើសរើសអ្វីដែលត្រូវចែករំលែក</translation> <translation id="5060332552815861872">មានម៉ាស៊ីនបោះពុម្ព 1 សម្រាប់រក្សាទុក។</translation> @@ -6963,6 +6963,7 @@ <translation id="7753735457098489144">ការដំឡើងមិនបានសម្រេចទេ ដោយសារខ្វះទំហំផ្ទុក។ ដើម្បីបង្កើនទំហំផ្ទុក សូមលុបឯកសារចេញពីឧបករណ៍ផ្ទុក។</translation> <translation id="7754347746598978109">មិនអនុញ្ញាតឱ្យប្រើ JavaScript ទេ</translation> <translation id="7754704193130578113">សួររកកន្លែងរក្សាទុកឯកសារនីមួយៗមុនពេលទាញយក</translation> +<translation id="7755134875397410803">ដើម្បីជួយអ្នកក្នុងការបំពេញកិច្ចការផ្សេងៗ Google នឹងទទួលបាន URL និងខ្លឹមសាររបស់គេហទំព័រដែលអ្នកប្រើ Google Assistant នៅលើ ក៏ដូចជាព័ត៌មានដែលអ្នកដាក់បញ្ជូនតាមរយៈ Google Assistant។ ព័ត៌មាននេះអាចត្រូវបានរក្សាទុកនៅក្នុងគណនី Google របស់អ្នក។ អ្នកអាចបិទ Google Assistant នៅក្នុងការកំណត់ Chrome។ <ph name="LEARN_MORE" /></translation> <translation id="7755287808199759310">មាតាបិតារបស់អ្នកអាចលុបការរារាំងទំព័រនេះសម្រាប់អ្នកបាន</translation> <translation id="7757592200364144203">ប្ដូរឈ្មោះឧបករណ៍</translation> <translation id="7757739382819740102">ទំនាក់ទំនងដែលនៅជិតអាចចែករំលែកជាមួយអ្នកបាន។ តម្រូវឱ្យមានការយល់ព្រម។</translation>
diff --git a/chrome/app/resources/generated_resources_kn.xtb b/chrome/app/resources/generated_resources_kn.xtb index 04f2841..5e5db9fd 100644 --- a/chrome/app/resources/generated_resources_kn.xtb +++ b/chrome/app/resources/generated_resources_kn.xtb
@@ -4237,7 +4237,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />Chrome ಅನ್ನು ಕಸ್ಟಮೈಸ್ ಮಾಡಿ<ph name="END_LINK" /> ಎಂಬಲ್ಲಿ ಎಲ್ಲಾ ಕಾರ್ಡ್ ಆಯ್ಕೆಗಳನ್ನು ನೋಡಿ</translation> <translation id="5056950756634735043">ಕಂಟೇನರ್ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಲಾಗುತ್ತಿದೆ</translation> <translation id="5057110919553308744">ನೀವು ವಿಸ್ತರಣೆಯನ್ನು ಕ್ಲಿಕ್ ಮಾಡಿದಾಗ</translation> -<translation id="505776528429481161">ಸಮೀಪದಲ್ಲಿರುವ ಸಾಧನಗಳನ್ನು ಸುಲಭವಾಗಿ ಕನೆಕ್ಟ್ ಮಾಡಿ ಹಾಗೂ ಸೆಟಪ್ ಮಾಡಿ</translation> <translation id="5059241099014281248">ಸೈನ್-ಇನ್ ನಿಂರ್ಬಂಧಿಸಿ</translation> <translation id="5059526285558225588">ಏನನ್ನು ಹಂಚಿಕೊಳ್ಳಬೇಕು ಎಂಬುದನ್ನು ಆಯ್ಕೆಮಾಡಿ</translation> <translation id="5060332552815861872">ಉಳಿಸಲು 1 ಪ್ರಿಂಟರ್ ಲಭ್ಯವಿದೆ.</translation>
diff --git a/chrome/app/resources/generated_resources_ko.xtb b/chrome/app/resources/generated_resources_ko.xtb index 2036787..e97c080 100644 --- a/chrome/app/resources/generated_resources_ko.xtb +++ b/chrome/app/resources/generated_resources_ko.xtb
@@ -1259,6 +1259,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Wi-Fi 추가</translation> <translation id="2162155940152307086">동기화 설정을 종료하면 동기화가 시작됩니다.</translation> +<translation id="2162705204091149050">브라우저, OS, 기기, 설치된 소프트웨어, 파일에 관한 정보 읽기</translation> <translation id="2162926944953615670">사용 가능한 eSIM 프로필 없음</translation> <translation id="2163470535490402084"><ph name="DEVICE_TYPE" /> 기기에 로그인하려면 인터넷에 연결하세요.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> 외 1개</translation> @@ -2509,6 +2510,7 @@ <translation id="3359256513598016054">인증서 정책 제약조건</translation> <translation id="3360297538363969800">인쇄에 실패했습니다. 프린터를 확인한 후 다시 시도해 주세요.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" />에서 <ph name="ATTACHMENTS" />을(를) 공유 중입니다.}other{<ph name="DEVICE_NAME" />에서 <ph name="ATTACHMENTS" />을(를) 공유 중입니다.}}</translation> +<translation id="3363202073972776113">이 새 프로필은 조직에서 관리합니다. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation> <translation id="3364986687961713424">관리자의 메시지: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Ctrl 또는 Alt 키 중에 하나만 사용하세요</translation> <translation id="3368922792935385530">연결됨</translation> @@ -2543,6 +2545,7 @@ <translation id="339722927132407568">정지됨</translation> <translation id="3399432415385675819">알림이 사용 중지됩니다.</translation> <translation id="3400390787768057815"><ph name="WIDTH" />x<ph name="HEIGHT" />(<ph name="REFRESH_RATE" />Hz) - 인터레이스</translation> +<translation id="3401484564516348917">브라우저, OS, 기기, 설치된 소프트웨어, 레지스트리 값, 파일에 관한 정보 읽기</translation> <translation id="3402059702184703067">{COUNT,plural, =1{기기에 비밀번호 {COUNT}개가 저장되어 있습니다.}other{기기에 비밀번호 {COUNT}개가 저장되어 있습니다.}}</translation> <translation id="3402255108239926910">아바타 선택</translation> <translation id="3402585168444815892">데모 모드에 등록</translation> @@ -2789,6 +2792,7 @@ <translation id="3627879631695760395"><ph name="APP" /> 설치...</translation> <translation id="3628275722731025472">블루투스 사용 중지</translation> <translation id="3629631988386925734">비밀번호를 입력하여 Smart Lock을 사용 설정하세요. 다음번에는 휴대전화를 통해 <ph name="DEVICE_TYPE" />이(가) 잠금 해제됩니다. 설정에서 Smart Lock을 사용 중지할 수 있습니다.</translation> +<translation id="3629664892718440872">이 선택사항 저장</translation> <translation id="3630132874740063857">휴대전화</translation> <translation id="3630995161997703415">이 사이트를 언제든지 사용할 수 있도록 실행기에 추가합니다</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />ChromeOS 기기에서 자동 보고서를 전송하도록 허용하면 Google이 ChromeOS에서 해결할 문제와 개선할 기능의 우선순위를 정하는 데 도움이 됩니다. 보고서에는 ChromeOS가 언제 비정상 종료되는지, 어떤 기능을 사용하는지, 일반적으로 메모리를 얼마나 많이 사용하는지 등의 정보가 포함될 수 있습니다.<ph name="END_PARAGRAPH1" /> @@ -3276,6 +3280,7 @@ <translation id="4085298594534903246">이 페이지에서 자바스크립트가 차단되었습니다.</translation> <translation id="4087089424473531098">확장 프로그램(파일: <ph name="EXTENSION_FILE" />)을 만들었습니다.</translation> <translation id="408721682677442104">MIDI 기기 전체 제어 거부됨</translation> +<translation id="4087328411748538168">오른쪽에 표시</translation> <translation id="4089235344645910861">설정이 저장되었으며, 동기화가 시작되었습니다.</translation> <translation id="4090103403438682346">인증 액세스 서비스 사용</translation> <translation id="4090947011087001172"><ph name="SITE" />의 사이트 권한을 재설정하시겠습니까?</translation> @@ -3969,6 +3974,7 @@ <translation id="4779766576531456629">eSIM 셀룰러 네트워크 이름 바꾸기</translation> <translation id="4780321648949301421">페이지를 다른 이름으로 저장...</translation> <translation id="4781443161433589743">Chrome의 가장 강력한 보안 기능으로 보호되고 있습니다.</translation> +<translation id="4782861709165039462">기기 하드웨어 스위치로 인해 모든 마이크가 사용 중지됨</translation> <translation id="4785719467058219317">이 웹사이트에 등록되지 않은 보안 키를 사용하고 있습니다.</translation> <translation id="4785914069240823137">자르기 취소</translation> <translation id="4788092183367008521">네트워크 연결을 확인한 다음 다시 시도하세요.</translation> @@ -4237,7 +4243,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />Chrome 맞춤설정<ph name="END_LINK" />에서 모든 카드 옵션을 확인하세요.</translation> <translation id="5056950756634735043">컨테이너에 연결 중입니다.</translation> <translation id="5057110919553308744">확장 프로그램을 클릭할 경우</translation> -<translation id="505776528429481161">간편하게 근처 기기 연결 및 설정</translation> <translation id="5059241099014281248">로그인 제한</translation> <translation id="5059526285558225588">공유할 정보 선택</translation> <translation id="5060332552815861872">저장할 수 있는 프린터가 1대 있습니다.</translation> @@ -4736,6 +4741,7 @@ <translation id="5548075230008247516">모든 항목이 선택 해제되었으며 선택 모드가 종료되었습니다.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{‘<ph name="TAB_TITLE" />’}=1{‘<ph name="TAB_TITLE" />’ 외 탭 1개}other{‘<ph name="TAB_TITLE" />’ 외 탭 #개}}</translation> <translation id="5548606607480005320">안전 확인</translation> +<translation id="5548644592758170183">왼쪽에 표시</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">키보드 및 텍스트 입력</translation> <translation id="5553089923092577885">인증서 정책 매핑</translation> @@ -8219,6 +8225,7 @@ <translation id="8980345560318123814">의견 보고서</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - 비정상 종료됨</translation> <translation id="8981825781894055334">용지 부족</translation> +<translation id="8983018820925880511">이 새 프로필은 <ph name="DOMAIN" />에서 관리합니다. <ph name="BEGIN_LINK" />자세히 알아보기<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" />에서 <ph name="FILENAME" />을(를) 수정할 수 있습니다.</translation> <translation id="8984694057134206124"><ph name="MINUTES" />분 동안 모든 사용자에게 공개됩니다. <ph name="LINK_BEGIN" />자세히 알아보기<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Chromebook용 Steam 시작하기</translation> @@ -8315,6 +8322,7 @@ <translation id="9075413375877487220">향상된 세이프 브라우징에서 신뢰하지 않는 확장 프로그램입니다.</translation> <translation id="9076283476770535406">성인용 콘텐츠가 포함되어 있을 수 있습니다.</translation> <translation id="9076523132036239772">이메일이나 비밀번호를 확인할 수 없습니다. 먼저 네트워크에 연결해 주세요.</translation> +<translation id="9076821103818989526">측면 패널</translation> <translation id="9076977315710973122">SMB 공유</translation> <translation id="9078193189520575214">변경사항 적용 중...</translation> <translation id="9078316009970372699">인스턴트 테더링 사용 중지</translation>
diff --git a/chrome/app/resources/generated_resources_ky.xtb b/chrome/app/resources/generated_resources_ky.xtb index b39ce77..b3abb2e 100644 --- a/chrome/app/resources/generated_resources_ky.xtb +++ b/chrome/app/resources/generated_resources_ky.xtb
@@ -354,6 +354,7 @@ <translation id="1340527397989195812">Медиа файлдардын камдык көчүрмөсүн Файлдар колдонмосу аркылуу түзмөгүңүздөн алып сактаңыз.</translation> <translation id="1343865611738742294">Linux колдонмолоруна USB түзмөктөрүн колдонууга уруксат бериңиз. USB түзмөгү өчүрүлгөндөн кийин Linux аны эстеп калбайт.</translation> <translation id="1343920184519992513">Токтогон жериңизден улантып, барактардын белгилүү топтомун ачыңыз</translation> +<translation id="1344377983938103876"><ph name="URL" /> ачылууда…</translation> <translation id="134589511016534552">Медиа өтмөктөр Ачык өтмөктөр бөлүмүндө да көрсөтүлгөн</translation> <translation id="1346630054604077329">Ырастоо жана өчүрүп күйгүзүү</translation> <translation id="1346748346194534595">Оң</translation> @@ -1280,6 +1281,7 @@ <translation id="2180620921879609685">Бардык барактардагы мазмунду бөгөттөө</translation> <translation id="2182058453334755893">Алмашуу буферине көчүрүлдү</translation> <translation id="2184515124301515068">Сайттардын добушун чыгарууну Chrome'го табыштаңыз (сунушталат)</translation> +<translation id="2186206192313702726">Google Lens</translation> <translation id="2186711480981247270">Барак башка түзмөктөн бөлүшүлдү</translation> <translation id="2187675480456493911">Аккаунтуңуздагы башка түзмөктөр менен шайкештирилди. Башка колдонуучу өзгөрткөн жөндөө шайкештирилбейт. <ph name="LINK_BEGIN" />Кеңири маалымат<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Сервердин тастыктамасын импорттоо катасы.</translation> @@ -4244,7 +4246,6 @@ <translation id="5054374119096692193">Картанын бардык параметрлерин <ph name="BEGIN_LINK" />Chrome'ду ыңгайлаштыруу<ph name="END_LINK" /> бөлүмүнөн караңыз</translation> <translation id="5056950756634735043">Контейнерге туташууда</translation> <translation id="5057110919553308744">Кеңейтүүнү чыкылдатканда</translation> -<translation id="505776528429481161">Жакын жердеги түзмөктөрдү оңой туташтырып, тууралайсыз</translation> <translation id="5059241099014281248">Кирүүнү чектөө</translation> <translation id="5059526285558225588">Бөлүшө турган нерсени тандаңыз</translation> <translation id="5060332552815861872">Сактоо үчүн 1 принтер жеткиликтүү.</translation> @@ -6968,6 +6969,7 @@ <translation id="7753735457098489144">Сактагычта орун жетишсиз болгондуктан, орнотулган жок. Орун бошотуу үчүн түзмөктүн сактагычынан файлдарды жок кылыңыз.</translation> <translation id="7754347746598978109">Javascript'ти колдоно албайт</translation> <translation id="7754704193130578113">Жүктөп алаардан мурун, ар бир файлдын кайсы жерге сактала тургандыгы суралсын</translation> +<translation id="7755134875397410803">Тапшырмаларды аткарууга жардам берүү үчүн Google Жардамчыны колдонгон сайттардын URL даректерин жана контенттерин, ошондой эле Жардамчы аркылуу тапшырган маалыматты алат. Бул маалымат Google аккаунтуңузда сакталышы мүмкүн. Жардамчыны Chrome'дун параметрлеринен өчүрсөңүз болот. <ph name="LEARN_MORE" /></translation> <translation id="7755287808199759310">Аны ата-энеңиз ачып бере алат</translation> <translation id="7757592200364144203">Түзмөктүн аталышын өзгөртүү</translation> <translation id="7757739382819740102">Жакын жердеги байланыштар сиз менен файл бөлүшө алышат. Уруксат беришиңиз керек болот.</translation>
diff --git a/chrome/app/resources/generated_resources_lo.xtb b/chrome/app/resources/generated_resources_lo.xtb index cacc40d..68be816 100644 --- a/chrome/app/resources/generated_resources_lo.xtb +++ b/chrome/app/resources/generated_resources_lo.xtb
@@ -4237,7 +4237,6 @@ <translation id="5054374119096692193">ເບິ່ງຕົວເລືອກບັດທັງໝົດໃນ <ph name="BEGIN_LINK" />ປັບແຕ່ງ Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">ກຳລັງເຊື່ອມຕໍ່ຫາກ່ອງບັນຈຸ</translation> <translation id="5057110919553308744">ເມື່ອທ່ານຄລິກສ່ວນຂະຫຍາຍ</translation> -<translation id="505776528429481161">ເຊື່ອມຕໍ່ ແລະ ຕັ້ງຄ່າອຸປະກອນທີ່ຢູ່ໃກ້ໄດ້ຢ່າງງ່າຍດາຍ</translation> <translation id="5059241099014281248">ຈຳກັດການເຂົ້າສູ່ລະບົບ</translation> <translation id="5059526285558225588">ເລືອກສິ່ງທີ່ຈະແບ່ງປັນ</translation> <translation id="5060332552815861872">ມີເຄື່ອງພິມ 1 ເຄື່ອງພ້ອມໃຫ້ບັນທຶກໄວ້.</translation>
diff --git a/chrome/app/resources/generated_resources_lt.xtb b/chrome/app/resources/generated_resources_lt.xtb index c42b2ec..c724dc63 100644 --- a/chrome/app/resources/generated_resources_lt.xtb +++ b/chrome/app/resources/generated_resources_lt.xtb
@@ -357,6 +357,7 @@ <translation id="1340527397989195812">Sukurkite atsarginę įrenginio medijos kopiją naudodami programą „Failai“.</translation> <translation id="1343865611738742294">„Linux“ programoms suteikiamas leidimas pasiekti USB įrenginius. Pašalinto USB įrenginio „Linux“ neprisimins.</translation> <translation id="1343920184519992513">Tęskite ten, kur baigėte, ir atidarykite konkrečius puslapius</translation> +<translation id="1344377983938103876">Atidaroma <ph name="URL" />...</translation> <translation id="134589511016534552">Medijos skirtukai taip pat rodomi atidarytų skirtukų skiltyje</translation> <translation id="1346630054604077329">Patvirtinti ir paleisti iš naujo</translation> <translation id="1346748346194534595">Dešinė</translation> @@ -1282,6 +1283,7 @@ <translation id="2180620921879609685">Blokuoti turinį bet kokiame puslapyje</translation> <translation id="2182058453334755893">Nukopijuota į iškarpinę</translation> <translation id="2184515124301515068">Leisti „Chrome“ pasirinkti, kada svetainės gali leisti garsą (rekomenduojama)</translation> +<translation id="2186206192313702726">Google Lens</translation> <translation id="2186711480981247270">Puslapis bendrintas iš kito įrenginio</translation> <translation id="2187675480456493911">Sinchronizuojama su kitais įrenginiais jūsų paskyroje. Kitų naudotojų pakeisti nustatymai nebus sinchronizuojami. <ph name="LINK_BEGIN" />Sužinokite daugiau<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Serverio sertifikato importavimo klaida</translation> @@ -4241,7 +4243,6 @@ <translation id="5054374119096692193">Žr. visas kortelių parinktis skiltyje <ph name="BEGIN_LINK" />„Chrome“ tinkinimas“<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Prisijungiama prie sudėtinio rodinio</translation> <translation id="5057110919553308744">Spustelėjus plėtinį</translation> -<translation id="505776528429481161">Lengvai prijunkite ir nustatykite įrenginius, esančius netoli</translation> <translation id="5059241099014281248">Prisijungimo apribojimas</translation> <translation id="5059526285558225588">Pasirinkite, ką norite bendrinti</translation> <translation id="5060332552815861872">Galima išsaugoti 1 spausdintuvą.</translation> @@ -6971,6 +6972,7 @@ <translation id="7753735457098489144">Įdiegti nepavyko, nes pritrūko saugyklos vietos. Kad atlaisvintumėte vietos, ištrinkite failus iš įrenginio saugyklos.</translation> <translation id="7754347746598978109">Neleidžiama naudoti „JavaScript“</translation> <translation id="7754704193130578113">Prieš atsiunčiant failą klausti, kur jį išsaugoti</translation> +<translation id="7755134875397410803">Kad padėtų atlikti užduotis, „Google“ gaus svetainių, kuriose naudojate Padėjėją, URL ir turinį bei informaciją, kurią pateikiate naudodami Padėjėją. Ši informacija gali būti saugoma jūsų „Google“ paskyroje. Padėjėją galite išjungti „Chrome“ nustatymuose. <ph name="LEARN_MORE" /></translation> <translation id="7755287808199759310">Jūsų tėtis ar mama gali ją atblokuoti už jus</translation> <translation id="7757592200364144203">Pakeisti įrenginio pavadinimą</translation> <translation id="7757739382819740102">Netoliese esantys kontaktai gali bendrinti su jumis. Bus reikalingas patvirtinimas.</translation>
diff --git a/chrome/app/resources/generated_resources_lv.xtb b/chrome/app/resources/generated_resources_lv.xtb index 86192a6..7fc5ae4 100644 --- a/chrome/app/resources/generated_resources_lv.xtb +++ b/chrome/app/resources/generated_resources_lv.xtb
@@ -1269,6 +1269,7 @@ <translation id="2180620921879609685">Bloķēt saturu jebkurā lapā</translation> <translation id="2182058453334755893">Kopēts jūsu starpliktuvē</translation> <translation id="2184515124301515068">Atļaut pārlūkam Chrome izvēlēties, kad vietnēs var atskaņot skaņu (ieteicams)</translation> +<translation id="2186206192313702726">Google Lens</translation> <translation id="2186711480981247270">No citas ierīces kopīgota lapa</translation> <translation id="2187675480456493911">Tīkls ir sinhronizēts ar citām ierīcēm jūsu kontā. Iestatījumi, kurus ir mainījuši citi lietotāji, netiks sinhronizēti. <ph name="LINK_BEGIN" />Uzziniet vairāk<ph name="LINK_END" />.</translation> <translation id="2187895286714876935">Servera sertifikāta importēšanas kļūda</translation> @@ -4224,7 +4225,6 @@ <translation id="5054374119096692193">Skatiet visas kartīšu opcijas sadaļā <ph name="BEGIN_LINK" />Chrome pielāgošana<ph name="END_LINK" />.</translation> <translation id="5056950756634735043">Notiek savienojuma izveide ar konteineru</translation> <translation id="5057110919553308744">Kad noklikšķināt uz paplašinājuma</translation> -<translation id="505776528429481161">Ātri izveidojiet savienojumu un iestatiet tuvumā esošas ierīces</translation> <translation id="5059241099014281248">Pierakstīšanās ierobežojumu iestatīšana</translation> <translation id="5059526285558225588">Izvēlieties kopīgojamo saturu</translation> <translation id="5060332552815861872">Ir pieejams viens printeris, ko saglabāt.</translation>
diff --git a/chrome/app/resources/generated_resources_mk.xtb b/chrome/app/resources/generated_resources_mk.xtb index 12bb1e2c..c479e1c2 100644 --- a/chrome/app/resources/generated_resources_mk.xtb +++ b/chrome/app/resources/generated_resources_mk.xtb
@@ -355,6 +355,7 @@ <translation id="1340527397989195812">Направете резервни копии на медиумите од уредот со користење на апликацијата Датотеки.</translation> <translation id="1343865611738742294">Дајте им дозвола на апликациите на Linux да пристапуваат до USB-уреди. Linux нема да го запомни USB-уредот откако ќе се отстрани.</translation> <translation id="1343920184519992513">Продолжете каде што застанавте и отворете конкретен комплет страници</translation> +<translation id="1344377983938103876">Се отвора <ph name="URL" />…</translation> <translation id="134589511016534552">Картички за аудиовизуелни содржини прикажани и во делот за отворени картички</translation> <translation id="1346630054604077329">Потврди и рестартирај</translation> <translation id="1346748346194534595">Надесно</translation> @@ -4246,7 +4247,6 @@ <translation id="5054374119096692193">Видете ги сите опции за картички во <ph name="BEGIN_LINK" />Приспособете го Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Се поврзува со контејнерот</translation> <translation id="5057110919553308744">Кога ќе кликнете на екстензијата</translation> -<translation id="505776528429481161">Лесно поврзувајте и поставувајте уреди во близина</translation> <translation id="5059241099014281248">Ограничи најавување</translation> <translation id="5059526285558225588">Изберете што да се сподели</translation> <translation id="5060332552815861872">Има 1 печатач достапен за зачувување.</translation> @@ -6972,6 +6972,7 @@ <translation id="7753735457098489144">Инсталирањето не успеа поради недостиг на простор за складирање. За да ослободите простор, избришете датотеки од уредот.</translation> <translation id="7754347746598978109">Не им е дозволено да користат JavaScript</translation> <translation id="7754704193130578113">Прашај каде да се зачува секоја датотека пред преземање</translation> +<translation id="7755134875397410803">За да ви помогне да завршувате задачи, Google ќе ги добива URL-адресите и содржините на сајтовите на кои го користите „Помошникот“, како и податоците што ги испраќате преку „Помошникот“. Податоциве може да се зачуваат на вашата сметка на Google. Може да го исклучите „Помошникот“ во поставките за Chrome. <ph name="LEARN_MORE" /></translation> <translation id="7755287808199759310">Родителот може да го одблокира</translation> <translation id="7757592200364144203">Променете го името на уредот</translation> <translation id="7757739382819740102">Контактите во близина може да споделуваат со вас. Ќе биде потребно одобрување.</translation>
diff --git a/chrome/app/resources/generated_resources_ml.xtb b/chrome/app/resources/generated_resources_ml.xtb index 7f52c761..8119020 100644 --- a/chrome/app/resources/generated_resources_ml.xtb +++ b/chrome/app/resources/generated_resources_ml.xtb
@@ -4226,7 +4226,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />Chrome ഇഷ്ടാനുസൃതമാക്കുക<ph name="END_LINK" /> എന്നതിൽ എല്ലാ കാർഡ് ഓപ്ഷനുകളും കാണുക</translation> <translation id="5056950756634735043">കണ്ടെയ്നറിലേക്ക് കണക്റ്റ് ചെയ്യുന്നു</translation> <translation id="5057110919553308744">നിങ്ങൾ വിപുലീകരണം ക്ലിക്ക് ചെയ്യുമ്പോൾ</translation> -<translation id="505776528429481161">സമീപമുള്ള ഉപകരണങ്ങൾ എളുപ്പത്തിൽ കണക്റ്റ് ചെയ്ത് സജ്ജീകരിക്കുക</translation> <translation id="5059241099014281248">സൈൻ ഇൻ ചെയ്യൽ നിയന്ത്രിക്കുക</translation> <translation id="5059526285558225588">എന്ത് പങ്കിടണമെന്ന് തിരഞ്ഞെടുക്കൂ</translation> <translation id="5060332552815861872">സംരക്ഷിക്കുന്നതിനായി ഒരു പ്രിന്റർ ലഭ്യമാണ്.</translation>
diff --git a/chrome/app/resources/generated_resources_mn.xtb b/chrome/app/resources/generated_resources_mn.xtb index 98989a2..8d8c01a 100644 --- a/chrome/app/resources/generated_resources_mn.xtb +++ b/chrome/app/resources/generated_resources_mn.xtb
@@ -4240,7 +4240,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />Customize Chrome-н<ph name="END_LINK" /> картын бүх сонголтыг харах</translation> <translation id="5056950756634735043">Агуулагчтай холбогдож байна</translation> <translation id="5057110919553308744">Та өргөтгөл гэснийг товших үед</translation> -<translation id="505776528429481161">Ойролцоох төхөөрөмжүүдэд хялбархан холбогдож, тэдгээрийг тохируулаарай</translation> <translation id="5059241099014281248">Нэвтрэхийг хязгаарлах</translation> <translation id="5059526285558225588">Юу хуваалцахаа сонгоно уу</translation> <translation id="5060332552815861872">Хадгалах боломжтой 1 хэвлэгч байна.</translation>
diff --git a/chrome/app/resources/generated_resources_mr.xtb b/chrome/app/resources/generated_resources_mr.xtb index 2001493..2e879d07 100644 --- a/chrome/app/resources/generated_resources_mr.xtb +++ b/chrome/app/resources/generated_resources_mr.xtb
@@ -4235,7 +4235,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />Chrome कस्टमाइझ करा<ph name="END_LINK" /> मध्ये कार्डशी संबंधित सर्व पर्याय पहा</translation> <translation id="5056950756634735043">कंटेनरशी कनेक्ट करत आहे</translation> <translation id="5057110919553308744">तुम्ही एक्स्टेंशनवर क्लिक करता तेव्हा</translation> -<translation id="505776528429481161">सहजपणे कनेक्ट करा आणि जवळची डिव्हाइस सेट करा</translation> <translation id="5059241099014281248">साइन इन मर्यादित करा</translation> <translation id="5059526285558225588">काय शेअर करायचे ते निवडा</translation> <translation id="5060332552815861872">सेव्ह करण्यासाठी एक प्रिंटर उपलब्ध आहे.</translation>
diff --git a/chrome/app/resources/generated_resources_ms.xtb b/chrome/app/resources/generated_resources_ms.xtb index 313d6cd..935cd9f 100644 --- a/chrome/app/resources/generated_resources_ms.xtb +++ b/chrome/app/resources/generated_resources_ms.xtb
@@ -1259,6 +1259,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Tambah Wi-Fi...</translation> <translation id="2162155940152307086">Penyegerakan akan bermula selepas anda meninggalkan tetapan penyegerakan</translation> +<translation id="2162705204091149050">Baca maklumat tentang penyemak imbas, OS, peranti, perisian dan fail yang dipasang</translation> <translation id="2162926944953615670">Tiada profil eSIM tersedia</translation> <translation id="2163470535490402084">Sila sambung ke Internet untuk melog masuk ke <ph name="DEVICE_TYPE" /> anda.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> dan 1 lagi suis</translation> @@ -2508,6 +2509,7 @@ <translation id="3359256513598016054">Kekangan Dasar Sijil</translation> <translation id="3360297538363969800">Pencetakan gagal. Sila periksa pencetak anda dan cuba lagi.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> sedang berkongsi <ph name="ATTACHMENTS" /> dengan anda.}other{<ph name="DEVICE_NAME" /> sedang berkongsi <ph name="ATTACHMENTS" /> dengan anda.}}</translation> +<translation id="3363202073972776113">Profil baharu ini akan diurus oleh organisasi anda. <ph name="BEGIN_LINK" />Ketahui lebih lanjut<ph name="END_LINK" /></translation> <translation id="3364986687961713424">Daripada pentadbir anda: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Gunakan sama ada Ctrl atau Alt</translation> <translation id="3368922792935385530">Disambungkan</translation> @@ -2542,6 +2544,7 @@ <translation id="339722927132407568">Pegun</translation> <translation id="3399432415385675819">Pemberitahuan akan dilumpuhkan</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Hertz) - berselang-seli</translation> +<translation id="3401484564516348917">Baca maklumat tentang penyemak imbas, OS dan peranti, perisian yang dipasang, nilai dan fail pendaftaran</translation> <translation id="3402059702184703067">{COUNT,plural, =1{{COUNT} kata laluan disimpan pada peranti ini}other{{COUNT} kata laluan disimpan pada peranti ini}}</translation> <translation id="3402255108239926910">Pilih avatar</translation> <translation id="3402585168444815892">Mendaftar dalam Mod Tunjuk Cara</translation> @@ -2788,6 +2791,7 @@ <translation id="3627879631695760395">Pasang <ph name="APP" />...</translation> <translation id="3628275722731025472">Matikan Bluetooth</translation> <translation id="3629631988386925734">Masukkan kata laluan anda untuk mendayakan Smart Lock. Selepas ini, telefon anda akan membuka kunci <ph name="DEVICE_TYPE" /> anda. Anda boleh mematikan Smart Lock dalam Tetapan.</translation> +<translation id="3629664892718440872">Ingat pilihan ini</translation> <translation id="3630132874740063857">Telefon anda</translation> <translation id="3630995161997703415">Tambahkan tapak ini pada rak anda untuk digunakan pada bila-bila masa</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Tindakan membenarkan peranti ChromeOS anda menghantar laporan automatik dapat membantu kami memberikan keutamaan terhadap perkara yang perlu dibetulkan dan diperbaik pada ChromeOS. Laporan ini boleh merangkumi perkara seperti waktu ranap sistem ChromeOS, ciri yang anda gunakan dan jumlah memori yang biasa anda digunakan.<ph name="END_PARAGRAPH1" /> @@ -3277,6 +3281,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">Kawalan penuh terhadap peranti MIDI ditolak</translation> +<translation id="4087328411748538168">Tunjukkan di sebelah kanan</translation> <translation id="4089235344645910861">Tetapan disimpan. Penyegerakan bermula.</translation> <translation id="4090103403438682346">Dayakan Akses Disahkan</translation> <translation id="4090947011087001172">Tetapkan semula kebenaran tapak untuk <ph name="SITE" />?</translation> @@ -3970,6 +3975,7 @@ <translation id="4779766576531456629">Namakan semula rangkaian Selular eSIM</translation> <translation id="4780321648949301421">Simpan Halaman Sebagai...</translation> <translation id="4781443161433589743">Anda menggunakan keselamatan Chrome yang paling kukuh</translation> +<translation id="4782861709165039462">Semua mikrofon dilumpuhkan mengikut suis perkakasan peranti</translation> <translation id="4785719467058219317">Anda menggunakan kunci keselamatan yang tidak berdaftar dengan laman web ini</translation> <translation id="4785914069240823137">Batalkan Pemangkasan</translation> <translation id="4788092183367008521">Sila semak sambungan rangkaian dan cuba lagi.</translation> @@ -4238,7 +4244,6 @@ <translation id="5054374119096692193">Lihat semua pilihan kad dalam <ph name="BEGIN_LINK" />Sesuaikan Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Menyambung kepada bekas</translation> <translation id="5057110919553308744">Apabila anda mengklik sambungan</translation> -<translation id="505776528429481161">Sambungkan dan sediakan peranti berdekatan dengan mudah</translation> <translation id="5059241099014281248">Sekat log masuk</translation> <translation id="5059526285558225588">Pilih kandungan untuk dikongsi</translation> <translation id="5060332552815861872">Terdapat 1 pencetak tersedia untuk disimpan.</translation> @@ -4737,6 +4742,7 @@ <translation id="5548075230008247516">Semua item dinyahpilih, anda telah keluar daripada mod pemilihan.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" dan 1 Tab Lain}other{"<ph name="TAB_TITLE" />" dan # Tab Lain}}</translation> <translation id="5548606607480005320">Semakan keselamatan</translation> +<translation id="5548644592758170183">Tunjukkan di sebelah kiri</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Papan kekunci dan masukan teks</translation> <translation id="5553089923092577885">Pemetaan Dasar Sijil</translation> @@ -8220,6 +8226,7 @@ <translation id="8980345560318123814">Laporan maklum malas</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - Mengalami ranap sistem</translation> <translation id="8981825781894055334">Kertas hampir habis</translation> +<translation id="8983018820925880511">Profil baharu ini akan diurus oleh <ph name="DOMAIN" />. <ph name="BEGIN_LINK" />Ketahui lebih lanjut<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> boleh mengedit <ph name="FILENAME" /></translation> <translation id="8984694057134206124">Anda akan kelihatan kepada semua orang selama <ph name="MINUTES" /> minit. <ph name="LINK_BEGIN" />Ketahui lebih lanjut<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Selamat datang ke Stim untuk Chromebook</translation> @@ -8316,6 +8323,7 @@ <translation id="9075413375877487220">Sambungan ini tidak dipercayai oleh Penyemakan Imbas Selamat Dipertingkat.</translation> <translation id="9076283476770535406">Tapak mungkin mengandungi kandungan dewasa</translation> <translation id="9076523132036239772">Maaf, e-mel atau kata laluan anda tidak dapat disahkan. Cuba menyambung ke rangkaian dahulu.</translation> +<translation id="9076821103818989526">Panel sisi</translation> <translation id="9076977315710973122">Perkongsian SMB</translation> <translation id="9078193189520575214">Melaksanakan perubahan...</translation> <translation id="9078316009970372699">Lumpuhkan Penambatan Segera</translation>
diff --git a/chrome/app/resources/generated_resources_my.xtb b/chrome/app/resources/generated_resources_my.xtb index a457dad6..b8ce193 100644 --- a/chrome/app/resources/generated_resources_my.xtb +++ b/chrome/app/resources/generated_resources_my.xtb
@@ -1278,6 +1278,7 @@ <translation id="2180620921879609685">စာမျက်နှာအားလုံးတွင် အကြောင်းအရာကို ပိတ်ထားခြင်း</translation> <translation id="2182058453334755893">'သင့်ကလစ်ဘုတ်' သို့ မိတ္တူကူးထားသည်</translation> <translation id="2184515124301515068">ဝဘ်ဆိုက်များ အသံဖွင့်နိုင်ခြင်းရှိမရှိကို Chrome အား ရွေးချယ်ခွင့်ပေးပါ (အကြံပြုထားသည်)</translation> +<translation id="2186206192313702726">Google Lens</translation> <translation id="2186711480981247270">စက်နောက်တစ်ခုမှ မျှဝေထားသော စာမျက်နှာ</translation> <translation id="2187675480456493911">သင့်အကောင့်ရှိ အခြားစက်များနှင့် စင့်ခ်လုပ်ထားသည်။ အခြားအသုံးပြုသူများ ပြုပြင်ထားသော ဆက်တင်များကို စင့်ခ်လုပ်မည်မဟုတ်ပါ။ <ph name="LINK_BEGIN" />ပိုမိုလေ့လာရန်<ph name="LINK_END" /></translation> <translation id="2187895286714876935">ဆာဗာ လက်မှတ် တင်သွင်းမှု အမှား</translation> @@ -4241,7 +4242,6 @@ <translation id="5054374119096692193">ကတ်ရွေးချယ်မှုအားလုံးကို <ph name="BEGIN_LINK" />Chrome စိတ်ကြိုက်လုပ်ခြင်း<ph name="END_LINK" /> တွင် ကြည့်နိုင်သည်</translation> <translation id="5056950756634735043">ကွန်တိန်နာနှင့် ချိတ်ဆက်နေသည်</translation> <translation id="5057110919553308744">နောက်ဆက်တွဲကို သင်နှိပ်သည့်အခါ</translation> -<translation id="505776528429481161">အနီးရှိစက်များကို အလွယ်ချိတ်ဆက်ပြီး စနစ်ထည့်သွင်းနိုင်သည်</translation> <translation id="5059241099014281248">လက်မှတ်ထိုးဝင်မှု ကန့်သတ်ရန်</translation> <translation id="5059526285558225588">မျှဝေလိုသည်များကို ရွေးပါ</translation> <translation id="5060332552815861872">သိမ်းဆည်းရန် ပရင်တာ ၁ ခုရှိသည်။</translation>
diff --git a/chrome/app/resources/generated_resources_ne.xtb b/chrome/app/resources/generated_resources_ne.xtb index 5c73200..43200f26 100644 --- a/chrome/app/resources/generated_resources_ne.xtb +++ b/chrome/app/resources/generated_resources_ne.xtb
@@ -1244,6 +1244,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Wi-Fi थप्नुहोस्...</translation> <translation id="2162155940152307086">तपाईंले सिंकसम्बन्धी सेटिङहरूको पृष्ठ छोडेपछि सिंक सुरु हुने छ</translation> +<translation id="2162705204091149050">तपाईंका ब्राउजर, OS, डिभाइस, इन्स्टल गरिएका सफ्टवेयर र फाइलहरूसम्बन्धी जानकारी पढ्नुहोस्</translation> <translation id="2162926944953615670">कुनै पनि eSIM प्रोफाइल उपलब्ध छैन</translation> <translation id="2163470535490402084">तपाईँको <ph name="DEVICE_TYPE" /> मा साइन इन गर्न कृपया इन्टरनेट कनेक्ट गर्नुहोस्।</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> र थप एउटा स्विच</translation> @@ -1264,6 +1265,7 @@ <translation id="2180620921879609685">कुनै पनि पेजमा भएका सामग्री ब्लक गर्न</translation> <translation id="2182058453334755893">तपाईंको क्लिपबोर्डमा प्रतिलिपि गरियो</translation> <translation id="2184515124301515068">साइटहरूले ध्वनि कहिले प्ले गर्न सक्छन् भन्ने कुरा Chrome लाई छनौट गर्न दिनुहोस् (सिफारिस गरिएको)</translation> +<translation id="2186206192313702726">Google लेन्स</translation> <translation id="2186711480981247270">अर्को डिभाइसबाट पेज सेयर गरिएको छ</translation> <translation id="2187675480456493911">तपाईंको खाता साइन इन गरिएका अन्य यन्त्रमा सिंक गरिएको छ। अन्य प्रयोगकर्ताहरूले परिमार्जन गरेका सेटिङ सिंक गरिने छैनन्। <ph name="LINK_BEGIN" />थप जान्नुहोस्<ph name="LINK_END" /></translation> <translation id="2187895286714876935">सर्भर सर्टिफिकेट आयात त्रुटि</translation> @@ -2491,6 +2493,7 @@ <translation id="3359256513598016054">प्रमाणपत्र नीति अवरोधहरू</translation> <translation id="3360297538363969800">प्रिन्टिङ असफल भयो। कृपया तपाइँको मुद्रक जाँच्नुहोस् र पुन: प्रयास गर्नुहोस्।</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> ले तपाईंसँग <ph name="ATTACHMENTS" /> सेयर गर्ने प्रयास गर्दै छ।}other{<ph name="DEVICE_NAME" /> ले तपाईंसँग <ph name="ATTACHMENTS" /> सेयर गर्ने प्रयास गर्दै छ।}}</translation> +<translation id="3363202073972776113">तपाईंको सङ्गठनले यो नयाँ प्रोफाइल व्यवस्थापन गर्ने छ। <ph name="BEGIN_LINK" />थप जान्नुहोस्<ph name="END_LINK" /></translation> <translation id="3364986687961713424">तपाईंका प्रशासकको सन्देश: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Ctrl वा Alt मध्ये कुनै एक प्रयोग गर्नुहोस्</translation> <translation id="3368922792935385530">जडित</translation> @@ -2525,6 +2528,7 @@ <translation id="339722927132407568">भिडियो अड्किन्छ</translation> <translation id="3399432415385675819">सूचनाहरू प्राप्त गर्ने सुविधालाई असक्षम पारिनेछ</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Hertz) - अन्तर्गर्भित</translation> +<translation id="3401484564516348917">तपाईंका ब्राउजर, OS, डिभाइस, इन्स्टल गरिएका सफ्टवेयर, रेजिस्ट्री मान र फाइलहरूसम्बन्धी जानकारी पढ्नुहोस्</translation> <translation id="3402059702184703067">{COUNT,plural, =1{यो डिभाइसमा {COUNT} पासवर्ड भण्डारण गरिएको छ}other{यो डिभाइसमा {COUNT} वटा पासवर्ड भण्डारण गरिएका छन्}}</translation> <translation id="3402255108239926910">कुनै अवतार रोज्नुहोस्</translation> <translation id="3402585168444815892">डेमो मोडमा दर्ता गर्दै</translation> @@ -2771,6 +2775,7 @@ <translation id="3627879631695760395"><ph name="APP" />स्थापना गर्नु...</translation> <translation id="3628275722731025472">ब्लुटुथ अफ गर्नुहोस्</translation> <translation id="3629631988386925734">Smart Lock सक्षम पार्न आफ्नो पासवर्ड प्रविष्टि गर्नुहोस्। अर्को पटकदेखि तपाईंको फोनले तपाईंको <ph name="DEVICE_TYPE" /> अनलक गर्ने छ। तपाईं सेटिङहरूमा गई Smart Lock निष्क्रिय पार्न सक्नुहुन्छ।</translation> +<translation id="3629664892718440872">यो रोजाइ याद राखियोस्</translation> <translation id="3630132874740063857">तपाईंको फोन</translation> <translation id="3630995161997703415">यो साइट जुनसुकै बेला प्रयोग गर्न यसलाई आफ्नो सेल्फमा थप्नुहोस्</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />तपाईंले ChromeOS डिभाइसहरूलाई रिपोर्ट स्वतः पठाउने अनुमति दिनुभयो भने हामी ChromeOS मा सबैभन्दा पहिले समाधान गर्नु पर्ने समस्याका बारेमा थाहा पाउनुका साथै ChromeOS को गुणस्तर सुधार्न सक्छौँ। यी रिपोर्टमा ChromeOS क्र्यास भएको समय, तपाईंले प्रयोग गर्ने सेवाहरू र तपाईं सामान्यतया कति मेमोरी प्रयोग गर्नुहुन्छ भन्ने कुराको जानकारीलगायतका कुराहरू समावेश हुन सक्छ।<ph name="END_PARAGRAPH1" /> @@ -3259,6 +3264,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">यो साइटलाई MIDI यन्त्रहरू पूर्ण रूपमा नियन्त्रण गर्न दिइएन</translation> +<translation id="4087328411748538168">दायाँपट्टि देखाइयोस्</translation> <translation id="4089235344645910861">सेटिङहरू सेभ गरियो। सिंक सुरु भयो।</translation> <translation id="4090103403438682346">रुजू गरिएको पहुँच सक्षम बनाउनुहोस्</translation> <translation id="4090947011087001172"><ph name="SITE" /> का साइटसम्बन्धी अनुमतिहरू रिसेट गर्ने हो?</translation> @@ -3951,6 +3957,7 @@ <translation id="4779766576531456629">eSIM मोबाइल नेटवर्कको नाम बदल्नुहोस्</translation> <translation id="4780321648949301421">पृष्ठलाई निम्न रूपमा बचत गर्नुहोस्...</translation> <translation id="4781443161433589743">तपाईं Chrome को सबैभन्दा भरपर्दो सुरक्षा प्रयोग गर्दै हुनुहुन्छ</translation> +<translation id="4782861709165039462">डिभाइसहरूको हार्डवेयर स्विचले सबै माइक्रोफोन अफ गरेको छ</translation> <translation id="4785719467058219317">तपाईं यस वेबसाइटमा दर्ता नगरिएको सुरक्षा साँचो प्रयोग गर्दै हुनुहुन्छ</translation> <translation id="4785914069240823137">क्रप गर्ने कार्य रद्द गर्नुहोस्</translation> <translation id="4788092183367008521">कृपया आफ्नो इन्टरनेटको जाँच गरी फेरि प्रयास गर्नुहोस्।</translation> @@ -4219,7 +4226,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />Chrome कस्टमाइज गर्नुहोस्<ph name="END_LINK" /> मा गई कार्डसम्बन्धी सबै विकल्पहरू हेर्नुहोस्</translation> <translation id="5056950756634735043">कन्टेनरमा कनेक्ट गरिँदै छ</translation> <translation id="5057110919553308744">तपाईंले विस्तारमा क्लिक गर्दा</translation> -<translation id="505776528429481161">नजिकै रहेका डिभाइसहरू सजिलै कनेक्ट तथा सेटअप गर्नुहोस्</translation> <translation id="5059241099014281248">साइन इन गर्ने कार्य प्रतिबन्धित गर्नुहोस्</translation> <translation id="5059526285558225588">सेयर गरिनु पर्ने जानकारी छनौट गर्नुहोस्</translation> <translation id="5060332552815861872">सुरक्षित गर्नका लागि १ प्रिन्टर उपलब्ध छ।</translation> @@ -4718,6 +4724,7 @@ <translation id="5548075230008247516">सबै वस्तुहरूको चयन रद्द गरियो, छनौट मोडबाट बाहिरियो।</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" र अरू १ ट्याब}other{"<ph name="TAB_TITLE" />" र अरू # ट्याबहरू}}</translation> <translation id="5548606607480005320">सुरक्षा जाँच</translation> +<translation id="5548644592758170183">बायाँपट्टि देखाइयोस्</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">किबोर्ड र पाठ इनपुट</translation> <translation id="5553089923092577885">प्रमाणपत्र नीति मानचित्रहरू</translation> @@ -8198,6 +8205,7 @@ <translation id="8980345560318123814">प्रतिक्रियासम्बन्धी रिपोर्टहरू</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - क्र्याश भएको छ</translation> <translation id="8981825781894055334">प्रिन्टरको कागज सकिनै लागेको छ</translation> +<translation id="8983018820925880511"><ph name="DOMAIN" /> ले यो नयाँ प्रोफाइल व्यवस्थापन गर्ने छ। <ph name="BEGIN_LINK" />थप जान्नुहोस्<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> ले <ph name="FILENAME" /> सम्पादन गर्न सक्छ</translation> <translation id="8984694057134206124">तपाईंको यन्त्र <ph name="MINUTES" /> मिनेटसम्म सबै जनाले देख्नु हुने छ। <ph name="LINK_BEGIN" />थप जान्नुहोस्<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Chromebook को Steam मा स्वागत छ</translation> @@ -8294,6 +8302,7 @@ <translation id="9075413375877487220">परिष्कृत Safe Browsing का अनुसार यो एक्स्टेन्सन सुरक्षित छैन।</translation> <translation id="9076283476770535406">यसमा वयस्क सम्बन्धी सामग्री हुन सक्छ</translation> <translation id="9076523132036239772">माफ गर्नुहोस्, तपाइँको इमेल वा पासवर्ड रुजू गर्न सकिएन। पहिला एक सञ्जालमा जडान गर्ने प्रयास गर्नुहोस्।</translation> +<translation id="9076821103818989526">साइड प्यानल</translation> <translation id="9076977315710973122">SMB मार्फत सेयर गर्ने सेटिङ</translation> <translation id="9078193189520575214">परिवर्तनहरू लागू गरिँदै छन्...</translation> <translation id="9078316009970372699">तात्कालिक टेदरिङ असक्षम पार्नुहोस्</translation>
diff --git a/chrome/app/resources/generated_resources_nl.xtb b/chrome/app/resources/generated_resources_nl.xtb index 42838cfc..7fea664 100644 --- a/chrome/app/resources/generated_resources_nl.xtb +++ b/chrome/app/resources/generated_resources_nl.xtb
@@ -4226,7 +4226,6 @@ <translation id="5054374119096692193">Bekijk alle kaartopties in <ph name="BEGIN_LINK" />Chrome aanpassen<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Verbinding maken met de container</translation> <translation id="5057110919553308744">Wanneer je op de extensie klikt</translation> -<translation id="505776528429481161">Makkelijk verbinding maken en apparaten in de buurt instellen</translation> <translation id="5059241099014281248">Inloggen beperken</translation> <translation id="5059526285558225588">Kies wat je wilt delen</translation> <translation id="5060332552815861872">Er kan 1 printer worden opgeslagen.</translation>
diff --git a/chrome/app/resources/generated_resources_no.xtb b/chrome/app/resources/generated_resources_no.xtb index 89ad8784..99bc23f7 100644 --- a/chrome/app/resources/generated_resources_no.xtb +++ b/chrome/app/resources/generated_resources_no.xtb
@@ -1253,6 +1253,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Legg til Wi-Fi</translation> <translation id="2162155940152307086">Synkroniseringen starter når du går ut av synkroniseringsinnstillingene</translation> +<translation id="2162705204091149050">lese informasjon om nettleseren, OS-et, enheten, installert programvare og filer</translation> <translation id="2162926944953615670">Ingen tilgjengelige e-SIM-kortprofiler</translation> <translation id="2163470535490402084">Koble til Internett for å logge på <ph name="DEVICE_TYPE" />.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> og 1 bryter til</translation> @@ -2502,6 +2503,7 @@ <translation id="3359256513598016054">Retningslinjebegrensninger for sertifikat</translation> <translation id="3360297538363969800">Utskriften mislyktes. Kontrollér skriveren og prøv på nytt.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> deler <ph name="ATTACHMENTS" /> med deg.}other{<ph name="DEVICE_NAME" /> deler <ph name="ATTACHMENTS" /> med deg.}}</translation> +<translation id="3363202073972776113">Denne nye profilen administreres av organisasjonen din. <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" /></translation> <translation id="3364986687961713424">Fra administratoren din: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Bruk enten Ctrl eller Alt</translation> <translation id="3368922792935385530">Tilkoblet</translation> @@ -2536,6 +2538,7 @@ <translation id="339722927132407568">Fryser</translation> <translation id="3399432415385675819">Varsler slås av</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> hertz) – linjefletting</translation> +<translation id="3401484564516348917">lese informasjon om nettleseren, OS-et, enheten, installert programvare, registerverdier og filer</translation> <translation id="3402059702184703067">{COUNT,plural, =1{{COUNT} passord er lagret på denne enheten}other{{COUNT} passord er lagret på denne enheten}}</translation> <translation id="3402255108239926910">Velg et brukerbilde</translation> <translation id="3402585168444815892">Registrerer i demomodus</translation> @@ -2782,6 +2785,7 @@ <translation id="3627879631695760395">Installer <ph name="APP" />…</translation> <translation id="3628275722731025472">Slå av Bluetooth</translation> <translation id="3629631988386925734">Skriv inn passordet ditt for å slå på Smart Lock. Neste gang låser telefonen opp <ph name="DEVICE_TYPE" />-enheten din. Du kan slå av Smart Lock i innstillingene.</translation> +<translation id="3629664892718440872">Husk dette valget</translation> <translation id="3630132874740063857">Telefonen din</translation> <translation id="3630995161997703415">Legg til dette nettstedet på hyllen din, slik at det kan brukes når som helst</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Ved å gi ChromeOS-enhetene dine lov til å sende oss automatiske rapporter hjelper du oss med å prioritere hva vi skal fikse og gjøre bedre i ChromeOS. Slike rapporter kan for eksempel inneholde informasjon om når ChromeOS krasjer, hvilke funksjoner du bruker, og hvor mye minne du vanligvis bruker.<ph name="END_PARAGRAPH1" /> @@ -3269,6 +3273,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">Full kontroll over MIDI-enheter er nektet</translation> +<translation id="4087328411748538168">Vis til høyre</translation> <translation id="4089235344645910861">Innstillingene er lagret. Synkronisering er startet.</translation> <translation id="4090103403438682346">Slå på Bekreftet tilgang</translation> <translation id="4090947011087001172">Vil du tilbakestille nettstedstillatelser for <ph name="SITE" />?</translation> @@ -3961,6 +3966,7 @@ <translation id="4779766576531456629">Gi nytt navn til mobilnettverket for e-SIM-kortet</translation> <translation id="4780321648949301421">L&agre side som</translation> <translation id="4781443161433589743">Du har den beste sikkerheten i Chrome</translation> +<translation id="4782861709165039462">Alle mikrofoner er deaktivert via den fysiske bryteren på enheten</translation> <translation id="4785719467058219317">Du bruker en sikkerhetsnøkkel som ikke er registrert på dette nettstedet</translation> <translation id="4785914069240823137">Avbryt beskjæring</translation> <translation id="4788092183367008521">Sjekk nettverkstilkoblingen din, og prøv på nytt.</translation> @@ -4229,7 +4235,6 @@ <translation id="5054374119096692193">Se alle kortalternativene i <ph name="BEGIN_LINK" />Tilpass Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Kobler til beholderen</translation> <translation id="5057110919553308744">Når du klikker på utvidelsen</translation> -<translation id="505776528429481161">Koble til og konfigurer enheter i nærheten enkelt</translation> <translation id="5059241099014281248">Begrens pålogging</translation> <translation id="5059526285558225588">Velg hva du vil dele</translation> <translation id="5060332552815861872">1 skriver er tilgjengelig for lagring.</translation> @@ -4727,6 +4732,7 @@ <translation id="5548075230008247516">Merkingen er fjernet for alle elementene. Modus for merking er avsluttet.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{«<ph name="TAB_TITLE" />»}=1{«<ph name="TAB_TITLE" />» og 1 annen fane}other{«<ph name="TAB_TITLE" />» og # andre faner}}</translation> <translation id="5548606607480005320">Sikkerhetssjekk</translation> +<translation id="5548644592758170183">Vis til venstre</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Tastatur og innskriving av tekst</translation> <translation id="5553089923092577885">Retningslinjetilordninger for sertifikat</translation> @@ -8208,6 +8214,7 @@ <translation id="8980345560318123814">Tilbakemeldingsrapporter</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> – krasjet</translation> <translation id="8981825781894055334">Lite papir</translation> +<translation id="8983018820925880511">Denne nye profilen administreres av <ph name="DOMAIN" />. <ph name="BEGIN_LINK" />Finn ut mer<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> kan redigere <ph name="FILENAME" /></translation> <translation id="8984694057134206124">Du blir synlig for alle i <ph name="MINUTES" /> minutter. <ph name="LINK_BEGIN" />Finn ut mer<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Velkommen til Steam for Chromebook</translation> @@ -8304,6 +8311,7 @@ <translation id="9075413375877487220">Denne utvidelsen er ikke klarert av Safe Browsing med økt beskyttelse.</translation> <translation id="9076283476770535406">Det kan ha voksent innhold</translation> <translation id="9076523132036239772">Beklager, men angitt e-postadresse eller passord kunne ikke bekreftes. Prøv å koble deg til et nettverk først.</translation> +<translation id="9076821103818989526">Sidepanel</translation> <translation id="9076977315710973122">Delt SMB-nettverksressurs</translation> <translation id="9078193189520575214">Tar i bruk endringene …</translation> <translation id="9078316009970372699">Slå av umiddelbar internettdeling</translation>
diff --git a/chrome/app/resources/generated_resources_or.xtb b/chrome/app/resources/generated_resources_or.xtb index e38ee55..4cd7f9a 100644 --- a/chrome/app/resources/generated_resources_or.xtb +++ b/chrome/app/resources/generated_resources_or.xtb
@@ -1244,6 +1244,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Wi-Fi ଯୋଗ କରନ୍ତୁ...</translation> <translation id="2162155940152307086">ଥରେ ଆପଣ ସିଙ୍କ୍ ସେଟିଂସ୍କୁ ଛାଡ଼ିବା କ୍ଷଣି ସିଙ୍କ୍ର କାର୍ଯ୍ୟ ଆରମ୍ଭ ହୋଇଯିବ</translation> +<translation id="2162705204091149050">ଆପଣଙ୍କ ବ୍ରାଉଜର, OS, ଡିଭାଇସ, ଇନଷ୍ଟଲ କରାଯାଇଥିବା ସଫ୍ଟୱେର ଏବଂ ଫାଇଲଗୁଡ଼ିକ ବିଷୟରେ ସୂଚନା ପଢ଼ନ୍ତୁ</translation> <translation id="2162926944953615670">କୌଣସି eSIM ପ୍ରୋଫାଇଲ ଉପଲବ୍ଧ ନାହିଁ</translation> <translation id="2163470535490402084">ଆପଣଙ୍କର <ph name="DEVICE_TYPE" />ରେ ସାଇନ୍-ଇନ୍ କରିବା ପାଇଁ ଦୟାକରି ଇଣ୍ଟର୍ନେଟ୍ ସହିତ ସଂଯୋଗ କରନ୍ତୁ।</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" />, ଏବଂ ଅଧିକ 1ଟି ସ୍ୱିଚ୍</translation> @@ -2491,6 +2492,7 @@ <translation id="3359256513598016054">ସାର୍ଟିଫିକେଟ୍ ନୀତି ପ୍ରତିବନ୍ଧଗୁଡ଼ିକ</translation> <translation id="3360297538363969800">ପ୍ରିଣ୍ଟ ହେଲା ନାହିଁ। ଦୟାକରି ଆପଣଙ୍କର ପ୍ରିଣ୍ଟର୍କୁ ଯାଞ୍ଚ କରନ୍ତୁ ଏବଂ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> ଆପଣଙ୍କ ସହ <ph name="ATTACHMENTS" /> ସେୟାର୍ କରୁଛି।}other{<ph name="DEVICE_NAME" /> ଆପଣଙ୍କ ସହ <ph name="ATTACHMENTS" /> ସେୟାର୍ କରୁଛି।}}</translation> +<translation id="3363202073972776113">ଏହି ନୂଆ ପ୍ରୋଫାଇଲକୁ ଆପଣଙ୍କ ସଂସ୍ଥା ଦ୍ୱାରା ପରିଚାଳନା କରାଯିବ। <ph name="BEGIN_LINK" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="END_LINK" /></translation> <translation id="3364986687961713424">ଆପଣଙ୍କ ଆଡମିନିଷ୍ଟ୍ରେଟରଙ୍କ ଠାରୁ: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Ctrl କିମ୍ବା Alt ବ୍ୟବହାର କରନ୍ତୁ</translation> <translation id="3368922792935385530">ସଂଯୁକ୍ତ ହୋଇଛି</translation> @@ -2525,6 +2527,7 @@ <translation id="339722927132407568">ଫ୍ରିଜ୍ ହେବା</translation> <translation id="3399432415385675819">ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଅକ୍ଷମ କରାଯିବ</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> ହର୍ଜ) - ଇଣ୍ଟର୍ଲେସ୍ ହୋଇଛି</translation> +<translation id="3401484564516348917">ଆପଣଙ୍କ ବ୍ରାଉଜର, OS, ଡିଭାଇସ, ଇନଷ୍ଟଲ କରାଯାଇଥିବା ସଫ୍ଟୱେର, ରେଜିଷ୍ଟ୍ରୀ ମୂଲ୍ୟ ଏବଂ ଫାଇଲଗୁଡ଼ିକ ବିଷୟରେ ସୂଚନା ପଢ଼ନ୍ତୁ</translation> <translation id="3402059702184703067">{COUNT,plural, =1{{COUNT}ଟି ପାସୱାର୍ଡ ଏହି ଡିଭାଇସରେ ଷ୍ଟୋର୍ କରାଯାଇଛି}other{{COUNT}ଟି ପାସୱାର୍ଡ ଏହି ଡିଭାଇସରେ ଷ୍ଟୋର୍ କରାଯାଇଛି}}</translation> <translation id="3402255108239926910">ଏକ ଅବତାର ବାଛନ୍ତୁ</translation> <translation id="3402585168444815892">ଡେମୋ ମୋଡରେ ପଞ୍ଜିକରଣ କରାଯାଉଛି</translation> @@ -2771,6 +2774,7 @@ <translation id="3627879631695760395"><ph name="APP" />କୁ ଇନ୍ଷ୍ଟଲ୍ କରନ୍ତୁ...</translation> <translation id="3628275722731025472">ବ୍ଲୁଟୁଥ୍ ବନ୍ଦ କରନ୍ତୁ</translation> <translation id="3629631988386925734">ସ୍ମାର୍ଟ ଲକ୍କୁ ସକ୍ଷମ କରିବା ପାଇଁ ଆପଣଙ୍କର ପାସ୍ୱର୍ଡ ଲେଖନ୍ତୁ। ପରବର୍ତ୍ତୀ ସମୟରେ, ଆପଣଙ୍କର ଫୋନ୍ ଆପଣଙ୍କର <ph name="DEVICE_TYPE" />କୁ ଅନ୍ଲକ୍ କରିବ। ସେଟିଂସ୍ରେ ଆପଣ ସ୍ମାର୍ଟ ଲକ୍ ବନ୍ଦ କରିପାରିବେ।</translation> +<translation id="3629664892718440872">ଏହି ପସନ୍ଦ ମନେରଖନ୍ତୁ</translation> <translation id="3630132874740063857">ଆପଣଙ୍କର ଫୋନ୍</translation> <translation id="3630995161997703415">ଯେକୌଣସି ସମୟରେ ଏହାକୁ ବ୍ୟବହାର କରିବାପାଇଁ ଏହି ସାଇଟ୍କୁ ଆପଣଙ୍କ ସେଲ୍ଫରେ ଯୋଗ କରନ୍ତୁ</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />ଆପଣଙ୍କ ChromeOS ଡିଭାଇସଗୁଡ଼ିକୁ ସ୍ୱଚାଳିତ ଭାବେ ରିପୋର୍ଟଗୁଡ଼ିକ ପଠାଇବା ପାଇଁ ଅନୁମତି ଦେବା ଫଳରେ, ChromeOSରେ କେଉଁ ସମସ୍ୟାକୁ ଠିକ୍ କରାଯିବ ଏବଂ ଏଥିରେ କଣ ଉନ୍ନତି କରାଯିବ ତା'କୁ ପ୍ରାଥମିକତା ଦେବାରେ ଏହା ଆମକୁ ସାହାଯ୍ୟ କରେ। ଏହି ରିପୋର୍ଟଗୁଡ଼ିକରେ କେତେବେଳେ ChromeOS କ୍ରାସ ହୁଏ, ଆପଣ କେଉଁ ଫିଚରଗୁଡ଼ିକୁ ବ୍ୟବହାର କରନ୍ତି ଏବଂ ସାଧାରଣତଃ କେତେ ମେମୋରୀ ବ୍ୟବହାର କରନ୍ତି ପରି ସୂଚନା ଅନ୍ତର୍ଭୁକ୍ତ ହୋଇପାରେ।<ph name="END_PARAGRAPH1" /> @@ -3259,6 +3263,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">MIDI ଡିଭାଇସଗୁଡ଼ିକର ସମ୍ପୂର୍ଣ୍ଣ ନିୟନ୍ତ୍ରଣ ଅଗ୍ରାହ୍ୟ କରାଯାଇଛି</translation> +<translation id="4087328411748538168">ଡାହାଣ ପଟରେ ଦେଖାନ୍ତୁ</translation> <translation id="4089235344645910861">ସେଟିଂସ୍ ସେଭ୍ ହୋଇଛି। ସିଙ୍କ୍ ଆରମ୍ଭ ହୋଇଛି।</translation> <translation id="4090103403438682346">ଯାଞ୍ଚ ହୋଇଥିବା ଆକ୍ସେସ୍ ସକ୍ଷମ କରନ୍ତୁ</translation> <translation id="4090947011087001172"><ph name="SITE" /> ପାଇଁ ସାଇଟ୍ ଅନୁମତିଗୁଡ଼ିକୁ ରିସେଟ୍ କରିବେ କି?</translation> @@ -3952,6 +3957,7 @@ <translation id="4779766576531456629">eSIM ସେଲ୍ୟୁଲାର୍ ନେଟୱାର୍କକୁ ଆଉ ଗୋଟିଏ ନାମ ଦିଅନ୍ତୁ</translation> <translation id="4780321648949301421">ଏହିପରି ଭାବେ ପୃଷ୍ଠାଟିକୁ ସେଭ୍ କରନ୍ତୁ...</translation> <translation id="4781443161433589743">ଆପଣଙ୍କ ପାଖରେ Chromeର ସବୁଠାରୁ ଶକ୍ତିଶାଳୀ ସୁରକ୍ଷା ଅଛି</translation> +<translation id="4782861709165039462">ଡିଭାଇସ ହାର୍ଡୱେର ସ୍ୱିଚ ଦ୍ୱାରା ସମସ୍ତ ମାଇକ୍ରୋଫୋନକୁ ଅକ୍ଷମ କରାଯାଇଛି</translation> <translation id="4785719467058219317">ଆପଣ ଏପରି ଏକ କୀ ବ୍ୟବହାର କରୁଛନ୍ତି, ଯାହାକୁ ଏହି ୱେବସାଇଟ୍ରେ ପଞ୍ଜୀକୃତ କରାଯାଇ ନାହିଁ</translation> <translation id="4785914069240823137">କ୍ରପ ବାତିଲ୍ କରନ୍ତୁ</translation> <translation id="4788092183367008521">ଦୟାକରି ଆପଣଙ୍କ ନେଟ୍ୱର୍କ ସଂଯୋଗ ଯାଞ୍ଚ କରନ୍ତୁ ଏବଂ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> @@ -4220,7 +4226,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />Chromeକୁ କଷ୍ଟମାଇଜ କରନ୍ତୁ<ph name="END_LINK" />ରେ ସମସ୍ତ କାର୍ଡ ବିକଳ୍ପ ଦେଖନ୍ତୁ</translation> <translation id="5056950756634735043">କଣ୍ଟେନର୍ ସହ ସଂଯୋଗ କରାଯାଉଛି</translation> <translation id="5057110919553308744">ଆପଣ ଯେତେବେଳେ ଏକ୍ସଟେନ୍ସନ୍କୁ କ୍ଲିକ୍ କରିବେ</translation> -<translation id="505776528429481161">ନିକଟରେ ଥିବା ଡିଭାଇସଗୁଡ଼ିକୁ ସହଜରେ ସଂଯୋଗ କରନ୍ତୁ ଏବଂ ସେଟ ଅପ କରନ୍ତୁ</translation> <translation id="5059241099014281248">ସାଇନ୍-ଇନ୍ ପ୍ରତିବନ୍ଧିତ କରନ୍ତୁ</translation> <translation id="5059526285558225588">କଣ ସେୟାର୍ କରିବେ ତାହା ବାଛନ୍ତୁ</translation> <translation id="5060332552815861872">ସେଭ୍ କରିବା ପାଇଁ 1ଟି ପ୍ରିଣ୍ଟର୍ ଉପଲବ୍ଧ ଅଛି।</translation> @@ -4719,6 +4724,7 @@ <translation id="5548075230008247516">ସମସ୍ତ ଆଇଟମକୁ ଅଚୟନ କରାଯାଇଛି, ଚୟନ ମୋଡରୁ ପ୍ରସ୍ଥାନ କରାଯାଇଛି।</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" ଏବଂ ଅନ୍ୟ 1ଟି ଟାବ୍}other{"<ph name="TAB_TITLE" />" ଏବଂ ଅନ୍ୟ #ଟି ଟାବ୍}}</translation> <translation id="5548606607480005320">ସୁରକ୍ଷା ଯାଞ୍ଚ</translation> +<translation id="5548644592758170183">ବାମ ପଟରେ ଦେଖାନ୍ତୁ</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">କୀବୋର୍ଡ ଏବଂ ଟେକ୍ସଟ୍ ଇନ୍ପୁଟ୍</translation> <translation id="5553089923092577885">ସାର୍ଟିଫିକେଟ୍ ନୀତି ମ୍ୟାପିଂ</translation> @@ -8197,6 +8203,7 @@ <translation id="8980345560318123814">ମତାମତ ରିପୋର୍ଟଗୁଡ଼ିକ</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - କ୍ରାସ୍ ହୋଇଗଲା</translation> <translation id="8981825781894055334">କାଗଜ କମ୍ ଅଛି</translation> +<translation id="8983018820925880511">ନୂଆ ପ୍ରୋଫାଇଲ <ph name="DOMAIN" /> ଦ୍ୱାରା ପରିଚାଳିତ ହେବ। <ph name="BEGIN_LINK" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="FILENAME" />କୁ <ph name="ORIGIN" /> ଏଡିଟ୍ କରିପାରିବ</translation> <translation id="8984694057134206124"><ph name="MINUTES" /> ମିନିଟ୍ ପାଇଁ ଆପଣ ସମସ୍ତଙ୍କୁ ଦୃଶ୍ୟମାନ ହେବେ। <ph name="LINK_BEGIN" />ଅଧିକ ଜାଣନ୍ତୁ<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Chromebookର Steamକୁ ସ୍ୱାଗତ</translation> @@ -8293,6 +8300,7 @@ <translation id="9075413375877487220">ଉନ୍ନତ ସୁରକ୍ଷିତ ବ୍ରାଉଜିଂ ପାଇଁ ଏହି ଏକ୍ସଟେନସନ୍ ବିଶ୍ୱସନୀୟ ନୁହେଁ।</translation> <translation id="9076283476770535406">ଏଥିରେ ହୁଏତ ଅଶ୍ଳୀଳ ବିଷୟବସ୍ତୁ ଥାଇପାରେ</translation> <translation id="9076523132036239772">କ୍ଷମା କରିବେ, ଆପଣଙ୍କର ଇମେଲ୍ ଏବଂ ପାସ୍ୱାର୍ଡ ଯାଞ୍ଚ କରାଯାଇପାରିଲା ନାହିଁ। ପ୍ରଥମେ ଏକ ନେଟ୍ୱାର୍କ ସହ ସଂଯୋଗ କରିବାକୁ ଚେଷ୍ଟା କରନ୍ତୁ।</translation> +<translation id="9076821103818989526">ସାଇଡ ପ୍ୟାନେଲ</translation> <translation id="9076977315710973122">SMB ସେୟାର୍</translation> <translation id="9078193189520575214">ପରିବର୍ତ୍ତନଗୁଡ଼ିକ ଲାଗୁ କରାଯାଉଛି...</translation> <translation id="9078316009970372699">ଇନଷ୍ଟାଣ୍ଟ ଟିଥରିଂ ଅକ୍ଷମ କରନ୍ତୁ</translation>
diff --git a/chrome/app/resources/generated_resources_pa.xtb b/chrome/app/resources/generated_resources_pa.xtb index 2bb2816d..b4f7b8d 100644 --- a/chrome/app/resources/generated_resources_pa.xtb +++ b/chrome/app/resources/generated_resources_pa.xtb
@@ -1260,6 +1260,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">ਵਾਈ-ਫਾਈ ਸ਼ਾਮਿਲ ਕਰੋ...</translation> <translation id="2162155940152307086">ਤੁਹਾਡੇ ਵੱਲੋਂ ਸਿੰਕ ਸੈਟਿੰਗਾਂ ਤੋਂ ਬਾਹਰ ਜਾਣ ਤੋਂ ਬਾਅਦ ਸਿੰਕ ਸ਼ੁਰੂ ਹੋ ਜਾਵੇਗਾ</translation> +<translation id="2162705204091149050">ਤੁਹਾਡੇ ਬ੍ਰਾਊਜ਼ਰ, OS, ਡੀਵਾਈਸ, ਸਥਾਪਤ ਕੀਤੇ ਸਾਫ਼ਟਵੇਅਰ ਅਤੇ ਫ਼ਾਈਲਾਂ ਬਾਰੇ ਜਾਣਕਾਰੀ ਪੜ੍ਹਨਾ</translation> <translation id="2162926944953615670">ਕੋਈ ਈ-ਸਿਮ ਪ੍ਰੋਫਾਈਲ ਉਪਲਬਧ ਨਹੀਂ ਹੈ</translation> <translation id="2163470535490402084">ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ <ph name="DEVICE_TYPE" /> 'ਤੇ ਸਾਈਨ-ਇਨ ਕਰਨ ਲਈ ਇੰਟਰਨੈੱਟ ਨਾਲ ਕਨੈਕਟ ਕਰੋ।</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> ਅਤੇ 1 ਹੋਰ ਸਵਿੱਚ</translation> @@ -2508,6 +2509,7 @@ <translation id="3359256513598016054">ਪ੍ਰਮਾਣ-ਪੱਤਰ ਨੀਤੀ ਪਾਬੰਦੀਆਂ</translation> <translation id="3360297538363969800">ਪ੍ਰਿੰਟਿੰਗ ਅਸਫਲ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਪ੍ਰਿੰਟਰ ਦੀ ਜਾਂਚ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> ਵੱਲੋਂ ਤੁਹਾਡੇ ਨਾਲ <ph name="ATTACHMENTS" /> ਨੂੰ ਸਾਂਝਾ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।}one{<ph name="DEVICE_NAME" /> ਵੱਲੋਂ ਤੁਹਾਡੇ ਨਾਲ <ph name="ATTACHMENTS" /> ਨੂੰ ਸਾਂਝਾ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।}other{<ph name="DEVICE_NAME" /> ਵੱਲੋਂ ਤੁਹਾਡੇ ਨਾਲ <ph name="ATTACHMENTS" /> ਨੂੰ ਸਾਂਝਾ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ।}}</translation> +<translation id="3363202073972776113">ਇਸ ਨਵੇਂ ਪ੍ਰੋਫਾਈਲ ਦਾ ਪ੍ਰਬੰਧਨ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਕੀਤਾ ਜਾਵੇਗਾ। <ph name="BEGIN_LINK" />ਹੋਰ ਜਾਣੋ<ph name="END_LINK" /></translation> <translation id="3364986687961713424">ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">ਜਾਂ ਤਾਂ Ctrl ਜਾਂ Alt ਦੀ ਵਰਤੋਂ ਕਰੋ</translation> <translation id="3368922792935385530">ਕਨੈਕਟ ਕੀਤਾ</translation> @@ -2542,6 +2544,7 @@ <translation id="339722927132407568">ਫ੍ਰੀਜ਼ ਹੋਣਾ</translation> <translation id="3399432415385675819">ਸੂਚਨਾਵਾਂ ਨੂੰ ਅਯੋਗ ਬਣਾਇਆ ਜਾਵੇਗਾ</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> ਹਰਟਜ਼) - ਇੰਟਰਲੇਸਡ</translation> +<translation id="3401484564516348917">ਤੁਹਾਡੇ ਬ੍ਰਾਊਜ਼ਰ, OS, ਡੀਵਾਈਸ, ਸਥਾਪਤ ਕੀਤੇ ਸਾਫ਼ਟਵੇਅਰ, ਰਜਿਸਟਰੀ ਮੁੱਲਾਂ ਅਤੇ ਫ਼ਾਈਲਾਂ ਬਾਰੇ ਜਾਣਕਾਰੀ ਪੜ੍ਹਨਾ</translation> <translation id="3402059702184703067">{COUNT,plural, =1{ਇਸ ਡੀਵਾਈਸ 'ਤੇ {COUNT} ਪਾਸਵਰਡ ਸਟੋਰ ਕੀਤਾ ਗਿਆ ਹੈ}one{ਇਸ ਡੀਵਾਈਸ 'ਤੇ {COUNT} ਪਾਸਵਰਡ ਸਟੋਰ ਕੀਤਾ ਗਿਆ ਹੈ}other{ਇਸ ਡੀਵਾਈਸ 'ਤੇ {COUNT} ਪਾਸਵਰਡ ਸਟੋਰ ਕੀਤੇ ਗਏ ਹਨ}}</translation> <translation id="3402255108239926910">ਕੋਈ ਅਵਤਾਰ ਚੁਣੋ</translation> <translation id="3402585168444815892">ਡੈਮੋ ਮੋਡ ਵਿੱਚ ਦਰਜ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation> @@ -2788,6 +2791,7 @@ <translation id="3627879631695760395"><ph name="APP" /> ਸਥਾਪਤ ਕਰੋ...</translation> <translation id="3628275722731025472">ਬਲੂਟੁੱਥ ਬੰਦ ਕਰੋ</translation> <translation id="3629631988386925734">'ਸਮਾਰਟ ਲਾਕ' ਨੂੰ ਚਾਲੂ ਕਰਨ ਲਈ ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ। ਅਗਲੀ ਵਾਰ, ਤੁਹਾਡਾ ਫ਼ੋਨ ਤੁਹਾਡੀ <ph name="DEVICE_TYPE" /> ਨੂੰ ਅਣਲਾਕ ਕਰੇਗਾ। ਤੁਸੀਂ ਸੈਟਿੰਗਾਂ ਵਿੱਚ 'ਸਮਾਰਟ ਲਾਕ' ਨੂੰ ਬੰਦ ਕਰ ਸਕਦੇ ਹੋ।</translation> +<translation id="3629664892718440872">ਇਹ ਚੋਣ ਯਾਦ ਰੱਖੋ</translation> <translation id="3630132874740063857">ਤੁਹਾਡਾ ਫ਼ੋਨ</translation> <translation id="3630995161997703415">ਇਸ ਸਾਈਟ ਨੂੰ ਆਪਣੀ ਸ਼ੈਲਫ਼ ਵਿੱਚ ਸ਼ਾਮਲ ਕਰੋ ਤਾਂ ਕਿ ਕਿਸੇ ਵੀ ਸਮੇਂ ਤੁਸੀਂ ਇਸਦੀ ਵਰਤੋਂ ਕਰ ਸਕੋ</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />ਤੁਹਾਡੇ ChromeOS ਡੀਵਾਈਸਾਂ ਨੂੰ ਸਵੈਚਲਿਤ ਰਿਪੋਰਟਾਂ ਭੇਜਣ ਦੀ ਆਗਿਆ ਦੇਣ ਨਾਲ ਸਾਨੂੰ, ChromeOS ਵਿੱਚ ਕੀ ਠੀਕ ਕਰਨਾ ਹੈ ਅਤੇ ਕੀ ਸੁਧਾਰ ਕਰਨਾ ਹੈ, ਇਸ ਨੂੰ ਤਰਜੀਹ ਦੇਣ ਵਿੱਚ ਮਦਦ ਮਿਲਦੀ ਹੈ। ਇਨ੍ਹਾਂ ਰਿਪੋਰਟਾਂ ਵਿੱਚ ਅਜਿਹੀਆਂ ਚੀਜ਼ਾਂ ਸ਼ਾਮਲ ਹੋ ਸਕਦੀਆਂ ਹਨ ਜਿਵੇਂ ਕਿ ChromeOS ਕਦੋਂ ਕ੍ਰੈਸ਼ ਹੁੰਦਾ ਹੈ, ਤੁਸੀਂ ਕਿਹੜੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ ਅਤੇ ਤੁਸੀਂ ਆਮ ਤੌਰ 'ਤੇ ਕਿੰਨੀ ਮੈਮੋਰੀ ਵਰਤਦੇ ਹੋ।<ph name="END_PARAGRAPH1" /> @@ -3277,6 +3281,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">MIDI ਡੀਵਾਈਸਾਂ ਦੇ ਪੂਰੇ ਕੰਟਰੋਲ ਨੂੰ ਅਸਵੀਕਾਰ ਕੀਤਾ ਗਿਆ</translation> +<translation id="4087328411748538168">ਸੱਜੇ ਪਾਸੇ ਦਿਖਾਓ</translation> <translation id="4089235344645910861">ਸੈਟਿੰਗਾਂ ਰੱਖਿਅਤ ਕੀਤੀਆਂ ਗਈਆਂ। ਸਿੰਕ ਸ਼ੁਰੂ ਹੋਇਆ।</translation> <translation id="4090103403438682346">ਤਸਦੀਕਸ਼ੁਦਾ ਪਹੁੰਚ ਨੂੰ ਚਾਲੂ ਕਰੋ</translation> <translation id="4090947011087001172">ਕੀ <ph name="SITE" /> ਲਈ ਸਾਈਟ ਇਜਾਜ਼ਤਾਂ ਨੂੰ ਰੀਸੈੱਟ ਕਰਨਾ ਹੈ?</translation> @@ -3970,6 +3975,7 @@ <translation id="4779766576531456629">ਈ-ਸਿਮ ਦੇ ਸੈਲਿਊਲਰ ਨੈੱਟਵਰਕ ਦਾ ਨਾਮ ਬਦਲੋ</translation> <translation id="4780321648949301421">ਪੰਨੇ ਨੂੰ ਇਸ ਵਜੋਂ ਰੱਖਿਅਤ ਕਰੋ...</translation> <translation id="4781443161433589743">ਤੁਸੀਂ Chrome ਦੀ ਸਭ ਤੋਂ ਮਜਬੂਤ ਸੁਰੱਖਿਆ 'ਤੇ ਮੌਜੂਦ ਹੋ</translation> +<translation id="4782861709165039462">ਡੀਵਾਈਸ ਹਾਰਡਵੇਅਰ ਸਵਿੱਚ ਨਾਲ ਸਾਰੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨਾਂ ਨੂੰ ਬੰਦ ਕੀਤਾ ਗਿਆ ਹੈ</translation> <translation id="4785719467058219317">ਤੁਸੀਂ ਇੱਕ ਅਜਿਹੀ ਸੁਰੱਖਿਆ ਕੁੰਜੀ ਵਰਤ ਰਹੇ ਹੋ ਜੋ ਇਸ ਵੈੱਬਸਾਈਟ ਨਾਲ ਰਜਿਸਟਰ ਨਹੀਂ ਹੈ</translation> <translation id="4785914069240823137">ਕਾਂਟ-ਛਾਂਟ ਰੱਦ ਕਰੋ</translation> <translation id="4788092183367008521">ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੇ ਨੈੱਟਵਰਕ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> @@ -4238,7 +4244,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />Chrome ਨੂੰ ਵਿਉਂਤਬੱਧ ਕਰੋ<ph name="END_LINK" /> ਵਿੱਚ ਕਾਰਡਾਂ ਦੇ ਸਾਰੇ ਵਿਕਲਪ ਦੇਖੋ</translation> <translation id="5056950756634735043">ਕੰਟੇਨਰ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation> <translation id="5057110919553308744">ਜਦੋਂ ਤੁਸੀਂ ਐਕਸਟੈਂਸ਼ਨ 'ਤੇ ਕਲਿੱਕ ਕਰਦੇ ਹੋ</translation> -<translation id="505776528429481161">ਨੇੜਲੇ ਡੀਵਾਈਸਾਂ ਨੂੰ ਆਸਾਨੀ ਨਾਲ ਕਨੈਕਟ ਕਰੋ ਅਤੇ ਉਨ੍ਹਾਂ ਦਾ ਸੈੱਟਅੱਪ ਕਰੋ</translation> <translation id="5059241099014281248">ਸਾਈਨ-ਇਨ 'ਤੇ ਪਾਬੰਦੀ ਲਗਾਓ</translation> <translation id="5059526285558225588">ਇਹ ਚੁਣੋ ਕਿ ਕੀ ਸਾਂਝਾ ਕਰਨਾ ਹੈ</translation> <translation id="5060332552815861872">ਰੱਖਿਅਤ ਕਰਨ ਲਈ 1 ਪ੍ਰਿੰਟਰ ਉਪਲਬਧ ਹੈ।</translation> @@ -4737,6 +4742,7 @@ <translation id="5548075230008247516">ਸਾਰੀਆਂ ਆਈਟਮਾਂ ਨੂੰ ਅਣਚੁਣਿਆ ਕੀਤਾ ਗਿਆ, ਚੋਣ ਮੋਡ ਤੋਂ ਬਾਹਰ ਨਿਕਲਿਆ ਗਿਆ।</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" ਅਤੇ 1 ਹੋਰ ਟੈਬ}other{"<ph name="TAB_TITLE" />" ਅਤੇ # ਹੋਰ ਟੈਬਾਂ}}</translation> <translation id="5548606607480005320">ਸੁਰੱਖਿਆ ਜਾਂਚ</translation> +<translation id="5548644592758170183">ਖੱਬੇ ਪਾਸੇ ਦਿਖਾਓ</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">ਕੀ-ਬੋਰਡ ਅਤੇ ਲਿਖਤ ਇਨਪੁੱਟ</translation> <translation id="5553089923092577885">ਪ੍ਰਮਾਣ-ਪੱਤਰ ਨੀਤੀ ਨਕਸ਼ੇ</translation> @@ -8221,6 +8227,7 @@ <translation id="8980345560318123814">ਵਿਚਾਰ ਰਿਪੋਰਟਾਂ</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - ਕ੍ਰੈਸ਼ ਕੀਤਾ</translation> <translation id="8981825781894055334">ਕਾਗਜ਼ ਘੱਟ ਹਨ</translation> +<translation id="8983018820925880511">ਇਸ ਨਵੇਂ ਪ੍ਰੋਫਾਈਲ ਦਾ ਪ੍ਰਬੰਧਨ <ph name="DOMAIN" /> ਵੱਲੋਂ ਕੀਤਾ ਜਾਵੇਗਾ। <ph name="BEGIN_LINK" />ਹੋਰ ਜਾਣੋ<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> ਸਾਈਟ <ph name="FILENAME" /> ਦਾ ਸੰਪਾਦਨ ਕਰ ਸਕਦੀ ਹੈ</translation> <translation id="8984694057134206124">ਤੁਸੀਂ <ph name="MINUTES" /> ਮਿੰਟ ਲਈ ਹਰ ਕਿਸੇ ਨੂੰ ਦਿਸੋਗੇ। <ph name="LINK_BEGIN" />ਹੋਰ ਜਾਣੋ<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Chromebook ਲਈ Steam ਵਿੱਚ ਜੀ ਆਇਆਂ ਨੂੰ</translation> @@ -8317,6 +8324,7 @@ <translation id="9075413375877487220">ਇਹ ਐਕਸਟੈਂਸ਼ਨ ਵਿਸਤ੍ਰਿਤ ਸੁਰੱਖਿਅਤ ਬ੍ਰਾਊਜ਼ਿੰਗ ਵੱਲੋਂ ਭਰੋਸੇਯੋਗ ਨਹੀਂ ਹੈ।</translation> <translation id="9076283476770535406">ਇਸ ਵਿੱਚ ਬਾਲਗ ਸਮੱਗਰੀ ਹੋ ਸਕਦੀ ਹੈ</translation> <translation id="9076523132036239772">ਮਾਫ਼ ਕਰਨਾ, ਤੁਹਾਡੀ ਈਮੇਲ ਜਾਂ ਪਾਸਵਰਡ ਪ੍ਰਮਾਣਿਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ। ਪਹਿਲਾਂ ਇੱਕ ਨੈੱਟਵਰਕ ਨਾਲ ਕਨੈਕਟ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> +<translation id="9076821103818989526">ਸਾਈਡ ਪੈਨਲ</translation> <translation id="9076977315710973122">SMB ਸਾਂਝਾਕਰਨ</translation> <translation id="9078193189520575214">ਤਬਦੀਲੀਆਂ ਨੂੰ ਲਾਗੂ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ...</translation> <translation id="9078316009970372699">ਤਤਕਾਲ ਟੈਦਰਿੰਗ ਨੂੰ ਬੰਦ ਕਰੋ</translation>
diff --git a/chrome/app/resources/generated_resources_pl.xtb b/chrome/app/resources/generated_resources_pl.xtb index 727ac64..f1bac807 100644 --- a/chrome/app/resources/generated_resources_pl.xtb +++ b/chrome/app/resources/generated_resources_pl.xtb
@@ -1245,6 +1245,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Dodaj Wi-Fi...</translation> <translation id="2162155940152307086">Synchronizacja rozpocznie się zaraz po zamknięciu ustawień</translation> +<translation id="2162705204091149050">Odczytywanie informacji o przeglądarce, systemie operacyjnym, urządzeniu, zainstalowanym oprogramowaniu i plikach</translation> <translation id="2162926944953615670">Brak dostępnych profili eSIM</translation> <translation id="2163470535490402084">Aby zalogować się na urządzeniu <ph name="DEVICE_TYPE" />, połącz się z internetem.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> i jeszcze 1 przełącznik</translation> @@ -2479,6 +2480,7 @@ <translation id="3359256513598016054">Ograniczenia zasad certyfikatu</translation> <translation id="3360297538363969800">Drukowanie nie udało się. Sprawdź swoją drukarkę i spróbuj ponownie.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> udostępnia Ci <ph name="ATTACHMENTS" />.}few{<ph name="DEVICE_NAME" /> udostępnia Ci <ph name="ATTACHMENTS" />.}many{<ph name="DEVICE_NAME" /> udostępnia Ci <ph name="ATTACHMENTS" />.}other{<ph name="DEVICE_NAME" /> udostępnia Ci <ph name="ATTACHMENTS" />.}}</translation> +<translation id="3363202073972776113">Tym nowym profilem będzie zarządzać Twoja organizacja. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation> <translation id="3364986687961713424">Od administratora: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Użyj klawisza Ctrl lub Alt</translation> <translation id="3368922792935385530">Połączone</translation> @@ -2513,6 +2515,7 @@ <translation id="339722927132407568">Zatrzymuje się</translation> <translation id="3399432415385675819">Powiadomienia zostaną wyłączone</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Hz) – z przeplotem</translation> +<translation id="3401484564516348917">Odczytywanie informacji o przeglądarce, systemie operacyjnym, urządzeniu, zainstalowanym oprogramowaniu, wartościach rejestru i plikach</translation> <translation id="3402059702184703067">{COUNT,plural, =1{Na tym urządzeniu jest zapisane {COUNT} hasło}few{Na tym urządzeniu są zapisane {COUNT} hasła}many{Na tym urządzeniu jest zapisanych {COUNT} haseł}other{Na tym urządzeniu jest zapisane {COUNT} hasła}}</translation> <translation id="3402255108239926910">Wybierz awatara</translation> <translation id="3402585168444815892">Rejestruję w trybie demonstracyjnym</translation> @@ -2759,6 +2762,7 @@ <translation id="3627879631695760395">Zainstaluj aplikację <ph name="APP" />…</translation> <translation id="3628275722731025472">Wyłączanie Bluetootha</translation> <translation id="3629631988386925734">Wpisz hasło, by włączyć Smart Lock. Następnym razem Twój telefon odblokuje urządzenie <ph name="DEVICE_TYPE" />. Smart Lock możesz wyłączyć w Ustawieniach.</translation> +<translation id="3629664892718440872">Zapamiętaj ten wybór</translation> <translation id="3630132874740063857">Twój telefon</translation> <translation id="3630995161997703415">Dodaj tę stronę do półki, by używać jej w dowolnym czasie</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Jeśli pozwolisz na wysyłanie automatycznych raportów z urządzeń z Chrome OS, pomożesz nam w ustalaniu, co przede wszystkim należy naprawić i ulepszyć w tym systemie operacyjnym. Raporty mogą zawierać na przykład informacje o czasie wystąpienia awarii Chrome OS, używanych funkcjach i typowym wykorzystaniu pamięci.<ph name="END_PARAGRAPH1" /> @@ -3248,6 +3252,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">Zabroniono pełnej kontroli nad urządzeniami MIDI</translation> +<translation id="4087328411748538168">Pokaż po prawej</translation> <translation id="4089235344645910861">Ustawienia zapisane. Synchronizacja rozpoczęta.</translation> <translation id="4090103403438682346">Włącz weryfikację dostępu</translation> <translation id="4090947011087001172">Zresetować uprawnienia witryny <ph name="SITE" />?</translation> @@ -3940,6 +3945,7 @@ <translation id="4779766576531456629">Zmień nazwę sieci komórkowej eSIM</translation> <translation id="4780321648949301421">Zapisz stronę jako...</translation> <translation id="4781443161433589743">Korzystasz z najsilniejszych zabezpieczeń Chrome</translation> +<translation id="4782861709165039462">Wszystkie mikrofony wyłączone przez przełącznik sprzętowy urządzenia</translation> <translation id="4785719467058219317">Używasz klucza bezpieczeństwa, który nie jest zarejestrowany w tej witrynie</translation> <translation id="4785914069240823137">Anuluj przycinanie</translation> <translation id="4788092183367008521">Sprawdź połączenie sieciowe i spróbuj jeszcze raz.</translation> @@ -4208,7 +4214,6 @@ <translation id="5054374119096692193">Zobacz wszystkie opcje kart w sekcji <ph name="BEGIN_LINK" />dostosowania Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Łączę się z kontenerem</translation> <translation id="5057110919553308744">Gdy klikniesz rozszerzenie</translation> -<translation id="505776528429481161">Łatwe łączenie się z urządzeniami w pobliżu i ich konfigurowanie</translation> <translation id="5059241099014281248">Ograniczanie logowania się</translation> <translation id="5059526285558225588">Wybierz, co chcesz udostępnić</translation> <translation id="5060332552815861872">Dostępna do zapisania jest jedna drukarka.</translation> @@ -4706,6 +4711,7 @@ <translation id="5548075230008247516">Wszystkie elementy zostały odznaczone. Opuszczono tryb wyboru.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{„<ph name="TAB_TITLE" />”}=1{„<ph name="TAB_TITLE" />” i jeszcze jedna karta}few{„<ph name="TAB_TITLE" />” i # inne karty}many{„<ph name="TAB_TITLE" />” i # innych kart}other{„<ph name="TAB_TITLE" />” i # innej karty}}</translation> <translation id="5548606607480005320">Kontrola zabezpieczeń</translation> +<translation id="5548644592758170183">Pokaż po lewej</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Klawiatura i wprowadzanie tekstu</translation> <translation id="5553089923092577885">Odwzorowania zasad certyfikatu</translation> @@ -8194,6 +8200,7 @@ <translation id="8980345560318123814">Przesyłanie opinii</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> – awaria</translation> <translation id="8981825781894055334">Mało papieru</translation> +<translation id="8983018820925880511">Ten nowy profil będzie zarządzany w ramach domeny <ph name="DOMAIN" />. <ph name="BEGIN_LINK" />Więcej informacji<ph name="END_LINK" /></translation> <translation id="8983632908660087688">Strona <ph name="ORIGIN" /> może edytować plik <ph name="FILENAME" /></translation> <translation id="8984694057134206124">Przez <ph name="MINUTES" /> min urządzenie będzie widoczne dla wszystkich. <ph name="LINK_BEGIN" />Więcej informacji<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Witaj w aplikacji Steam na Chromebooka</translation> @@ -8287,6 +8294,7 @@ <translation id="9075413375877487220">Ulepszone Bezpieczne przeglądanie uznaje to rozszerzenie za niezaufane.</translation> <translation id="9076283476770535406">Może zawierać treści dla dorosłych</translation> <translation id="9076523132036239772">Niestety, nie udało się zweryfikować Twojego adresu e-mail lub hasła. Najpierw nawiąż połączenie z siecią.</translation> +<translation id="9076821103818989526">Panel boczny</translation> <translation id="9076977315710973122">Udostępnianie plików SMB</translation> <translation id="9078193189520575214">Wprowadzam zmiany...</translation> <translation id="9078316009970372699">Wyłącz błyskawiczne połączenie w tetheringu</translation>
diff --git a/chrome/app/resources/generated_resources_pt-BR.xtb b/chrome/app/resources/generated_resources_pt-BR.xtb index cd14258..99a3f78 100644 --- a/chrome/app/resources/generated_resources_pt-BR.xtb +++ b/chrome/app/resources/generated_resources_pt-BR.xtb
@@ -1260,6 +1260,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Adicionar Wi-Fi...</translation> <translation id="2162155940152307086">A sincronização será iniciada assim que você sair das configurações</translation> +<translation id="2162705204091149050">Ler informações sobre seu navegador, SO, dispositivo, softwares instalados e arquivos</translation> <translation id="2162926944953615670">Nenhum perfil de eSIM disponível</translation> <translation id="2163470535490402084">Conecte-se à Internet para fazer login no seu <ph name="DEVICE_TYPE" />.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> e mais 1 interruptor</translation> @@ -2511,6 +2512,7 @@ <translation id="3359256513598016054">Restrições da diretiva de certificação</translation> <translation id="3360297538363969800">Ocorreu uma falha na impressão. Verifique sua impressora e tente novamente.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> está compartilhando <ph name="ATTACHMENTS" /> com você.}one{<ph name="DEVICE_NAME" /> está compartilhando <ph name="ATTACHMENTS" /> com você.}other{<ph name="DEVICE_NAME" /> está compartilhando <ph name="ATTACHMENTS" /> com você.}}</translation> +<translation id="3363202073972776113">O novo perfil vai ser gerenciado pela sua organização. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> <translation id="3364986687961713424">Do seu administrador: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Use Ctrl ou Alt</translation> <translation id="3368922792935385530">Conectado</translation> @@ -2545,6 +2547,7 @@ <translation id="339722927132407568">Congela</translation> <translation id="3399432415385675819">As notificações serão desativadas</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> hertz) - entrelaçado</translation> +<translation id="3401484564516348917">Ler informações sobre seu navegador, SO, dispositivo, softwares instalados, valores de registro e arquivos</translation> <translation id="3402059702184703067">{COUNT,plural, =1{{COUNT} senha está armazenada no dispositivo}one{{COUNT} senha está armazenada no dispositivo}other{{COUNT} senhas estão armazenadas no dispositivo}}</translation> <translation id="3402255108239926910">Escolha um avatar</translation> <translation id="3402585168444815892">Inscrevendo-se no modo de demonstração</translation> @@ -2791,6 +2794,7 @@ <translation id="3627879631695760395">Instalar <ph name="APP" />…</translation> <translation id="3628275722731025472">Desativar o Bluetooth</translation> <translation id="3629631988386925734">Digite sua senha para ativar o Smart Lock. Na próxima vez, seu smartphone desbloqueará o <ph name="DEVICE_TYPE" />. Desative o Smart Lock nas configurações.</translation> +<translation id="3629664892718440872">Lembrar esta escolha</translation> <translation id="3630132874740063857">Seu smartphone</translation> <translation id="3630995161997703415">Adicione este site à sua estante para usá-lo a qualquer momento</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Ao autorizar que seus dispositivos ChromeOS enviem relatórios automáticos, você nos ajuda a priorizar o que precisamos corrigir e melhorar no ChromeOS. Esses relatórios podem incluir informações como falhas do ChromeOS, quais recursos e quanta memória você normalmente usa.<ph name="END_PARAGRAPH1" /> @@ -3280,6 +3284,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">Controle total de dispositivos MIDI negado</translation> +<translation id="4087328411748538168">Mostrar à direita</translation> <translation id="4089235344645910861">Configurações salvas. Sincronização iniciada.</translation> <translation id="4090103403438682346">Ativar o acesso verificado</translation> <translation id="4090947011087001172">Redefinir permissões de site para <ph name="SITE" />?</translation> @@ -3973,6 +3978,7 @@ <translation id="4779766576531456629">Renomear rede celular do eSIM</translation> <translation id="4780321648949301421">Salvar página como...</translation> <translation id="4781443161433589743">Você está usando o nível mais alto de segurança do Chrome</translation> +<translation id="4782861709165039462">Todos os microfones foram desativados pelo interruptor de hardware do dispositivo</translation> <translation id="4785719467058219317">Você está usando uma chave de segurança que não está registrada neste site</translation> <translation id="4785914069240823137">Cancelar corte</translation> <translation id="4788092183367008521">Verifique sua conexão de rede e tente novamente.</translation> @@ -4241,7 +4247,6 @@ <translation id="5054374119096692193">Veja todas as opções de cards em <ph name="BEGIN_LINK" />Personalizar o Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Conectando ao contêiner</translation> <translation id="5057110919553308744">Quando você clicar na extensão</translation> -<translation id="505776528429481161">Configure e se conecte a dispositivos próximos com facilidade</translation> <translation id="5059241099014281248">Restringir o login</translation> <translation id="5059526285558225588">Escolha o que compartilhar</translation> <translation id="5060332552815861872">Há 1 impressora disponível para salvar.</translation> @@ -4740,6 +4745,7 @@ <translation id="5548075230008247516">Todos os itens foram desmarcados e o modo de seleção foi fechado.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" e mais 1 guia}one{"<ph name="TAB_TITLE" />" e mais # guia}other{"<ph name="TAB_TITLE" />" e mais # guias}}</translation> <translation id="5548606607480005320">Confirmação de segurança</translation> +<translation id="5548644592758170183">Mostrar à esquerda</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Teclado e entrada de texto</translation> <translation id="5553089923092577885">Mapeamentos da diretiva de certificação</translation> @@ -8226,6 +8232,7 @@ <translation id="8980345560318123814">Relatórios de feedback</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - Falhou</translation> <translation id="8981825781894055334">Pouco papel</translation> +<translation id="8983018820925880511">Esse novo perfil vai ser gerenciado por <ph name="DOMAIN" />. <ph name="BEGIN_LINK" />Saiba mais<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> pode editar <ph name="FILENAME" /></translation> <translation id="8984694057134206124">Você ficará visível para todos por <ph name="MINUTES" /> minutos. <ph name="LINK_BEGIN" />Saiba mais<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Conheça o Steam para Chromebook</translation> @@ -8322,6 +8329,7 @@ <translation id="9075413375877487220">Essa extensão não é considerada confiável pelo recurso Navegação segura com maior proteção.</translation> <translation id="9076283476770535406">Pode apresentar conteúdo adulto</translation> <translation id="9076523132036239772">Seu e-mail ou sua senha não pode ser verificado. Tente conectar-se a uma rede.</translation> +<translation id="9076821103818989526">Painel lateral</translation> <translation id="9076977315710973122">Compartilhamento de arquivos SMB</translation> <translation id="9078193189520575214">Aplicando mudanças…</translation> <translation id="9078316009970372699">Desativar tethering instantâneo</translation>
diff --git a/chrome/app/resources/generated_resources_pt-PT.xtb b/chrome/app/resources/generated_resources_pt-PT.xtb index f2b6df0b..bdb759d 100644 --- a/chrome/app/resources/generated_resources_pt-PT.xtb +++ b/chrome/app/resources/generated_resources_pt-PT.xtb
@@ -4230,7 +4230,6 @@ <translation id="5054374119096692193">Veja todas as opções de cartões em <ph name="BEGIN_LINK" />Personalizar o Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">A ligar ao contentor</translation> <translation id="5057110919553308744">Quando clica na extensão</translation> -<translation id="505776528429481161">Ligue e configure facilmente dispositivos nas proximidades</translation> <translation id="5059241099014281248">Restringir início de sessão</translation> <translation id="5059526285558225588">Decida o que pretende partilhar</translation> <translation id="5060332552815861872">Existe 1 impressora disponível para guardar.</translation>
diff --git a/chrome/app/resources/generated_resources_ro.xtb b/chrome/app/resources/generated_resources_ro.xtb index 6e6d3df..11df982 100644 --- a/chrome/app/resources/generated_resources_ro.xtb +++ b/chrome/app/resources/generated_resources_ro.xtb
@@ -353,6 +353,7 @@ <translation id="1340527397989195812">Fă backup conținutului media de pe dispozitiv folosind aplicația Fișiere.</translation> <translation id="1343865611738742294">Permite aplicațiilor Linux să acceseze dispozitivele USB. Linux nu va păstra un dispozitiv USB după ce este eliminat.</translation> <translation id="1343920184519992513">Continuă de unde ai rămas și deschide un anumit set de pagini</translation> +<translation id="1344377983938103876">Se deschide <ph name="URL" />...</translation> <translation id="134589511016534552">Filele media apar și în secțiunea File deschise</translation> <translation id="1346630054604077329">Confirmă și repornește</translation> <translation id="1346748346194534595">Dreapta</translation> @@ -4230,7 +4231,6 @@ <translation id="5054374119096692193">Vezi toate opțiunile pentru carduri în <ph name="BEGIN_LINK" />Personalizează Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Se conectează la container</translation> <translation id="5057110919553308744">Când dai clic pe extensie</translation> -<translation id="505776528429481161">Conectează și configurează simplu dispozitive din apropiere</translation> <translation id="5059241099014281248">Restricționează conectarea</translation> <translation id="5059526285558225588">Alege ce să distribui</translation> <translation id="5060332552815861872">Există o imprimantă de salvat.</translation> @@ -6956,6 +6956,7 @@ <translation id="7753735457098489144">Instalarea nu a reușit din cauza spațiului de stocare insuficient. Pentru a elibera spațiu, șterge fișiere din stocarea dispozitivului.</translation> <translation id="7754347746598978109">Nu au permisiunea de a folosi JavaScript</translation> <translation id="7754704193130578113">Întreabă-mă unde se salvează fiecare fișier înainte de a-l descărca</translation> +<translation id="7755134875397410803">Pentru a te ajuta să finalizezi sarcini, Google va primi adresele URL și conținutul site-urilor în care folosești Asistentul, precum și informațiile pe care le trimiți cu ajutorul Asistentului. Aceste informații pot fi stocate în contul tău Google. Poți să dezactivezi Asistentul din setările Chrome. <ph name="LEARN_MORE" /></translation> <translation id="7755287808199759310">Părintele tău îl poate debloca pentru tine</translation> <translation id="7757592200364144203">Schimbă numele dispozitivului</translation> <translation id="7757739382819740102">Persoanele de contact din apropiere îți pot trimite fișiere. Va fi necesară aprobarea.</translation>
diff --git a/chrome/app/resources/generated_resources_ru.xtb b/chrome/app/resources/generated_resources_ru.xtb index 9c8543d..fcbc33c4a 100644 --- a/chrome/app/resources/generated_resources_ru.xtb +++ b/chrome/app/resources/generated_resources_ru.xtb
@@ -4229,7 +4229,6 @@ <translation id="5054374119096692193">Чтобы посмотреть все варианты карточек, выберите <ph name="BEGIN_LINK" />Настроить Chrome<ph name="END_LINK" />.</translation> <translation id="5056950756634735043">Подключение к контейнеру…</translation> <translation id="5057110919553308744">При нажатии на расширение</translation> -<translation id="505776528429481161">С легкостью подключайтесь к устройствам поблизости и настраивайте их.</translation> <translation id="5059241099014281248">Ограниченный вход</translation> <translation id="5059526285558225588">Выберите часть экрана для демонстрации</translation> <translation id="5060332552815861872">Для сохранения доступен 1 принтер.</translation>
diff --git a/chrome/app/resources/generated_resources_si.xtb b/chrome/app/resources/generated_resources_si.xtb index 1190287..0d51343 100644 --- a/chrome/app/resources/generated_resources_si.xtb +++ b/chrome/app/resources/generated_resources_si.xtb
@@ -4232,7 +4232,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />Chrome අභිරුචිකරණය<ph name="END_LINK" /> තුළ සියලු කාඩ්පත් විකල්ප බලන්න</translation> <translation id="5056950756634735043">බහාලුමට සම්බන්ධ වෙමින්</translation> <translation id="5057110919553308744">ඔබ දිගුව ක්ලික් කළ විට</translation> -<translation id="505776528429481161">පහසුවෙන් සම්බන්ධ වී අවට උපාංග පිහිටුවන්න</translation> <translation id="5059241099014281248">පුරනය සීමා කරන්න</translation> <translation id="5059526285558225588">බෙදා ගන්නා දේ තෝරන්න</translation> <translation id="5060332552815861872">සුරැකීමට 1 මුද්රකයක් ලැබේ.</translation>
diff --git a/chrome/app/resources/generated_resources_sk.xtb b/chrome/app/resources/generated_resources_sk.xtb index 6e60f20..00a24be 100644 --- a/chrome/app/resources/generated_resources_sk.xtb +++ b/chrome/app/resources/generated_resources_sk.xtb
@@ -1249,6 +1249,7 @@ <translation id="2159488579268505102">USB‑C</translation> <translation id="216169395504480358">Pridať Wi‑Fi…</translation> <translation id="2162155940152307086">Synchronizácia sa spustí, keď opustíte nastavenia synchronizácie</translation> +<translation id="2162705204091149050">Čítanie informácií o prehliadači, operačnom systéme, zariadení, nainštalovanom softvéri a súboroch</translation> <translation id="2162926944953615670">Nie sú k dispozícii žiadne profily eSIM</translation> <translation id="2163470535490402084">Ak sa chcete prihlásiť do zariadenia <ph name="DEVICE_TYPE" />, pripojte sa k internetu.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> a 1 ďalší prepínač</translation> @@ -2495,6 +2496,7 @@ <translation id="3359256513598016054">Obmedzenia certifikačnej politiky</translation> <translation id="3360297538363969800">Tlač zlyhala. Skontrolujte tlačiareň a skúste to znova.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> s vami zdieľa <ph name="ATTACHMENTS" />.}few{<ph name="DEVICE_NAME" /> s vami zdieľa <ph name="ATTACHMENTS" />.}many{<ph name="DEVICE_NAME" /> s vami zdieľa <ph name="ATTACHMENTS" />.}other{<ph name="DEVICE_NAME" /> s vami zdieľa <ph name="ATTACHMENTS" />.}}</translation> +<translation id="3363202073972776113">Tento nový profil bude spravovať vaša organizácia. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation> <translation id="3364986687961713424">Od správcu: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Použite Ctrl alebo Alt</translation> <translation id="3368922792935385530">Pripojené</translation> @@ -2529,6 +2531,7 @@ <translation id="339722927132407568">Zamŕza</translation> <translation id="3399432415385675819">Upozornenia budú zakázané</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> × <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Hz) – prekladané</translation> +<translation id="3401484564516348917">Čítanie informácií o prehliadači, operačnom systéme, zariadení, nainštalovanom softvéri, hodnotách databázy Registry a súboroch</translation> <translation id="3402059702184703067">{COUNT,plural, =1{V tomto zariadení je uložené {COUNT} heslo}few{V tomto zariadení sú uložené {COUNT} heslá}many{{COUNT} passwords are stored on this device}other{V tomto zariadení je uložených {COUNT} hesiel}}</translation> <translation id="3402255108239926910">Vyberte si avatar</translation> <translation id="3402585168444815892">Prebieha registrácia do ukážkového režimu</translation> @@ -2775,6 +2778,7 @@ <translation id="3627879631695760395">Inštalovať aplikáciu <ph name="APP" />...</translation> <translation id="3628275722731025472">Vypnúť rozhranie Bluetooth</translation> <translation id="3629631988386925734">Aktivujte Smart Lock zadaním hesla. Zariadenie <ph name="DEVICE_TYPE" /> nabudúce odomknete telefónom. Smart Lock vypnete v Nastaveniach.</translation> +<translation id="3629664892718440872">Zapamätať túto voľbu</translation> <translation id="3630132874740063857">Váš telefón</translation> <translation id="3630995161997703415">Ak chcete tento web kedykoľvek použiť, pridajte si ho na poličku</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Ak povolíte zariadeniam so systémom Chrome OS odosielať automatické hlásenia, pomôžete nám tým určiť, čo treba v systéme Chrome OS prioritne opraviť a zlepšiť. Tieto hlásenia môžu obsahovať informácie, napríklad kedy Chrome OS padá, aké používate funkcie a koľko pamäte zvyčajne využívate.<ph name="END_PARAGRAPH1" /> @@ -3264,6 +3268,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">Úplné ovládanie zariadení MIDI bolo odmietnuté</translation> +<translation id="4087328411748538168">Zobraziť vpravo</translation> <translation id="4089235344645910861">Nastavenia boli uložené. Synchronizácia sa začala.</translation> <translation id="4090103403438682346">Povolí overený prístup</translation> <translation id="4090947011087001172">Chcete resetovať povolenia webu <ph name="SITE" />?</translation> @@ -3956,6 +3961,7 @@ <translation id="4779766576531456629">Premenovať mobilnú sieť eSIM</translation> <translation id="4780321648949301421">Uložiť stránku ako...</translation> <translation id="4781443161433589743">Používate najsilnejšie zabezpečenie Chromu</translation> +<translation id="4782861709165039462">Všetky mikrofóny boli deaktivované hardvérovým prepínačom zariadení</translation> <translation id="4785719467058219317">Používate bezpečnostný kľúč, ktorý nie je registrovaný s týmto webom</translation> <translation id="4785914069240823137">Zrušiť orezanie</translation> <translation id="4788092183367008521">Skontrolujte pripojenie k sieti a skúste to znova.</translation> @@ -4224,7 +4230,6 @@ <translation id="5054374119096692193">Prezrite si všetky možnosti karty v sekcii <ph name="BEGIN_LINK" />Prispôsobenie Chromu<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Pripája sa ku kontajneru</translation> <translation id="5057110919553308744">Keď kliknete na rozšírenie</translation> -<translation id="505776528429481161">Ľahko sa pripájajte a nastavujte zariadenia v okolí</translation> <translation id="5059241099014281248">Obmedziť prihlásenie</translation> <translation id="5059526285558225588">Vyberte, čo sa má zdieľať</translation> <translation id="5060332552815861872">Môžete si uložiť jednu tlačiareň.</translation> @@ -4723,6 +4728,7 @@ <translation id="5548075230008247516">Bol zrušený výber všetkých položiek a ukončený režim výberu.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{„<ph name="TAB_TITLE" />“}=1{„<ph name="TAB_TITLE" />“ a jedna ďalšia karta}few{„<ph name="TAB_TITLE" />“ a # ďalšie karty}many{"<ph name="TAB_TITLE" />" and # Other Tabs}other{„<ph name="TAB_TITLE" />“ a # ďalších kariet}}</translation> <translation id="5548606607480005320">Kontrola bezpečnosti</translation> +<translation id="5548644592758170183">Zobraziť vľavo</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Klávesnica a textový vstup</translation> <translation id="5553089923092577885">Priraďovanie politiky certifikátu</translation> @@ -8210,6 +8216,7 @@ <translation id="8980345560318123814">Hlásenia spätnej väzby</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> – Zlyhanie</translation> <translation id="8981825781894055334">Čoskoro sa minie papier</translation> +<translation id="8983018820925880511">Tento nový profil bude spravovať doména <ph name="DOMAIN" />. <ph name="BEGIN_LINK" />Ďalšie informácie<ph name="END_LINK" /></translation> <translation id="8983632908660087688">Web <ph name="ORIGIN" /> môže upravovať súbor <ph name="FILENAME" /></translation> <translation id="8984694057134206124">Všetci vás budú vidieť <ph name="MINUTES" /> min. <ph name="LINK_BEGIN" />Ďalšie informácie<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Víta vás Steam pre Chromebook</translation> @@ -8306,6 +8313,7 @@ <translation id="9075413375877487220">Zlepšené bezpečné prehliadanie nepovažuje toto rozšírenie za dôveryhodné.</translation> <translation id="9076283476770535406">Môže zahŕňať obsah pre dospelých</translation> <translation id="9076523132036239772">Je nám ľúto, e-mailovú adresu alebo heslo sa nepodarilo overiť. Skúste sa najprv pripojiť k sieti.</translation> +<translation id="9076821103818989526">Bočný panel</translation> <translation id="9076977315710973122">Zdieľané úložisko SMB</translation> <translation id="9078193189520575214">Ukladajú sa zmeny...</translation> <translation id="9078316009970372699">Deaktivovať dynamický tethering</translation>
diff --git a/chrome/app/resources/generated_resources_sl.xtb b/chrome/app/resources/generated_resources_sl.xtb index f140ef0..3b54be62 100644 --- a/chrome/app/resources/generated_resources_sl.xtb +++ b/chrome/app/resources/generated_resources_sl.xtb
@@ -1262,6 +1262,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Dodaj Wi-Fi ...</translation> <translation id="2162155940152307086">Sinhronizacija se bo začela, ko zaprete nastavitve sinhronizacije</translation> +<translation id="2162705204091149050">Branje podatkov o brskalniku, operacijskem sistemu, napravi, nameščeni programski opremi in datotekah</translation> <translation id="2162926944953615670">Ni razpoložljivih profilov za e-SIM.</translation> <translation id="2163470535490402084">Če se želite prijaviti v napravo <ph name="DEVICE_TYPE" />, vzpostavite povezavo z internetom.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> in še 1 stikalo</translation> @@ -2511,6 +2512,7 @@ <translation id="3359256513598016054">Omejitve pravilnika potrdila</translation> <translation id="3360297538363969800">Tiskanje ni uspelo. Preverite tiskalnik in poskusite znova.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{Naprava <ph name="DEVICE_NAME" /> z vami deli priloge (<ph name="ATTACHMENTS" />).}one{Naprava <ph name="DEVICE_NAME" /> z vami deli priloge (<ph name="ATTACHMENTS" />).}two{Naprava <ph name="DEVICE_NAME" /> z vami deli priloge (<ph name="ATTACHMENTS" />).}few{Naprava <ph name="DEVICE_NAME" /> z vami deli priloge (<ph name="ATTACHMENTS" />).}other{Naprava <ph name="DEVICE_NAME" /> z vami deli priloge (<ph name="ATTACHMENTS" />).}}</translation> +<translation id="3363202073972776113">Ta novi profil bo upravljala vaša organizacija. <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation> <translation id="3364986687961713424">Od skrbnika: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Uporabite Ctrl ali Alt</translation> <translation id="3368922792935385530">Povezano</translation> @@ -2545,6 +2547,7 @@ <translation id="339722927132407568">Zmrzne</translation> <translation id="3399432415385675819">Obvestila bodo onemogočena</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Hz) – prepleteno</translation> +<translation id="3401484564516348917">Branje podatkov o brskalniku, operacijskem sistemu, napravi, nameščeni programski opremi, vrednostih registra in datotekah</translation> <translation id="3402059702184703067">{COUNT,plural, =1{{COUNT} geslo je shranjeno v tej napravi}one{{COUNT} geslo je shranjeno v tej napravi}two{{COUNT} gesli sta shranjeni v tej napravi}few{{COUNT} gesla so shranjena v tej napravi}other{{COUNT} gesel je shranjenih v tej napravi}}</translation> <translation id="3402255108239926910">Izberite avatar</translation> <translation id="3402585168444815892">Včlanitev v predstavitveni način</translation> @@ -2791,6 +2794,7 @@ <translation id="3627879631695760395">Namestitev aplikacije <ph name="APP" /> ...</translation> <translation id="3628275722731025472">Izklop Bluetootha</translation> <translation id="3629631988386925734">Vnesite geslo, če želite omogočiti Smart Lock. Naslednjič bo telefon odklenil napravo <ph name="DEVICE_TYPE" />. Funkcijo Smart Lock lahko izklopite v nastavitvah.</translation> +<translation id="3629664892718440872">Zapomni si to izbiro</translation> <translation id="3630132874740063857">Vaš telefon</translation> <translation id="3630995161997703415">Dodajte to spletno mesto na polico, da ga lahko kadar koli uporabljate</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Če napravam s sistemom Chrome OS dovolite pošiljanje samodejnih poročil, bomo potrebne popravke in izboljšave sistema Chrome OS lažje razvrstili po pomembnosti. Ta poročila lahko med drugim vključujejo podatke o tem, kdaj v Chromu OS pride do zrušitev, katere funkcije uporabljate in koliko pomnilnika običajno uporabljate.<ph name="END_PARAGRAPH1" /> @@ -3280,6 +3284,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">Popoln nadzor nad napravami MIDI je bil zavrnjen</translation> +<translation id="4087328411748538168">Pokaži na desni</translation> <translation id="4089235344645910861">Nastavitve so bile shranjene. Sinhronizacija se je začela.</translation> <translation id="4090103403438682346">Omogočanje preverjenega dostopa</translation> <translation id="4090947011087001172">Ali želite ponastaviti dovoljenja za spletno mesto <ph name="SITE" />?</translation> @@ -3973,6 +3978,7 @@ <translation id="4779766576531456629">Preimenovanje mobilnega omrežja eSIM</translation> <translation id="4780321648949301421">Shrani stran &kot ...</translation> <translation id="4781443161433589743">Uporabljate Chromovo najmočnejšo zaščito.</translation> +<translation id="4782861709165039462">Strojno stikalo naprav je onemogočilo vse mikrofone</translation> <translation id="4785719467058219317">Varnostni ključ, ki ga uporabljate, ni registriran na tem spletnem mestu</translation> <translation id="4785914069240823137">Prekliči obrezovanje</translation> <translation id="4788092183367008521">Preverite omrežno povezavo in poskusite znova.</translation> @@ -4241,7 +4247,6 @@ <translation id="5054374119096692193">Prikaz vseh možnosti kartice v razdelku za <ph name="BEGIN_LINK" />upravljanje Chroma<ph name="END_LINK" />.</translation> <translation id="5056950756634735043">Povezovanje z vsebnikom</translation> <translation id="5057110919553308744">Ko kliknete razširitev</translation> -<translation id="505776528429481161">Preprosto povežite in nastavite naprave v bližini.</translation> <translation id="5059241099014281248">Omejitev prijave</translation> <translation id="5059526285558225588">Izberite, kaj deliti z drugimi</translation> <translation id="5060332552815861872">Na voljo je 1 tiskalnik za shranjevanje.</translation> @@ -4740,6 +4745,7 @@ <translation id="5548075230008247516">Preklican je izbor vseh elementov in zaprt je način izbire.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{»<ph name="TAB_TITLE" />«}=1{»<ph name="TAB_TITLE" />« in še 1 zavihek}one{»<ph name="TAB_TITLE" />« in še # zavihek}two{»<ph name="TAB_TITLE" />« in še # zavihka}few{»<ph name="TAB_TITLE" />« in še # zavihki}other{»<ph name="TAB_TITLE" />« in še # zavihkov}}</translation> <translation id="5548606607480005320">Varnostno preverjanje</translation> +<translation id="5548644592758170183">Pokaži na levi</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Tipkovnica in vnos besedila</translation> <translation id="5553089923092577885">Preslikave pravilnika potrdila</translation> @@ -8233,6 +8239,7 @@ <translation id="8980345560318123814">Poročila s povratnimi informacijami</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> – zrušitev</translation> <translation id="8981825781894055334">Primanjkuje papirja</translation> +<translation id="8983018820925880511">Ta novi profil bo upravljala domena <ph name="DOMAIN" />. <ph name="BEGIN_LINK" />Več o tem<ph name="END_LINK" /></translation> <translation id="8983632908660087688">Spletno mesto <ph name="ORIGIN" /> lahko ureja datoteko <ph name="FILENAME" /></translation> <translation id="8984694057134206124">Vaša naprava bo <ph name="MINUTES" /> min vidna vsem. <ph name="LINK_BEGIN" />Več o tem<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Pozdravljeni v aplikaciji Steam za Chromebook</translation> @@ -8329,6 +8336,7 @@ <translation id="9075413375877487220">Izboljšano varno brskanje ne zaupa tej razširitvi.</translation> <translation id="9076283476770535406">Morda vsebuje vsebino za odrasle</translation> <translation id="9076523132036239772">E-poštnega naslova ali gesla žal ni bilo mogoče preveriti. Poskusite se najprej povezati z omrežjem.</translation> +<translation id="9076821103818989526">Stransko podokno</translation> <translation id="9076977315710973122">Deljenje SMB</translation> <translation id="9078193189520575214">Uveljavljanje sprememb …</translation> <translation id="9078316009970372699">Onemogočanje takojšnje povezave računalnika z internetom prek mobilnega telefona</translation>
diff --git a/chrome/app/resources/generated_resources_sq.xtb b/chrome/app/resources/generated_resources_sq.xtb index 8dc5e11..1f65e75 100644 --- a/chrome/app/resources/generated_resources_sq.xtb +++ b/chrome/app/resources/generated_resources_sq.xtb
@@ -4219,7 +4219,6 @@ <translation id="5054374119096692193">Shiko të gjitha opsionet e kartave te <ph name="BEGIN_LINK" />Personalizimi i Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Lidhja me kontejnerin</translation> <translation id="5057110919553308744">Kur klikon te shtesa</translation> -<translation id="505776528429481161">Lidhu me lehtësi dhe konfiguro pajisjet në afërsi</translation> <translation id="5059241099014281248">Kufizo identifikimin</translation> <translation id="5059526285558225588">Zgjidh se çfarë do të ndash</translation> <translation id="5060332552815861872">Disponohet 1 printer për ruajtje.</translation>
diff --git a/chrome/app/resources/generated_resources_sr-Latn.xtb b/chrome/app/resources/generated_resources_sr-Latn.xtb index 2038f8e5..ffe923f 100644 --- a/chrome/app/resources/generated_resources_sr-Latn.xtb +++ b/chrome/app/resources/generated_resources_sr-Latn.xtb
@@ -354,6 +354,7 @@ <translation id="1340527397989195812">Napravite rezervnu kopiju medija sa uređaja pomoću aplikacije Datoteke.</translation> <translation id="1343865611738742294">Dajte Linux aplikacijama dozvolu da pristupaju USB uređajima. Linux neće zapamtiti USB uređaj kada ga uklonite.</translation> <translation id="1343920184519992513">Nastavite gde ste stali i otvorite određenu grupu stranica</translation> +<translation id="1344377983938103876">Otvara se <ph name="URL" />…</translation> <translation id="134589511016534552">Kartice za medije se takođe prikazuju u odeljku Otvorene kartice</translation> <translation id="1346630054604077329">Potvrdi i restartuj</translation> <translation id="1346748346194534595">Udesno</translation> @@ -1267,6 +1268,7 @@ <translation id="2180620921879609685">da blokira sadržaj na bilo kojoj stranici</translation> <translation id="2182058453334755893">Kopirano je u privremenu memoriju</translation> <translation id="2184515124301515068">Neka Chrome odabere kada sajtovi mogu da puste zvuk (preporučeno)</translation> +<translation id="2186206192313702726">Google objektiv</translation> <translation id="2186711480981247270">Stranica se deli sa drugog uređaja</translation> <translation id="2187675480456493911">Sinhronizovano je sa ostalim uređajima na nalogu. Podešavanja koja menjaju drugi korisnici se ne sinhronizuju. <ph name="LINK_BEGIN" />Saznajte više<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Greška pri uvozu serverskog sertifikata</translation> @@ -4227,7 +4229,6 @@ <translation id="5054374119096692193">Prikaži sve opcije kartica u meniju <ph name="BEGIN_LINK" />Prilagodite Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Povezuje se sa kontejnerom</translation> <translation id="5057110919553308744">Kada kliknete na dodatak</translation> -<translation id="505776528429481161">Lako se povežite i podesite uređaje u blizini</translation> <translation id="5059241099014281248">Ograničite prijavljivanje</translation> <translation id="5059526285558225588">Odaberite šta ćete deliti</translation> <translation id="5060332552815861872">Dostupan je 1 štampač za čuvanje.</translation> @@ -6955,6 +6956,7 @@ <translation id="7753735457098489144">Instaliranje nije uspelo zbog nedostatka memorijskog prostora. Da biste oslobodili prostor, izbrišite datoteke iz memorijskog prostora uređaja.</translation> <translation id="7754347746598978109">Nije im dozvoljeno da koriste JavaScript</translation> <translation id="7754704193130578113">Pitaj gde treba sačuvati svaku datoteku pre preuzimanja</translation> +<translation id="7755134875397410803">Da bi vam pomogao u obavljanju zadataka, Google će dobijati URL-ove i sadržaj sajtova na kojima koristite Pomoćnik, kao i informacije koje pošaljete preko Pomoćnika. Ove informacije mogu da se čuvaju na Google nalogu. Pomoćnik možete da isključite u podešavanjima Chrome-a. <ph name="LEARN_MORE" /></translation> <translation id="7755287808199759310">Roditelj može da ga odblokira za tebe</translation> <translation id="7757592200364144203">Promenite naziv uređaja</translation> <translation id="7757739382819740102">Kontakti u blizini mogu da dele sadržaj sa vama. To treba da odobrite.</translation>
diff --git a/chrome/app/resources/generated_resources_sr.xtb b/chrome/app/resources/generated_resources_sr.xtb index 7cf457b0..c78212e6 100644 --- a/chrome/app/resources/generated_resources_sr.xtb +++ b/chrome/app/resources/generated_resources_sr.xtb
@@ -354,6 +354,7 @@ <translation id="1340527397989195812">Направите резервну копију медија са уређаја помоћу апликације Датотеке.</translation> <translation id="1343865611738742294">Дајте Linux апликацијама дозволу да приступају USB уређајима. Linux неће запамтити USB уређај када га уклоните.</translation> <translation id="1343920184519992513">Наставите где сте стали и отворите одређену групу страница</translation> +<translation id="1344377983938103876">Отвара се <ph name="URL" />…</translation> <translation id="134589511016534552">Картице за медије се такође приказују у одељку Отворене картице</translation> <translation id="1346630054604077329">Потврди и рестартуј</translation> <translation id="1346748346194534595">Удесно</translation> @@ -1267,6 +1268,7 @@ <translation id="2180620921879609685">да блокира садржај на било којој страници</translation> <translation id="2182058453334755893">Копирано је у привремену меморију</translation> <translation id="2184515124301515068">Нека Chrome одабере када сајтови могу да пусте звук (препоручено)</translation> +<translation id="2186206192313702726">Google објектив</translation> <translation id="2186711480981247270">Страница се дели са другог уређаја</translation> <translation id="2187675480456493911">Синхронизовано је са осталим уређајима на налогу. Подешавања која мењају други корисници се не синхронизују. <ph name="LINK_BEGIN" />Сазнајте више<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Грешка при увозу серверског сертификата</translation> @@ -4227,7 +4229,6 @@ <translation id="5054374119096692193">Прикажи све опције картица у менију <ph name="BEGIN_LINK" />Прилагодите Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Повезује се са контејнером</translation> <translation id="5057110919553308744">Када кликнете на додатак</translation> -<translation id="505776528429481161">Лако се повежите и подесите уређаје у близини</translation> <translation id="5059241099014281248">Ограничите пријављивање</translation> <translation id="5059526285558225588">Одаберите шта ћете делити</translation> <translation id="5060332552815861872">Доступан је 1 штампач за чување.</translation> @@ -6955,6 +6956,7 @@ <translation id="7753735457098489144">Инсталирање није успело због недостатка меморијског простора. Да бисте ослободили простор, избришите датотеке из меморијског простора уређаја.</translation> <translation id="7754347746598978109">Није им дозвољено да користе JavaScript</translation> <translation id="7754704193130578113">Питај где треба сачувати сваку датотеку пре преузимања</translation> +<translation id="7755134875397410803">Да би вам помогао у обављању задатака, Google ће добијати URL-ове и садржај сајтова на којима користите Помоћник, као и информације које пошаљете преко Помоћника. Ове информације могу да се чувају на Google налогу. Помоћник можете да искључите у подешавањима Chrome-а. <ph name="LEARN_MORE" /></translation> <translation id="7755287808199759310">Родитељ може да га одблокира за тебе</translation> <translation id="7757592200364144203">Промените назив уређаја</translation> <translation id="7757739382819740102">Контакти у близини могу да деле садржај са вама. То треба да одобрите.</translation>
diff --git a/chrome/app/resources/generated_resources_sv.xtb b/chrome/app/resources/generated_resources_sv.xtb index b9d2d36d..7954424 100644 --- a/chrome/app/resources/generated_resources_sv.xtb +++ b/chrome/app/resources/generated_resources_sv.xtb
@@ -4238,7 +4238,6 @@ <translation id="5054374119096692193">Se alla kortalternativ i <ph name="BEGIN_LINK" />Anpassa Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Ansluter till behållaren</translation> <translation id="5057110919553308744">När du klickar på tillägget</translation> -<translation id="505776528429481161">Anslut och konfigurera enkelt enheter i närheten</translation> <translation id="5059241099014281248">Begränsa inloggning</translation> <translation id="5059526285558225588">Välj vad du vill dela</translation> <translation id="5060332552815861872">Det finns 1 skrivare att spara.</translation>
diff --git a/chrome/app/resources/generated_resources_sw.xtb b/chrome/app/resources/generated_resources_sw.xtb index ed8a45f..0657fc3 100644 --- a/chrome/app/resources/generated_resources_sw.xtb +++ b/chrome/app/resources/generated_resources_sw.xtb
@@ -4233,7 +4233,6 @@ <translation id="5054374119096692193">Angalia chaguo zote za kadi kwenye <ph name="BEGIN_LINK" />Weka Mapendeleo ya Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Inaunganisha kwenye metadata</translation> <translation id="5057110919553308744">Unapobofya kiendelezi</translation> -<translation id="505776528429481161">Unganisha na uweke mipangilio ya vifaa vilivyo karibu kwa urahisi</translation> <translation id="5059241099014281248">Kudhibiti hatua ya kuingia katika akaunti</translation> <translation id="5059526285558225588">Chagua unachotaka kushiriki</translation> <translation id="5060332552815861872">Kuna printa moja unayoweza kuhifadhi.</translation>
diff --git a/chrome/app/resources/generated_resources_ta.xtb b/chrome/app/resources/generated_resources_ta.xtb index 163beacc..2963d517 100644 --- a/chrome/app/resources/generated_resources_ta.xtb +++ b/chrome/app/resources/generated_resources_ta.xtb
@@ -1259,6 +1259,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">வைஃபை ஐச் சேர்...</translation> <translation id="2162155940152307086">நீங்கள் ஒத்திசைவு அமைப்புகளை விட்டு வெளியேறியவுடன் ஒத்திசைவு தொடங்கும்</translation> +<translation id="2162705204091149050">உங்கள் உலாவி, OS, சாதனம், நிறுவப்பட்டுள்ள மென்பொருள், ஃபைல்கள் ஆகியவற்றைப் பற்றிய தகவல்களைப் படிப்பது</translation> <translation id="2162926944953615670">eSIM சுயவிவரங்கள் கிடைக்கவில்லை</translation> <translation id="2163470535490402084">உங்கள் <ph name="DEVICE_TYPE" /> இல் உள்நுழைய இணையத்துடன் இணைக்கவும்.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" />, மேலும் 1 ஸ்விட்ச்</translation> @@ -2144,7 +2145,7 @@ <translation id="2966937470348689686">Android விருப்பத்தேர்வுகளை நிர்வகி</translation> <translation id="2967926928600500959">இந்த விதிகளுக்குப் பொருந்தும் URLகள் குறிப்பிட்ட உலாவியில் திறக்கப்படும்.</translation> <translation id="2972581237482394796">&மீண்டும் செய்</translation> -<translation id="2973324205039581528">தளத்தில் ஒலி இயக்கு</translation> +<translation id="2973324205039581528">தளத்தின் ஒலியை இயக்கு</translation> <translation id="2973537811036309675">பக்கவாட்டுப் பேனல்</translation> <translation id="2976557544729462544">சரியாக அல்லது முழுச் செயல்திறனுடன் செயல்பட இதை முடக்குமாறு சில சாதனங்கள் கோரும்.</translation> <translation id="2977480621796371840">குழுவிலிருந்து அகற்று</translation> @@ -2508,6 +2509,7 @@ <translation id="3359256513598016054">சான்றிதழ் கொள்கைக் கட்டுப்பாடுகள்</translation> <translation id="3360297538363969800">அச்சிடுவதில் தோல்வி. உங்கள் பிரிண்டரைச் சரிபார்த்து மீண்டும் முயற்சிக்கவும்.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> உங்களுடன் <ph name="ATTACHMENTS" /> ஐப் பகிர்கிறது.}other{<ph name="DEVICE_NAME" /> உங்களுடன் <ph name="ATTACHMENTS" /> ஐப் பகிர்கிறது.}}</translation> +<translation id="3363202073972776113">இந்தப் புதிய சுயவிவரத்தை உங்கள் நிறுவனம் நிர்வகிக்கும். <ph name="BEGIN_LINK" />மேலும் அறிக<ph name="END_LINK" /></translation> <translation id="3364986687961713424">உங்கள் நிர்வாகியிடமிருந்து: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">கன்ட்ரோல் அல்லது ஆல்ட் விசையைப் பயன்படுத்தவும்</translation> <translation id="3368922792935385530">இணைக்கப்பட்டது</translation> @@ -2542,6 +2544,7 @@ <translation id="339722927132407568">பிளே ஆகாமல் நிற்கிறது</translation> <translation id="3399432415385675819">அறிவிப்புகள் முடக்கப்படும்</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> ஹெர்ட்ஸ்) - பிணைக்கப்பட்டுள்ளது</translation> +<translation id="3401484564516348917">உங்கள் உலாவி, OS, சாதனம், நிறுவப்பட்டுள்ள மென்பொருள், ரெஜிஸ்ட்ரி மதிப்புகள், ஃபைல்கள் ஆகியவற்றைப் பற்றிய தகவல்களைப் படிப்பது</translation> <translation id="3402059702184703067">{COUNT,plural, =1{இந்தச் சாதனத்தில் {COUNT} கடவுச்சொல் சேமிக்கப்பட்டுள்ளது}other{இந்தச் சாதனத்தில் {COUNT} கடவுச்சொற்கள் சேமிக்கப்பட்டுள்ளன}}</translation> <translation id="3402255108239926910">தோற்றப்படத்தைத் தேர்வுசெய்யுங்கள்</translation> <translation id="3402585168444815892">டெமோ பயன்முறையில் பதிவுசெய்கிறது</translation> @@ -2788,6 +2791,7 @@ <translation id="3627879631695760395"><ph name="APP" />ஐ நிறுவு...</translation> <translation id="3628275722731025472">புளூடூத்தை முடக்குதல்</translation> <translation id="3629631988386925734">Smart Lockகை இயக்க, கடவுச்சொல்லை உள்ளிடவும். அடுத்த முறை <ph name="DEVICE_TYPE" />ஐ உங்கள் மொபைல் அன்லாக் ஆகும். அமைப்புகளில் Smart Lockகை முடக்கலாம்.</translation> +<translation id="3629664892718440872">இந்த விருப்பத்தை நினைவில்கொள்</translation> <translation id="3630132874740063857">உங்கள் ஃபோன்</translation> <translation id="3630995161997703415">இந்தத் தளத்தை எந்த நேரத்திலும் பயன்படுத்த அதனை உங்கள் ஷெல்ஃபில் சேர்க்கவும்</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />தானியங்கு அறிக்கைகளை அனுப்ப ChromeOS சாதனங்களை அனுமதிப்பது ChromeOSஸில் எதை முதலில் சரிசெய்ய வேண்டும், மேம்படுத்த வேண்டும் என்பதை நாங்கள் தீர்மானிக்க உதவுகிறது. ChromeOS எப்போது செயலிழந்தது, என்னென்ன அம்சங்களை நீங்கள் பயன்படுத்தினீர்கள், வழக்கமாக எவ்வளவு நினைவகத்தைப் பயன்படுத்துகிறீர்கள் போன்ற தகவல்கள் இந்த அறிக்கைகளில் இருக்கும்.<ph name="END_PARAGRAPH1" /> @@ -3277,6 +3281,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">MIDI சாதனங்களுக்கான முழுக் கட்டுப்பாட்டையும் பெறுவது மறுக்கப்பட்டது</translation> +<translation id="4087328411748538168">வலதுபுறம் காட்டு</translation> <translation id="4089235344645910861">அமைப்புகள் சேமிக்கப்பட்டன. ஒத்திசைவு தொடங்கியது.</translation> <translation id="4090103403438682346">சரிபார்க்கப்பட்ட அணுகலை இயக்கு</translation> <translation id="4090947011087001172"><ph name="SITE" />க்கான தள அனுமதிகளை மீட்டமைக்கவா?</translation> @@ -3970,6 +3975,7 @@ <translation id="4779766576531456629">eSIM மொபைல் நெட்வொர்க்கின் பெயரை மாற்றுதல்</translation> <translation id="4780321648949301421">பக்கத்தை இவ்வாறு சேமி...</translation> <translation id="4781443161433589743">Chromeமின் வலுவான பாதுகாப்பைப் பெற்றுள்ளீர்கள்</translation> +<translation id="4782861709165039462">சாதனங்களின் வன்பொருள் ஸ்விட்ச் மூலம் மைக்ரோஃபோன்கள் அனைத்தும் முடக்கப்பட்டுள்ளன</translation> <translation id="4785719467058219317">இந்த இணையதளத்தில் பதிவுசெய்யப்படாத பாதுகாப்பு விசையைப் பயன்படுத்துகிறீர்கள்</translation> <translation id="4785914069240823137">செதுக்கியதை ரத்துசெய்யும்</translation> <translation id="4788092183367008521">நெட்வொர்க் இணைப்பைச் சரிபார்த்து, மீண்டும் முயலவும்.</translation> @@ -4238,7 +4244,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />Chromeமைப் பிரத்தியேகமாக்கு<ph name="END_LINK" /> என்பதில் உள்ள அனைத்துக் கார்டுகளையும் பாருங்கள்</translation> <translation id="5056950756634735043">கண்டெய்னருடன் இணைக்கிறது</translation> <translation id="5057110919553308744">நீங்கள் நீட்டிப்பைக் கிளிக் செய்யும்போது</translation> -<translation id="505776528429481161">எளிதாக இணைத்து அருகிலுள்ள சாதனங்களை அமைக்கலாம்</translation> <translation id="5059241099014281248">உள்நுழைவைக் கட்டுப்படுத்துதல்</translation> <translation id="5059526285558225588">எதைப் பகிர்வது எனத் தேர்வுசெய்யுங்கள்</translation> <translation id="5060332552815861872">சேமிப்பதற்கு ஒரு பிரிண்டர் உள்ளது.</translation> @@ -4737,6 +4742,7 @@ <translation id="5548075230008247516">அனைத்தும் தேர்வுநீக்கப்பட்டன, தேர்வுப் பயன்முறையிலிருந்து வெளியேறிவிட்டீர்கள்</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" மேலும் ஒரு தாவல்}other{"<ph name="TAB_TITLE" />" மேலும் # தாவல்கள்}}</translation> <translation id="5548606607480005320">பாதுகாப்புச் சரிபார்ப்பு</translation> +<translation id="5548644592758170183">இடதுபுறம் காட்டு</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">கீபோர்டு மற்றும் உரை உள்ளீடு</translation> <translation id="5553089923092577885">சான்றிதழ் கொள்கை மேப்பிங்ஸ்</translation> @@ -8220,6 +8226,7 @@ <translation id="8980345560318123814">கருத்து அறிக்கைகள்</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - சிதைந்துவிட்டது</translation> <translation id="8981825781894055334">காகிதம் குறைவாக உள்ளது</translation> +<translation id="8983018820925880511">இந்தப் புதிய சுயவிவரத்தை <ph name="DOMAIN" /> நிர்வகிக்கும். <ph name="BEGIN_LINK" />மேலும் அறிக<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="FILENAME" /> ஃபைலை <ph name="ORIGIN" /> தளத்தால் திருத்த முடியும்</translation> <translation id="8984694057134206124">அருகிலுள்ள அனைவருக்கும் <ph name="MINUTES" /> நிமிடங்களுக்கு உங்கள் சாதனம் காட்டப்படும். <ph name="LINK_BEGIN" />மேலும் அறிக<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Chromebookகிற்கான Steam ஆப்ஸிற்கு வரவேற்கிறோம்</translation> @@ -8316,6 +8323,7 @@ <translation id="9075413375877487220">இந்த நீட்டிப்பை மேம்பட்ட பாதுகாப்பு உலாவல் நம்பவில்லை.</translation> <translation id="9076283476770535406">இதில் பெரியவர்களுக்கான உள்ளடக்கம் இருக்கக்கூடும்</translation> <translation id="9076523132036239772">மன்னிக்கவும், உங்கள் மின்னஞ்சல் அல்லது கடவுச்சொல்லைச் சரிபார்க்க முடியவில்லை. முதலில் நெட்வொர்க்குடன் இணைய முயலவும்.</translation> +<translation id="9076821103818989526">பக்கவாட்டுப் பேனல்</translation> <translation id="9076977315710973122">SMB பகிர்வு</translation> <translation id="9078193189520575214">மாற்றங்களைச் செயல்படுத்துகிறது...</translation> <translation id="9078316009970372699">உடனடி இணைப்பு முறையை முடக்கு</translation>
diff --git a/chrome/app/resources/generated_resources_te.xtb b/chrome/app/resources/generated_resources_te.xtb index f6d2c3a..32324672 100644 --- a/chrome/app/resources/generated_resources_te.xtb +++ b/chrome/app/resources/generated_resources_te.xtb
@@ -1258,6 +1258,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Wi-Fiని జోడించండి...</translation> <translation id="2162155940152307086">మీరు ఒకసారి సింక్ సెట్టింగ్ల పేజీని వదిలివెళ్లినప్పటి నుండి సింక్ ప్రారంభమవుతుంది</translation> +<translation id="2162705204091149050">మీ బ్రౌజర్, OS, పరికరం, ఇన్స్టాల్ చేసిన సాఫ్ట్వేర్, ఫైళ్ల గురించి సమాచారాన్ని చదవండి</translation> <translation id="2162926944953615670">eSIM ప్రొఫైల్స్ ఏవీ అందుబాటులో లేవు</translation> <translation id="2163470535490402084">మీ <ph name="DEVICE_TYPE" />కు సైన్ ఇన్ చేయడానికి దయచేసి ఇంటర్నెట్కు కనెక్ట్ చేయండి.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" />, మరో 1 స్విచ్</translation> @@ -2507,6 +2508,7 @@ <translation id="3359256513598016054">సర్టిఫికెట్ విధాన పరిమితులు</translation> <translation id="3360297538363969800">ముద్రణ విఫలమైంది. దయచేసి మీ ప్రింటర్ను తనిఖీ చేసి మళ్లీ ప్రయత్నించండి.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> మీతో <ph name="ATTACHMENTS" />ని షేర్ చేస్తోంది.}other{<ph name="DEVICE_NAME" /> మీతో <ph name="ATTACHMENTS" />ని షేర్ చేస్తోంది.}}</translation> +<translation id="3363202073972776113">ఈ కొత్త ప్రొఫైల్ను మీ సంస్థ మేనేజ్ చేస్తుంది. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation> <translation id="3364986687961713424">మీ నిర్వాహకుడి నుండి: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Ctrl లేదా Altను ఉపయోగించండి</translation> <translation id="3368922792935385530">కనెక్ట్ అయింది</translation> @@ -2541,6 +2543,7 @@ <translation id="339722927132407568">స్తంభనలు</translation> <translation id="3399432415385675819">నోటిఫికేషన్లు నిలిపివేయబడతాయి</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> హెర్జ్) - అంతర్గత అల్లిక చేయబడింది</translation> +<translation id="3401484564516348917">మీ బ్రౌజర్, OS, పరికరం, ఇన్స్టాల్ చేసిన సాఫ్ట్వేర్, రిజిస్ట్రీ విలువలు, ఫైళ్ల గురించి సమాచారాన్ని చదవండి</translation> <translation id="3402059702184703067">{COUNT,plural, =1{{COUNT} పాస్వర్డ్ ఈ పరికరంలో స్టోర్ అయ్యింది.}other{{COUNT} పాస్వర్డ్లు ఈ పరికరంలో స్టోర్ అయ్యాయి}}</translation> <translation id="3402255108239926910">ఒక అవతార్ను ఎంచుకోండి</translation> <translation id="3402585168444815892">డెమో మోడ్కు ఎన్రోల్ అవుతోంది</translation> @@ -2787,6 +2790,7 @@ <translation id="3627879631695760395"><ph name="APP" />ను ఇన్స్టాల్ చేయి...</translation> <translation id="3628275722731025472">బ్లూటూత్ను ఆపివేయండి</translation> <translation id="3629631988386925734">Smart Lockను ప్రారంభించడానికి మీ పాస్వర్డ్ను నమోదు చేయండి. తదుపరిసారి, మీ ఫోన్ మీ <ph name="DEVICE_TYPE" />ను అన్లాక్ చేస్తుంది. సెట్టింగ్లలో మీరు Smart Lockను ఆఫ్ చేయవచ్చు.</translation> +<translation id="3629664892718440872">ఈ ఎంపికను గుర్తుపెట్టుకోండి</translation> <translation id="3630132874740063857">మీ ఫోన్</translation> <translation id="3630995161997703415">ఈ సైట్ను ఏ సమయంలో అయినా ఉపయోగించడం కోసం దీనిని మీ 'అర'కు జోడించండి</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />ఆటోమేటిక్ రిపోర్ట్లను పంపడానికి మీ ChromeOS పరికరాలను అనుమతించడం ద్వారా, ChromeOSలో దేనిని ముందుగా పరిష్కరించి, మెరుగుపరచాలనే అంశం గురించి నిర్ణయం తీసుకోవడంలో మాకు సహాయపడుతుంది. ChromeOS ఎప్పుడు క్రాష్ అవుతుంది మీరు ఏ ఫీచర్లను ఉపయోగిస్తున్నారు, సాధారణంగా మీరు ఎంత మెమరీని ఉపయోగిస్తారు, వంటి అంశాలను ఈ రిపోర్ట్లు కలిగి ఉండవచ్చు.<ph name="END_PARAGRAPH1" /> @@ -3276,6 +3280,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">MIDI డివైజ్ల పూర్తి కంట్రోల్ తిరస్కరించబడింది</translation> +<translation id="4087328411748538168">కుడి వైపునకు చూడండి</translation> <translation id="4089235344645910861">సెట్టింగ్ సేవ్ చేయబడింది. సింక్ ప్రారంభించబడింది.</translation> <translation id="4090103403438682346">ధృవీకృత యాక్సెస్ను ప్రారంభించండి</translation> <translation id="4090947011087001172"><ph name="SITE" /> యొక్క సైట్ అనుమతులను రీసెట్ చేయాలా?</translation> @@ -3969,6 +3974,7 @@ <translation id="4779766576531456629">eSIM సెల్యులర్ నెట్వర్క్కు పేరుమార్చండి</translation> <translation id="4780321648949301421">ఇలా పేజీని సేవ్ చేయి...</translation> <translation id="4781443161433589743">మీరు అత్యంత సురక్షితమైన Chrome సెక్యూరిటీని కలిగి ఉన్నారు</translation> +<translation id="4782861709165039462">పరికరాల హార్డ్వేర్ స్విచ్ ద్వారా అన్ని మైక్రోఫోన్లు డిజేబుల్ చేయబడ్డాయి</translation> <translation id="4785719467058219317">మీరు ఈ వెబ్సైట్తో నమోదు కాని సెక్యూరిటీ కీని ఉపయోగిస్తున్నారు</translation> <translation id="4785914069240823137">కత్తిరింపును రద్దు చేయండి</translation> <translation id="4788092183367008521">దయచేసి మీ నెట్వర్క్ కనెక్షన్ను తనిఖీ చేసి, మళ్లీ ప్రయత్నించండి.</translation> @@ -4237,7 +4243,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />అనుకూలంగా మార్చిన Chromeలో<ph name="END_LINK" /> అన్ని కార్డ్ ఆప్షన్లను చూడండి</translation> <translation id="5056950756634735043">కంటైనర్కు కనెక్ట్ చేస్తోంది</translation> <translation id="5057110919553308744">మీరు ఎక్స్టెన్షన్ క్లిక్ చేసినప్పుడు</translation> -<translation id="505776528429481161">సమీపంలోని ఉన్న పరికరాలకు సులభంగా కనెక్ట్ అయి, వాటిని సెటప్ చేయండి</translation> <translation id="5059241099014281248">సైన్ ఇన్ను పరిమితం చేయండి</translation> <translation id="5059526285558225588">ఏమి షేర్ చేయాలో ఎంచుకోండి</translation> <translation id="5060332552815861872">సేవ్ చేయాల్సిన 1 ప్రింటర్ అందుబాటులో ఉంది.</translation> @@ -4736,6 +4741,7 @@ <translation id="5548075230008247516">అన్ని ఐటెమ్ల ఎంపిక రద్దు చేయబడింది, ఎంపిక మోడ్ నుండి నిష్క్రమించారు.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" ఇంకా 1 వేరే ట్యాబ్}other{"<ph name="TAB_TITLE" />" ఇంకా # వేరే ట్యాబ్లు}}</translation> <translation id="5548606607480005320">భద్రతా చెక్-అప్</translation> +<translation id="5548644592758170183">ఎడమ వైపునకు చూడండి</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">కీబోర్డ్ మరియు వచన ఇన్పుట్</translation> <translation id="5553089923092577885">సర్టిఫికెట్ విధాన మ్యాపింగ్లు</translation> @@ -8214,6 +8220,7 @@ <translation id="8980345560318123814">Feedback రిపోర్ట్లు</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - క్రాష్ అయ్యింది</translation> <translation id="8981825781894055334">పేపర్లు తక్కువగా ఉన్నాయి</translation> +<translation id="8983018820925880511">ఈ కొత్త ప్రొఫైల్ను <ph name="DOMAIN" /> మేనేజ్ చేస్తుంది. <ph name="BEGIN_LINK" />మరింత తెలుసుకోండి<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="FILENAME" />ను <ph name="ORIGIN" /> సవరించగలదు</translation> <translation id="8984694057134206124">మీరు <ph name="MINUTES" /> నిమిషాల పాటు ప్రతి ఒక్కరికి కనిపిస్తారు. <ph name="LINK_BEGIN" />మరింత తెలుసుకోండి<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Chromebook కోసం ఉద్దేశించిన Steamకు స్వాగతం</translation> @@ -8310,6 +8317,7 @@ <translation id="9075413375877487220">మెరుగైన సురక్షిత బ్రౌజింగ్ ద్వారా ఈ ఎక్స్టెన్షన్ విశ్వసించబడదు.</translation> <translation id="9076283476770535406">ఇందులో పెద్దలకు మాత్రమే తగిన కంటెంట్ ఉండవచ్చు</translation> <translation id="9076523132036239772">క్షమించండి, మీ ఈమెయిల్ లేదా పాస్వర్డ్ ధృవీకరించబడలేదు. మొదట నెట్వర్క్కి కనెక్ట్ చేయడానికి ప్రయత్నించండి.</translation> +<translation id="9076821103818989526">సైడ్ ప్యానెల్</translation> <translation id="9076977315710973122">SMB షేర్</translation> <translation id="9078193189520575214">మార్పులు వర్తించేలా చేయడం జరుగుతోంది...</translation> <translation id="9078316009970372699">తక్షణ టెథెరింగ్ డిజేబుల్ చేయడం</translation>
diff --git a/chrome/app/resources/generated_resources_th.xtb b/chrome/app/resources/generated_resources_th.xtb index 60e0ebd..ff7794d 100644 --- a/chrome/app/resources/generated_resources_th.xtb +++ b/chrome/app/resources/generated_resources_th.xtb
@@ -4229,7 +4229,6 @@ <translation id="5054374119096692193">ดูตัวเลือกการ์ดทั้งหมดใน<ph name="BEGIN_LINK" />ปรับแต่ง Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">กำลังเชื่อมต่อกับคอนเทนเนอร์</translation> <translation id="5057110919553308744">เมื่อคุณคลิกส่วนขยาย</translation> -<translation id="505776528429481161">เชื่อมต่อและตั้งค่าอุปกรณ์ที่อยู่ใกล้ๆ ได้โดยง่าย</translation> <translation id="5059241099014281248">จำกัดการลงชื่อเข้าใช้</translation> <translation id="5059526285558225588">เลือกสิ่งที่จะแชร์</translation> <translation id="5060332552815861872">มีเครื่องพิมพ์ 1 เครื่องให้บันทึก</translation>
diff --git a/chrome/app/resources/generated_resources_tr.xtb b/chrome/app/resources/generated_resources_tr.xtb index d1dffd1..412222e8e 100644 --- a/chrome/app/resources/generated_resources_tr.xtb +++ b/chrome/app/resources/generated_resources_tr.xtb
@@ -4219,7 +4219,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />Chrome'u Özelleştir<ph name="END_LINK" /> bölümündeki tüm kart seçeneklerini görün</translation> <translation id="5056950756634735043">Kapsayıcıya bağlanıyor</translation> <translation id="5057110919553308744">Uzantıyı tıkladığınızda</translation> -<translation id="505776528429481161">Yakındaki cihazlara kolayca bağlanıp bu cihazları kurun</translation> <translation id="5059241099014281248">Oturum açma özelliğini kısıtla</translation> <translation id="5059526285558225588">Neler paylaşacağınızı seçin</translation> <translation id="5060332552815861872">Kaydedilebilecek 1 yazıcı var.</translation>
diff --git a/chrome/app/resources/generated_resources_uk.xtb b/chrome/app/resources/generated_resources_uk.xtb index e96e344..011fb03 100644 --- a/chrome/app/resources/generated_resources_uk.xtb +++ b/chrome/app/resources/generated_resources_uk.xtb
@@ -4241,7 +4241,6 @@ <translation id="5054374119096692193">Перегляньте всі варіанти карток у розділі <ph name="BEGIN_LINK" />Налаштувати Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Підключення до контейнера</translation> <translation id="5057110919553308744">Коли ви натискаєте розширення</translation> -<translation id="505776528429481161">Легко підключайтеся до пристроїв поблизу та налаштовуйте їх</translation> <translation id="5059241099014281248">Обмежити вхід</translation> <translation id="5059526285558225588">Виберіть, що показувати</translation> <translation id="5060332552815861872">Можна зберегти 1 принтер.</translation>
diff --git a/chrome/app/resources/generated_resources_ur.xtb b/chrome/app/resources/generated_resources_ur.xtb index d67b28a6..83d25c2 100644 --- a/chrome/app/resources/generated_resources_ur.xtb +++ b/chrome/app/resources/generated_resources_ur.xtb
@@ -1248,6 +1248,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Wi-Fi شامل کریں…</translation> <translation id="2162155940152307086">آپ کی مطابقت پذیری کی ترتیبات کو چھوڑنے پر مطابقت پذیری شروع ہوگی</translation> +<translation id="2162705204091149050">اپنے براؤزر، OS، آلے، انسٹال کردہ سافٹ ویئر اور فائلز سے متعلق معلومات پڑھیں</translation> <translation id="2162926944953615670">کوئی eSIM پروفائل دستیاب نہیں ہے</translation> <translation id="2163470535490402084">براہ کرم اپنے <ph name="DEVICE_TYPE" /> میں سائن ان کرنے کیلئے انٹرنیٹ سے منسلک ہوں۔</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />، <ph name="SECOND_SWITCH" />، <ph name="THIRD_SWITCH" /> اور 1 مزید سوئچ</translation> @@ -2494,6 +2495,7 @@ <translation id="3359256513598016054">سرٹیفکیٹ کی پالیسی کی پابندیاں</translation> <translation id="3360297538363969800">پرنٹنگ ناکام ہو گئی۔ براہ کرم اپنا کمپیوٹر چیک کریں اور دوبارہ کوشش کریں۔</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> آپ کے ساتھ <ph name="ATTACHMENTS" /> کا اشتراک کر رہا ہے۔}other{<ph name="DEVICE_NAME" /> آپ کے ساتھ <ph name="ATTACHMENTS" /> کا اشتراک کر رہا ہے۔}}</translation> +<translation id="3363202073972776113">آپ کی تنظیم اس نئی پروفائل کا نظم کرے گی۔ <ph name="BEGIN_LINK" />مزید جانیں<ph name="END_LINK" /></translation> <translation id="3364986687961713424">آپ کے منتظم کی جانب سے: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Ctrl یا Alt کا استعمال کریں</translation> <translation id="3368922792935385530">منسلک</translation> @@ -2528,6 +2530,7 @@ <translation id="339722927132407568">منجمد ہو جاتی ہے</translation> <translation id="3399432415385675819">معلومات غیر فعال ہو جائیں گي</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> ہرٹز) - باہم پیچاں</translation> +<translation id="3401484564516348917">اپنے براؤزر، OS، آلے، انسٹال کردہ سافٹ ویئر، رجسٹری ویلیوز اور فائلز سے متعلق معلومات پڑھیں</translation> <translation id="3402059702184703067">{COUNT,plural, =1{{COUNT} پاس ورڈ اس آلے پر اسٹور ہے}other{{COUNT} پاس ورڈز اس آلے پر اسٹور ہیں}}</translation> <translation id="3402255108239926910">ایک اوتار منتخب کریں</translation> <translation id="3402585168444815892">ڈیمو موڈ میں اندراج کیا جا رہا ہے</translation> @@ -2774,6 +2777,7 @@ <translation id="3627879631695760395"><ph name="APP" /> انسٹال کریں...</translation> <translation id="3628275722731025472">بلوٹوتھ آف کریں</translation> <translation id="3629631988386925734">Smart Lock کو فعال کرنے کے لیے اپنا پاس ورڈ درج کریں۔ اگلی بار آپ کے فون سے آپ کا <ph name="DEVICE_TYPE" /> غیر مقفل ہوگا۔ آپ ترتیبات میں Smart Lock کو آف کر سکتے ہیں۔</translation> +<translation id="3629664892718440872">یہ انتخاب یاد رکھیں</translation> <translation id="3630132874740063857">آپ کا فون</translation> <translation id="3630995161997703415">اس سائٹ کو کسی بھی وقت استعمال کرنے کیلئے، اسے اپنی شیلف میں شامل کریں</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />آپ کے ChromeOS آلات کو خودکار رپورٹس بھیجنے کی اجازت دینے سے ہمیں یہ ترجیح دینے میں مدد ملتی ہے کہ ChromeOS میں کیا درست اور بہتر کرنا ہے۔ ان رپورٹس میں ایسی چیزیں شامل ہو سکتی ہیں جیسے ChromeOS کے کریش ہونے پر، آپ کون سی خصوصیات استعمال کرتے ہیں اور آپ عام طور پر کتنی میموری استعمال کرتے ہیں۔<ph name="END_PARAGRAPH1" /> @@ -3263,6 +3267,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">MIDI آلات کے مکمل کنٹرول کو مسترد کر دیا گیا</translation> +<translation id="4087328411748538168">دائیں طرف دکھائیں</translation> <translation id="4089235344645910861">ترتیبات محفوظ ہو گئیں۔ مطابقت پذیری شروع ہو گئی۔</translation> <translation id="4090103403438682346">توثیق شدہ رسائی فعال کریں</translation> <translation id="4090947011087001172"><ph name="SITE" /> کیلئے سائٹ کی اجازتیں دوبارہ ترتیب دیں؟</translation> @@ -3955,6 +3960,7 @@ <translation id="4779766576531456629">eSIM سیلولر نیٹ ورک کا نام تبدیل کریں</translation> <translation id="4780321648949301421">صفحہ محفوظ کریں بطور…</translation> <translation id="4781443161433589743">آپ Chrome کی مضبوط ترین سیکیورٹی پر ہیں</translation> +<translation id="4782861709165039462">آلات کے ہارڈویئر سوئچ کے ذریعے تمام مائیکروفونز غیر فعال کر دیے گئے</translation> <translation id="4785719467058219317">آپ اس سیکیورٹی کلید کا استعمال کر رہے ہیں جو اس ویب سائٹ کے ساتھ رجسٹرڈ نہیں ہے</translation> <translation id="4785914069240823137">کراپ کو منسوخ کریں</translation> <translation id="4788092183367008521">براہ کرم اپنا نیٹ ورک کنکشن چیک کریں اور دوبارہ کوشش کریں۔</translation> @@ -4223,7 +4229,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />حسب ضرورت Chrome<ph name="END_LINK" /> میں کارڈ کے تمام اختیارات دیکھیں</translation> <translation id="5056950756634735043">کنٹینر سے منسلک ہو رہا ہے</translation> <translation id="5057110919553308744">جب آپ ایکسٹینشن پر کلک کرتے ہیں</translation> -<translation id="505776528429481161">آسانی سے قریبی آلات سے منسلک ہوں اور سیٹ اپ کریں</translation> <translation id="5059241099014281248">سائن ان کو محدود کریں</translation> <translation id="5059526285558225588">منتخب کریں کہ کیا اشتراک کرنا ہے</translation> <translation id="5060332552815861872">محفوظ کرنے کے لیے 1 پرنٹر دستیاب ہے۔</translation> @@ -4721,6 +4726,7 @@ <translation id="5548075230008247516">سبھی آئٹمز غیر منتخب ہو گئے، انتخاب موڈ سے باہر نکل گئے۔</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" اور 1 دوسرا ٹیب}other{"<ph name="TAB_TITLE" />" اور # دیگر ٹیبز}}</translation> <translation id="5548606607480005320">سیفٹی چیک</translation> +<translation id="5548644592758170183">بائیں طرف دکھائیں</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">کی بورڈ اور ٹیکسٹ اِن پٹ</translation> <translation id="5553089923092577885">سرٹیفیکیٹ پالیسی کی نقشہ سازیاں</translation> @@ -8201,6 +8207,7 @@ <translation id="8980345560318123814">تاثرات کی رپورٹس</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - کریش ہو گیا</translation> <translation id="8981825781894055334">کاغذ کم ہے</translation> +<translation id="8983018820925880511">یہ نئی پروفائل <ph name="DOMAIN" /> کے زیر انتطام ہو گی۔ <ph name="BEGIN_LINK" />مزید جانیں<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> <ph name="FILENAME" /> میں ترمیم کر سکتا ہے</translation> <translation id="8984694057134206124">آپ ہر ایک کو <ph name="MINUTES" /> منٹ کیلئے مرئی ہوں گے۔ <ph name="LINK_BEGIN" />مزید جانیں<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Steam برائے Chromebook میں خوش آمدید</translation> @@ -8297,6 +8304,7 @@ <translation id="9075413375877487220">بہتر کردہ محفوظ براؤزنگ کے مطابق یہ ایکسٹینشن بھروسہ مند نہیں ہے۔</translation> <translation id="9076283476770535406">اس میں بالغوں کیلئے مواد شامل ہو سکتا ہے</translation> <translation id="9076523132036239772">معذرت، آپ کے ای میل یا پاس ورڈ کی توثیق نہیں کی جا سکی۔ پہلے ایک نیٹ ورک سے منسلک ہونے کی کوشش کریں۔</translation> +<translation id="9076821103818989526">سائیڈ پینل</translation> <translation id="9076977315710973122">SMB کا اشتراک</translation> <translation id="9078193189520575214">تبدیلیاں لاگو کی جا رہی ہیں…</translation> <translation id="9078316009970372699">فوری ٹیدرنگ غیر فعال کریں</translation>
diff --git a/chrome/app/resources/generated_resources_uz.xtb b/chrome/app/resources/generated_resources_uz.xtb index 2db6611a..3519b48f 100644 --- a/chrome/app/resources/generated_resources_uz.xtb +++ b/chrome/app/resources/generated_resources_uz.xtb
@@ -352,6 +352,7 @@ <translation id="1340527397989195812">Fayllar ilovasi yordamida qurilmadagi mediani zaxiralang.</translation> <translation id="1343865611738742294">Linux ilovalar uchun USB qurilmalarga ruxsat berish. USB qurilma olinganidan keyin Linux uni eslab qolmaydi.</translation> <translation id="1343920184519992513">Qolgan joyingizdan davom eting va maxsus sahifalar jamlanmasini oching</translation> +<translation id="1344377983938103876"><ph name="URL" /> ochilmoqda...</translation> <translation id="134589511016534552">Media varaqlar ham Ochiq varaqlar bandida chiqadi</translation> <translation id="1346630054604077329">Tasdiqlang va oʻchirib yoqing</translation> <translation id="1346748346194534595">O‘ngga</translation> @@ -4232,7 +4233,6 @@ <translation id="5054374119096692193"><ph name="BEGIN_LINK" />Chromeni moslash<ph name="END_LINK" /> sahifasidagi barcha kartochka sozlamalarini ochish</translation> <translation id="5056950756634735043">Konteynerga ulanmoqda</translation> <translation id="5057110919553308744">Kengaytma bosilganda</translation> -<translation id="505776528429481161">Yaqin-atrofdagi qurilmalarga oson ulanish va ularni sozlash</translation> <translation id="5059241099014281248">Kirishni taqiqlash</translation> <translation id="5059526285558225588">Nimani ulashishni tanlang</translation> <translation id="5060332552815861872">Saqlash uchun 1 ta printer topildi.</translation> @@ -6956,6 +6956,7 @@ <translation id="7753735457098489144">Oʻrnatish uchun xotirada joy yetarli emas. Joy ochish uchun qurilma xotirasidan fayllarni oʻchiring.</translation> <translation id="7754347746598978109">JavaScript ishlatishga ruxsat berilmagan</translation> <translation id="7754704193130578113">Har bir faylni yuklashdan oldin qayerga saqlash so‘ralsin</translation> +<translation id="7755134875397410803">Google internetda ishlashingizni osonlashtirish uchun Assistent orqali kirilgan saytlarning URL manzillari va kontentlarini, shuningdek, soʻrovlarni ham oladi. Bu axborot Google hisobingizga saqlanishi mumkin. Chrome sozlamalari ichidan Assistentni faolsizlantirishingiz mumkin. <ph name="LEARN_MORE" /></translation> <translation id="7755287808199759310">Ota-onangiz tasdiqlashi mumkin</translation> <translation id="7757592200364144203">Qurilma nomini almashtirish</translation> <translation id="7757739382819740102">Yaqin-atrofdagi kontaktlar sizga fayl yuborishi mumkin. Ruxsat berish talab qilinadi.</translation>
diff --git a/chrome/app/resources/generated_resources_vi.xtb b/chrome/app/resources/generated_resources_vi.xtb index dc44c916..af6d52c 100644 --- a/chrome/app/resources/generated_resources_vi.xtb +++ b/chrome/app/resources/generated_resources_vi.xtb
@@ -1259,6 +1259,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">Thêm Wi-Fi...</translation> <translation id="2162155940152307086">Quá trình đồng bộ hóa sẽ bắt đầu sau khi bạn thoát khỏi trang cài đặt đồng bộ hóa</translation> +<translation id="2162705204091149050">Đọc thông tin về trình duyệt, hệ điều hành, thiết bị, phần mềm đã cài đặt và tệp</translation> <translation id="2162926944953615670">Không có hồ sơ eSIM nào</translation> <translation id="2163470535490402084">Vui lòng kết nối Internet để đăng nhập vào <ph name="DEVICE_TYPE" /> của bạn.</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />, <ph name="SECOND_SWITCH" />, <ph name="THIRD_SWITCH" /> và 1 công tắc khác</translation> @@ -1279,6 +1280,7 @@ <translation id="2180620921879609685">Chặn nội dung trên bất kỳ trang nào</translation> <translation id="2182058453334755893">Đã sao chép vào bảng nhớ tạm</translation> <translation id="2184515124301515068">Cho phép Chrome chọn thời điểm trang web có thể phát âm thanh (khuyên dùng)</translation> +<translation id="2186206192313702726">Google Ống kính</translation> <translation id="2186711480981247270">Trang được chia sẻ từ một thiết bị khác</translation> <translation id="2187675480456493911">Đã đồng bộ hóa với các thiết bị khác trên tài khoản của bạn. Các tùy chọn cài đặt do những người dùng khác sửa đổi sẽ không được đồng bộ hóa. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Lỗi nhập chứng chỉ máy chủ</translation> @@ -2508,6 +2510,7 @@ <translation id="3359256513598016054">Giới hạn Chính sách của Chứng chỉ</translation> <translation id="3360297538363969800">Không in được. Vui lòng kiểm tra máy in và thử lại.</translation> <translation id="3361421571228286637">{COUNT,plural, =1{<ph name="DEVICE_NAME" /> đang chia sẻ <ph name="ATTACHMENTS" /> với bạn.}other{<ph name="DEVICE_NAME" /> đang chia sẻ <ph name="ATTACHMENTS" /> với bạn.}}</translation> +<translation id="3363202073972776113">Hồ sơ mới này sẽ do tổ chức của bạn quản lý. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation> <translation id="3364986687961713424">Thông báo của quản trị viên: <ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">Sử dụng phím Ctrl hoặc Alt</translation> <translation id="3368922792935385530">Đã kết nối</translation> @@ -2542,6 +2545,7 @@ <translation id="339722927132407568">Dừng hình</translation> <translation id="3399432415385675819">Thông báo sẽ bị tắt</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Hertz) - đan xen</translation> +<translation id="3401484564516348917">Đọc thông tin về trình duyệt, hệ điều hành, thiết bị, phần mềm đã cài đặt, giá trị trong sổ đăng ký và tệp</translation> <translation id="3402059702184703067">{COUNT,plural, =1{{COUNT} mật khẩu được lưu trữ trên thiết bị này}other{{COUNT} mật khẩu được lưu trữ trên thiết bị này}}</translation> <translation id="3402255108239926910">Chọn một hình đại diện</translation> <translation id="3402585168444815892">Đang đăng ký chế độ minh họa</translation> @@ -2788,6 +2792,7 @@ <translation id="3627879631695760395">Cài đặt <ph name="APP" />...</translation> <translation id="3628275722731025472">Tắt Bluetooth</translation> <translation id="3629631988386925734">Nhập mật khẩu để bật tính năng Smart Lock. Vào lần tới, điện thoại của bạn sẽ mở khóa <ph name="DEVICE_TYPE" />. Bạn có thể tắt tính năng Smart Lock trong phần Cài đặt.</translation> +<translation id="3629664892718440872">Nhớ lựa chọn này</translation> <translation id="3630132874740063857">Điện thoại</translation> <translation id="3630995161997703415">Thêm trang web này vào giá của bạn để sử dụng bất cứ lúc nào</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />Việc bạn cho phép các thiết bị Chrome OS gửi báo cáo tự động sẽ giúp chúng tôi sắp xếp thứ tự ưu tiên cho những vấn đề cần khắc phục và cải thiện trong Chrome OS. Các báo cáo này có thể bao gồm những nội dung như thời điểm Chrome OS gặp sự cố, danh sách tính năng bạn sử dụng và mức bộ nhớ bạn thường sử dụng.<ph name="END_PARAGRAPH1" /> @@ -3277,6 +3282,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">Đã từ chối cấp toàn quyền kiểm soát các thiết bị MIDI</translation> +<translation id="4087328411748538168">Hiển thị bên phải</translation> <translation id="4089235344645910861">Đã lưu chế độ cài đặt. Đã bắt đầu đồng bộ hóa.</translation> <translation id="4090103403438682346">Bật quyền truy cập đã xác minh</translation> <translation id="4090947011087001172">Đặt lại quyền của trang web cho <ph name="SITE" />?</translation> @@ -3970,6 +3976,7 @@ <translation id="4779766576531456629">Đổi tên mạng di động của eSIM</translation> <translation id="4780321648949301421">Lưu trang làm...</translation> <translation id="4781443161433589743">Bạn đang dùng chế độ bảo mật mạnh nhất của Chrome</translation> +<translation id="4782861709165039462">Tất cả micrô đều bị tắt bằng công tắc phần cứng của thiết bị</translation> <translation id="4785719467058219317">Bạn đang sử dụng một khóa bảo mật chưa đăng ký với trang web này</translation> <translation id="4785914069240823137">Huỷ cắt</translation> <translation id="4788092183367008521">Vui lòng kiểm tra kết nối mạng và thử lại.</translation> @@ -4238,7 +4245,6 @@ <translation id="5054374119096692193">Xem tất cả tuỳ chọn về thẻ trong phần <ph name="BEGIN_LINK" />Tuỳ chỉnh Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Đang kết nối với vùng chứa</translation> <translation id="5057110919553308744">Khi bạn nhấp vào tiện ích</translation> -<translation id="505776528429481161">Dễ dàng kết nối và thiết lập các thiết bị ở gần</translation> <translation id="5059241099014281248">Hạn chế khả năng đăng nhập</translation> <translation id="5059526285558225588">Chọn nội dung bạn muốn chia sẻ</translation> <translation id="5060332552815861872">Hiện có 1 máy in để bạn lưu.</translation> @@ -4737,6 +4743,7 @@ <translation id="5548075230008247516">Đã bỏ đánh dấu tất cả mục và thoát khỏi chế độ chọn.</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{"<ph name="TAB_TITLE" />"}=1{"<ph name="TAB_TITLE" />" và 1 tab khác}other{"<ph name="TAB_TITLE" />" và # tab khác}}</translation> <translation id="5548606607480005320">Kiểm tra an toàn</translation> +<translation id="5548644592758170183">Hiển thị bên trái</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">Bàn phím và phương thức nhập văn bản</translation> <translation id="5553089923092577885">Ánh xạ Chính sách của Chứng chỉ</translation> @@ -8219,6 +8226,7 @@ <translation id="8980345560318123814">Báo cáo phản hồi</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - Đã bị lỗi</translation> <translation id="8981825781894055334">Sắp hết giấy</translation> +<translation id="8983018820925880511">Hồ sơ mới này sẽ do <ph name="DOMAIN" /> quản lý. <ph name="BEGIN_LINK" />Tìm hiểu thêm<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> có thể chỉnh sửa <ph name="FILENAME" /></translation> <translation id="8984694057134206124">Tất cả mọi người sẽ nhìn thấy bạn trong <ph name="MINUTES" /> phút. <ph name="LINK_BEGIN" />Tìm hiểu thêm<ph name="LINK_END" /></translation> <translation id="8985191021574400965">Chào mừng bạn đến với Steam dành cho Chromebook</translation> @@ -8315,6 +8323,7 @@ <translation id="9075413375877487220">Tiện ích này không được tính năng Duyệt web an toàn có tăng cường bảo vệ tin cậy.</translation> <translation id="9076283476770535406">Trang web có thể có nội dung người lớn</translation> <translation id="9076523132036239772">Rất tiếc, email hoặc mật khẩu của bạn không thể xác minh được. Trước tiên hãy thử kết nối với một mạng.</translation> +<translation id="9076821103818989526">Bảng điều khiển bên</translation> <translation id="9076977315710973122">Chia sẻ qua SMB</translation> <translation id="9078193189520575214">Đang áp dụng các thay đổi...</translation> <translation id="9078316009970372699">Tắt tính năng Chia sẻ Internet tức thì</translation>
diff --git a/chrome/app/resources/generated_resources_zh-CN.xtb b/chrome/app/resources/generated_resources_zh-CN.xtb index d51fdfa..0dcf5e7 100644 --- a/chrome/app/resources/generated_resources_zh-CN.xtb +++ b/chrome/app/resources/generated_resources_zh-CN.xtb
@@ -1240,6 +1240,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">添加 Wi-Fi...</translation> <translation id="2162155940152307086">一旦您离开同步设置页面,同步功能就会启动</translation> +<translation id="2162705204091149050">读取您的浏览器、操作系统、设备、已安装软件和文件的相关信息</translation> <translation id="2162926944953615670">无可用的 eSIM 卡配置文件</translation> <translation id="2163470535490402084">请连接到互联网,以便登录您的<ph name="DEVICE_TYPE" />。</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />、<ph name="SECOND_SWITCH" />、<ph name="THIRD_SWITCH" /> 和另外 1 个开关键</translation> @@ -2485,6 +2486,7 @@ <translation id="3359256513598016054">证书政策约束</translation> <translation id="3360297538363969800">打印失败。请检查您的打印机,然后重试。</translation> <translation id="3361421571228286637">{COUNT,plural, =1{“<ph name="DEVICE_NAME" />”与您分享了 <ph name="ATTACHMENTS" />。}other{“<ph name="DEVICE_NAME" />”与您分享了 <ph name="ATTACHMENTS" />。}}</translation> +<translation id="3363202073972776113">这份新个人资料将由贵组织管理。<ph name="BEGIN_LINK" />了解详情<ph name="END_LINK" /></translation> <translation id="3364986687961713424">来自您的管理员:<ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">使用 Ctrl 键或 Alt 键</translation> <translation id="3368922792935385530">已连接</translation> @@ -2519,6 +2521,7 @@ <translation id="339722927132407568">卡顿</translation> <translation id="3399432415385675819">通知将被停用</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" />(<ph name="REFRESH_RATE" /> 赫兹) - 交错</translation> +<translation id="3401484564516348917">读取您的浏览器、操作系统、设备、已安装软件、注册表值和文件的相关信息</translation> <translation id="3402059702184703067">{COUNT,plural, =1{此设备上存储了 {COUNT} 个密码}other{此设备上存储了 {COUNT} 个密码}}</translation> <translation id="3402255108239926910">选择头像</translation> <translation id="3402585168444815892">正在注册演示模式</translation> @@ -2765,6 +2768,7 @@ <translation id="3627879631695760395">安装“<ph name="APP" />”…</translation> <translation id="3628275722731025472">关闭蓝牙</translation> <translation id="3629631988386925734">请输入您的密码,以启用 Smart Lock。下次,您只需使用手机就能解锁您的 <ph name="DEVICE_TYPE" /> 了。您可在“设置”中关闭 Smart Lock。</translation> +<translation id="3629664892718440872">记住此选择</translation> <translation id="3630132874740063857">您的手机</translation> <translation id="3630995161997703415">请将此网站添加到您的任务栏中,以便随时使用</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />允许 Chrome 操作系统设备自动发送报告,可以帮助我们确定 Chrome 操作系统中需要优先解决的问题和优先改进的方面。这些报告可能包含的内容有:Chrome 操作系统的崩溃时间、使用的功能、通常占用的内存量,等等。<ph name="END_PARAGRAPH1" /> @@ -3253,6 +3257,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">已禁止全面控制 MIDI 设备</translation> +<translation id="4087328411748538168">显示在右侧</translation> <translation id="4089235344645910861">设置已保存。已开始同步。</translation> <translation id="4090103403438682346">允许已通过验证的访问凭证</translation> <translation id="4090947011087001172">要重置 <ph name="SITE" /> 的网站权限吗?</translation> @@ -3943,6 +3948,7 @@ <translation id="4779766576531456629">重命名 eSIM 卡移动网络</translation> <translation id="4780321648949301421">页面存储为...</translation> <translation id="4781443161433589743">您正在享受 Chrome 的最强安全保护</translation> +<translation id="4782861709165039462">所有麦克风都已被设备硬件开关停用</translation> <translation id="4785719467058219317">您使用的安全密钥尚未在此网站注册</translation> <translation id="4785914069240823137">取消剪裁</translation> <translation id="4788092183367008521">请检查您的网络连接,然后重试。</translation> @@ -4211,7 +4217,6 @@ <translation id="5054374119096692193">在<ph name="BEGIN_LINK" />自定义 Chrome<ph name="END_LINK" /> 部分中查看所有卡片选项</translation> <translation id="5056950756634735043">正在连接到容器</translation> <translation id="5057110919553308744">当您点击此扩展程序时</translation> -<translation id="505776528429481161">轻松连接并设置附近的设备</translation> <translation id="5059241099014281248">限制登录</translation> <translation id="5059526285558225588">选择要分享什么</translation> <translation id="5060332552815861872">有 1 台可保存的打印机。</translation> @@ -4710,6 +4715,7 @@ <translation id="5548075230008247516">已取消选择所有内容,已退出选择模式。</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{“<ph name="TAB_TITLE" />”}=1{“<ph name="TAB_TITLE" />”和另外 1 个标签页}other{“<ph name="TAB_TITLE" />”和另外 # 个标签页}}</translation> <translation id="5548606607480005320">安全检查</translation> +<translation id="5548644592758170183">显示在左侧</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">键盘和文字输入</translation> <translation id="5553089923092577885">证书政策映射</translation> @@ -8188,6 +8194,7 @@ <translation id="8980345560318123814">反馈报告</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - 已崩溃</translation> <translation id="8981825781894055334">纸张不足</translation> +<translation id="8983018820925880511">这份新个人资料将由 <ph name="DOMAIN" /> 管理。<ph name="BEGIN_LINK" />了解详情<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> 可修改 <ph name="FILENAME" /></translation> <translation id="8984694057134206124">您的设备将会对所有人可见,时长为 <ph name="MINUTES" /> 分钟。<ph name="LINK_BEGIN" />了解详情<ph name="LINK_END" /></translation> <translation id="8985191021574400965">欢迎使用 Chromebook 版 Steam</translation> @@ -8284,6 +8291,7 @@ <translation id="9075413375877487220">增强型安全浏览功能不信任此扩展程序。</translation> <translation id="9076283476770535406">此网站可能包含成人内容</translation> <translation id="9076523132036239772">抱歉,您的电子邮件地址或密码无法进行验证。请先尝试连接到网络。</translation> +<translation id="9076821103818989526">侧边栏</translation> <translation id="9076977315710973122">SMB 共享</translation> <translation id="9078193189520575214">正在应用更改…</translation> <translation id="9078316009970372699">停用“即时网络共享”</translation>
diff --git a/chrome/app/resources/generated_resources_zh-HK.xtb b/chrome/app/resources/generated_resources_zh-HK.xtb index 593133d..b5494cc 100644 --- a/chrome/app/resources/generated_resources_zh-HK.xtb +++ b/chrome/app/resources/generated_resources_zh-HK.xtb
@@ -1259,6 +1259,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">新增 Wi-Fi…</translation> <translation id="2162155940152307086">當您離開同步處理設定頁面後,系統就會啟用同步處理功能</translation> +<translation id="2162705204091149050">讀取瀏覽器、OS、裝置、已安裝的軟體和檔案的相關資訊</translation> <translation id="2162926944953615670">沒有可用的 eSIM 卡設定檔</translation> <translation id="2163470535490402084">請連接互聯網,才能登入 <ph name="DEVICE_TYPE" />。</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />、<ph name="SECOND_SWITCH" />、<ph name="THIRD_SWITCH" /> 和另外 1 個按鈕裝置</translation> @@ -2509,6 +2510,7 @@ <translation id="3359256513598016054">憑證政策限制</translation> <translation id="3360297538363969800">列印失敗。請檢查您的打印機,然後再試一次。</translation> <translation id="3361421571228286637">{COUNT,plural, =1{「<ph name="DEVICE_NAME" />」現在與您分享 <ph name="ATTACHMENTS" />。}other{「<ph name="DEVICE_NAME" />」現在與您分享 <ph name="ATTACHMENTS" />。}}</translation> +<translation id="3363202073972776113">這個新的設定檔將由貴機構管理。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation> <translation id="3364986687961713424">來自管理員的訊息:<ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">使用 Ctrl 或 Alt 鍵</translation> <translation id="3368922792935385530">已連線</translation> @@ -2543,6 +2545,7 @@ <translation id="339722927132407568">畫面凍結</translation> <translation id="3399432415385675819">通知將會停用</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> Hz) - 交錯顯示</translation> +<translation id="3401484564516348917">讀取瀏覽器、OS、裝置、已安裝的軟體、登錄值和檔案的相關資訊</translation> <translation id="3402059702184703067">{COUNT,plural, =1{此裝置已儲存 {COUNT} 個密碼}other{此裝置已儲存 {COUNT} 個密碼}}</translation> <translation id="3402255108239926910">選擇顯示圖片</translation> <translation id="3402585168444815892">註冊示範模式</translation> @@ -2789,6 +2792,7 @@ <translation id="3627879631695760395">安裝 <ph name="APP" />…</translation> <translation id="3628275722731025472">關閉藍牙功能</translation> <translation id="3629631988386925734">輸入密碼即可啟用 Smart Lock。下次您便可使用手機來解鎖 <ph name="DEVICE_TYPE" />。您可在「設定」中停用 Smart Lock。</translation> +<translation id="3629664892718440872">記住這個選擇</translation> <translation id="3630132874740063857">您的手機</translation> <translation id="3630995161997703415">將此網站加到捷徑列,即可隨時使用</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />允許 Chrome OS 裝置自動傳送報告,可協助我們為 Chrome OS 規劃要優先修正及改善的項目。這些報告可能包括 Chrome OS 當機時間、您所使用的功能,以及記憶體一般使用量。<ph name="END_PARAGRAPH1" /> @@ -3278,6 +3282,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">已禁止全權控制 MIDI 裝置</translation> +<translation id="4087328411748538168">顯示在右側</translation> <translation id="4089235344645910861">設定已儲存。已開始同步。</translation> <translation id="4090103403438682346">啟用已驗證存取權</translation> <translation id="4090947011087001172">要重設 <ph name="SITE" /> 的網站權限嗎?</translation> @@ -3971,6 +3976,7 @@ <translation id="4779766576531456629">重新命名 eSIM 卡的流動網絡</translation> <translation id="4780321648949301421">另存網頁…</translation> <translation id="4781443161433589743">您已啟用 Chrome 最強大的安全防護功能</translation> +<translation id="4782861709165039462">裝置硬體切換按鈕已停用所有的麥克風</translation> <translation id="4785719467058219317">您目前使用的安全密鑰並未在此網站註冊</translation> <translation id="4785914069240823137">取消裁剪</translation> <translation id="4788092183367008521">請檢查你的網絡連線,然後再試一次。</translation> @@ -4239,7 +4245,6 @@ <translation id="5054374119096692193">在「<ph name="BEGIN_LINK" />自訂 Chrome<ph name="END_LINK" />」中查看所有資訊卡選項</translation> <translation id="5056950756634735043">正在連線至容器</translation> <translation id="5057110919553308744">當您點擊擴充程式時</translation> -<translation id="505776528429481161">輕鬆連接和設定附近的裝置</translation> <translation id="5059241099014281248">限制登入</translation> <translation id="5059526285558225588">選擇分享內容</translation> <translation id="5060332552815861872">有 1 部可以儲存嘅打印機。</translation> @@ -4738,6 +4743,7 @@ <translation id="5548075230008247516">取消晒所有揀咗嘅項目,同埋結束選取模式。</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{「<ph name="TAB_TITLE" />」}=1{「<ph name="TAB_TITLE" />」和另外 1 個標籤}other{「<ph name="TAB_TITLE" />」和另外 # 個標籤}}</translation> <translation id="5548606607480005320">安全檢查</translation> +<translation id="5548644592758170183">顯示在左側</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">鍵盤和文字輸入</translation> <translation id="5553089923092577885">憑證政策對應關聯</translation> @@ -8218,6 +8224,7 @@ <translation id="8980345560318123814">意見反映報告</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - 已當機</translation> <translation id="8981825781894055334">紙張不足</translation> +<translation id="8983018820925880511">這個新的設定檔將由 <ph name="DOMAIN" /> 負責管理。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> 可編輯 <ph name="FILENAME" /></translation> <translation id="8984694057134206124">您的裝置將會向附近所有人顯示 <ph name="MINUTES" /> 分鐘。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation> <translation id="8985191021574400965">歡迎在 Chromebook 上使用 Steam</translation> @@ -8314,6 +8321,7 @@ <translation id="9075413375877487220">「強化安全瀏覽」不信任此擴充程式。</translation> <translation id="9076283476770535406">此網站可能含有成人內容</translation> <translation id="9076523132036239772">抱歉,系統無法驗證您的電郵或密碼,請先連線至網絡。</translation> +<translation id="9076821103818989526">側邊面板</translation> <translation id="9076977315710973122">SMB 共用</translation> <translation id="9078193189520575214">正在套用變更…</translation> <translation id="9078316009970372699">停用「即時網絡共享」</translation>
diff --git a/chrome/app/resources/generated_resources_zh-TW.xtb b/chrome/app/resources/generated_resources_zh-TW.xtb index 31473135c..76b95c9 100644 --- a/chrome/app/resources/generated_resources_zh-TW.xtb +++ b/chrome/app/resources/generated_resources_zh-TW.xtb
@@ -1247,6 +1247,7 @@ <translation id="2159488579268505102">USB-C</translation> <translation id="216169395504480358">新增 Wi-Fi...</translation> <translation id="2162155940152307086">同步功能會在你退出同步功能設定後立即啟動</translation> +<translation id="2162705204091149050">讀取瀏覽器、OS、裝置、已安裝的軟體和檔案的相關資訊</translation> <translation id="2162926944953615670">沒有可用的 eSIM 卡設定檔</translation> <translation id="2163470535490402084">請連線至網際網路,以登入您的 <ph name="DEVICE_TYPE" />。</translation> <translation id="2164131635608782358"><ph name="FIRST_SWITCH" />、<ph name="SECOND_SWITCH" />、<ph name="THIRD_SWITCH" />,以及另外 1 個按鍵</translation> @@ -1267,6 +1268,7 @@ <translation id="2180620921879609685">封鎖任何網頁所含內容</translation> <translation id="2182058453334755893">已複製到剪貼簿</translation> <translation id="2184515124301515068">讓 Chrome 自行判斷何時允許網站播放音訊 (建議使用)</translation> +<translation id="2186206192313702726">Google 智慧鏡頭</translation> <translation id="2186711480981247270">透過其他裝置分享的網頁</translation> <translation id="2187675480456493911">已與你帳戶中的其他裝置同步。系統不會同步處理其他使用者修改的設定。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation> <translation id="2187895286714876935">伺服器憑證匯入錯誤</translation> @@ -2493,6 +2495,7 @@ <translation id="3359256513598016054">憑證原則限制</translation> <translation id="3360297538363969800">列印失敗。請檢查你的印表機,然後再試一次。</translation> <translation id="3361421571228286637">{COUNT,plural, =1{「<ph name="DEVICE_NAME" />」與你分享了 <ph name="ATTACHMENTS" />。}other{「<ph name="DEVICE_NAME" />」與你分享了 <ph name="ATTACHMENTS" />。}}</translation> +<translation id="3363202073972776113">這個新的設定檔將由貴機構管理。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation> <translation id="3364986687961713424">來自系統管理員的訊息:<ph name="ADMIN_MESSAGE" /></translation> <translation id="3365598184818502391">請擇一使用 Ctrl 或 Alt 鍵</translation> <translation id="3368922792935385530">已連線</translation> @@ -2527,6 +2530,7 @@ <translation id="339722927132407568">畫面凍結</translation> <translation id="3399432415385675819">通知功能會遭到停用</translation> <translation id="3400390787768057815"><ph name="WIDTH" /> x <ph name="HEIGHT" /> (<ph name="REFRESH_RATE" /> 赫茲) - 交錯顯示</translation> +<translation id="3401484564516348917">讀取瀏覽器、OS、裝置、已安裝的軟體、登錄值和檔案的相關資訊</translation> <translation id="3402059702184703067">{COUNT,plural, =1{這部裝置中已經儲存了 {COUNT} 組密碼}other{這部裝置中已經儲存了 {COUNT} 組密碼}}</translation> <translation id="3402255108239926910">請選擇顯示圖片</translation> <translation id="3402585168444815892">正在註冊展示模式</translation> @@ -2773,6 +2777,7 @@ <translation id="3627879631695760395">安裝「<ph name="APP" />」...</translation> <translation id="3628275722731025472">關閉藍牙</translation> <translation id="3629631988386925734">輸入密碼即可啟用 Smart Lock,這樣下次手機就會為你的 <ph name="DEVICE_TYPE" />.解鎖。你可以在「設定」中停用 Smart Lock。</translation> +<translation id="3629664892718440872">記住這個選擇</translation> <translation id="3630132874740063857">你的電話號碼</translation> <translation id="3630995161997703415">請將這個網站加入檔案櫃,以便隨時使用</translation> <translation id="3631680145967006828"><ph name="BEGIN_PARAGRAPH1" />允許 ChromeOS 裝置自動傳送報告,協助我們為 ChromeOS 規劃要優先修正及改善的項目。這類報告可能包含 ChromeOS 當機時間、曾使用的功能,以及記憶體一般使用量。<ph name="END_PARAGRAPH1" /> @@ -3200,7 +3205,7 @@ <translation id="4021941025609472374">關閉左側的分頁</translation> <translation id="402211067068791756">這會清除目前顯示的網站所儲存的資料,共 <ph name="TOTAL_USAGE" /></translation> <translation id="4022426551683927403">新增到字典(&A)</translation> -<translation id="4025039777635956441">將所選網站設為靜音</translation> +<translation id="4025039777635956441">關閉所選網站的音訊</translation> <translation id="4028467762035011525">新增輸入法</translation> <translation id="4029556917477724407">從「<ph name="PAGE_TITLE" />」頁面返回</translation> <translation id="4031179711345676612">可使用麥克風</translation> @@ -3261,6 +3266,7 @@ <ph name="EXTENSION_FILE" /></translation> <translation id="408721682677442104">已拒絕提供 MIDI 裝置的完整控制權限</translation> +<translation id="4087328411748538168">顯示在右側</translation> <translation id="4089235344645910861">設定儲存完畢,已開始同步處理。</translation> <translation id="4090103403438682346">啟用已驗證存取權</translation> <translation id="4090947011087001172">要重設 <ph name="SITE" /> 的網站權限嗎?</translation> @@ -3921,7 +3927,7 @@ <translation id="4742334355511750246">不得顯示圖片</translation> <translation id="4742970037960872810">移除醒目顯示</translation> <translation id="4743260470722568160"><ph name="BEGIN_LINK" />瞭解如何更新應用程式<ph name="END_LINK" /></translation> -<translation id="4744981231093950366">{NUM_TABS,plural, =1{開啟網站音訊}other{開啟多個網站的音訊}}</translation> +<translation id="4744981231093950366">{NUM_TABS,plural, =1{開啟這個網站的音訊}other{開啟這些網站的音訊}}</translation> <translation id="474609389162964566">說出「Ok Google」即可存取 Google 助理</translation> <translation id="4746351372139058112">Messages</translation> <translation id="4748783296226936791">網站通常會連線至 HID 裝置,是因為有功能需要使用非標準鍵盤、遊戲控制器和其他裝置。</translation> @@ -3953,6 +3959,7 @@ <translation id="4779766576531456629">重新命名 eSIM 卡的行動網路</translation> <translation id="4780321648949301421">另存網頁...</translation> <translation id="4781443161433589743">你啟用了 Chrome 最強大的安全防護功能</translation> +<translation id="4782861709165039462">裝置硬體切換按鈕已停用所有的麥克風</translation> <translation id="4785719467058219317">你目前使用的安全金鑰並未在這個網站註冊</translation> <translation id="4785914069240823137">取消裁剪</translation> <translation id="4788092183367008521">請檢查你的網路連線,然後再試一次。</translation> @@ -4155,7 +4162,7 @@ <translation id="4972129977812092092">編輯印表機資訊</translation> <translation id="4972164225939028131">密碼錯誤</translation> <translation id="4972737347717125191">網站可以要求使用虛擬實境裝置和資料</translation> -<translation id="4973325300212422370">{NUM_TABS,plural, =1{關閉網站音訊}other{關閉多個網站的音訊}}</translation> +<translation id="4973325300212422370">{NUM_TABS,plural, =1{關閉這個網站的音訊}other{關閉這些網站的音訊}}</translation> <translation id="497403230787583386">已完成安全性檢查,即將列印文件。</translation> <translation id="4977882548591990850"><ph name="CHARACTER_COUNT" />/<ph name="CHARACTER_LIMIT" /></translation> <translation id="4977942889532008999">確認存取權</translation> @@ -4221,7 +4228,6 @@ <translation id="5054374119096692193">前往<ph name="BEGIN_LINK" />自訂 Chrome<ph name="END_LINK" /> 查看所有資訊卡選項</translation> <translation id="5056950756634735043">正在連線到容器</translation> <translation id="5057110919553308744">當你點選擴充功能時</translation> -<translation id="505776528429481161">輕鬆連線並設定附近的裝置</translation> <translation id="5059241099014281248">限制登入</translation> <translation id="5059526285558225588">選擇要分享的內容</translation> <translation id="5060332552815861872">有 1 台可供儲存的印表機。</translation> @@ -4720,6 +4726,7 @@ <translation id="5548075230008247516">已取消選取所有項目,並結束選取模式。</translation> <translation id="5548159762883465903">{NUM_OTHER_TABS,plural, =0{「<ph name="TAB_TITLE" />」}=1{「<ph name="TAB_TITLE" />」和另外 1 個分頁}other{「<ph name="TAB_TITLE" />」和另外 # 個分頁}}</translation> <translation id="5548606607480005320">安全檢查</translation> +<translation id="5548644592758170183">顯示在左側</translation> <translation id="554903022911579950">Kerberos</translation> <translation id="5551573675707792127">鍵盤與文字輸入</translation> <translation id="5553089923092577885">憑證政策對應關聯</translation> @@ -7132,7 +7139,7 @@ <translation id="79312157130859720"><ph name="APP_NAME" /> 正在共用您的畫面和音訊。</translation> <translation id="793293630927785390">新的 Wi-Fi 網路對話方塊</translation> <translation id="7932969338829957666">在 Linux 中,你可以前往 <ph name="BASE_DIR" /> 存取共用資料夾。</translation> -<translation id="7933314993013528982">{NUM_TABS,plural, =1{開啟網站音訊}other{開啟多個網站的音訊}}</translation> +<translation id="7933314993013528982">{NUM_TABS,plural, =1{開啟這個網站的音訊}other{開啟這些網站的音訊}}</translation> <translation id="7933518760693751884">如要儲存頁面以便稍後閱讀,請按一下「書籤」圖示</translation> <translation id="7933634003144813719">管理共用資料夾</translation> <translation id="793531125873261495">下載虛擬機器時發生錯誤,請再試一次。</translation> @@ -8199,6 +8206,7 @@ <translation id="8980345560318123814">使用狀況報告</translation> <translation id="8980951173413349704"><ph name="WINDOW_TITLE" /> - 已當機</translation> <translation id="8981825781894055334">紙張即將用盡</translation> +<translation id="8983018820925880511">這個新的設定檔將由 <ph name="DOMAIN" /> 負責管理。<ph name="BEGIN_LINK" />瞭解詳情<ph name="END_LINK" /></translation> <translation id="8983632908660087688"><ph name="ORIGIN" /> 可以編輯「<ph name="FILENAME" />」</translation> <translation id="8984694057134206124">所有人都看得到你的裝置,這個狀態將持續 <ph name="MINUTES" /> 分鐘。<ph name="LINK_BEGIN" />瞭解詳情<ph name="LINK_END" /></translation> <translation id="8985191021574400965">歡迎在 Chromebook 上使用 Steam</translation> @@ -8295,6 +8303,7 @@ <translation id="9075413375877487220">安全瀏覽強化防護功能不信任這個擴充功能。</translation> <translation id="9076283476770535406">這個網站可能含有成人內容</translation> <translation id="9076523132036239772">抱歉,系統無法驗證你的電子郵件或密碼,請先連線至網路。</translation> +<translation id="9076821103818989526">側邊面板</translation> <translation id="9076977315710973122">SMB 共用</translation> <translation id="9078193189520575214">正在套用變更...</translation> <translation id="9078316009970372699">停用即時網路共用</translation>
diff --git a/chrome/app/resources/generated_resources_zu.xtb b/chrome/app/resources/generated_resources_zu.xtb index 17f49cc..691d97f 100644 --- a/chrome/app/resources/generated_resources_zu.xtb +++ b/chrome/app/resources/generated_resources_zu.xtb
@@ -1279,6 +1279,7 @@ <translation id="2180620921879609685">Vimbela okuqukethwe kunoma yiliphi ikhasi</translation> <translation id="2182058453334755893">Kukopishelwe kubhodi lakho lokunamathisela</translation> <translation id="2184515124301515068">Vumela i-Chrome ukuthi ikhethe uma amasayithi angakwazi ukudlala umsindo (kunconyiwe)</translation> +<translation id="2186206192313702726">I-Google Lens</translation> <translation id="2186711480981247270">Ikhasi elabiwe kusuka kwenye idivayisi</translation> <translation id="2187675480456493911">Ivunyelaniswe namanye amadivayisi ku-akhawunti yakho. Amasethingi alungiswe abanye abasebenzisi ngeke aze avunyelaniswe. <ph name="LINK_BEGIN" />Funda kabanzi<ph name="LINK_END" /></translation> <translation id="2187895286714876935">Iphutha lokungenisa isitifiketi seseva</translation> @@ -4238,7 +4239,6 @@ <translation id="5054374119096692193">Bona konke okukhethwayo kwekhadi kokuthi <ph name="BEGIN_LINK" />Yenza ngokwezifiso I-Chrome<ph name="END_LINK" /></translation> <translation id="5056950756634735043">Xhuma esiqukathini</translation> <translation id="5057110919553308744">Uma uchofoza isandiso</translation> -<translation id="505776528429481161">Xhuma kalula futhi usethe amadivayisi eduze</translation> <translation id="5059241099014281248">Khawulela ukungena ngemvume</translation> <translation id="5059526285558225588">Khetha ongabelana ngakho</translation> <translation id="5060332552815861872">Kukhona iphrinta engu-1 etholakalayo ukuze ilondolozwe.</translation>
diff --git a/chrome/app/resources/google_chrome_strings_af.xtb b/chrome/app/resources/google_chrome_strings_af.xtb index a4c1221..b46c2524 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="2401189691232800402">Chrome-bedryfstelsel</translation> <translation id="2467438592969358367">Google Chrome wil jou wagwoorde uitvoer. Tik jou Windows-wagwoord in om dit toe te laat.</translation> <translation id="2485422356828889247">Deïnstalleer</translation> +<translation id="2494974097748878569">Google Assistent in Chrome</translation> <translation id="2534507159460261402">Google Pay (na Chrome gekopieer)</translation> <translation id="2559253115192232574">Later kan ’n werf wat jy besoek Chrome vra om jou belangstellings te sien om die advertensies wat jy sien, te personaliseer. Chrome kan tot 3 belangstellings deel.</translation> <translation id="2563121210305478421">Herbegin Chrome?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">Gaan voort in 'n nuwe Chrome-profiel?</translation> <translation id="6750954913813541382">Chrome stuur die teks wat jy in die blaaier tik na Google om spelfoute reg te maak.</translation> <translation id="677276454032249905">Verlaat Chrome in elk geval?</translation> +<translation id="6785872064505734160">Google Assistent in Chrome kan vir jou handelinge op webwerwe voltooi</translation> <translation id="683440813066116847">Inkomende reël vir Google Chrome Kanarie om mDNS-verkeer toe te laat.</translation> <translation id="6881299373831449287">Dateer tans Chrome op</translation> <translation id="6885412569789873916">Chrome Beta-programme</translation>
diff --git a/chrome/app/resources/google_chrome_strings_am.xtb b/chrome/app/resources/google_chrome_strings_am.xtb index 6a61af2..2e1575f 100644 --- a/chrome/app/resources/google_chrome_strings_am.xtb +++ b/chrome/app/resources/google_chrome_strings_am.xtb
@@ -80,6 +80,7 @@ <translation id="2401189691232800402">የChromeOS ስርዓት</translation> <translation id="2467438592969358367">Google Chrome የእርስዎን የይለፍ ቃላት ወደ ውጭ መላክ ይፈልጋል። ይህንን ለመፍቀድ የWindows የይለፍ ቃልዎን ይተይቡ።</translation> <translation id="2485422356828889247">አራግፍ</translation> +<translation id="2494974097748878569">በChrome ውስጥ Google ረዳት</translation> <translation id="2534507159460261402">Google Pay (ወደ Chrome ተቀድቷል)</translation> <translation id="2559253115192232574">በኋላ ላይ እርስዎ የሚጎበኙት ጣቢያ እርስዎ የሚያዩዋቸውን ማስታወቂያዎች ግላዊነት ለማላበስ Chrome ዝንባሌዎችዎን እንዲያይ ሊጠይቅ ይችላል። Chrome እስከ 3 ዝንባሌዎች ድረስ ማጋራት ይችላል።</translation> <translation id="2563121210305478421">Chrome ዳግም ይጀመር?</translation> @@ -279,6 +280,7 @@ <translation id="6739177684496155661">በአዲሱ የChrome መገለጫ ውስጥ ይቀጥል?</translation> <translation id="6750954913813541382">የሥርዓተ ሆሄ ህጸሶችን ለማስተካከል እርስዎን የሚተይቡትን ጽሑፍ Chrome ወደ Google በአሳሽ ውስጥ ይልካል</translation> <translation id="677276454032249905">የሆነው ሆኖ ከChrome ይወጣ?</translation> +<translation id="6785872064505734160">በChrome ውስጥ Google ረዳት በመላ ድር ጣቢያዎች ላይ ለእርስዎ እርምጃዎችን ማጠናቀቅ ይችላል</translation> <translation id="683440813066116847">Google Chrome Canary ለmDNS ትራፊክ ለመፍቀድ የውስጥ ደንብ።</translation> <translation id="6881299373831449287">Chromeን በማዘመን ላይ</translation> <translation id="6885412569789873916">የChrome ቅድመ-ይሁነታ መተግበሪያዎች</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ar.xtb b/chrome/app/resources/google_chrome_strings_ar.xtb index 0bf514f..d32024e1 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="2401189691232800402">نظام التشغيل Chrome</translation> <translation id="2467438592969358367">يرغب Google Chrome في تصدير كلمات مرورك، لذا يُرجى كتابة كلمة مرور Windows للسماح بذلك.</translation> <translation id="2485422356828889247">إزالة التثبيت</translation> +<translation id="2494974097748878569">"مساعد Google" على Chrome</translation> <translation id="2534507159460261402">Google Pay (تم النسخ إلى Chrome)</translation> <translation id="2559253115192232574">بعد ذلك، يمكن للموقع الإلكتروني الذي تنتقل إليه أن يطلب من Chrome معرفة اهتماماتك من أجل تخصيص الإعلانات التي تظهر لك. ويمكن أن يشارك Chrome ما يصل إلى 3 اهتمامات.</translation> <translation id="2563121210305478421">هل تريد إعادة تشغيل Chrome؟</translation> @@ -278,6 +279,7 @@ <translation id="6739177684496155661">هل تريد المتابعة باستخدام ملف شخصي جديد على Chrome؟</translation> <translation id="6750954913813541382">لإصلاح الأخطاء الإملائية، يرسِل Chrome النص الذي تكتبه في المتصفّح إلى Google.</translation> <translation id="677276454032249905">هل تريد الخروج من Chrome على أي حال؟</translation> +<translation id="6785872064505734160">بإمكان "مساعد Google" في Chrome إكمال الإجراءات التي تريدها على المواقع الإلكترونية.</translation> <translation id="683440813066116847">قاعدة الوارد إلى Google Chrome Canary للسماح بحركة مرور mDNS.</translation> <translation id="6881299373831449287">جارٍ تحديث Chrome.</translation> <translation id="6885412569789873916">تطبيقات الإصدار التجريبي من Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_as.xtb b/chrome/app/resources/google_chrome_strings_as.xtb index 1e5a2bd..f29c665 100644 --- a/chrome/app/resources/google_chrome_strings_as.xtb +++ b/chrome/app/resources/google_chrome_strings_as.xtb
@@ -82,6 +82,7 @@ <translation id="2401189691232800402">ChromeOS ছিষ্টেম</translation> <translation id="2467438592969358367">Google Chromeএ আপোনাৰ পাছৱর্ডসমূহ ৰপ্তানি কৰিব খোজে। এই কার্যৰ বাবে অনুমতি দিবলৈ আপোনাৰ Windowsৰ পাছৱর্ড দিয়ক।</translation> <translation id="2485422356828889247">আনইনষ্টল কৰক</translation> +<translation id="2494974097748878569">Chromeত Google Assistant</translation> <translation id="2534507159460261402">Google Pay (Chromeলৈ প্ৰতিলিপি কৰা হ'ল)</translation> <translation id="2559253115192232574">পাছত, আপুনি চোৱা কোনো ছাইটে আপুনি দেখা বিজ্ঞাপনসমূহ ব্যক্তিগতকৰণ কৰিবলৈ Chromeক আপোনাৰ আগ্ৰহ থকা বিষয়বস্তু দেখুৱাবলৈ অনুৰোধ কৰিব পাৰে। Chromeএ ৩ টা পৰ্যন্ত আগ্ৰহৰ বিষয়বস্তু শ্বেয়াৰ কৰিব পাৰে।</translation> <translation id="2563121210305478421">Chrome পুনৰ লঞ্চ কৰিবনে?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">এটা নতুন Chrome প্ৰ'ফাইলত অব্যাহত ৰাখিবনে?</translation> <translation id="6750954913813541382">Chromeএ বানানৰ আসোঁৱাহসমূহ আঁতৰাবলৈ আপুনি ব্ৰাউজাৰত টাইপ কৰা পাঠ Googleলৈ পঠিয়ায়</translation> <translation id="677276454032249905">যিকোনো প্ৰকাৰে Chrome বন্ধ কৰিবনে?</translation> +<translation id="6785872064505734160">Chromeত Google Assistantএ আপোনাৰ বাবে সকলোবোৰ ৱেবছাইটত কার্যসমূহ সম্পূর্ণ কৰিব পাৰে</translation> <translation id="683440813066116847">mDNS ট্ৰেফিকক অনুমতি দিবলৈ Google Chrome বিটাৰ অন্তৰ্গামী নিয়ম।</translation> <translation id="6881299373831449287">Chrome আপডে’ট কৰি থকা হৈছে</translation> <translation id="6885412569789873916">Chrome বিটা এপ্সমূহ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_az.xtb b/chrome/app/resources/google_chrome_strings_az.xtb index ea9a2c0..92eccc1c 100644 --- a/chrome/app/resources/google_chrome_strings_az.xtb +++ b/chrome/app/resources/google_chrome_strings_az.xtb
@@ -79,6 +79,7 @@ <translation id="2401189691232800402">ChromeOS sistemi</translation> <translation id="2467438592969358367">Google Chrome parolları eksport etmək istəyir. Buna icazə vermək üçün Windows parolunuzu yazın.</translation> <translation id="2485422356828889247">Sistemdən silin</translation> +<translation id="2494974097748878569">Google Assistent Chrome'da</translation> <translation id="2534507159460261402">Google Pay (Chrome'a kopyalandı)</translation> <translation id="2559253115192232574">Daha sonra ziyarət etdiyiniz sayt gördüyünüz reklamları fərdiləşdirmək üçün Chrome'dan maraqlarınızı görməyi tələb edə bilər. Chrome 3-ə qədər marağı paylaşa bilər.</translation> <translation id="2563121210305478421">Chrome yenidən başladılsın?</translation> @@ -277,6 +278,7 @@ <translation id="6739177684496155661">Yeni Chrome profilində davam edilsin?</translation> <translation id="6750954913813541382">Orfoqrafik səhvləri düzəltmək üçün Chrome brauzerində yazdığınız mətni Google'a göndərir</translation> <translation id="677276454032249905">Chrome'dan istənilən hada çıxılsın?</translation> +<translation id="6785872064505734160">Chrome'da Google Assistent sizin üçün vebsaytlarda əməliyyatlar icra edə bilər</translation> <translation id="683440813066116847">mDNS trafikinə imkan vermək üçün Google Chrome Canary üçün daxil olan qayda.</translation> <translation id="6881299373831449287">Chrome güncəllənir</translation> <translation id="6885412569789873916">Chrome Beta Tətbiqləri</translation>
diff --git a/chrome/app/resources/google_chrome_strings_be.xtb b/chrome/app/resources/google_chrome_strings_be.xtb index 58b696c..cc2334c 100644 --- a/chrome/app/resources/google_chrome_strings_be.xtb +++ b/chrome/app/resources/google_chrome_strings_be.xtb
@@ -80,6 +80,7 @@ <translation id="2401189691232800402">Сістэма Chrome OS</translation> <translation id="2467438592969358367">Google Chrome запытвае дазвол на экспартаванне вашых пароляў. Каб дазволіць гэта, увядзіце пароль Windows.</translation> <translation id="2485422356828889247">Выдаліць</translation> +<translation id="2494974097748878569">Памочнік Google у Chrome</translation> <translation id="2534507159460261402">Google Pay (скапіравана з Chrome)</translation> <translation id="2559253115192232574">Пасля гэтага сайты, якія вы наведваеце, могуць запытваць у браўзера Chrome інфармацыю пра вашы інтарэсы, каб персаналізаваць для вас рэкламу. Chrome можа абагуліць не больш за 3 інтарэсы.</translation> <translation id="2563121210305478421">Перазапусціць Chrome?</translation> @@ -279,6 +280,7 @@ <translation id="6739177684496155661">Працягнуць працу ў новым профілі Chrome?</translation> <translation id="6750954913813541382">Для выпраўлення арфаграфічных памылак Chrome адпраўляе ў Google тэкст, які вы набіраеце ў браўзеры</translation> <translation id="677276454032249905">Усё роўна выйсці з Chrome?</translation> +<translation id="6785872064505734160">Памочнік Google у браўзеры Chrome можа завяршаць за вас дзеянні на розных вэб-сайтах</translation> <translation id="683440813066116847">Уваходнае правіла для Google Chrome Canary, якое дазваляе трафік mDNS.</translation> <translation id="6881299373831449287">Ідзе абнаўленне браўзера Chrome</translation> <translation id="6885412569789873916">Праграмы бэта-версіі Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bg.xtb b/chrome/app/resources/google_chrome_strings_bg.xtb index 485ff1c..5b14348 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="2401189691232800402">Система Chrome OS</translation> <translation id="2467438592969358367">Google Chrome иска да експортира паролите ви. За да разрешите това, въведете паролата си за Windows.</translation> <translation id="2485422356828889247">Деинсталиране</translation> +<translation id="2494974097748878569">Google Асистент в Chrome</translation> <translation id="2534507159460261402">Google Pay (копирано в Chrome)</translation> <translation id="2559253115192232574">Впоследствие посетен от вас сайт може да поиска от Chrome информация за интересите ви с цел да персонализира показваните ви реклами. Chrome може да сподели до 3 интереса.</translation> <translation id="2563121210305478421">Да се рестартира ли Chrome?</translation> @@ -275,6 +276,7 @@ <translation id="6739177684496155661">Искате ли да продължите с нов потребителски профил в Chrome?</translation> <translation id="6750954913813541382">С цел поправка на правописни грешки Chrome изпраща до Google текста, който въвеждате в браузъра</translation> <translation id="677276454032249905">Искате ли да излезете от Chrome въпреки това?</translation> +<translation id="6785872064505734160">Google Асистент в Chrome може да извършва действия вместо вас във всички уебсайтове</translation> <translation id="683440813066116847">Правило за Google Chrome Canary за допускане на входящия трафик за mDNS.</translation> <translation id="6881299373831449287">Chrome се актуализира</translation> <translation id="6885412569789873916">Приложения за Chrome бета</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bn.xtb b/chrome/app/resources/google_chrome_strings_bn.xtb index d832a95..574146c 100644 --- a/chrome/app/resources/google_chrome_strings_bn.xtb +++ b/chrome/app/resources/google_chrome_strings_bn.xtb
@@ -80,6 +80,7 @@ <translation id="2401189691232800402">ChromeOS সিস্টেম</translation> <translation id="2467438592969358367">Google Chrome আপনার পাসওয়ার্ড এক্সপোর্ট করতে চাইছে। অনুমতি দিতে Windows এর পাসওয়ার্ড টাইপ করুন।</translation> <translation id="2485422356828889247">আনইনস্টল</translation> +<translation id="2494974097748878569">Chrome-এ Google অ্যাসিস্ট্যান্ট</translation> <translation id="2534507159460261402">Google Pay (Chrome এ কপি করা হয়েছে)</translation> <translation id="2559253115192232574">পরে, আপনি যে সাইটটি দেখেন সেটি আপনার দেখা বিজ্ঞাপনগুলিকে পছন্দমতো করার জন্য Chrome-কে আপনার আগ্রহগুলি দেখতে বলতে পারে। Chrome সর্বাধিক ৩টি আগ্রহ শেয়ার করতে পারে।</translation> <translation id="2563121210305478421">Chrome আবার লঞ্চ করবেন?</translation> @@ -278,6 +279,7 @@ <translation id="6739177684496155661">নতুন Chrome প্রোফাইলে কাজ চালিয়ে যেতে চান?</translation> <translation id="6750954913813541382">বানান ভুল ঠিক করতে, আপনি ব্রাউজারে যে টেক্সট লেখেন Chrome সেটি Google-এ পাঠায়</translation> <translation id="677276454032249905">তা স্বত্তেও Chrome বন্ধ করতে চান?</translation> +<translation id="6785872064505734160">Chrome-এ Google Assistant আপনার হয়ে সমস্ত ওয়েবসাইটে বিভিন্ন অ্যাকশন সম্পূর্ণ করতে পারে</translation> <translation id="683440813066116847">mDNS ট্রাফিকের অনুমতি দিতে Google Chrome Canary এর জন্য ইনবাউন্ড নিয়ম।</translation> <translation id="6881299373831449287">Chrome আপডেট হচ্ছে</translation> <translation id="6885412569789873916">Chrome বিটা অ্যাপ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_bs.xtb b/chrome/app/resources/google_chrome_strings_bs.xtb index 4f25dff..7778a87 100644 --- a/chrome/app/resources/google_chrome_strings_bs.xtb +++ b/chrome/app/resources/google_chrome_strings_bs.xtb
@@ -81,6 +81,7 @@ <translation id="2401189691232800402">Sistem ChromeOS</translation> <translation id="2467438592969358367">Google Chrome želi izvesti vaše lozinke. Unesite svoju lozinku za Windows da ovo omogućite.</translation> <translation id="2485422356828889247">Deinstaliraj</translation> +<translation id="2494974097748878569">Google Assistant u Chromeu</translation> <translation id="2534507159460261402">Google Pay (kopirano u Chrome)</translation> <translation id="2559253115192232574">Kasnije, web lokacija koju ste posjetili može zatražiti od Chromea da pogleda vaša interesovanja radi personalizacije oglasa koje vidite. Chrome može dijeliti do 3 ineresovanja.</translation> <translation id="2563121210305478421">Ponovo pokrenuti Chrome?</translation> @@ -279,6 +280,7 @@ <translation id="6739177684496155661">Želite li nastaviti na novi Chrome profil?</translation> <translation id="6750954913813541382">Za ispravak pravopisnih grešaka, Chrome šalje Googleu tekst koji napišete u pregledniku</translation> <translation id="677276454032249905">Ipak želite napustiti Chrome?</translation> +<translation id="6785872064505734160">Google Asistent u Chromeu može za vas završavati radnje na svim web lokacijama</translation> <translation id="683440813066116847">Ulazno pravilo da Google Chrome Canary dozvoli mDNS saobraćaj.</translation> <translation id="6881299373831449287">Ažuriranje Chromea</translation> <translation id="6885412569789873916">Aplikacije za Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ca.xtb b/chrome/app/resources/google_chrome_strings_ca.xtb index a45088b..9a18543b 100644 --- a/chrome/app/resources/google_chrome_strings_ca.xtb +++ b/chrome/app/resources/google_chrome_strings_ca.xtb
@@ -77,6 +77,7 @@ <translation id="2401189691232800402">Sistema Chrome OS</translation> <translation id="2467438592969358367">Google Chrome vol exportar les teves contrasenyes. Escriu la contrasenya de Windows per permetre-ho.</translation> <translation id="2485422356828889247">Desinstal·la</translation> +<translation id="2494974097748878569">Assistent de Google a Chrome</translation> <translation id="2534507159460261402">Google Pay (copiada a Chrome)</translation> <translation id="2559253115192232574">Després, un lloc web que visitis pot demanar els teus interessos a Chrome per personalitzar els anuncis que veus. Chrome pot compartir un màxim de 3 interessos.</translation> <translation id="2563121210305478421">Vols tornar a iniciar Chrome?</translation> @@ -273,6 +274,7 @@ <translation id="6739177684496155661">Vols continuar en un perfil de Chrome nou?</translation> <translation id="6750954913813541382">Per corregir els errors d'ortografia, Chrome envia a Google el text que escrius al navegador</translation> <translation id="677276454032249905">Vols sortir de Chrome igualment?</translation> +<translation id="6785872064505734160">L'Assistent de Google a Chrome pot dur a terme accions per tu en llocs web</translation> <translation id="683440813066116847">Regla d'entrada de Google Chrome Canary per permetre el trànsit de mDNS.</translation> <translation id="6881299373831449287">S'està actualitzant Chrome</translation> <translation id="6885412569789873916">Aplicacions de Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_cs.xtb b/chrome/app/resources/google_chrome_strings_cs.xtb index 5bacf3d..0c9b817 100644 --- a/chrome/app/resources/google_chrome_strings_cs.xtb +++ b/chrome/app/resources/google_chrome_strings_cs.xtb
@@ -81,6 +81,7 @@ <translation id="2401189691232800402">Systém ChromeOS</translation> <translation id="2467438592969358367">Google Chrome chce exportovat vaše hesla. Tato akce vyžaduje zadání hesla systému Windows.</translation> <translation id="2485422356828889247">Odinstalovat</translation> +<translation id="2494974097748878569">Asistent Google v Chromu</translation> <translation id="2534507159460261402">Google Pay (zkopírováno do Chromu)</translation> <translation id="2559253115192232574">Později může navštívený web požádat Chrome o sdělení vašich zájmů, aby vám mohl přizpůsobit zobrazované reklamy. Chrome může sdílet až 3 zájmy.</translation> <translation id="2563121210305478421">Restartovat Chrome?</translation> @@ -280,6 +281,7 @@ <translation id="6739177684496155661">Pokračovat v novém profilu Chrome?</translation> <translation id="6750954913813541382">Text zadaný v prohlížeči odesílá Chrome kvůli opravě pravopisných chyb do Googlu</translation> <translation id="677276454032249905">Přesto Chrome ukončit?</translation> +<translation id="6785872064505734160">Asistent Google v Chromu může na webech provádět různé akce za vás</translation> <translation id="683440813066116847">Pravidlo příchozího provozu pro aplikaci Google Chrome Canary, které povolí provoz mDNS.</translation> <translation id="6881299373831449287">Aktualizace Chromu</translation> <translation id="6885412569789873916">Chrome Beta – aplikace</translation>
diff --git a/chrome/app/resources/google_chrome_strings_cy.xtb b/chrome/app/resources/google_chrome_strings_cy.xtb index 20178278..76a9c66 100644 --- a/chrome/app/resources/google_chrome_strings_cy.xtb +++ b/chrome/app/resources/google_chrome_strings_cy.xtb
@@ -82,6 +82,7 @@ <translation id="2401189691232800402">System ChromeOS</translation> <translation id="2467438592969358367">Mae Google Chrome eisiau allforio'ch cyfrineiriau. Teipiwch eich cyfrinair Windows i ganiatáu hyn.</translation> <translation id="2485422356828889247">Dadosod</translation> +<translation id="2494974097748878569">Google Assistant yn Chrome</translation> <translation id="2534507159460261402">Google Pay (copïwyd i Chrome)</translation> <translation id="2559253115192232574">Yn nes ymlaen, gall gwefan rydych yn ymweld â hi ofyn i Chrome weld eich diddordebau er mwyn personoleiddio'r hysbysebion rydych yn eu gweld. Gall Chrome rannu hyd at 3 diddordeb.</translation> <translation id="2563121210305478421">Ail-lansio Chrome?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">Parhau mewn proffil Chrome newydd?</translation> <translation id="6750954913813541382">I drwsio gwallau sillafu, mae Chrome yn anfon y testun rydych yn ei deipio yn y porwr at Google</translation> <translation id="677276454032249905">Gadael Chrome beth bynnag?</translation> +<translation id="6785872064505734160">Gall Google Assistant yn Chrome gwblhau gweithredoedd i chi ar draws gwefannau</translation> <translation id="683440813066116847">Rheol dod i mewn ar gyfer Google Chrome Canary i ganiatáu traffig mDNS.</translation> <translation id="6881299373831449287">Wrthi'n diweddaru Chrome</translation> <translation id="6885412569789873916">Apiau Beta Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_da.xtb b/chrome/app/resources/google_chrome_strings_da.xtb index f8a969b..09b261fe 100644 --- a/chrome/app/resources/google_chrome_strings_da.xtb +++ b/chrome/app/resources/google_chrome_strings_da.xtb
@@ -78,6 +78,7 @@ <translation id="2401189691232800402">Chrome OS-system</translation> <translation id="2467438592969358367">Google Chrome anmoder om at eksportere dine adgangskoder. Angiv din Windows-adgangskode for at tillade dette.</translation> <translation id="2485422356828889247">Afinstaller</translation> +<translation id="2494974097748878569">Google Assistent i Chrome</translation> <translation id="2534507159460261402">Google Pay (kopieret til Chrome)</translation> <translation id="2559253115192232574">Et website, du besøger, kan på et senere tidspunkt anmode Chrome om at se dine interesser med henblik på at tilpasse de annoncer, du får vist. Chrome kan dele op til 3 interesser.</translation> <translation id="2563121210305478421">Vil du genstarte Chrome?</translation> @@ -274,6 +275,7 @@ <translation id="6739177684496155661">Vil du fortsætte på en ny Chrome-profil?</translation> <translation id="6750954913813541382">Chrome sender den tekst, du angiver i browseren, til Google for at rette stavefejl</translation> <translation id="677276454032249905">Vil du afslutte Chrome alligevel?</translation> +<translation id="6785872064505734160">Google Assistent i Chrome kan udføre handlinger for dig på websites</translation> <translation id="683440813066116847">Indgående regel for Google Chrome Canary om at tillade mDNS-trafik.</translation> <translation id="6881299373831449287">Opdaterer Chrome</translation> <translation id="6885412569789873916">Apps i Chrome beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_de.xtb b/chrome/app/resources/google_chrome_strings_de.xtb index 4f0e5e0..8adbb6c 100644 --- a/chrome/app/resources/google_chrome_strings_de.xtb +++ b/chrome/app/resources/google_chrome_strings_de.xtb
@@ -77,6 +77,7 @@ <translation id="2401189691232800402">Chrome OS-System</translation> <translation id="2467438592969358367">Google Chrome möchte deine Passwörter exportieren. Wenn du dies zulassen möchtest, gib dein Windows-Passwort ein.</translation> <translation id="2485422356828889247">Deinstallieren</translation> +<translation id="2494974097748878569">Google Assistant für Chrome</translation> <translation id="2534507159460261402">Google Pay (in Chrome kopiert)</translation> <translation id="2559253115192232574">Wenn du eine Website besuchst, kann diese von Chrome dann deine Interessen anfordern, um die dir gezeigte Werbung zu personalisieren. Chrome kann bis zu drei Interessen teilen.</translation> <translation id="2563121210305478421">Chrome neu starten?</translation> @@ -272,6 +273,7 @@ <translation id="6739177684496155661">Mit einem neuen Chrome-Profil fortfahren?</translation> <translation id="6750954913813541382">Zur Behebung von Tippfehlern sendet Chrome im Browser eingegebenen Text an Google</translation> <translation id="677276454032249905">Chrome trotzdem beenden?</translation> +<translation id="6785872064505734160">Google Assistant kann in Chrome Aktionen auf Websites für dich durchführen.</translation> <translation id="683440813066116847">Eingangsregel für die Zulassung von mDNS-Verkehr in Google Chrome Canary</translation> <translation id="6881299373831449287">Chrome wird aktualisiert</translation> <translation id="6885412569789873916">Chrome Beta-Apps</translation>
diff --git a/chrome/app/resources/google_chrome_strings_el.xtb b/chrome/app/resources/google_chrome_strings_el.xtb index 47bc869..fe333831 100644 --- a/chrome/app/resources/google_chrome_strings_el.xtb +++ b/chrome/app/resources/google_chrome_strings_el.xtb
@@ -80,6 +80,7 @@ <translation id="2401189691232800402">Σύστημα Chrome OS</translation> <translation id="2467438592969358367">Το Google Chrome θέλει να εξαγάγει τους κωδικούς πρόσβασής σας. Για να το επιτρέψετε αυτό, πληκτρολογήστε τον κωδικό πρόσβασης για τα Windows.</translation> <translation id="2485422356828889247">Απεγκατάσταση</translation> +<translation id="2494974097748878569">Βοηθός Google στο Chrome</translation> <translation id="2534507159460261402">Google Pay (αντιγράφηκε στο Chrome)</translation> <translation id="2559253115192232574">Αργότερα, ένας ιστότοπος που επισκέπτεστε μπορεί να ζητήσει από το Chrome να δει τα ενδιαφέροντά σας, προκειμένου να εξατομικεύσει τις διαφημίσεις που βλέπετε. Το Chrome μπορεί να κοινοποιήσει έως και 3 ενδιαφέροντα.</translation> <translation id="2563121210305478421">Επανεκκίνηση του Chrome;</translation> @@ -278,6 +279,7 @@ <translation id="6739177684496155661">Συνέχεια σε νέο προφίλ Chrome;</translation> <translation id="6750954913813541382">Για τη διόρθωση ορθογραφικών λαθών, το Chrome στέλνει στην Google το κείμενο που πληκτρολογείτε στο πρόγραμμα περιήγησης</translation> <translation id="677276454032249905">Να γίνει έξοδος από το Chrome ούτως ή άλλως;</translation> +<translation id="6785872064505734160">Ο Βοηθός Google στο Chrome μπορεί να εκτελέσει ενέργειες σε ιστοτόπους για εσάς.</translation> <translation id="683440813066116847">Εισερχόμενος κανόνας για το Google Chrome Canary για να επιτρέπεται η κυκλοφορία του mDNS.</translation> <translation id="6881299373831449287">Ενημέρωση Chrome</translation> <translation id="6885412569789873916">Εφαρμογές Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_en-GB.xtb b/chrome/app/resources/google_chrome_strings_en-GB.xtb index 2c7d82c..d1bcc01 100644 --- a/chrome/app/resources/google_chrome_strings_en-GB.xtb +++ b/chrome/app/resources/google_chrome_strings_en-GB.xtb
@@ -81,6 +81,7 @@ <translation id="2401189691232800402">Chrome OS system</translation> <translation id="2467438592969358367">Google Chrome wants to export your passwords. Type your Windows password to allow this.</translation> <translation id="2485422356828889247">Uninstall</translation> +<translation id="2494974097748878569">Google Assistant in Chrome</translation> <translation id="2534507159460261402">Google Pay (copied to Chrome)</translation> <translation id="2559253115192232574">Later, a site that you visit can ask Chrome to see your interests in order to personalise the ads that you see. Chrome can share up to three interests.</translation> <translation id="2563121210305478421">Relaunch Chrome?</translation> @@ -281,6 +282,7 @@ <translation id="6739177684496155661">Continue in a new Chrome profile?</translation> <translation id="6750954913813541382">To fix spelling errors, Chrome sends the text that you type in the browser to Google</translation> <translation id="677276454032249905">Exit Chrome anyway?</translation> +<translation id="6785872064505734160">Google Assistant in Chrome can complete actions across websites for you</translation> <translation id="683440813066116847">Inbound rule for Google Chrome Canary to allow mDNS traffic.</translation> <translation id="6881299373831449287">Updating Chrome</translation> <translation id="6885412569789873916">Chrome Beta apps</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es-419.xtb b/chrome/app/resources/google_chrome_strings_es-419.xtb index 1d5df6e..c6b4a6d2 100644 --- a/chrome/app/resources/google_chrome_strings_es-419.xtb +++ b/chrome/app/resources/google_chrome_strings_es-419.xtb
@@ -78,6 +78,7 @@ <translation id="2401189691232800402">Sistema de Chrome OS</translation> <translation id="2467438592969358367">Google Chrome desea exportar tus contraseñas. Para permitirlo, ingresa tu contraseña de Windows.</translation> <translation id="2485422356828889247">Desinstalación</translation> +<translation id="2494974097748878569">Asistente de Google en Chrome</translation> <translation id="2534507159460261402">Google Pay (copiada en Chrome)</translation> <translation id="2559253115192232574">Luego, los sitios que visites pueden consultar tus intereses con Chrome para personalizar los anuncios que te muestran. Chrome puede compartir hasta 3 intereses.</translation> <translation id="2563121210305478421">¿Quieres reiniciar Chrome?</translation> @@ -274,6 +275,7 @@ <translation id="6739177684496155661">¿Deseas continuar en un nuevo perfil de Chrome?</translation> <translation id="6750954913813541382">Para corregir los errores ortográficos, Chrome envía a Google lo que escribes en el navegador</translation> <translation id="677276454032249905">¿Deseas salir de Chrome de todos modos?</translation> +<translation id="6785872064505734160">El Asistente de Google en Chrome puede completar acciones por ti en diferentes sitios web</translation> <translation id="683440813066116847">Regla de entrada para que Google Chrome Canary permita el tráfico mDNS.</translation> <translation id="6881299373831449287">Actualizando Chrome</translation> <translation id="6885412569789873916">Apps de Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_es.xtb b/chrome/app/resources/google_chrome_strings_es.xtb index 9a799340..49e2488 100644 --- a/chrome/app/resources/google_chrome_strings_es.xtb +++ b/chrome/app/resources/google_chrome_strings_es.xtb
@@ -82,6 +82,7 @@ <translation id="2401189691232800402">Sistema ChromeOS</translation> <translation id="2467438592969358367">Google Chrome quiere exportar tus contraseñas. Escribe tu contraseña de Windows para permitirlo.</translation> <translation id="2485422356828889247">Desinstalar</translation> +<translation id="2494974097748878569">Asistente de Google</translation> <translation id="2534507159460261402">Google Pay (copiada en Chrome)</translation> <translation id="2559253115192232574">Después, un sitio que visites puede pedirle a Chrome consultar tus intereses para personalizar los anuncios que veas. Chrome puede compartir hasta 3 intereses.</translation> <translation id="2563121210305478421">¿Reiniciar Chrome?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">¿Continuar en un nuevo perfil de Chrome?</translation> <translation id="6750954913813541382">Chrome envía a Google el texto que escribes en el navegador para corregir los errores ortográficos</translation> <translation id="677276454032249905">¿Quieres salir de Chrome de todas formas?</translation> +<translation id="6785872064505734160">El Asistente de Google en Chrome puede realizar acciones por ti en sitios web.</translation> <translation id="683440813066116847">Regla entrante para que Google Chrome Canary permita tráfico mDNS.</translation> <translation id="6881299373831449287">Actualizando Chrome</translation> <translation id="6885412569789873916">Aplicaciones de Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_et.xtb b/chrome/app/resources/google_chrome_strings_et.xtb index e6b060a..202513d 100644 --- a/chrome/app/resources/google_chrome_strings_et.xtb +++ b/chrome/app/resources/google_chrome_strings_et.xtb
@@ -79,6 +79,7 @@ <translation id="2401189691232800402">Chrome OS-i süsteem</translation> <translation id="2467438592969358367">Google Chrome soovib teie paroole eksportida. Selle lubamiseks sisestage oma Windowsi parool.</translation> <translation id="2485422356828889247">Desinstalli</translation> +<translation id="2494974097748878569">Google'i assistent Chrome'is</translation> <translation id="2534507159460261402">Google Pay (kopeeritud Chrome'i)</translation> <translation id="2559253115192232574">Hiljem saab teie külastatav sait küsida Chrome'ilt teie huvisid, et isikupärastada teile kuvatavaid reklaame. Chrome võib jagada kuni kolme huvi.</translation> <translation id="2563121210305478421">Kas käivitada Chrome uuesti?</translation> @@ -277,6 +278,7 @@ <translation id="6739177684496155661">Kas jätkata uuel Chrome'i profiilil?</translation> <translation id="6750954913813541382">Õigekirjavigade parandamiseks saadab Chrome brauseris sisestatava teksti Google'ile</translation> <translation id="677276454032249905">Kas väljuda Chrome'ist ikkagi?</translation> +<translation id="6785872064505734160">Google'i assistent Chrome'is saab veebisaitidel teie eest toiminguid teha</translation> <translation id="683440813066116847">Sissetuleku reegel Google Chrome Canaryle mDNS-liikluse lubamiseks.</translation> <translation id="6881299373831449287">Chrome'i värskendamine</translation> <translation id="6885412569789873916">Chrome'i beetaversiooni rakendused</translation>
diff --git a/chrome/app/resources/google_chrome_strings_eu.xtb b/chrome/app/resources/google_chrome_strings_eu.xtb index 48e8c13..759e739 100644 --- a/chrome/app/resources/google_chrome_strings_eu.xtb +++ b/chrome/app/resources/google_chrome_strings_eu.xtb
@@ -81,6 +81,7 @@ <translation id="2401189691232800402">Chrome OS sistema</translation> <translation id="2467438592969358367">Google Chrome-k pasahitzak esportatu nahi ditu. Hori baimentzeko, idatzi Windows pasahitza.</translation> <translation id="2485422356828889247">Desinstalatu</translation> +<translation id="2494974097748878569">Chrome-rako Google-ren Laguntzailea</translation> <translation id="2534507159460261402">Google Pay (Chrome-n kopiatu da)</translation> <translation id="2559253115192232574">Beranduago, bisitatzen duzun webgune batek zure interesak ikusteko eska diezaioke Chrome-ri, agertzen zaizkizun iragarkiak pertsonalizatze aldera. Chrome-k hiru interes parteka ditzake gehienez.</translation> <translation id="2563121210305478421">Chrome berrabiarazi nahi duzu?</translation> @@ -280,6 +281,7 @@ <translation id="6739177684496155661">Chrome-eko beste profil batean egin nahi duzu aurrera?</translation> <translation id="6750954913813541382">Ortografia-akatsak konpontzeko, Chrome-k Google-ri bidaltzen dio arakatzailean idazten duzun testua</translation> <translation id="677276454032249905">Chrome-tik irten nahi duzu hala ere?</translation> +<translation id="6785872064505734160">Webguneetan ekintzak egin ditzake Chrome-ko Google-ren Laguntzailea zerbitzuak</translation> <translation id="683440813066116847">Google Chrome Canary kanalean mDNS trafikoa baimentzeko sarrera-araua.</translation> <translation id="6881299373831449287">Chrome eguneratzen</translation> <translation id="6885412569789873916">Chrome Beta aplikazioak</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fa.xtb b/chrome/app/resources/google_chrome_strings_fa.xtb index 8161aae..4be5cd5 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="2401189691232800402">سیستم ChromeOS</translation> <translation id="2467438592969358367">Google Chrome میخواهد گذرواژههای شما را صادر کند. برای اجازه به این کار، گذرواژه Windows خود را تایپ کنید.</translation> <translation id="2485422356828889247">حذف نصب</translation> +<translation id="2494974097748878569">«دستیار Google» در Chrome</translation> <translation id="2534507159460261402">Google Pay (در Chrome کپی شد)</translation> <translation id="2559253115192232574">بعداً، سایتی که از آن بازدید میکنید میتواند برای شخصی کردن آگهیهایی که به شما نشان میدهد از Chrome بخواهد علایق شما را ببیند. Chrome میتواند حداکثر ۳ علاقه را همرسانی کند.</translation> <translation id="2563121210305478421">Chrome راهاندازی مجدد شود؟</translation> @@ -274,6 +275,7 @@ <translation id="6739177684496155661">در نمایه جدیدی از Chrome ادامه میدهید؟</translation> <translation id="6750954913813541382">Chrome برای رفع غلطهای املایی، نوشتاری را که در مرورگر تایپ میکنید به Google ارسال میکند</translation> <translation id="677276454032249905">درهرصورت از Chrome خارج میشوید؟</translation> +<translation id="6785872064505734160">«دستیار Google» در Chrome میتواند کنشهایی را در وبسایتها برایتان انجام دهد</translation> <translation id="683440813066116847">قانون ترافیک ورودی برای Google Chrome Canary به منظور اجازه به ترافیک mDNS .</translation> <translation id="6881299373831449287">درحال بهروزرسانی Chrome</translation> <translation id="6885412569789873916">برنامههای Chrome نسخه بتا</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fi.xtb b/chrome/app/resources/google_chrome_strings_fi.xtb index 8d8a2c0..1b0bbc4 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="2401189691232800402">Chrome-käyttöjärjestelmä</translation> <translation id="2467438592969358367">Google Chrome yrittää viedä salasanojasi tiedostoon. Salli tämä kirjoittamalla Windows-salasanasi.</translation> <translation id="2485422356828889247">Poista</translation> +<translation id="2494974097748878569">Chromen Google Assistant</translation> <translation id="2534507159460261402">Google Pay (kopioitu Chromeen)</translation> <translation id="2559253115192232574">Sivustot, joilla käyt, voivat myöhemmin pyytää Chromelta tietoa kiinnostuksen kohteistasi ja personoida näkemiäsi mainoksia. Chrome voi jakaa enintään kolme kiinnostuksen kohdetta.</translation> <translation id="2563121210305478421">Käynnistetäänkö Chrome uudelleen?</translation> @@ -274,6 +275,7 @@ <translation id="6739177684496155661">Jatketaanko uudessa Chrome-profiilissa?</translation> <translation id="6750954913813541382">Chrome lähettää selaimeen kirjoittamasi tekstin Googlelle kirjoitusvirheiden korjaamiseksi</translation> <translation id="677276454032249905">Suljetaanko Chrome silti?</translation> +<translation id="6785872064505734160">Chromen Google Assistant voi tehdä puolestasi verkkotoimia eri sivustoilla</translation> <translation id="683440813066116847">Google Chrome Canaryn saapuvien yhteyksien sääntö, joka sallii mDNS-liikenteen.</translation> <translation id="6881299373831449287">Päivitetään Chromea</translation> <translation id="6885412569789873916">Chromen betaversion sovellukset</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fil.xtb b/chrome/app/resources/google_chrome_strings_fil.xtb index a1a526a0..d4362a7 100644 --- a/chrome/app/resources/google_chrome_strings_fil.xtb +++ b/chrome/app/resources/google_chrome_strings_fil.xtb
@@ -82,6 +82,7 @@ <translation id="2401189691232800402">ChromeOS system</translation> <translation id="2467438592969358367">Gustong i-export ng Google Chrome ang iyong mga password. I-type ang password mo sa Windows para payagan ito.</translation> <translation id="2485422356828889247">I-uninstall</translation> +<translation id="2494974097748878569">Google Assistant sa Chrome</translation> <translation id="2534507159460261402">Google Pay (kinopya sa Chrome)</translation> <translation id="2559253115192232574">Sa ibang pagkakataon, puwedeng hilingin ng site na binibisita mo sa Chrome na makita ang iyong mga interes para ma-personalize ang mga ad na nakikita mo. Puwedeng magbahagi ng hanggang 3 interes ang Chrome.</translation> <translation id="2563121210305478421">Muling ilunsad ang Chrome?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">Magpatuloy sa bagong profile sa Chrome?</translation> <translation id="6750954913813541382">Para ayusin ang mga error sa pagbabaybay, ipinapadala ng Chrome sa Google ang text na na-type mo sa browser</translation> <translation id="677276454032249905">Lumabas pa rin sa Chrome?</translation> +<translation id="6785872064505734160">Makakakumpleto ang Google Assistant sa Chrome ng mga pagkilos sa lahat ng website para sa iyo</translation> <translation id="683440813066116847">Inbound na panuntunan para sa Google Chrome Canary upang payagan ang trapiko ng mDNS.</translation> <translation id="6881299373831449287">Ina-update ang Chrome</translation> <translation id="6885412569789873916">Mga Chrome Beta App</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fr-CA.xtb b/chrome/app/resources/google_chrome_strings_fr-CA.xtb index 2640db6..06db3e0 100644 --- a/chrome/app/resources/google_chrome_strings_fr-CA.xtb +++ b/chrome/app/resources/google_chrome_strings_fr-CA.xtb
@@ -81,6 +81,7 @@ <translation id="2401189691232800402">Système Chrome OS</translation> <translation id="2467438592969358367">Google Chrome veut exporter vos mots de passe. Pour autoriser cette action, entrez votre mot de passe Windows.</translation> <translation id="2485422356828889247">Désinstaller</translation> +<translation id="2494974097748878569">Assistant Google dans Chrome</translation> <translation id="2534507159460261402">Google Pay (copiée dans Chrome)</translation> <translation id="2559253115192232574">Ultérieurement, un site que vous visitez peut demander à Chrome de voir vos centres d'intérêt afin de personnaliser les annonces que vous voyez. Chrome peut partager jusqu'à trois centres d'intérêt.</translation> <translation id="2563121210305478421">Relancer Chrome?</translation> @@ -281,6 +282,7 @@ <translation id="6739177684496155661">Continuer avec un nouveau profil Chrome?</translation> <translation id="6750954913813541382">Pour corriger les erreurs d'orthographe, Chrome envoie à Google le texte que vous tapez dans le navigateur</translation> <translation id="677276454032249905">Quitter Chrome quand même?</translation> +<translation id="6785872064505734160">L'Assistant Google dans Chrome peut effectuer des actions dans différents sites Web pour vous</translation> <translation id="683440813066116847">Règle de trafic entrant pour Google Chrome Canary autorisant le trafic mDNS.</translation> <translation id="6881299373831449287">Mise à jour de Chrome</translation> <translation id="6885412569789873916">Applications Chrome bêta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_fr.xtb b/chrome/app/resources/google_chrome_strings_fr.xtb index 6dbda4e..ed1f949 100644 --- a/chrome/app/resources/google_chrome_strings_fr.xtb +++ b/chrome/app/resources/google_chrome_strings_fr.xtb
@@ -81,6 +81,7 @@ <translation id="2401189691232800402">Système Chrome OS</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="2494974097748878569">Assistant Google dans Chrome</translation> <translation id="2534507159460261402">Google Pay (copiée dans Chrome)</translation> <translation id="2559253115192232574">Ensuite, un site que vous consultez pourra demander à Chrome de voir vos centres d'intérêt pour personnaliser les annonces qui vous sont présentées. Chrome peut partager jusqu'à trois centres d'intérêt.</translation> <translation id="2563121210305478421">Relancer Chrome ?</translation> @@ -280,6 +281,7 @@ <translation id="6739177684496155661">Continuer avec un nouveau profil Chrome ?</translation> <translation id="6750954913813541382">Pour corriger les fautes d'orthographe, Chrome envoie à Google le texte que vous saisissez dans le navigateur</translation> <translation id="677276454032249905">Quitter Chrome quand même ?</translation> +<translation id="6785872064505734160">L'Assistant Google dans Chrome peut effectuer des actions sur les sites Web à votre place</translation> <translation id="683440813066116847">Règle de trafic entrant pour Google Chrome Canary autorisant le trafic mDNS</translation> <translation id="6881299373831449287">Mise à jour de Chrome</translation> <translation id="6885412569789873916">Applications pour la version bêta de Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_gl.xtb b/chrome/app/resources/google_chrome_strings_gl.xtb index 4a2b300..719d4b8 100644 --- a/chrome/app/resources/google_chrome_strings_gl.xtb +++ b/chrome/app/resources/google_chrome_strings_gl.xtb
@@ -80,6 +80,7 @@ <translation id="2401189691232800402">Sistema Chrome OS</translation> <translation id="2467438592969358367">Google Chrome quere exportar os teus contrasinais. Escribe o teu contrasinal de Windows para permitir esta acción.</translation> <translation id="2485422356828889247">Desinstalar</translation> +<translation id="2494974097748878569">Asistente de Google en Chrome</translation> <translation id="2534507159460261402">Google Pay (copiouse en Chrome)</translation> <translation id="2559253115192232574">Máis tarde, un sitio que visites pode consultarlle a Chrome os teus intereses para personalizar os anuncios que se che mostren. Chrome pode compartir ata 3 intereses.</translation> <translation id="2563121210305478421">Queres reiniciar Chrome?</translation> @@ -279,6 +280,7 @@ <translation id="6739177684496155661">Queres continuar nun perfil de Chrome novo?</translation> <translation id="6750954913813541382">Para corrixir erros ortográficos, Chrome enviaralle a Google o texto que escribas no navegador</translation> <translation id="677276454032249905">Queres saír de Chrome de todas formas?</translation> +<translation id="6785872064505734160">O Asistente de Google en Chrome pode completar accións por ti nos sitios web</translation> <translation id="683440813066116847">Regra de entrada para Google Chrome Canary para permitir tráfico mDNS.</translation> <translation id="6881299373831449287">Actualizando Chrome</translation> <translation id="6885412569789873916">Aplicacións de Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_gu.xtb b/chrome/app/resources/google_chrome_strings_gu.xtb index 8c96a26f..2a0c63f 100644 --- a/chrome/app/resources/google_chrome_strings_gu.xtb +++ b/chrome/app/resources/google_chrome_strings_gu.xtb
@@ -82,6 +82,7 @@ <translation id="2401189691232800402">ChromeOS સિસ્ટમ</translation> <translation id="2467438592969358367">Google Chrome તમારા પાસવર્ડની નિકાસ કરવા માગે છે. આને મંજૂરી આપવા માટે તમારો Windows પાસવર્ડ ટાઇપ કરો.</translation> <translation id="2485422356828889247">અનઇન્સ્ટૉલ કરો</translation> +<translation id="2494974097748878569">Chromeમાં Google Assistant</translation> <translation id="2534507159460261402">Google Pay (Chrome પર કૉપિ કરેલ છે)</translation> <translation id="2559253115192232574">પછી, તમે જેની મુલાકાત લો તે સાઇટ Chromeને તમારી રુચિઓ જોવા માટે કહી શકે છે, જેથી તમને જોવા મળતી જાહેરાતોને મનગમતી બનાવી શકાય. Chrome વધુમાં વધુ 3 રુચિ શેર કરી શકે છે.</translation> <translation id="2563121210305478421">Chrome ફરીથી લૉન્ચ કરીએ?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">નવી Chrome પ્રોફાઇલમાં બ્રાઉઝિંગ ચાલુ રાખીએ?</translation> <translation id="6750954913813541382">જોડણીની ભૂલો સુધારવા માટે, તમે બ્રાઉઝરમાં ટાઇપ કરો છો તે ટેક્સ્ટ Chrome દ્વારા Googleને મોકલવામાં આવે છે</translation> <translation id="677276454032249905">છતાં પણ Chromeમાંથી બહાર નિકળવું છે?</translation> +<translation id="6785872064505734160">Google Assistant Chromeમાં, તમારા માટે ઘણી વેબસાઇટમાં અમુક ઍક્શન પૂર્ણ કરી શકે છે</translation> <translation id="683440813066116847">mDNS ટ્રાફિકને મંજૂરી આપવા માટે Google Chrome કૅનેરી માટે ઇનબાઉન્ડ નિયમ.</translation> <translation id="6881299373831449287">Chrome અપડેટ કરી રહ્યાં છીએ</translation> <translation id="6885412569789873916">Chrome બીટા ઍપ્લિકેશનો</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hi.xtb b/chrome/app/resources/google_chrome_strings_hi.xtb index c415461..cb7f2aa 100644 --- a/chrome/app/resources/google_chrome_strings_hi.xtb +++ b/chrome/app/resources/google_chrome_strings_hi.xtb
@@ -78,6 +78,7 @@ <translation id="2401189691232800402">ChromeOS सिस्टम</translation> <translation id="2467438592969358367">Google Chrome आपके पासवर्ड निर्यात करना चाहता है. इसकी मंज़ूरी देने के लिए अपना Windows पासवर्ड लिखें.</translation> <translation id="2485422356828889247">विस्थापित करें</translation> +<translation id="2494974097748878569">Chrome में Google Assistant</translation> <translation id="2534507159460261402">Google Pay (Chrome पर कॉपी किया गया)</translation> <translation id="2559253115192232574">Chrome जब आपकी पसंद का अनुमान लगा लेता है, तब आपके किसी दूसरी साइट पर जाने पर, वह साइट Chrome से आपकी पसंद जानने की अनुमति मांग सकती है. साइट यह अनुमति इसलिए मांगती है, ताकि वह आपको आपकी पसंद के हिसाब से विज्ञापन दिखा सके. Chrome आपकी पसंद के ज़्यादा से ज़्यादा तीन विषयों की जानकारी शेयर कर सकता है.</translation> <translation id="2563121210305478421">Chrome को फिर से लॉन्च करें?</translation> @@ -278,6 +279,7 @@ <translation id="6739177684496155661">क्या आप नई Chrome प्रोफ़ाइल में ब्राउज़िंग जारी रखना चाहते हैं?</translation> <translation id="6750954913813541382">वर्तनी की गलती को ठीक करने के लिए, आप ब्राउज़र में जो कुछ भी लिखते हैं, Chrome उसे Google को भेज देता है</translation> <translation id="677276454032249905">फिर भी Chrome से बाहर निकलें?</translation> +<translation id="6785872064505734160">Chrome में Google Assistant की सुविधा, सभी वेबसाइटों पर आपके निर्देश पर काम कर सकती है</translation> <translation id="683440813066116847">mDNS ट्रैफ़िक की अनुमति देने के लिए Google Chrome Canary के लिए इनबाउंड नियम.</translation> <translation id="6881299373831449287">Chrome को अपडेट किया जा रहा है</translation> <translation id="6885412569789873916">Chrome बीटा ऐप्लिकेशन</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hr.xtb b/chrome/app/resources/google_chrome_strings_hr.xtb index a8ddb168..7fe3eaa1 100644 --- a/chrome/app/resources/google_chrome_strings_hr.xtb +++ b/chrome/app/resources/google_chrome_strings_hr.xtb
@@ -78,6 +78,7 @@ <translation id="2401189691232800402">Sustav Chrome OS</translation> <translation id="2467438592969358367">Google Chrome želi izvesti vaše zaporke. Upišite svoju zaporku za Windows da biste to dopustili.</translation> <translation id="2485422356828889247">Deinstaliraj</translation> +<translation id="2494974097748878569">Google asistent u Chromeu</translation> <translation id="2534507159460261402">Google Pay (kopirano na Chrome)</translation> <translation id="2559253115192232574">Web-lokacija koju posjetite nakon toga može od Chromea tražiti podatke o vašim interesima kako bi prilagodila oglase koji će vam se prikazivati. Chrome može dijeliti najviše tri interesa.</translation> <translation id="2563121210305478421">Ponovo pokrenuti Chrome?</translation> @@ -273,6 +274,7 @@ <translation id="6739177684496155661">Želite li nastaviti na novom profilu u Chromeu?</translation> <translation id="6750954913813541382">Chrome šalje Googleu tekst koji utipkate u preglednik radi ispravljanja pravopisnih pogrešaka</translation> <translation id="677276454032249905">Želite li ipak zatvoriti Chrome?</translation> +<translation id="6785872064505734160">Google asistent u Chromeu može dovršiti radnje u web-lokacijama za vas</translation> <translation id="683440813066116847">Ulazno pravilo kako bi Google Chrome Canary dopustio mDNS promet.</translation> <translation id="6881299373831449287">Ažuriranje Chromea</translation> <translation id="6885412569789873916">Aplikacije preglednika Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hu.xtb b/chrome/app/resources/google_chrome_strings_hu.xtb index c5db912f..f0eeffe9 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="2401189691232800402">ChromeOS rendszer</translation> <translation id="2467438592969358367">A Google Chrome exportálni szeretné a jelszavakat. Ennek engedélyezéséhez írja be Windows-jelszavát.</translation> <translation id="2485422356828889247">Eltávolítás</translation> +<translation id="2494974097748878569">Google Segéd a Chrome-ban</translation> <translation id="2534507159460261402">Google Pay (a Chrome-ba másolva)</translation> <translation id="2559253115192232574">Később az Ön által felkeresett webhelyek a megjelenő hirdetések személyre szabása érdekében kérhetik a Chrome-tól az Ön érdeklődési köreinek megismerését. A Chrome legfeljebb három érdeklődési kört oszthat meg.</translation> <translation id="2563121210305478421">Újraindítja a Chrome-ot?</translation> @@ -274,6 +275,7 @@ <translation id="6739177684496155661">Biztosan új Chrome-profilban folytatja?</translation> <translation id="6750954913813541382">A nyelvtani hibák javítása érdekében a Chrome elküldi a böngészőben begépelt összes szöveget a Google-nak</translation> <translation id="677276454032249905">Biztosan kilép a Chrome-ból?</translation> +<translation id="6785872064505734160">A „Google Segéd a Chrome-ban” elvégezhet bizonyos műveleteket Önnek a különböző webhelyeken</translation> <translation id="683440813066116847">Bejövő szabály a Google Chrome Canaryhoz az mDNS forgalom engedélyezése céljából.</translation> <translation id="6881299373831449287">A Chrome frissítése</translation> <translation id="6885412569789873916">Chrome Beta-alkalmazások</translation>
diff --git a/chrome/app/resources/google_chrome_strings_hy.xtb b/chrome/app/resources/google_chrome_strings_hy.xtb index fb051f0c..43b38c4 100644 --- a/chrome/app/resources/google_chrome_strings_hy.xtb +++ b/chrome/app/resources/google_chrome_strings_hy.xtb
@@ -78,6 +78,7 @@ <translation id="2401189691232800402">ChromeOS համակարգ</translation> <translation id="2467438592969358367">Google Chrome-ն ուզում է արտահանել ձեր գաղտնաբառերը: Թույլատրելու համար մուտքագրեք Windows-ի ձեր գաղտնաբառը:</translation> <translation id="2485422356828889247">Ապատեղադրել</translation> +<translation id="2494974097748878569">Google Օգնականը Chrome-ում</translation> <translation id="2534507159460261402">Google Pay (պատճենվել է Chrome-ում)</translation> <translation id="2559253115192232574">Ավելի ուշ կայքը, որն այցելում եք, կարող է Chrome-ից ձեր հետաքրքրությունները տեսնելու թույլտվություն խնդրել՝ ձեզ ցուցադրվող գովազդն անհատականացնելու նպատակով։ Chrome-ը կարող է հասանելի դարձնել ձեր մինչև 3 հետաքրքրությունների մասին տեղեկությունները։</translation> <translation id="2563121210305478421">Վերագործարկե՞լ Chrome-ը</translation> @@ -277,6 +278,7 @@ <translation id="6739177684496155661">Շարունակե՞լ Chrome-ի նոր պրոֆիլով</translation> <translation id="6750954913813541382">Ուղղագրական սխալները շտկելու համար Chrome-ը Google-ին է ուղարկում դիտարկիչում ձեր մուտքագրած տեքստը</translation> <translation id="677276454032249905">Փակե՞լ Chrome-ը։</translation> +<translation id="6785872064505734160">Google Օգնականը Chrome-ում կարող է կայքերի հետ կապված գործողություններ կատարել</translation> <translation id="683440813066116847">Թույլատրել Google Chrome Canary-ում տվյալների մուտքային հոսքի փոխանցումը mDNS հաղորդակարգով:</translation> <translation id="6881299373831449287">Chrome-ի թարմացում</translation> <translation id="6885412569789873916">Chrome Բետա հավելվածներ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_id.xtb b/chrome/app/resources/google_chrome_strings_id.xtb index cd6fe27..2aed030 100644 --- a/chrome/app/resources/google_chrome_strings_id.xtb +++ b/chrome/app/resources/google_chrome_strings_id.xtb
@@ -78,6 +78,7 @@ <translation id="2401189691232800402">Sistem ChromeOS</translation> <translation id="2467438592969358367">Google Chrome ingin mengekspor sandi. Ketik sandi Windows Anda untuk mengizinkannya.</translation> <translation id="2485422356828889247">Uninstal</translation> +<translation id="2494974097748878569">Asisten Google di Chrome</translation> <translation id="2534507159460261402">Google Pay (disalin ke Chrome)</translation> <translation id="2559253115192232574">Kemudian, situs yang Anda buka dapat meminta Chrome untuk melihat minat Anda agar dapat mempersonalisasi iklan yang Anda lihat. Chrome dapat membagikan hingga 3 minat.</translation> <translation id="2563121210305478421">Luncurkan kembali Chrome?</translation> @@ -274,6 +275,7 @@ <translation id="6739177684496155661">Lanjutkan di profil Chrome baru?</translation> <translation id="6750954913813541382">Untuk memperbaiki kesalahan ejaan, Chrome mengirim teks yang Anda ketikkan di browser ke Google</translation> <translation id="677276454032249905">Tetap tutup Chrome?</translation> +<translation id="6785872064505734160">Asisten Google di Chrome dapat menyelesaikan tindakan di seluruh situs untuk Anda</translation> <translation id="683440813066116847">Inbound rule untuk Google Chrome Canary guna mengizinkan lalu lintas mDNS.</translation> <translation id="6881299373831449287">Mengupdate Chrome</translation> <translation id="6885412569789873916">Aplikasi Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_is.xtb b/chrome/app/resources/google_chrome_strings_is.xtb index d4eb4ec3..6693cce6 100644 --- a/chrome/app/resources/google_chrome_strings_is.xtb +++ b/chrome/app/resources/google_chrome_strings_is.xtb
@@ -81,6 +81,7 @@ <translation id="2401189691232800402">ChromeOS kerfi</translation> <translation id="2467438592969358367">Google Chrome vill flytja út aðgangsorðin þín. Sláðu inn Windows-aðgangsorðið þitt til að leyfa það.</translation> <translation id="2485422356828889247">Fjarlægja</translation> +<translation id="2494974097748878569">Google hjálpari í Chrome</translation> <translation id="2534507159460261402">Google Pay (afritað í Chrome)</translation> <translation id="2559253115192232574">Seinna getur vefsvæði sem þú opnar beðið Chrome um að sýna áhugasvið þitt til að hægt sé að sérsníða auglýsingarnar sem þú sérð. Chrome getur deilt allt að 3 áhugasviðum.</translation> <translation id="2563121210305478421">Endurræsa Chrome?</translation> @@ -281,6 +282,7 @@ <translation id="6739177684496155661">Halda áfram á nýjum Chrome prófíl?</translation> <translation id="6750954913813541382">Til að lagfæra stafsetningarvillur sendir Chrome textann sem þú skrifar í vafranum til Google</translation> <translation id="677276454032249905">Viltu samt loka Chrome?</translation> +<translation id="6785872064505734160">Google hjálparinn í Chrome getur lokið aðgerðum á ýmsum vefsíðum fyrir þig</translation> <translation id="683440813066116847">Regla á innleið til að láta Google Chrome Canary leyfa mDNS-umferð.</translation> <translation id="6881299373831449287">Uppfærir Chrome</translation> <translation id="6885412569789873916">Chrome Beta forrit</translation>
diff --git a/chrome/app/resources/google_chrome_strings_it.xtb b/chrome/app/resources/google_chrome_strings_it.xtb index 8455f04..4b054f3 100644 --- a/chrome/app/resources/google_chrome_strings_it.xtb +++ b/chrome/app/resources/google_chrome_strings_it.xtb
@@ -76,6 +76,7 @@ <translation id="2401189691232800402">Sistema Chrome OS</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="2494974097748878569">Assistente Google in Chrome</translation> <translation id="2534507159460261402">Google Pay (copiata in Chrome)</translation> <translation id="2559253115192232574">Dopodiché, un sito che visiti può chiedere a Chrome di conoscere i tuoi interessi per personalizzare gli annunci che ti vengono mostrati. Chrome può condividere fino a 3 interessi.</translation> <translation id="2563121210305478421">Vuoi riavviare Chrome?</translation> @@ -272,6 +273,7 @@ <translation id="6739177684496155661">Vuoi continuare con un nuovo profilo Chrome?</translation> <translation id="6750954913813541382">Per correggere gli errori ortografici, Chrome invia a Google il testo che digiti nel browser</translation> <translation id="677276454032249905">Vuoi uscire comunque da Chrome?</translation> +<translation id="6785872064505734160">L'Assistente Google in Chrome può completare azioni per te su vari siti web</translation> <translation id="683440813066116847">Regola inbound per consentire il traffico mDNS in Google Chrome Canary.</translation> <translation id="6881299373831449287">Aggiornamento di Chrome</translation> <translation id="6885412569789873916">App di Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_iw.xtb b/chrome/app/resources/google_chrome_strings_iw.xtb index baa1ae0..3173612 100644 --- a/chrome/app/resources/google_chrome_strings_iw.xtb +++ b/chrome/app/resources/google_chrome_strings_iw.xtb
@@ -78,6 +78,7 @@ <translation id="2401189691232800402">מערכת ChromeOS</translation> <translation id="2467438592969358367">Google Chrome רוצה לייצא את הסיסמאות שלך. יש להקליד את הסיסמה שלך ל-Windows כדי לאפשר זאת.</translation> <translation id="2485422356828889247">הסרת התקנה</translation> +<translation id="2494974097748878569">Google Assistant ב-Chrome</translation> <translation id="2534507159460261402">Google Pay (הועתק ל-Chrome)</translation> <translation id="2559253115192232574">לאחר מכן, אתר שבו ביקרת יכול לשלוח בקשה ל-Chrome כדי לגלות מהם תחומי העניין שלך ולהתאים אישית את המודעות שמוצגות לך. Chrome יכול לשתף עד 3 תחומי עניין.</translation> <translation id="2563121210305478421">להפעיל את Chrome מחדש?</translation> @@ -274,6 +275,7 @@ <translation id="6739177684496155661">להמשיך בפרופיל Chrome חדש?</translation> <translation id="6750954913813541382">כדי לתקן שגיאות כתיב, הטקסט שהוקלד על ידך בדפדפן נשלח אל Google על ידי Chrome</translation> <translation id="677276454032249905">לסגור את Chrome בכל זאת?</translation> +<translation id="6785872064505734160">Google Assistant ב-Chrome יכולה להשלים עבורך פעולות באתרים</translation> <translation id="683440813066116847">כלל נכנס עבור הגרסה הניסיונית של Google Chrome על מנת לאפשר תנועת mDNS.</translation> <translation id="6881299373831449287">מתבצע עדכון של Chrome</translation> <translation id="6885412569789873916">אפליקציות לגרסת הבטא של Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ja.xtb b/chrome/app/resources/google_chrome_strings_ja.xtb index 33a82efc..3f87057 100644 --- a/chrome/app/resources/google_chrome_strings_ja.xtb +++ b/chrome/app/resources/google_chrome_strings_ja.xtb
@@ -77,6 +77,7 @@ <translation id="2401189691232800402">Chrome OS システム</translation> <translation id="2467438592969358367">Google Chrome からパスワードをエクスポートするための許可を求められています。許可するには Windows のパスワードを入力してください。</translation> <translation id="2485422356828889247">アンインストール</translation> +<translation id="2494974097748878569">Chrome の Google アシスタント</translation> <translation id="2534507159460261402">Google Pay(Chrome にコピー)</translation> <translation id="2559253115192232574">その後、アクセスしたサイトは、表示する広告をカスタマイズするために、Chrome にユーザーの興味 / 関心を提示するよう依頼できます。Chrome では、興味 / 関心を 3 つまで共有できます。</translation> <translation id="2563121210305478421">Chrome を再起動しますか?</translation> @@ -272,6 +273,7 @@ <translation id="6739177684496155661">新しい Chrome プロファイルで続行しますか?</translation> <translation id="6750954913813541382">スペルミスを修正するために、ブラウザに入力したテキストが Chrome から Google に送信されます</translation> <translation id="677276454032249905">今すぐ Chrome を終了しますか?</translation> +<translation id="6785872064505734160">Chrome の Google アシスタントは、ユーザーに代わってウェブサイトでの操作を完了できます</translation> <translation id="683440813066116847">mDNS トラフィックを許可する Google Chrome Canary のインバウンド ルールです。</translation> <translation id="6881299373831449287">Chrome を更新しています</translation> <translation id="6885412569789873916">Chrome ベータ版アプリ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ka.xtb b/chrome/app/resources/google_chrome_strings_ka.xtb index 20548c31..9bc8c85 100644 --- a/chrome/app/resources/google_chrome_strings_ka.xtb +++ b/chrome/app/resources/google_chrome_strings_ka.xtb
@@ -81,6 +81,7 @@ <translation id="2401189691232800402">ChromeOS სისტემა</translation> <translation id="2467438592969358367">Google Chrome ითხოვს თქვენი პაროლების ექსპორტირებას. აღნიშნულის დასაშვებად აკრიფეთ თქვენი Windows-ის პაროლი.</translation> <translation id="2485422356828889247">დეინსტალაცია</translation> +<translation id="2494974097748878569">Google ასისტენტი Chrome-ში</translation> <translation id="2534507159460261402">Google Pay (Chrome-ში კოპირებული)</translation> <translation id="2559253115192232574">მოგვიანებით, თქვენ მიერ მონახულებულ საიტს საშუალება ექნება, Chrome-ს სთხოვოს თქვენი ინტერესების ჩვენება, თქვენთვის ხილული რეკლამის პერსონალიზების მიზნით. Chrome-ს შეუძლია 3-მდე ინტერესის გაზიარება.</translation> <translation id="2563121210305478421">გსურთ Chrome-ის ხელახლა გაშვება?</translation> @@ -280,6 +281,7 @@ <translation id="6739177684496155661">გსურთ ახალ Chrome პროფილში გაგრძელება?</translation> <translation id="6750954913813541382">მართლწერის შეცდომების შესასწორებლად Chrome უგზავნის Google-ს თქვენ მიერ ბრაუზერში აკრეფილ ტექსტს</translation> <translation id="677276454032249905">მაინც გსურთ Chrome-იდან გასვლა?</translation> +<translation id="6785872064505734160">Google ასისტენტს Chrome-ში გახსნილ სხვადასხვა ვებსაიტზე შეუძლია გარკვეული მოქმედების შესრულება თქვენ ნაცვლად</translation> <translation id="683440813066116847">შიდა წესი Google Chrome Canary-ისთვის mDNS ტრაფიკის დასაშვებად.</translation> <translation id="6881299373831449287">მიმდინარეობს Chrome-ის განახლება</translation> <translation id="6885412569789873916">Chrome Beta აპები</translation>
diff --git a/chrome/app/resources/google_chrome_strings_kk.xtb b/chrome/app/resources/google_chrome_strings_kk.xtb index 46439c9..f82506c 100644 --- a/chrome/app/resources/google_chrome_strings_kk.xtb +++ b/chrome/app/resources/google_chrome_strings_kk.xtb
@@ -80,6 +80,7 @@ <translation id="2401189691232800402">ChromeOS жүйесі</translation> <translation id="2467438592969358367">Google Chrome құпия сөздерді экспорттағысы келеді. Бұған рұқсат беру үшін Windows құпия сөзіңізді теріңіз.</translation> <translation id="2485422356828889247">Жою</translation> +<translation id="2494974097748878569">Chrome браузеріндегі Google Assistant</translation> <translation id="2534507159460261402">Google Pay (Chrome браузеріне көшірілген)</translation> <translation id="2559253115192232574">Кейін сіз кірген сайт жарнамаларды жекелендіру үшін Chrome браузерінен қызығушылықтарыңыз туралы ақпаратты сұрап алады. Chrome браузері ең көбі 3 қызығушылықты бөлісуі мүмкін.</translation> <translation id="2563121210305478421">Chrome қайта іске қосылсын ба?</translation> @@ -279,6 +280,7 @@ <translation id="6739177684496155661">Жаңа Chrome профилінде жалғастырылсын ба?</translation> <translation id="6750954913813541382">Емле қателерін түзету үшін Chrome браузерде терілетін мәтінді Google-ға жібереді.</translation> <translation id="677276454032249905">Chrome браузерінен бәрібір шығасыз ба?</translation> +<translation id="6785872064505734160">Chrome браузерінде Google Assistant сіз үшін веб-сайттар арқылы әрекеттер орындай алады.</translation> <translation id="683440813066116847">mDNS трафигіне рұқсат беретін Google Chrome кіріс ережесі.</translation> <translation id="6881299373831449287">Chrome жаңартылуда</translation> <translation id="6885412569789873916">Chrome Beta қолданбалары</translation>
diff --git a/chrome/app/resources/google_chrome_strings_km.xtb b/chrome/app/resources/google_chrome_strings_km.xtb index 729be33..aae0a31e 100644 --- a/chrome/app/resources/google_chrome_strings_km.xtb +++ b/chrome/app/resources/google_chrome_strings_km.xtb
@@ -82,6 +82,7 @@ <translation id="2401189691232800402">ប្រព័ន្ធ ChromeOS</translation> <translation id="2467438592969358367">Google Chrome ចង់នាំចេញពាក្យសម្ងាត់របស់អ្នក។ សូមវាយបញ្ចូលពាក្យសម្ងាត់ Windows របស់អ្នកដើម្បីអនុញ្ញាតការនាំចេញនេះ។</translation> <translation id="2485422356828889247">លុប</translation> +<translation id="2494974097748878569">Google ជំនួយការនៅក្នុង Chrome</translation> <translation id="2534507159460261402">Google Pay (បានចម្លងទៅ Chrome)</translation> <translation id="2559253115192232574">នៅពេលក្រោយ គេហទំព័រដែលអ្នកចូលមើលអាចស្នើសុំ Chrome មើលចំណាប់អារម្មណ៍របស់អ្នក ដើម្បីកំណត់ការផ្សាយពាណិជ្ជកម្មដែលអ្នកមើលឃើញឱ្យស្របនឹងអ្នក។ Chrome អាចចែករំលែកចំណាប់អារម្មណ៍បានរហូតដល់ 3។</translation> <translation id="2563121210305478421">ចាប់ផ្ដើម Chrome ឡើងវិញឬ?</translation> @@ -281,6 +282,7 @@ <translation id="6739177684496155661">បន្តនៅក្នុងកម្រងព័ត៌មាន Chrome ថ្មីឬ?</translation> <translation id="6750954913813541382">Chrome ផ្ញើអក្សរដែលអ្នកវាយបញ្ចូលនៅក្នុងកម្មវិធីរុករកតាមអ៊ីនធឺណិតទៅ Google ដើម្បីកែកំហុសអក្ខរាវិរុទ្ធ</translation> <translation id="677276454032249905">នៅតែចង់ចាកចេញពី Chrome ឬ?</translation> +<translation id="6785872064505734160">Google ជំនួយការនៅក្នុង Chrome អាចបញ្ចប់សកម្មភាពនៅលើគេហទំព័រជូនអ្នកបាន</translation> <translation id="683440813066116847">វិន័យត្រលប់ចូលសម្រាប់ Google Chrome Canary ដើម្បីអនុញ្ញាតចរាចរណ៍ mDNS។</translation> <translation id="6881299373831449287">កំពុងដំឡើងកំណែ Chrome</translation> <translation id="6885412569789873916">កម្មវិធី Chrome បេតា</translation>
diff --git a/chrome/app/resources/google_chrome_strings_kn.xtb b/chrome/app/resources/google_chrome_strings_kn.xtb index 99700bf..402f8939 100644 --- a/chrome/app/resources/google_chrome_strings_kn.xtb +++ b/chrome/app/resources/google_chrome_strings_kn.xtb
@@ -79,6 +79,7 @@ <translation id="2401189691232800402">ChromeOS ಸಿಸ್ಟಂ</translation> <translation id="2467438592969358367">Google Chrome ನಿಮ್ಮ ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ರಫ್ತು ಮಾಡಲು ಬಯಸುತ್ತದೆ. ಇದನ್ನು ಅನುಮತಿಸಲು ನಿಮ್ಮ Windows ಪಾಸ್ವರ್ಡ್ ಟೈಪ್ ಮಾಡಿ.</translation> <translation id="2485422356828889247">ಅನ್ಇನ್ಸ್ಟಾಲ್</translation> +<translation id="2494974097748878569">Chrome ನಲ್ಲಿನ Google Assistant</translation> <translation id="2534507159460261402">Google Pay (Chrome ಗೆ ನಕಲಿಸಲಾಗಿದೆ)</translation> <translation id="2559253115192232574">ಆನಂತರ, ನೀವು ಭೇಟಿ ನೀಡುವ ಸೈಟ್ ನಿಮಗೆ ಕಾಣಿಸುವ ಜಾಹೀರಾತುಗಳನ್ನು ವೈಯಕ್ತಿಕಗೊಳಿಸಲು ನಿಮ್ಮ ಆಸಕ್ತಿಗಳನ್ನು ತೋರಿಸುವಂತೆ Chrome ಅನ್ನು ಕೇಳಬಹುದು. Chrome ಗರಿಷ್ಠ 3 ಆಸಕ್ತಿಗಳನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು.</translation> <translation id="2563121210305478421">Chrome ಮರುಪ್ರಾರಂಭಿಸಬೇಕೆ?</translation> @@ -275,6 +276,7 @@ <translation id="6739177684496155661">ಹೊಸ Chrome ಪ್ರೊಫೈಲ್ನಲ್ಲಿ ಮುಂದುವರಿಯಬೇಕೆ?</translation> <translation id="6750954913813541382">ಕಾಗುಣಿತ ದೋಷಗಳನ್ನು ಸರಿಪಡಿಸಲು, Chrome, ನೀವು ಬ್ರೌಸರ್ನಲ್ಲಿ ಟೈಪ್ ಮಾಡುವ ಪಠ್ಯವನ್ನು Google ಗೆ ಕಳುಹಿಸುತ್ತದೆ</translation> <translation id="677276454032249905">ಹೇಗಿದ್ದರೂ Chrome ನಿಂದ ನಿರ್ಗಮಿಸುವುದೇ?</translation> +<translation id="6785872064505734160">Chrome ನಲ್ಲಿರುವ Google Assistant, ನಿಮಗಾಗಿ ವೆಬ್ಸೈಟ್ಗಳಾದ್ಯಂತದ ಕ್ರಿಯೆಗಳನ್ನು ಪೂರ್ಣಗೊಳಿಸಬಲ್ಲದು</translation> <translation id="683440813066116847">mDNS ಟ್ರಾಫಿಕ್ಗೆ ಅನುಮತಿಸುವ ನಿಟ್ಟಿನಲ್ಲಿ Google Chrome ಕ್ಯಾನರಿಗೆ ಒಳಬರುವ ನಿಯಮ.</translation> <translation id="6881299373831449287">Chrome ಅನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಲಾಗುತ್ತಿದೆ</translation> <translation id="6885412569789873916">Chrome ಬೀಟಾ ಅಪ್ಲಿಕೇಶನ್ಗಳು</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ko.xtb b/chrome/app/resources/google_chrome_strings_ko.xtb index 5654cf4..60d7e3538 100644 --- a/chrome/app/resources/google_chrome_strings_ko.xtb +++ b/chrome/app/resources/google_chrome_strings_ko.xtb
@@ -82,6 +82,7 @@ <translation id="2401189691232800402">ChromeOS 시스템</translation> <translation id="2467438592969358367">Chrome에서 비밀번호를 내보내려고 합니다. 허용하려면 Windows 비밀번호를 입력하세요.</translation> <translation id="2485422356828889247">제거</translation> +<translation id="2494974097748878569">Chrome의 Google 어시스턴트</translation> <translation id="2534507159460261402">Google Pay(Chrome에 복사됨)</translation> <translation id="2559253115192232574">이후 방문한 사이트에서 광고 개인 최적화를 위해 내 관심분야를 알려달라고 Chrome에 요청할 수 있습니다. Chrome은 최대 3개의 관심분야를 공유할 수 있습니다.</translation> <translation id="2563121210305478421">Chrome을 다시 시작하시겠습니까?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">새 Chrome 프로필에서 계속하시겠습니까?</translation> <translation id="6750954913813541382">맞춤법 오류를 바로잡기 위해 Chrome에서 브라우저에 입력된 텍스트를 Google로 전송합니다.</translation> <translation id="677276454032249905">Chrome을 종료하시겠습니까?</translation> +<translation id="6785872064505734160">Chrome의 Google 어시스턴트가 사용자를 위해 여러 웹사이트에서 작업을 완료할 수 있습니다.</translation> <translation id="683440813066116847">Chrome Canary가 mDNS 트래픽을 허용하는 인바운드 규칙입니다.</translation> <translation id="6881299373831449287">Chrome 업데이트 중</translation> <translation id="6885412569789873916">Chrome 베타 앱</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ky.xtb b/chrome/app/resources/google_chrome_strings_ky.xtb index 4d11938..1a81fa4 100644 --- a/chrome/app/resources/google_chrome_strings_ky.xtb +++ b/chrome/app/resources/google_chrome_strings_ky.xtb
@@ -82,6 +82,7 @@ <translation id="2401189691232800402">ChromeOS тутуму</translation> <translation id="2467438592969358367">Google Chrome сырсөздөрүңүздү экспорттогону жатат. Ага уруксат берүү үчүн Windows аккаунтуңуздун сырсөзүн териңиз.</translation> <translation id="2485422356828889247">Орнотуудан чыгаруу</translation> +<translation id="2494974097748878569">Chrome'догу Google Жардамчы</translation> <translation id="2534507159460261402">Google Pay (Chrome'го көчүрүлдү)</translation> <translation id="2559253115192232574">Кийинчерээк сиз баш баккан сайттар Chrome'дон кызыккан нерселериңиз тууралуу маалымат алып, ылайыктуу жарнамаларды көрсөтө алат. Chrome 3 кызыккан нерсеңизди бөлүшө алат.</translation> <translation id="2563121210305478421">Chrome'ду кайра иштетесизби?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">Жаңы Chrome профилинде улантасызбы?</translation> <translation id="6750954913813541382">Орфографиялык каталарды оңдоо үчүн Chrome серепчиде терилген текстти Google кызматтарына жөнөтүп турат</translation> <translation id="677276454032249905">Баары бир Chrome'дон чыгасызбы?</translation> +<translation id="6785872064505734160">Chrome'догу Google Жардамчы вебсайттардагы аракеттерди сиз үчүн аткара алат</translation> <translation id="683440813066116847">mDNS трафигине мүмкүндүк берүү үчүн Google Chrome Canary'нин кайрылуу эрежеси.</translation> <translation id="6881299373831449287">Chrome жаңыртылууда</translation> <translation id="6885412569789873916">Chrome Бета Колдонмолору</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lo.xtb b/chrome/app/resources/google_chrome_strings_lo.xtb index 05ce37b..7de30ee1 100644 --- a/chrome/app/resources/google_chrome_strings_lo.xtb +++ b/chrome/app/resources/google_chrome_strings_lo.xtb
@@ -82,6 +82,7 @@ <translation id="2401189691232800402">ລະບົບ ChromeOS</translation> <translation id="2467438592969358367">Google Chrome ຕ້ອງການສົ່ງອອກລະຫັດຜ່ານຂອງທ່ານ. ກະລຸນາພິມລະຫັດຜ່ານ Windows ຂອງທ່ານ ເພື່ອອະນຸຍາດສິ່ງນີ້.</translation> <translation id="2485422356828889247">ຖອນຕິດຕັ້ງ</translation> +<translation id="2494974097748878569">ຜູ້ຊ່ວຍ Google ໃນ Chrome</translation> <translation id="2534507159460261402">Google Pay (ສຳເນົາໄວ້ໃນ Chrome ແລ້ວ)</translation> <translation id="2559253115192232574">ເວັບໄຊໃດໜຶ່ງທີ່ທ່ານເຂົ້າເບິ່ງຈະສາມາດຂໍ Chrome ເພື່ອເບິ່ງຄວາມສົນໃຈຂອງທ່ານໃນພາຍຫຼັງໄດ້ເພື່ອປັບແຕ່ງໂຄສະນາທີ່ທ່ານເຫັນໃຫ້ເປັນສ່ວນຕົວ. Chrome ສາມາດແບ່ງປັນຄວາມສົນໃຈໄດ້ສູງສຸດ 3 ຢ່າງ.</translation> <translation id="2563121210305478421">ເລີ່ມເປີດໃຊ້ Chrome ໃໝ່ບໍ?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">ສືບຕໍ່ໃນໂປຣໄຟລ໌ Chrome ໃໝ່ບໍ?</translation> <translation id="6750954913813541382">ເພື່ອແກ້ໄຂຂໍ້ຜິດພາດກ່ຽວກັບການສະກົດຄຳ, Chrome ສົ່ງຂໍ້ຄວາມທີ່ທ່ານພິມໃນໂປຣແກຣມທ່ອງເວັບໃຫ້ Google</translation> <translation id="677276454032249905">ຢືນຢັນການອອກຈາກ Chrome ບໍ?</translation> +<translation id="6785872064505734160">ຜູ້ຊ່ວຍ Google ໃນ Chrome ສາມາດເຮັດຄຳສັ່ງຕ່າງໆໃຫ້ສຳເລັດໃນທົ່ວເວັບໄຊໃຫ້ທ່ານໄດ້</translation> <translation id="683440813066116847">ກົດລະບຽບຂາເຂົ້າສໍາລັບ Google Chrome Canary ເພື່ອອະນຸຍາດໃຫ້ການຈາລະຈອນ mDNS.</translation> <translation id="6881299373831449287">ກຳລັງອັບເດດ Chrome</translation> <translation id="6885412569789873916">ແອັບ Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lt.xtb b/chrome/app/resources/google_chrome_strings_lt.xtb index a624ffd..effa2a9 100644 --- a/chrome/app/resources/google_chrome_strings_lt.xtb +++ b/chrome/app/resources/google_chrome_strings_lt.xtb
@@ -29,7 +29,7 @@ <translation id="1516530951338665275">„Google Chrome“ reikia pasiekti „Bluetooth“, kad galėtų sieti toliau. <ph name="IDS_BLUETOOTH_DEVICE_CHOOSER_AUTHORIZE_BLUETOOTH_LINK" /></translation> <translation id="1547295885616600893">„Chrome“ OS pasiekiama naudojant papildomą <ph name="BEGIN_LINK_CROS_OSS" />atvirojo šaltinio programinę įrangą<ph name="END_LINK_CROS_OSS" />.</translation> -<translation id="1553358976309200471">Atnaujinkite „Chrome“</translation> +<translation id="1553358976309200471">Atnaujinti „Chrome“</translation> <translation id="1583073672411044740">Naudotojas (<ph name="EXISTING_USER" />) jau yra prisijungęs prie šio „Chrome“ profilio. Bus sukurtas naujas <ph name="USER_EMAIL_ADDRESS" /> „Chrome“ profilis</translation> <translation id="1587223624401073077">„Google Chrome“ naudoja jūsų fotoaparatą.</translation> <translation id="1587325591171447154">Failas „<ph name="FILE_NAME" />“ pavojingas, todėl „Chrome“ jį užblokavo.</translation> @@ -82,6 +82,7 @@ <translation id="2401189691232800402">„Chrome“ OS sistema</translation> <translation id="2467438592969358367">„Google Chrome“ nori eksportuoti jūsų slaptažodžius. Įveskite „Windows“ slaptažodį, kad tai leistumėte.</translation> <translation id="2485422356828889247">Pašalinti</translation> +<translation id="2494974097748878569">„Google Assistant“ sistemoje</translation> <translation id="2534507159460261402">„Google Pay“ (nukopijuota į „Chrome“)</translation> <translation id="2559253115192232574">Vėliau svetainė, kurioje lankotės, gali paprašyti „Chrome“ peržiūrėti jūsų pomėgius, kad galėtų suasmeninti jūsų matomus skelbimus. „Chrome“ gali bendrinti iki 3 pomėgių.</translation> <translation id="2563121210305478421">Iš naujo paleisti „Chrome“?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">Tęsti naudojant naują „Chrome“ profilį?</translation> <translation id="6750954913813541382">Kad ištaisytų rašybos klaidas, „Chrome“ tekstą, kurį įvedate naršyklėje, siunčia „Google“</translation> <translation id="677276454032249905">Vis tiek išeiti iš „Chrome“?</translation> +<translation id="6785872064505734160">„Google“ padėjėjas naršyklėje „Chrome“ gali atlikti veiksmus svetainėse už jus</translation> <translation id="683440813066116847">„Canary“ versijos „Google Chrome“ skirta taisyklė, pagal kurią leidžiamas gaunamas mDNS srautas.</translation> <translation id="6881299373831449287">„Chrome“ atnaujinimas</translation> <translation id="6885412569789873916">„Chrome“ beta versijos programos</translation>
diff --git a/chrome/app/resources/google_chrome_strings_lv.xtb b/chrome/app/resources/google_chrome_strings_lv.xtb index 40db4dd..b3f075e 100644 --- a/chrome/app/resources/google_chrome_strings_lv.xtb +++ b/chrome/app/resources/google_chrome_strings_lv.xtb
@@ -78,6 +78,7 @@ <translation id="2401189691232800402">Chrome OS sistēma</translation> <translation id="2467438592969358367">Pārlūkā Google Chrome tiek mēģināts eksportēt jūsu paroles. Lai to atļautu, ierakstiet savu Windows paroli.</translation> <translation id="2485422356828889247">Atinstalēt</translation> +<translation id="2494974097748878569">Google asistents pārlūkprogrammā Chrome</translation> <translation id="2534507159460261402">Google Pay (kopēts pārlūkā Chrome)</translation> <translation id="2559253115192232574">Vēlāk kāda jūsu apmeklēta vietne var pieprasīt pārlūkam Chrome atļauju skatīt jūsu intereses, lai personalizētu jums rādāmās reklāmas. Pārlūks Chrome var kopīgot līdz trim interesēm.</translation> <translation id="2563121210305478421">Vai atkārtoti palaist pārlūkprogrammu Chrome?</translation> @@ -275,6 +276,7 @@ <translation id="6739177684496155661">Vai turpināt jaunā Chrome profilā?</translation> <translation id="6750954913813541382">Lai labotu pareizrakstības kļūdas, Chrome nosūta jūsu pārlūkprogrammā ievadīto tekstu Google serveriem</translation> <translation id="677276454032249905">Vai tik un tā aizvērt pārlūku Chrome?</translation> +<translation id="6785872064505734160">Google asistents pārlūkprogrammā Chrome var veikt darbības vietnēs jūsu vārdā.</translation> <translation id="683440813066116847">Ienākošo savienojumu kārtula pārlūkam Google Chrome Canary, lai atļautu mDNS datplūsmu.</translation> <translation id="6881299373831449287">Notiek Chrome atjaunināšana</translation> <translation id="6885412569789873916">Chrome Beta lietotnes</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mk.xtb b/chrome/app/resources/google_chrome_strings_mk.xtb index 8091a75..9901988 100644 --- a/chrome/app/resources/google_chrome_strings_mk.xtb +++ b/chrome/app/resources/google_chrome_strings_mk.xtb
@@ -82,6 +82,7 @@ <translation id="2401189691232800402">Систем Chrome OS</translation> <translation id="2467438592969358367">Google Chrome сака да ги извезе вашите лозинки. Внесете ја лозинката за Windows за да го дозволите ова.</translation> <translation id="2485422356828889247">Деинсталирај</translation> +<translation id="2494974097748878569">„Помошникот на Google“ во Chrome</translation> <translation id="2534507159460261402">Google Pay (копирана во Chrome)</translation> <translation id="2559253115192232574">Подоцна, сајтот што го посетувате може да побара од Chrome да ги види вашите интереси за да ги персонализира рекламите што ги гледате. Chrome може да сподели до 3 интереси.</translation> <translation id="2563121210305478421">Да се рестартира Chrome?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">Сакате да продолжите на нов профил на Chrome?</translation> <translation id="6750954913813541382">За исправка на правописни грешки, Chrome го испраќа текстот што го пишувате во прелистувачот до Google</translation> <translation id="677276454032249905">Сепак да се излезе од Chrome?</translation> +<translation id="6785872064505734160">„Помошникот на Google“ во Chrome може да извршува дејства за вас на веб-сајтовите</translation> <translation id="683440813066116847">Дојдовно правило за Google Chrome Canary за да овозможи сообраќај mDNS.</translation> <translation id="6881299373831449287">Chrome се ажурира</translation> <translation id="6885412569789873916">Апликации на Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ml.xtb b/chrome/app/resources/google_chrome_strings_ml.xtb index a224014..3a4fad5 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="2401189691232800402">ChromeOS സിസ്റ്റം</translation> <translation id="2467438592969358367">നിങ്ങളുടെ പാസ്വേഡുകൾ എക്സ്പോർട്ട് ചെയ്യാൻ Google Chrome ആഗ്രഹിക്കുന്നു. ഇത് അനുവദിക്കാൻ നിങ്ങളുടെ Windows പാസ്വേഡ് നൽകുക.</translation> <translation id="2485422356828889247">അണ്ഇന്സ്റ്റാള് ചെയ്യുക</translation> +<translation id="2494974097748878569">Chrome സ്വമേധയാ പൂരിപ്പിക്കലിലെ Google അസിസ്റ്റന്റ് സാന്നിധ്യം</translation> <translation id="2534507159460261402">Google Pay (Chrome-ലേക്ക് പകർത്തി)</translation> <translation id="2559253115192232574">പിന്നീട്, കാണുന്ന പരസ്യങ്ങൾ വ്യക്തിപരമാക്കുന്നതിന് നിങ്ങളുടെ താൽപ്പര്യങ്ങൾ കാണിക്കാൻ നിങ്ങൾ സന്ദർശിക്കുന്ന സൈറ്റിന് Chrome-നോട് ആവശ്യപ്പെടാം. Chrome-ന് 3 താൽപ്പര്യങ്ങൾ വരെ പങ്കിടാനാകും.</translation> <translation id="2563121210305478421">Chrome വീണ്ടും ആരംഭിക്കണോ?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">പുതിയ Chrome പ്രൊഫൈലിൽ തുടരണോ?</translation> <translation id="6750954913813541382">അക്ഷരത്തെറ്റുകൾ പരിഹരിക്കാൻ നിങ്ങൾ ബ്രൗസറിൽ ടൈപ്പ് ചെയ്യുന്ന ടെക്സ്റ്റ് Chrome Google ലേക്ക് അയയ്ക്കുന്നു</translation> <translation id="677276454032249905">എന്തായാലും Chrome-ൽ നിന്ന് പുറത്തുകടക്കണോ?</translation> +<translation id="6785872064505734160">Chrome-ലെ Google Assistant-ന് വെബ്സൈറ്റുകളിലുടനീളം നിങ്ങൾക്കായി പ്രവർത്തനങ്ങൾ പൂർത്തിയാക്കാനാവും</translation> <translation id="683440813066116847">mDNS ട്രാഫിക് അനുവദിക്കാൻ Google Chrome കാനറിയ്ക്കുള്ള ഇൻബൗണ്ട് റൂൾ.</translation> <translation id="6881299373831449287">Chrome അപ്ഡേറ്റ് ചെയ്യുന്നു</translation> <translation id="6885412569789873916">Chrome ബീറ്റ ആപ്പുകൾ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mn.xtb b/chrome/app/resources/google_chrome_strings_mn.xtb index e9df093..0025393a 100644 --- a/chrome/app/resources/google_chrome_strings_mn.xtb +++ b/chrome/app/resources/google_chrome_strings_mn.xtb
@@ -82,6 +82,7 @@ <translation id="2401189691232800402">ChromeOS систем</translation> <translation id="2467438592969358367">Google Chrome таны нууц үгийг экспортлох хүсэлтэй байна. Үүнийг зөвшөөрч байгаа бол Windows-н нууц үгээ оруулна уу.</translation> <translation id="2485422356828889247">Устгах</translation> +<translation id="2494974097748878569">Chrome-н Google Туслах</translation> <translation id="2534507159460261402">Google Pay (Chrome-д хуулсан)</translation> <translation id="2559253115192232574">Дараа нь таны зочилсон сайт таны хардаг зарыг хувийн болгохын тулд Chrome-с таны сонирхлыг харахыг хүсэх боломжтой. Chrome 3 хүртэлх сонирхол хуваалцах боломжтой.</translation> <translation id="2563121210305478421">Chrome-г дахин эхлүүлэх үү?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">Chrome-н шинэ профайлд үргэлжлүүлэх үү?</translation> <translation id="6750954913813541382">Зөв бичгийн алдааг засахын тулд Chrome таны хөтөч дээр бичсэн текстийг Google-д илгээдэг</translation> <translation id="677276454032249905">Chrome-с ямар ч үед гарах уу?</translation> +<translation id="6785872064505734160">Chrome-н Google Туслах нь вебсайт дээрх үйлдлүүдийг танд зориулан гүйцээх боломжтой</translation> <translation id="683440813066116847">mDNS-ийг зөвшөөрөх Google Chrome Canary-ийн гадаад дүрэм.</translation> <translation id="6881299373831449287">Chrome-г шинэчилж байна</translation> <translation id="6885412569789873916">Chrome Бета Апп</translation>
diff --git a/chrome/app/resources/google_chrome_strings_mr.xtb b/chrome/app/resources/google_chrome_strings_mr.xtb index 93c2ca6..bac0713 100644 --- a/chrome/app/resources/google_chrome_strings_mr.xtb +++ b/chrome/app/resources/google_chrome_strings_mr.xtb
@@ -81,6 +81,7 @@ <translation id="2401189691232800402">ChromeOS सिस्टीम</translation> <translation id="2467438592969358367">Google Chrome ला तुमचे पासवर्ड निर्यात करायचे आहेत. हे करू देण्यासाठी तुमचा Windows पासवर्ड टाइप करा.</translation> <translation id="2485422356828889247">अनइंस्टॉल करा</translation> +<translation id="2494974097748878569">Chrome मधील Google असिस्टंट</translation> <translation id="2534507159460261402">Google Pay (Chrome वर कॉपी केले)</translation> <translation id="2559253115192232574">त्यानंतर, तुम्ही पाहता त्या जाहिराती पर्सनलाइझ करण्यासाठी तुम्ही भेट देता ती साइट Chrome कडे तुमची स्वारस्ये पाहण्याची अनुमती मागू शकते. Chrome कमाल तीन स्वारस्ये शेअर करू शकते.</translation> <translation id="2563121210305478421">Chrome पुन्हा लाँच करायचे का?</translation> @@ -280,6 +281,7 @@ <translation id="6739177684496155661">नवीन Chrome प्रोफाइलमध्ये सुरू ठेवायचे आहे का?</translation> <translation id="6750954913813541382">शब्दलेखनाच्या चुकांमध्ये सुधारणा करण्यासाठी, तुम्ही ब्राउझरमध्ये टाइप करता तो मजकूर Chrome Google ला पाठवते</translation> <translation id="677276454032249905">तरीही Chrome बंद करायचे?</translation> +<translation id="6785872064505734160">Chrome मधील Google Assistant तुमच्यासाठी सर्व वेबसाइटवर कृती पूर्ण करू शकतो</translation> <translation id="683440813066116847">mDNS रहदारीस अनुमती देण्यासाठी Google Chrome कॅनरी साठी अंतर्गामी नियम.</translation> <translation id="6881299373831449287">Chrome अपडेट करत आहे</translation> <translation id="6885412569789873916">Chrome बीटा ॲप</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ms.xtb b/chrome/app/resources/google_chrome_strings_ms.xtb index 90d0456e..ad1d704 100644 --- a/chrome/app/resources/google_chrome_strings_ms.xtb +++ b/chrome/app/resources/google_chrome_strings_ms.xtb
@@ -78,6 +78,7 @@ <translation id="2401189691232800402">Sistem Chrome OS</translation> <translation id="2467438592969358367">Google Chrome mahu mengeksport kata laluan anda. Taip kata laluan Windows anda untuk membenarkannya.</translation> <translation id="2485422356828889247">Nyahpasang</translation> +<translation id="2494974097748878569">Google Assistant dalam Chrome</translation> <translation id="2534507159460261402">Google Pay (disalin ke Chrome)</translation> <translation id="2559253115192232574">Kemudian, laman yang anda lawati boleh meminta Chrome melihat minat anda untuk memeribadikan iklan yang anda lihat. Chrome boleh berkongsi sehingga 3 minat.</translation> <translation id="2563121210305478421">Lancarkan semula Chrome?</translation> @@ -274,6 +275,7 @@ <translation id="6739177684496155661">Teruskan dalam profil Chrome baharu?</translation> <translation id="6750954913813541382">Untuk membetulkan kesalahan ejaan, Chrome akan menghantar teks yang anda taip dalam penyemak imbas kepada Google</translation> <translation id="677276454032249905">Keluar daripada Chrome juga?</translation> +<translation id="6785872064505734160">Google Assistant dalam Chrome boleh melengkapkan tindakan merentas laman web untuk anda</translation> <translation id="683440813066116847">Peraturan masuk bagi Google Chrome Canary untuk membenarkan trafik mDNS.</translation> <translation id="6881299373831449287">Mengemas kini Chrome</translation> <translation id="6885412569789873916">Apl Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_my.xtb b/chrome/app/resources/google_chrome_strings_my.xtb index f06fb4ae..786c4020 100644 --- a/chrome/app/resources/google_chrome_strings_my.xtb +++ b/chrome/app/resources/google_chrome_strings_my.xtb
@@ -82,6 +82,7 @@ <translation id="2401189691232800402">ChromeOS စနစ်</translation> <translation id="2467438592969358367">Google Chrome သည် သင်၏ စကားဝှက်များကို တင်ပို့လိုသည်။ ၎င်းကို ခွင့်ပြုရန် သင်၏ Windows စကားဝှက်ကို ထည့်ပါ။</translation> <translation id="2485422356828889247">ဖြုတ်ရန်</translation> +<translation id="2494974097748878569">Chrome အတွင်းရှိ Google Assistant</translation> <translation id="2534507159460261402">Google Pay (Chrome သို့ မိတ္တူကူးထားသည်)</translation> <translation id="2559253115192232574">နောက်ပိုင်းတွင် မြင်တွေ့မည့် ကြော်ငြာများကို ပုဂ္ဂိုလ်ရေးသီးသန့်ပြုလုပ်ရန် သင့်စိတ်ဝင်စားမှုများကို သင်ဝင်ကြည့်သည့် ဝဘ်ဆိုက်က Chrome ထံ တောင်းဆိုနိုင်သည်။ Chrome က စိတ်ဝင်စားမှု ၃ ခုအထိ မျှဝေနိုင်သည်။</translation> <translation id="2563121210305478421">Chrome ပြန်ဖွင့်မလား။</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">Chrome ပရိုဖိုင်အသစ်တွင် ဆက်လုပ်မလား။</translation> <translation id="6750954913813541382">စာလုံးပေါင်း အမှားများ ပြင်ရန် Chrome က ဘရောင်ဇာတွင် သင်ရိုက်သည့် စာသားကို Google သို့ ပို့ပါသည်</translation> <translation id="677276454032249905">မည်သို့ပင်ဖြစ်စေ Chrome မှ ထွက်လိုပါသလား။</translation> +<translation id="6785872064505734160">Chrome ရှိ Google Assistant က ဝဘ်ဆိုက်များတွင် သင့်အတွက် အလိုအလျောက် ဖြည့်ပေးနိုင်သည်</translation> <translation id="683440813066116847">Google Chrome ကိန္နရီ အတွက် mDNS သွားလာမှု ခွင့်ပြုရေး အဝင် စည်းကမ်းချက်</translation> <translation id="6881299373831449287">Chrome ကို အပ်ဒိတ်လုပ်နေသည်</translation> <translation id="6885412569789873916">Chrome စမ်းသပ်ဆော့ဖ်ဝဲ အက်ပ်များ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ne.xtb b/chrome/app/resources/google_chrome_strings_ne.xtb index b4005f2..091c50c 100644 --- a/chrome/app/resources/google_chrome_strings_ne.xtb +++ b/chrome/app/resources/google_chrome_strings_ne.xtb
@@ -80,6 +80,7 @@ <translation id="2401189691232800402">ChromeOS सिस्टम</translation> <translation id="2467438592969358367">Google Chrome तपाईंका पासवर्डहरू निर्यात गर्न चाहन्छ। यसो गर्ने अनुमति दिन Windows को आफ्नो पासवर्ड टाइप गर्नुहोस्।</translation> <translation id="2485422356828889247">विस्थापन गर्नुहोस्</translation> +<translation id="2494974097748878569">Chrome को Google सहायक</translation> <translation id="2534507159460261402">Google Pay (Chrome मा प्रतिलिपि गरियो)</translation> <translation id="2559253115192232574">तपाईंले यसपछि खोल्ने साइटले Chrome सँग तपाईंलाई देखाइने विज्ञापनहरू पर्सनलाइज गर्ने प्रयोजनका लागि तपाईंका रुचिहरू हेर्ने अनुमति माग्न सक्छ। Chrome ले बढीमा ३ वटा रुचि सेयर गर्न सक्छ।</translation> <translation id="2563121210305478421">Chrome बन्द गरेर फेरि खोल्ने हो?</translation> @@ -278,6 +279,7 @@ <translation id="6739177684496155661">नयाँ Chrome प्रोफाइल प्रयोग गरी साइन इन गर्ने हो?</translation> <translation id="6750954913813541382">हिज्जेसम्बन्धी त्रुटि सच्याउने प्रयोजनका लागि Chrome ले तपाईंले ब्राउजरमा टाइप गर्ने पाठ Google लाई पठाउँछ</translation> <translation id="677276454032249905">जे भए पनि Chrome बाट बाहिरिने हो?</translation> +<translation id="6785872064505734160">Chrome मा रहेको Google सहायकले सबै वेबसाइटहरूमा तपाईंले अह्राएअनुसार काम गर्न सक्छ</translation> <translation id="683440813066116847">mDNS ट्राफिक अनुमतिका लागि गूगल क्रोम क्यानरीका लागि अन्तरगामी नियम।</translation> <translation id="6881299373831449287">Chrome अपडेट गरिँदै छ</translation> <translation id="6885412569789873916">Chrome बिटा एपहरू</translation>
diff --git a/chrome/app/resources/google_chrome_strings_nl.xtb b/chrome/app/resources/google_chrome_strings_nl.xtb index 4d4b1ae8..0e8b3945 100644 --- a/chrome/app/resources/google_chrome_strings_nl.xtb +++ b/chrome/app/resources/google_chrome_strings_nl.xtb
@@ -80,6 +80,7 @@ <translation id="2401189691232800402">Chrome OS-systeem</translation> <translation id="2467438592969358367">Google Chrome wil je wachtwoorden exporteren. Geef je Windows-wachtwoord op om dit toe te staan.</translation> <translation id="2485422356828889247">Installatie ongedaan maken</translation> +<translation id="2494974097748878569">De Google Assistent in Chrome</translation> <translation id="2534507159460261402">Google Pay (gekopieerd naar Chrome)</translation> <translation id="2559253115192232574">Later kan een site die je bezoekt Chrome vragen om je interesses te bekijken zodat de advertenties die je ziet kunnen worden gepersonaliseerd. Chrome kan maximaal 3 interesses delen.</translation> <translation id="2563121210305478421">Chrome opnieuw starten?</translation> @@ -277,6 +278,7 @@ <translation id="6739177684496155661">Doorgaan met een nieuw Chrome-profiel?</translation> <translation id="6750954913813541382">Voor het verbeteren van spelfouten verzendt Chrome de tekst die je in de browser typt naar Google</translation> <translation id="677276454032249905">Chrome toch sluiten?</translation> +<translation id="6785872064505734160">De Google Assistent in Chrome kan acties voor je voltooien op websites</translation> <translation id="683440813066116847">Inkomende regel zodat Google Chrome Canary mDNS-verkeer toestaat.</translation> <translation id="6881299373831449287">Chrome updaten</translation> <translation id="6885412569789873916">Chrome Bèta-apps</translation>
diff --git a/chrome/app/resources/google_chrome_strings_no.xtb b/chrome/app/resources/google_chrome_strings_no.xtb index 18af1d2a..fe405753 100644 --- a/chrome/app/resources/google_chrome_strings_no.xtb +++ b/chrome/app/resources/google_chrome_strings_no.xtb
@@ -77,6 +77,7 @@ <translation id="2401189691232800402">ChromeOS-systemet</translation> <translation id="2467438592969358367">Google Chrome forsøker å eksportere passordene dine. Skriv inn Windows-passordet ditt for å tillate dette.</translation> <translation id="2485422356828889247">Avinstaller</translation> +<translation id="2494974097748878569">Google-assistenten i Chrome</translation> <translation id="2534507159460261402">Google Pay (kopiert til Chrome)</translation> <translation id="2559253115192232574">Senere kan nettsteder du besøker, spørre Chrome om interessene dine for å kunne sette personlig preg på annonsene du ser. Chrome kan dele opptil tre interesser.</translation> <translation id="2563121210305478421">Vil du starte Chrome på nytt?</translation> @@ -273,6 +274,7 @@ <translation id="6739177684496155661">Vil du fortsette i en ny Chrome-profil?</translation> <translation id="6750954913813541382">For å rette stavefeil sender Chrome teksten du skriver inn i nettleseren, til Google</translation> <translation id="677276454032249905">Vil du avslutte Chrome likevel?</translation> +<translation id="6785872064505734160">Google-assistenten i Chrome kan utføre handlinger for deg på ulike nettsteder</translation> <translation id="683440813066116847">Regel om innkommende trafikk for Google Chrome Canary for å tillate mDNS-trafikk.</translation> <translation id="6881299373831449287">Oppdaterer Chrome</translation> <translation id="6885412569789873916">Chrome Beta-apper</translation>
diff --git a/chrome/app/resources/google_chrome_strings_or.xtb b/chrome/app/resources/google_chrome_strings_or.xtb index 0aaac94..2e285ca 100644 --- a/chrome/app/resources/google_chrome_strings_or.xtb +++ b/chrome/app/resources/google_chrome_strings_or.xtb
@@ -81,6 +81,7 @@ <translation id="2401189691232800402">ChromeOS ସିଷ୍ଟମ</translation> <translation id="2467438592969358367">Google Chrome ଆପଣଙ୍କର ପାସ୍ୱାର୍ଡଗୁଡିକୁ ଏକ୍ସପୋର୍ଟ କରିବାକୁ ଚାହେଁ। ଏହାକୁ ଅନୁମତି ଦେବା ପାଇଁ ନିଜର Windows ପାସ୍ୱାର୍ଡ ଟାଇପ୍ କରନ୍ତୁ।</translation> <translation id="2485422356828889247">ଅନ୍ଇନ୍ଷ୍ଟଲ୍ କରନ୍ତୁ</translation> +<translation id="2494974097748878569">Chromeରେ Google Assistant</translation> <translation id="2534507159460261402">Google Pay (Chromeକୁ କପି କରାଯାଇଛି)</translation> <translation id="2559253115192232574">ପରେ, ଆପଣ ଭିଜିଟ କରୁଥିବା ଏକ ସାଇଟ, ଆପଣ ଦେଖୁଥିବା ବିଜ୍ଞାପନଗୁଡ଼ିକୁ ପର୍ସନାଲାଇଜ କରିବା ପାଇଁ Chromeକୁ ଆପଣଙ୍କ ରୁଚିଗୁଡ଼ିକୁ ଦେଖିବା ପାଇଁ କହିପାରିବ। Chrome 3ଟି ପର୍ଯ୍ୟନ୍ତ ରୁଚି ସେୟାର କରିପାରିବ।</translation> <translation id="2563121210305478421">Chrome ପୁଣି ଲଞ୍ଚ କରିବେ କି?</translation> @@ -280,6 +281,7 @@ <translation id="6739177684496155661">ଏକ ନୂଆ Chrome ପ୍ରୋଫାଇଲରେ ଜାରି ରଖିବେ?</translation> <translation id="6750954913813541382">ବନାନ ଗତ ତ୍ରୁଟିଗୁଡ଼ିକର ସମାଧାନ ପାଇଁ, Chrome ବ୍ରାଉଜର୍ରେ ଆପଣ ଟାଇପ୍ କରିଥିବା ଟେକ୍ସଟ୍ Googleକୁ ପଠାଇଥାଏ</translation> <translation id="677276454032249905">ଯେକୌଣସିମତେ Chromeରୁ ବାହାରିବେ?</translation> +<translation id="6785872064505734160">Chromeରେ Google Assistant ଆପଣଙ୍କ ପାଇଁ ସମଗ୍ର ୱେବସାଇଟରେ କାର୍ଯ୍ୟଗୁଡ଼ିକୁ ସମ୍ପୂର୍ଣ୍ଣ କରିପାରିବ</translation> <translation id="683440813066116847">mDNS ଟ୍ରାଫିକ୍କୁ ଅନୁମତି ଦେବା ପାଇଁ Google Chrome Canaryରେ ଅନ୍ତର୍ନିହିତ ଥିବା ନିୟମ।</translation> <translation id="6881299373831449287">Chrome ଅପଡେଟ୍ କରାଯାଉଛି</translation> <translation id="6885412569789873916">Chrome ବିଟା ଆପ୍ସ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pa.xtb b/chrome/app/resources/google_chrome_strings_pa.xtb index d80d26a5..28fe0b0 100644 --- a/chrome/app/resources/google_chrome_strings_pa.xtb +++ b/chrome/app/resources/google_chrome_strings_pa.xtb
@@ -82,6 +82,7 @@ <translation id="2401189691232800402">ChromeOS ਸਿਸਟਮ</translation> <translation id="2467438592969358367">Google Chrome ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਨਿਰਯਾਤ ਕਰਨਾ ਚਾਹੁੰਦਾ ਹੈ। ਇਹ ਕਰਨ ਦੇਣ ਲਈ ਆਪਣਾ Windows ਪਾਸਵਰਡ ਟਾਈਪ ਕਰੋ।</translation> <translation id="2485422356828889247">ਅਣਸਥਾਪਤ ਕਰੋ</translation> +<translation id="2494974097748878569">Chrome ਵਿੱਚ Google Assistant</translation> <translation id="2534507159460261402">Google Pay (Chrome 'ਤੇ ਕਾਪੀ ਕੀਤਾ ਗਿਆ)</translation> <translation id="2559253115192232574">ਬਾਅਦ ਵਿੱਚ, ਤੁਸੀਂ ਜਿਹੜੀ ਸਾਈਟ 'ਤੇ ਜਾਂਦੇ ਹੋ ਉਹ Chrome ਨੂੰ ਤੁਹਾਡੇ ਵੱਲੋਂ ਦੇਖੇ ਜਾਣ ਵਾਲੇ ਵਿਗਿਆਪਨਾਂ ਨੂੰ ਵਿਅਕਤੀਗਤ ਬਣਾਉਣ ਵਾਸਤੇ ਤੁਹਾਡੀਆਂ ਦਿਲਚਸਪੀਆਂ ਨੂੰ ਦੇਖਣ ਲਈ ਕਹਿ ਸਕਦੀ ਹੈ। Chrome 3 ਦਿਲਚਸਪੀਆਂ ਤੱਕ ਸਾਂਝੀਆਂ ਕਰ ਸਕਦਾ ਹੈ।</translation> <translation id="2563121210305478421">ਕੀ Chrome ਨੂੰ ਮੁੜ-ਲਾਂਚ ਕਰਨਾ ਹੈ?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">ਕੀ ਨਵੇਂ Chrome ਪ੍ਰੋਫਾਈਲ ਵਿੱਚ ਜਾਰੀ ਰੱਖਣਾ ਹੈ?</translation> <translation id="6750954913813541382">ਸ਼ਬਦ-ਜੋੜ ਗੜਬੜੀਆਂ ਠੀਕ ਕਰਨ ਲਈ, Chrome, ਬ੍ਰਾਊਜ਼ਰ ਵਿੱਚ ਤੁਹਾਡੇ ਵੱਲੋਂ ਟਾਈਪ ਕੀਤੀ ਜਾਣ ਵਾਲੀ ਲਿਖਤ Google ਨੂੰ ਭੇਜਦਾ ਹੈ</translation> <translation id="677276454032249905">ਕੀ ਫਿਰ ਵੀ Chrome ਤੋਂ ਬਾਹਰ ਜਾਣਾ ਹੈ?</translation> +<translation id="6785872064505734160">Chrome ਵਿੱਚ Google Assistant ਸਾਰੀਆਂ ਵੈੱਬਸਾਈਟਾਂ 'ਤੇ ਤੁਹਾਡੇ ਲਈ ਕਾਰਵਾਈਆਂ ਪੂਰੀ ਕਰ ਸਕਦੀ ਹੈ</translation> <translation id="683440813066116847">mDNS ਟਰੈਫ਼ਿਕ ਦੀ ਇਜਾਜ਼ਤ ਦੇਣ ਲਈ Google Chrome Canary ਲਈ ਇਨਬਾਊਂਡ ਨਿਯਮ।</translation> <translation id="6881299373831449287">Chrome ਨੂੰ ਅੱਪਡੇਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation> <translation id="6885412569789873916">Chrome ਬੀਟਾ ਐਪਾਂ</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pl.xtb b/chrome/app/resources/google_chrome_strings_pl.xtb index 705b015..7aef4bce 100644 --- a/chrome/app/resources/google_chrome_strings_pl.xtb +++ b/chrome/app/resources/google_chrome_strings_pl.xtb
@@ -76,6 +76,7 @@ <translation id="2401189691232800402">System operacyjny Chrome</translation> <translation id="2467438592969358367">Google Chrome chce wyeksportować Twoje hasła. Wpisz swoje hasło do Windows, by na to zezwolić.</translation> <translation id="2485422356828889247">Odinstaluj</translation> +<translation id="2494974097748878569">Asystent Google w Chrome</translation> <translation id="2534507159460261402">Google Pay (skopiowana do Chrome)</translation> <translation id="2559253115192232574">Witryna, którą później odwiedzisz, może zapytać o Twoje zainteresowania i na tej podstawie spersonalizować wyświetlane reklamy. Chrome może udostępnić do 3 zainteresowań.</translation> <translation id="2563121210305478421">Uruchomić ponownie Chrome?</translation> @@ -271,6 +272,7 @@ <translation id="6739177684496155661">Kontynuować w nowym profilu Chrome?</translation> <translation id="6750954913813541382">Aby poprawić błędy pisowni, Chrome wysyła do Google to, co wpisujesz w przeglądarce</translation> <translation id="677276454032249905">Zamknąć Chrome mimo to?</translation> +<translation id="6785872064505734160">Asystent Google w Chrome może wykonywać za Ciebie działania na różnych stronach internetowych</translation> <translation id="683440813066116847">Reguła dla ruchu przychodzącego w Google Chrome Canary zezwalająca na ruch mDNS.</translation> <translation id="6881299373831449287">Aktualizuję Chrome</translation> <translation id="6885412569789873916">Aplikacje do Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-BR.xtb b/chrome/app/resources/google_chrome_strings_pt-BR.xtb index b4a7adef..a56f8d01 100644 --- a/chrome/app/resources/google_chrome_strings_pt-BR.xtb +++ b/chrome/app/resources/google_chrome_strings_pt-BR.xtb
@@ -78,6 +78,7 @@ <translation id="2401189691232800402">Sistema ChromeOS</translation> <translation id="2467438592969358367">O Google Chrome quer exportar suas senhas. Digite sua senha do Windows para permitir isso.</translation> <translation id="2485422356828889247">Desinstalar</translation> +<translation id="2494974097748878569">Google Assistente no Chrome</translation> <translation id="2534507159460261402">Google Pay (copiado para o Chrome)</translation> <translation id="2559253115192232574">Os sites que você visitar vão poder pedir ao Chrome para ver seus interesses e personalizar os anúncios mostrados a você. O Chrome pode compartilhar até três interesses.</translation> <translation id="2563121210305478421">Reiniciar o Chrome?</translation> @@ -274,6 +275,7 @@ <translation id="6739177684496155661">Continuar em um novo perfil do Chrome?</translation> <translation id="6750954913813541382">Para corrigir erros de ortografia, o Chrome envia o texto digitado no navegador para o Google</translation> <translation id="677276454032249905">Sair do Chrome mesmo assim?</translation> +<translation id="6785872064505734160">O Google Assistente no Chrome pode concluir ações em sites para você</translation> <translation id="683440813066116847">Regra interna do Google Chrome Canary para permitir tráfego mDNS.</translation> <translation id="6881299373831449287">Atualizando o Chrome</translation> <translation id="6885412569789873916">Apps do Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_pt-PT.xtb b/chrome/app/resources/google_chrome_strings_pt-PT.xtb index 85fa866..2b89851 100644 --- a/chrome/app/resources/google_chrome_strings_pt-PT.xtb +++ b/chrome/app/resources/google_chrome_strings_pt-PT.xtb
@@ -78,6 +78,7 @@ <translation id="2401189691232800402">Sistema ChromeOS</translation> <translation id="2467438592969358367">O Google Chrome pretende exportar as suas palavras-passe. Escreva a sua palavra-passe do Windows para permitir esta ação.</translation> <translation id="2485422356828889247">Desinstalar</translation> +<translation id="2494974097748878569">Assistente Google no Chrome</translation> <translation id="2534507159460261402">Google Pay (copiado para o Chrome)</translation> <translation id="2559253115192232574">Posteriormente, um site que visitar pode pedir ao Chrome para ver os seus interesses para personalizar os anúncios que vê. O Chrome pode partilhar até 3 interesses.</translation> <translation id="2563121210305478421">Reiniciar o Chrome?</translation> @@ -274,6 +275,7 @@ <translation id="6739177684496155661">Pretende continuar num novo perfil do Chrome?</translation> <translation id="6750954913813541382">Para corrigir erros ortográficos, o Chrome envia o texto que escrever no navegador para a Google.</translation> <translation id="677276454032249905">Pretende sair do Chrome mesmo assim?</translation> +<translation id="6785872064505734160">O Assistente Google no Chrome pode concluir ações em Websites por si.</translation> <translation id="683440813066116847">Regra de importação para o Google Chrome Canary permitir o tráfego mDNS.</translation> <translation id="6881299373831449287">A atualizar o Chrome</translation> <translation id="6885412569789873916">Apps do Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ro.xtb b/chrome/app/resources/google_chrome_strings_ro.xtb index 6bb3eed1..6af327f 100644 --- a/chrome/app/resources/google_chrome_strings_ro.xtb +++ b/chrome/app/resources/google_chrome_strings_ro.xtb
@@ -76,6 +76,7 @@ <translation id="2401189691232800402">Sistemul de operare Chrome</translation> <translation id="2467438592969358367">Google Chrome vrea să îți exporte parolele. Pentru a permite asta, introdu parola pentru Windows.</translation> <translation id="2485422356828889247">Dezinstalează</translation> +<translation id="2494974097748878569">Asistentul Google în Chrome</translation> <translation id="2534507159460261402">Google Pay (copiat în Chrome)</translation> <translation id="2559253115192232574">Ulterior, un site pe care-l accesezi poate solicita browserului Chrome să vadă interesele tale pentru a personaliza anunțurile pe care le vezi. Chrome poate afișa până la trei interese.</translation> <translation id="2563121210305478421">Relansezi Chrome?</translation> @@ -271,6 +272,7 @@ <translation id="6739177684496155661">Continui cu un profil Chrome nou?</translation> <translation id="6750954913813541382">Pentru a corecta erorile de scriere, Chrome trimite la Google textul pe care îl introduci în browser</translation> <translation id="677276454032249905">Ieși din Chrome oricum?</translation> +<translation id="6785872064505734160">În Chrome, Asistentul Google poate să realizeze pentru tine acțiuni pe site-uri</translation> <translation id="683440813066116847">Regula de intrare pentru Google Chrome Canary pentru a permite traficul mDNS.</translation> <translation id="6881299373831449287">Se actualizează Chrome</translation> <translation id="6885412569789873916">Aplicații Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ru.xtb b/chrome/app/resources/google_chrome_strings_ru.xtb index 4ce6e50..43352f3 100644 --- a/chrome/app/resources/google_chrome_strings_ru.xtb +++ b/chrome/app/resources/google_chrome_strings_ru.xtb
@@ -77,6 +77,7 @@ <translation id="2401189691232800402">Chrome OS</translation> <translation id="2467438592969358367">Чтобы экспортировать пароли из Google Chrome, введите пароль своего аккаунта Windows.</translation> <translation id="2485422356828889247">Удалить</translation> +<translation id="2494974097748878569">Google Ассистент в Chrome</translation> <translation id="2534507159460261402">Google Pay (скопирована в Chrome)</translation> <translation id="2559253115192232574">Сайты, на которые вы зайдете в дальнейшем, смогут запрашивать у Chrome сведения о ваших интересах, чтобы показывать вам подходящую рекламу. Chrome может предоставлять информацию не более чем о трех интересах.</translation> <translation id="2563121210305478421">Перезапустить Chrome?</translation> @@ -273,6 +274,7 @@ <translation id="6739177684496155661">Продолжить работу в новом профиле Chrome?</translation> <translation id="6750954913813541382">Для проверки правописания Chrome отправляет в Google текст, который вы вводите в браузере.</translation> <translation id="677276454032249905">Закрыть Chrome?</translation> +<translation id="6785872064505734160">Google Ассистент в Chrome может помогать вам выполнять действия на сайтах.</translation> <translation id="683440813066116847">Разрешить в Google Chrome Canary передачу входящего трафика по протоколу mDNS</translation> <translation id="6881299373831449287">Обновление Chrome</translation> <translation id="6885412569789873916">Приложения Chrome (бета)</translation>
diff --git a/chrome/app/resources/google_chrome_strings_si.xtb b/chrome/app/resources/google_chrome_strings_si.xtb index 92c09a9bf..cb5dbe3b4 100644 --- a/chrome/app/resources/google_chrome_strings_si.xtb +++ b/chrome/app/resources/google_chrome_strings_si.xtb
@@ -81,6 +81,7 @@ <translation id="2401189691232800402">ChromeOS පද්ධතිය</translation> <translation id="2467438592969358367">Google Chrome හට ඔබගේ මුරපද නිර්යාත කිරීමට අවශ්යය. මේ සඳහා අවසර දීමට ඔබගේ Windows මුරපදය ටයිප් කරන්න.</translation> <translation id="2485422356828889247">අස්ථාපනය</translation> +<translation id="2494974097748878569">Chrome හි Google සහායක</translation> <translation id="2534507159460261402">Google Pay (Chrome වෙත පිටපත් කෙරිණි)</translation> <translation id="2559253115192232574">පසුව, ඔබ පිවිසෙන අඩවියක් ඔබ දකින වෙළඳ දැන්වීම් පුද්ගලිකකරණය කිරීම සඳහා ඔබගේ ලැදිකම් බැලීමට Chrome වෙතින් ඉල්ලිය හැකිය. Chrome හට ලැදිකම් 3ක් දක්වා බෙදා ගත හැකිය.</translation> <translation id="2563121210305478421">Chrome යළි දියත් කරන්නද?</translation> @@ -281,6 +282,7 @@ <translation id="6739177684496155661">නව Chrome පැතිකඩක ඉදිරියට යන්නද?</translation> <translation id="6750954913813541382">අක්ෂර වින්යාස දෝෂ නිවැරදි කිරීමට, නිඔබ බ්රවුසරය තුළ ටයිප් කරන පාඨය Chrome විසින් Google වෙත යවනු ලැබේ</translation> <translation id="677276454032249905">කෙසේ වුවත් Chrome වෙතින් ඉවත් වන්න ද?</translation> +<translation id="6785872064505734160">Chrome තුළ ඇති Google සහකරු ඔබ වෙනුවෙන් වෙබය පුරා කාර්ය ඉටු කළ හැක</translation> <translation id="683440813066116847">Google Chrome Canary හි අභ්යන්තර නියෝගය වන්නේ mDNS තදබදයයි.</translation> <translation id="6881299373831449287">Chrome යාවත්කාලීන කරමින්</translation> <translation id="6885412569789873916">Chrome බීටා යෙදුම්</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sk.xtb b/chrome/app/resources/google_chrome_strings_sk.xtb index 2098093..926ab988 100644 --- a/chrome/app/resources/google_chrome_strings_sk.xtb +++ b/chrome/app/resources/google_chrome_strings_sk.xtb
@@ -79,6 +79,7 @@ <translation id="2401189691232800402">Systém Chrome OS</translation> <translation id="2467438592969358367">Google Chrome sa pokúša exportovať vaše heslá. Ak to chcete povoliť, zadajte heslo systému Windows.</translation> <translation id="2485422356828889247">Odinštalovať</translation> +<translation id="2494974097748878569">Asistent Google v Chrome</translation> <translation id="2534507159460261402">Google Pay (skopírované do Chromu)</translation> <translation id="2559253115192232574">Neskôr môže web, ktorý navštívite, požiadať Chrome o vaše záujmy, aby vám mohol prispôsobiť zobrazované reklamy. Chrome môže zdieľať až tri záujmy.</translation> <translation id="2563121210305478421">Chcete Chrome znova spustiť?</translation> @@ -278,6 +279,7 @@ <translation id="6739177684496155661">Chcete pokračovať v novom profile Chromu?</translation> <translation id="6750954913813541382">Chrome odošle text zadaný v prehliadači Googlu s cieľom opraviť pravopisné chyby</translation> <translation id="677276454032249905">Chcete Chrome napriek tomu ukončiť?</translation> +<translation id="6785872064505734160">Asistent Google v Chrome môže za vás dokončiť akcie na weboch</translation> <translation id="683440813066116847">Pravidlo pre prichádzajúce prenosy pre prehliadač Google Chrome verzie Canary, ktoré povoľuje prenos dát mDNS.</translation> <translation id="6881299373831449287">Aktualizuje sa Chrome</translation> <translation id="6885412569789873916">Aplikácie pre Chrome beta verzie</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sl.xtb b/chrome/app/resources/google_chrome_strings_sl.xtb index a1fc803..d33ab71c 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="2401189691232800402">Sistem Chrome OS</translation> <translation id="2467438592969358367">Google Chrome želi izvoziti gesla. Če želite omogočiti to, vnesite geslo za Windows.</translation> <translation id="2485422356828889247">Odmeščanje</translation> +<translation id="2494974097748878569">Pomočnik Google v Chromu</translation> <translation id="2534507159460261402">Google Pay (kopirano v Chrome)</translation> <translation id="2559253115192232574">Pozneje lahko stran, ki jo obiščete, od Chroma zahteva ogled vaših zanimanj zaradi osebnega prilagajanj oglasov, ki so vam prikazani. Chrome lahko deli do 3 zanimanja.</translation> <translation id="2563121210305478421">Želite znova zagnati Chrome?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">Želite nadaljevati v novem profilu v Chromu?</translation> <translation id="6750954913813541382">Chrome zaradi odpravljanja napak pri črkovanju Googlu pošlje besedilo, ki ga vnesete v brskalnik</translation> <translation id="677276454032249905">Želite vseeno zapreti Chrome?</translation> +<translation id="6785872064505734160">Pomočnik Google v Chromu lahko dokonča dejanja na spletnih mestih namesto vas</translation> <translation id="683440813066116847">Pravilo za dohodni promet za Google Chrome Canary, ki dovoli promet mDNS.</translation> <translation id="6881299373831449287">Posodabljanje Chroma</translation> <translation id="6885412569789873916">Aplikacije za Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sq.xtb b/chrome/app/resources/google_chrome_strings_sq.xtb index 54854cd..eb11d83 100644 --- a/chrome/app/resources/google_chrome_strings_sq.xtb +++ b/chrome/app/resources/google_chrome_strings_sq.xtb
@@ -81,6 +81,7 @@ <translation id="2401189691232800402">Sistemi i ChromeOS</translation> <translation id="2467438592969358367">Google Chrome dëshiron të eksportojë fjalëkalimet e tua. Shkruaj fjalëkalimin tënd të Windows për ta lejuar këtë.</translation> <translation id="2485422356828889247">Çinstalo</translation> +<translation id="2494974097748878569">"Asistenti i Google" në Chrome</translation> <translation id="2534507159460261402">Google Pay (kopjuar në Chrome)</translation> <translation id="2559253115192232574">Më vonë, një sajt që ti viziton mund t'i kërkojë Chrome të shikojë interesat e tua në mënyrë që të personalizojë reklamat që shikon. Chrome mund të ndajë deri në 3 interesa.</translation> <translation id="2563121210305478421">Të niset sërish Chrome?</translation> @@ -281,6 +282,7 @@ <translation id="6739177684496155661">Të vazhdohet te një profil i ri Chrome?</translation> <translation id="6750954913813541382">Për të rregulluar gabimet drejtshkrimore, Chrome e dërgon tekstin që shkruan në shfletues te Google</translation> <translation id="677276454032249905">Dëshiron të dalësh nga Chrome gjithsesi?</translation> +<translation id="6785872064505734160">"Asistenti i Google" në Chrome mund të kryejë veprime nëpër faqe interneti për ty</translation> <translation id="683440813066116847">Rregulli hyrës për Google Chrome për të lejuar trafikun mDNS.</translation> <translation id="6881299373831449287">Po përditëson Chrome</translation> <translation id="6885412569789873916">Aplikacionet e Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb index e3f4e9b4..88958da 100644 --- a/chrome/app/resources/google_chrome_strings_sr-Latn.xtb +++ b/chrome/app/resources/google_chrome_strings_sr-Latn.xtb
@@ -82,6 +82,7 @@ <translation id="2401189691232800402">Sistem Chrome OS</translation> <translation id="2467438592969358367">Google Chrome želi da izveze lozinke. Unesite lozinku za Windows da biste to omogućili.</translation> <translation id="2485422356828889247">Deinstaliraj</translation> +<translation id="2494974097748878569">Google pomoćnik u Chrome-u</translation> <translation id="2534507159460261402">Google Pay (kopirano u Chrome)</translation> <translation id="2559253115192232574">Sajt koji kasnije posetite može da zatraži od Chrome-a pristup vašim interesovanjima da bi personalizovao oglase koji vam se prikazuju. Chrome može da deli najviše 3 interesovanja.</translation> <translation id="2563121210305478421">Želite ponovo da pokrenete Chrome?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">Želite da nastavite na novom Chrome profilu?</translation> <translation id="6750954913813541382">Da bi ispravio pravopisne greške, Chrome Google-u šalje tekst koji unosite u pregledač</translation> <translation id="677276454032249905">Želite li ipak da zatvorite Chrome?</translation> +<translation id="6785872064505734160">Google pomoćnik u Chrome-u može da dovršava radnje za vas na veb-sajtovima</translation> <translation id="683440813066116847">Pravilo za dolazni saobraćaj za Google Chrome Canary da biste omogućili mDNS saobraćaj.</translation> <translation id="6881299373831449287">Ažuriramo Chrome</translation> <translation id="6885412569789873916">Chrome aplikacije za beta kanal</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sr.xtb b/chrome/app/resources/google_chrome_strings_sr.xtb index 61c4b22..4eb6850 100644 --- a/chrome/app/resources/google_chrome_strings_sr.xtb +++ b/chrome/app/resources/google_chrome_strings_sr.xtb
@@ -82,6 +82,7 @@ <translation id="2401189691232800402">Систем Chrome ОС</translation> <translation id="2467438592969358367">Google Chrome жели да извезе лозинке. Унесите лозинку за Windows да бисте то омогућили.</translation> <translation id="2485422356828889247">Деинсталирај</translation> +<translation id="2494974097748878569">Google помоћник у Chrome-у</translation> <translation id="2534507159460261402">Google Pay (копирано у Chrome)</translation> <translation id="2559253115192232574">Сајт који касније посетите може да затражи од Chrome-а приступ вашим интересовањима да би персонализовао огласе који вам се приказују. Chrome може да дели највише 3 интересовања.</translation> <translation id="2563121210305478421">Желите поново да покренете Chrome?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">Желите да наставите на новом Chrome профилу?</translation> <translation id="6750954913813541382">Да би исправио правописне грешке, Chrome Google-у шаље текст који уносите у прегледач</translation> <translation id="677276454032249905">Желите ли ипак да затворите Chrome?</translation> +<translation id="6785872064505734160">Google помоћник у Chrome-у може да довршава радње за вас на веб-сајтовима</translation> <translation id="683440813066116847">Правило за долазни саобраћај за Google Chrome Canary да бисте омогућили mDNS саобраћај.</translation> <translation id="6881299373831449287">Ажурирамо Chrome</translation> <translation id="6885412569789873916">Chrome апликације за бета канал</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sv.xtb b/chrome/app/resources/google_chrome_strings_sv.xtb index 12f6b74..4b314fed 100644 --- a/chrome/app/resources/google_chrome_strings_sv.xtb +++ b/chrome/app/resources/google_chrome_strings_sv.xtb
@@ -82,6 +82,7 @@ <translation id="2401189691232800402">Chrome OS-system</translation> <translation id="2467438592969358367">Lösenorden exporteras från Google Chrome. Skriv ditt Windows-lösenord om du tillåter detta.</translation> <translation id="2485422356828889247">Avinstallera</translation> +<translation id="2494974097748878569">Google-assistenten i Chrome</translation> <translation id="2534507159460261402">Google Pay (har kopierats till Chrome)</translation> <translation id="2559253115192232574">Senare kan en webbplats fråga efter dina intressen i Chrome för att anpassa vilka annonser som visas. Chrome kan dela upp till tre intressen.</translation> <translation id="2563121210305478421">Vill du starta om Chrome?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">Vill du fortsätta i en ny Chrome-profil?</translation> <translation id="6750954913813541382">Text som du skriver i webbläsaren Chrome skickas till Google för att kontrollera stavningen</translation> <translation id="677276454032249905">Vill du avsluta Chrome ändå?</translation> +<translation id="6785872064505734160">Google-assistenten i Chrome kan slutföra åtgärder åt dig på webbplatser</translation> <translation id="683440813066116847">Regel som tillåter inkommande mDNS-trafik för Google Chrome Canary.</translation> <translation id="6881299373831449287">Chrome uppdateras</translation> <translation id="6885412569789873916">Appar i Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_sw.xtb b/chrome/app/resources/google_chrome_strings_sw.xtb index 6600b15..dd41cff 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="2401189691232800402">Mfumo wa Uendeshaji wa Chrome</translation> <translation id="2467438592969358367">Google Chrome ingependa kuhamisha manenosiri yako. Andika nenosiri lako la Windows ili uruhusu shughuli hii.</translation> <translation id="2485422356828889247">Ondoa</translation> +<translation id="2494974097748878569">Mratibu wa Google katika Chrome</translation> <translation id="2534507159460261402">Google Pay (imenakiliwa kwenye Chrome)</translation> <translation id="2559253115192232574">Baadaye, tovuti unayoitembelea inaweza kuiomba Chrome ili ione mambo yanayokuvutia na iweze kukuonyesha matangazo kulingana na mapendeleo yako. Chrome inaweza kushiriki hadi mambo matatu yanayokuvutia.</translation> <translation id="2563121210305478421">Ungependa kufungua Chrome tena?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">Ungependa kutumia wasifu mpya kwenye Chrome?</translation> <translation id="6750954913813541382">Ili kurekebisha makosa ya tahajia, Chrome hutuma kwa Google maandishi unayoandika kwenye kivinjari</translation> <translation id="677276454032249905">Ungependa kufunga Chrome?</translation> +<translation id="6785872064505734160">Programu ya Mratibu wa Google katika Chrome inaweza kukukamilishia vitendo kwenye tovuti</translation> <translation id="683440813066116847">Sheria ya ndani ya Google Chrome Canary ili kuruhusu trafiki ya mDNS.</translation> <translation id="6881299373831449287">Inasasisha Chrome</translation> <translation id="6885412569789873916">Programu za Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ta.xtb b/chrome/app/resources/google_chrome_strings_ta.xtb index ad1f15f..ec2761f 100644 --- a/chrome/app/resources/google_chrome_strings_ta.xtb +++ b/chrome/app/resources/google_chrome_strings_ta.xtb
@@ -78,6 +78,7 @@ <translation id="2401189691232800402">ChromeOS சிஸ்டம்</translation> <translation id="2467438592969358367">Google Chrome உங்கள் கடவுச்சொற்களை ஏற்ற விரும்புகிறது. இதை அனுமதிக்க, உங்கள் Windows கடவுச்சொல்லை உள்ளிடவும்.</translation> <translation id="2485422356828889247">நிறுவல் நீக்கு</translation> +<translation id="2494974097748878569">Chromeமில் Google அசிஸ்டண்ட்</translation> <translation id="2534507159460261402">Google Pay (Chromeக்கு நகலெடுக்கப்பட்டது)</translation> <translation id="2559253115192232574">பிரத்தியேக விளம்பரங்களை உங்களுக்கு வழங்குவதற்காக, Chrome கணித்துள்ள உங்கள் ஆர்வங்களை நீங்கள் பார்வையிடும் தளம் அதனிடம் கேட்டறியலாம். அதிகபட்சம் 3 ஆர்வங்கள் வரை Chrome பகிரலாம்.</translation> <translation id="2563121210305478421">Chromeமை மீண்டும் தொடங்கவா?</translation> @@ -274,6 +275,7 @@ <translation id="6739177684496155661">புதிய Chrome சுயவிவரத்தில் தொடரவா?</translation> <translation id="6750954913813541382">எழுத்துப்பிழைகளைச் சரிசெய்ய உலாவியில் உள்ளிடும் உரையை Chrome ஆப்ஸ் Googleளுக்கு அனுப்பும்</translation> <translation id="677276454032249905">Chrome இலிருந்து வெளியேறவா?</translation> +<translation id="6785872064505734160">Chromeமில் உள்ள Google Assistant மூலம் இணையதளங்களில் உங்களுக்குத் தேவையான செயல்களைச் செய்யலாம்</translation> <translation id="683440813066116847">mDNS ட்ராஃபிக்கை அனுமதிப்பதற்கான, Google Chrome Canary க்கான உள்வரும் விதி.</translation> <translation id="6881299373831449287">Chromeமைப் புதுப்பிக்கிறது</translation> <translation id="6885412569789873916">Chrome பீட்டா ஆப்ஸ்</translation>
diff --git a/chrome/app/resources/google_chrome_strings_te.xtb b/chrome/app/resources/google_chrome_strings_te.xtb index db1c4b9..b64f5ca 100644 --- a/chrome/app/resources/google_chrome_strings_te.xtb +++ b/chrome/app/resources/google_chrome_strings_te.xtb
@@ -78,6 +78,7 @@ <translation id="2401189691232800402">ChromeOS సిస్టమ్</translation> <translation id="2467438592969358367">Google Chrome మీ పాస్వర్డ్లను ఎగుమతి చేయాలనుకుంటోంది. దీనిని అనుమతించడం కోసం మీ Windows పాస్వర్డ్ని టైప్ చేయండి.</translation> <translation id="2485422356828889247">అన్ఇన్స్టాల్ చేయి</translation> +<translation id="2494974097748878569">Chromeలో Google Assistant</translation> <translation id="2534507159460261402">Google Pay (Chromeకి కాపీ చేయబడింది)</translation> <translation id="2559253115192232574">తర్వాత, మీరు చూసే యాడ్లను వ్యక్తిగతీకరించడం కోసం, మీరు సందర్శించే సైట్ మీ ఆసక్తులను చూడమని Chromeను అడగవచ్చు. Chromium 3 ఆసక్తుల వరకు షేర్ చేయగలదు.</translation> <translation id="2563121210305478421">Chromeను రీ-లాంచ్ చేయాలా?</translation> @@ -274,6 +275,7 @@ <translation id="6739177684496155661">కొత్త Chrome ప్రొఫైల్లో కొనసాగించాలా?</translation> <translation id="6750954913813541382">స్పెల్లింగ్ తప్పులను సరిదిద్దడానికి, మీరు బ్రౌజర్లో టైప్ చేసే పదాలను Googleకు Chrome పంపుతుంది</translation> <translation id="677276454032249905">ఏదేమైనా Chrome నుండి నిష్క్రమించాలా?</translation> +<translation id="6785872064505734160">Chromeలో Google Assistant మీ కోసం వెబ్సైట్ల అంతటా చర్యలను పూర్తి చేయగలదు</translation> <translation id="683440813066116847">mDNS ట్రాఫిక్ను అనుమతించడానికి Google Chrome కెనరీ కోసం ఇన్బౌండ్ నియమం.</translation> <translation id="6881299373831449287">Chromeను అప్డేట్ చేస్తోంది</translation> <translation id="6885412569789873916">Chrome బీటా యాప్లు</translation>
diff --git a/chrome/app/resources/google_chrome_strings_th.xtb b/chrome/app/resources/google_chrome_strings_th.xtb index b42b044..ef3ac1a 100644 --- a/chrome/app/resources/google_chrome_strings_th.xtb +++ b/chrome/app/resources/google_chrome_strings_th.xtb
@@ -76,6 +76,7 @@ <translation id="2401189691232800402">ระบบ Chrome OS</translation> <translation id="2467438592969358367">Google Chrome ต้องการส่งออกรหัสผ่านของคุณ พิมพ์รหัสผ่าน Windows เพื่ออนุญาตให้ดำเนินการ</translation> <translation id="2485422356828889247">ถอนการติดตั้ง</translation> +<translation id="2494974097748878569">Google Assistant ใน Chrome</translation> <translation id="2534507159460261402">Google Pay (คัดลอกไปยัง Chrome)</translation> <translation id="2559253115192232574">ภายหลัง เว็บไซต์ที่คุณเข้าชมอาจขอข้อมูลความสนใจจาก Chrome เพื่อปรับการแสดงโฆษณาให้เหมาะกับคุณ Chrome สามารถแชร์ความสนใจได้สูงสุด 3 รายการ</translation> <translation id="2563121210305478421">เปิด Chrome อีกครั้ง</translation> @@ -271,6 +272,7 @@ <translation id="6739177684496155661">ดำเนินการต่อในโปรไฟล์ Chrome ใหม่ไหม</translation> <translation id="6750954913813541382">Chrome จะส่งข้อความที่คุณพิมพ์ในเบราว์เซอร์ไปยัง Google เพื่อแก้ไขข้อผิดพลาดของการสะกดคำ</translation> <translation id="677276454032249905">ออกจาก Chrome ใช่ไหม</translation> +<translation id="6785872064505734160">Google Assistant ใน Chrome ดำเนินการต่างๆ ในเว็บไซต์ให้คุณได้</translation> <translation id="683440813066116847">กฎขาเข้าสำหรับ Google Chrome Canary เพื่ออนุญาตการเข้าชมแบบ mDNS</translation> <translation id="6881299373831449287">กำลังอัปเดต Chrome</translation> <translation id="6885412569789873916">แอป Chrome เบต้า</translation>
diff --git a/chrome/app/resources/google_chrome_strings_tr.xtb b/chrome/app/resources/google_chrome_strings_tr.xtb index 08dc77e..005a30a 100644 --- a/chrome/app/resources/google_chrome_strings_tr.xtb +++ b/chrome/app/resources/google_chrome_strings_tr.xtb
@@ -77,6 +77,7 @@ <translation id="2401189691232800402">ChromeOS sistemi</translation> <translation id="2467438592969358367">Google Chrome şifrelerinizi dışa aktarmak istiyor. Buna izin vermek için Windows şifrenizi yazın.</translation> <translation id="2485422356828889247">Kaldır</translation> +<translation id="2494974097748878569">Chrome'da Google Asistan</translation> <translation id="2534507159460261402">Google Pay (Chrome'a kopyalandı)</translation> <translation id="2559253115192232574">Daha sonrasında ziyaret ettiğiniz bir site, gördüğünüz reklamları kişiselleştirmek için Chrome'dan ilgi alanlarınızı göstermesini isteyebilir. Chrome en çok 3 ilgi alanı paylaşabilir.</translation> <translation id="2563121210305478421">Chrome yeniden başlatılsın mı?</translation> @@ -275,6 +276,7 @@ <translation id="6739177684496155661">Yeni bir Chrome profilinde devam edilsin mi?</translation> <translation id="6750954913813541382">Yazım hatalarını düzeltmek için Chrome, tarayıcıda yazdığınız metni Google'a gönderir</translation> <translation id="677276454032249905">Yine de Chrome'dan çıkılsın mı?</translation> +<translation id="6785872064505734160">Chrome'daki Google Asistan sizin için web sitelerindeki işlemleri tamamlayabilir</translation> <translation id="683440813066116847">Google Chrome Canary'nin mDNS trafiğine izin vermeyi sağlayan gelen trafik kuralı.</translation> <translation id="6881299373831449287">Chrome güncelleniyor</translation> <translation id="6885412569789873916">Chrome Beta Uygulamaları</translation> @@ -397,7 +399,7 @@ <translation id="9138603949443464873">Yaptığınız değişiklikleri uygulamak için Chrome'u yeniden başlatın</translation> <translation id="9195993889682885387">Chrome son birkaç haftalık tarama geçmişinize göre ilgi alanlarınızı tahmin edebilir. Bu bilgi, cihazınızda kalır.</translation> <translation id="919706545465235479">Senkronizasyonu başlatmak için Chrome'u güncelleyin</translation> -<translation id="922152298093051471">Chrome'u özelleştirin</translation> +<translation id="922152298093051471">Chrome'u özelleştir</translation> <translation id="93760716455950538">ChromeOS Flex'i yeniden başlatın</translation> <translation id="940313311831216333">Chrome öğelerinize tüm cihazlarınızda erişmek için oturum açın ve senkronizasyonu etkinleştirin.</translation> <translation id="989369509083708165">Google Chrome varsayılan tarayıcınız oldu</translation>
diff --git a/chrome/app/resources/google_chrome_strings_uk.xtb b/chrome/app/resources/google_chrome_strings_uk.xtb index 2d8345bd..35faaaa 100644 --- a/chrome/app/resources/google_chrome_strings_uk.xtb +++ b/chrome/app/resources/google_chrome_strings_uk.xtb
@@ -78,6 +78,7 @@ <translation id="2401189691232800402">ОС Chrome</translation> <translation id="2467438592969358367">Google Chrome хоче експортувати ваші паролі. Щоб дозволити, введіть свій пароль Windows.</translation> <translation id="2485422356828889247">Видалити</translation> +<translation id="2494974097748878569">Google Асистент у Chrome</translation> <translation id="2534507159460261402">Google Pay (скопійовано в Chrome)</translation> <translation id="2559253115192232574">Коли ви пізніше відвідаєте якийсь сайт, він може запитати в Chrome про ваші інтереси, щоб персоналізувати для вас оголошення. Chrome може надати доступ до інформації про щонайбільше 3 інтереси.</translation> <translation id="2563121210305478421">Перезапустити Chrome?</translation> @@ -274,6 +275,7 @@ <translation id="6739177684496155661">Продовжити в новому профілі Chrome?</translation> <translation id="6750954913813541382">Щоб виправляти орфографічні помилки, Chrome надсилає в Google текст, який ви вводите у веб-переглядачі</translation> <translation id="677276454032249905">Усе одно вийти з Chrome?</translation> +<translation id="6785872064505734160">Google Асистент може завершувати дії на різних веб-сайтах у Chrome</translation> <translation id="683440813066116847">Вхідне правило для Google Chrome Canary дозволяє трафік mDNS.</translation> <translation id="6881299373831449287">Оновлення Chrome</translation> <translation id="6885412569789873916">Бета-версія додатків Chrome</translation>
diff --git a/chrome/app/resources/google_chrome_strings_ur.xtb b/chrome/app/resources/google_chrome_strings_ur.xtb index a0954149..ade0069b 100644 --- a/chrome/app/resources/google_chrome_strings_ur.xtb +++ b/chrome/app/resources/google_chrome_strings_ur.xtb
@@ -81,6 +81,7 @@ <translation id="2401189691232800402">ChromeOS سسٹم</translation> <translation id="2467438592969358367">Google Chrome آپ کے پاس ورڈز برآمد کرنا چاہتا ہے۔ اس کی اجازت دینے کیلئے، اپنا Windows پاس ورڈ ٹائپ کریں۔</translation> <translation id="2485422356828889247">ان انسٹال کریں</translation> +<translation id="2494974097748878569">Chrome میں Google اسسٹنٹ</translation> <translation id="2534507159460261402">Google Pay (Chrome میں کاپی کر دیا گیا)</translation> <translation id="2559253115192232574">بعد میں، آپ کی ملاحظہ کی جانے والی سائٹ آپ کو دکھائی دینے والے اشتہارات کو ذاتی نوعیت کا بنانے کے لیے Chrome سے آپ کی دلچسپیوں کو دیکھنے کا مطالبہ کر سکتی ہے۔ Chrome 3 دلچسپیوں تک کا اشتراک کر سکتا ہے۔</translation> <translation id="2563121210305478421">Chrome کو بند کر کے دوبارہ چلائیں؟</translation> @@ -281,6 +282,7 @@ <translation id="6739177684496155661">ایک نئی Chrome پروفائل میں جاری رکھیں؟</translation> <translation id="6750954913813541382">املا کی غلطیوں کو درست کرنے کے لیے، آپ براؤزر میں جو متن ٹائپ کرتے ہیں، Chrome اسے Google کو بھیج دیتا ہے</translation> <translation id="677276454032249905">بہر حال Chrome کو بند کریں؟</translation> +<translation id="6785872064505734160">Chrome میں موجود Google اسسٹنٹ سبھی ویب سائٹوں پر آپ کے لیے کارروائیوں کو مکمل کر سکتی ہے</translation> <translation id="683440813066116847">mDNS ٹریفک کی اجازت دینے کیلئے Google Chrome Canary کیلئے ان باؤنڈ اصول۔</translation> <translation id="6881299373831449287">Chrome اپ ڈیٹ کیا جا رہا ہے</translation> <translation id="6885412569789873916">Chrome بی ٹا ایپس</translation>
diff --git a/chrome/app/resources/google_chrome_strings_uz.xtb b/chrome/app/resources/google_chrome_strings_uz.xtb index f36daa4..026c83e2 100644 --- a/chrome/app/resources/google_chrome_strings_uz.xtb +++ b/chrome/app/resources/google_chrome_strings_uz.xtb
@@ -79,6 +79,7 @@ <translation id="2401189691232800402">ChromeOS tizimi</translation> <translation id="2467438592969358367">Google Chrome parollaringizni eksport qilmoqchi. Ruxsat berish uchun Windows platformasidagi parolingizni kiriting.</translation> <translation id="2485422356828889247">O‘chirib tashlash</translation> +<translation id="2494974097748878569">Chrome ichidagi Google Assistent</translation> <translation id="2534507159460261402">Google Pay (Chrome brauzeriga nusxalandi)</translation> <translation id="2559253115192232574">Keyinchalik sayt sizga chiqadigan reklamani moslashtirish maqsadida Chromedan qiziqishlaringiz haqida soʻrashi mumkin. Chrome 3 tagacha qiziqishingizni ulasha oladi.</translation> <translation id="2563121210305478421">Chrome qayta ishga tushirilsinmi?</translation> @@ -280,6 +281,7 @@ <translation id="6739177684496155661">Yangi Chrome profilida davom etasizmi?</translation> <translation id="6750954913813541382">Imlo xatolarini tuzatish uchun Chrome brauzerida kiritiladigan matn Google serverlariga yuboriladi.</translation> <translation id="677276454032249905">Chrome baribir yopilsinmi?</translation> +<translation id="6785872064505734160">Chromedagi Google Assistent buyruqlaringizni saytlararo bajarishi mumkin</translation> <translation id="683440813066116847">Google Chrome Canary‘ga kiruvchi trafikni mDNS protokoli orqali uzatishga ruxsat berish</translation> <translation id="6881299373831449287">Chrome yangilanmoqda</translation> <translation id="6885412569789873916">Chrome Beta ilovalari</translation>
diff --git a/chrome/app/resources/google_chrome_strings_vi.xtb b/chrome/app/resources/google_chrome_strings_vi.xtb index 6380fef8..09314b1c 100644 --- a/chrome/app/resources/google_chrome_strings_vi.xtb +++ b/chrome/app/resources/google_chrome_strings_vi.xtb
@@ -79,6 +79,7 @@ <translation id="2401189691232800402">Hệ thống ChromeOS</translation> <translation id="2467438592969358367">Google Chrome muốn xuất các mật khẩu của bạn. Hãy nhập mật khẩu Windows để cho phép thực hiện việc này.</translation> <translation id="2485422356828889247">Gỡ cài đặt</translation> +<translation id="2494974097748878569">Trợ lý Google trong Chrome</translation> <translation id="2534507159460261402">Google Pay (đã sao chép vào Chrome)</translation> <translation id="2559253115192232574">Sau đó, trang web mà bạn truy cập có thể đề nghị Chrome cho biết mối quan tâm của bạn nhằm cá nhân hoá quảng cáo mà bạn thấy. Chromium có thể chia sẻ tối đa 3 mối quan tâm.</translation> <translation id="2563121210305478421">Chạy lại Chrome?</translation> @@ -277,6 +278,7 @@ <translation id="6739177684496155661">Tiếp tục đăng nhập vào hồ sơ mới trên Chrome?</translation> <translation id="6750954913813541382">Để sửa lỗi chính tả, Chrome sẽ gửi văn bản mà bạn nhập vào trình duyệt này cho Google</translation> <translation id="677276454032249905">Bạn vẫn muốn thoát khỏi Chrome?</translation> +<translation id="6785872064505734160">Trợ lý Google trong Chrome có thể giúp bạn làm các việc trên trang web</translation> <translation id="683440813066116847">Quy tắc kết nối để Google Chrome Canary cho phép lưu lượng truy cập mDNS.</translation> <translation id="6881299373831449287">Đang cập nhật Chrome</translation> <translation id="6885412569789873916">Ứng dụng Chrome Beta</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-CN.xtb b/chrome/app/resources/google_chrome_strings_zh-CN.xtb index d6b7bc5..f31bf5f6 100644 --- a/chrome/app/resources/google_chrome_strings_zh-CN.xtb +++ b/chrome/app/resources/google_chrome_strings_zh-CN.xtb
@@ -76,6 +76,7 @@ <translation id="2401189691232800402">Chrome 操作系统系统</translation> <translation id="2467438592969358367">Google Chrome 想导出您的密码。请输入您的 Windows 密码以允许此操作。</translation> <translation id="2485422356828889247">卸载</translation> +<translation id="2494974097748878569">Chrome 中的 Google 助理</translation> <translation id="2534507159460261402">Google Pay(已复制到 Chrome)</translation> <translation id="2559253115192232574">之后,您访问的网站可向 Chrome 请求查看您的兴趣,以便向您展示个性化广告。Chrome 最多可共享 3 项兴趣信息。</translation> <translation id="2563121210305478421">重新启动 Chrome?</translation> @@ -271,6 +272,7 @@ <translation id="6739177684496155661">使用一份新的 Chrome 个人资料继续浏览?</translation> <translation id="6750954913813541382">为了修正拼写错误,Chrome 会将您在浏览器中输入的文字发送给 Google</translation> <translation id="677276454032249905">仍要退出 Chrome?</translation> +<translation id="6785872064505734160">Chrome 中的 Google 助理可帮您在各网站上完成所需操作</translation> <translation id="683440813066116847">Google Chrome Canary版的入站规则,允许mDNS流量。</translation> <translation id="6881299373831449287">正在更新 Chrome</translation> <translation id="6885412569789873916">Chrome 测试版应用</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zh-HK.xtb b/chrome/app/resources/google_chrome_strings_zh-HK.xtb index 7ad99b4..8636a89 100644 --- a/chrome/app/resources/google_chrome_strings_zh-HK.xtb +++ b/chrome/app/resources/google_chrome_strings_zh-HK.xtb
@@ -80,6 +80,7 @@ <translation id="2401189691232800402">Chrome OS 系統</translation> <translation id="2467438592969358367">Google Chrome 想匯出您的密碼。請輸入 Windows 密碼以允許此操作。</translation> <translation id="2485422356828889247">解除安裝</translation> +<translation id="2494974097748878569">Chrome 的「Google 助理」</translation> <translation id="2534507159460261402">Google Pay (已複製至 Chrome)</translation> <translation id="2559253115192232574">您日後瀏覽的網站可向 Chrome 要求查看您的興趣,以便向您顯示個人化廣告。Chrome 最多可分享 3 個感興趣的主題。</translation> <translation id="2563121210305478421">要重新啟動 Chrome 嗎?</translation> @@ -279,6 +280,7 @@ <translation id="6739177684496155661">要透過新的 Chrome 設定檔繼續瀏覽嗎?</translation> <translation id="6750954913813541382">Chrome 會將您在瀏覽器中輸入的文字傳送至 Google,以修正拼字錯誤</translation> <translation id="677276454032249905">仍要結束 Chrome 嗎?</translation> +<translation id="6785872064505734160">Chrome 的「Google 助理」可助您完成各網站的操作</translation> <translation id="683440813066116847">允許 mDNS 流量的 Google Chrome Canary 輸入規則。</translation> <translation id="6881299373831449287">正在更新 Chrome</translation> <translation id="6885412569789873916">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 02d8d60..39a147c 100644 --- a/chrome/app/resources/google_chrome_strings_zh-TW.xtb +++ b/chrome/app/resources/google_chrome_strings_zh-TW.xtb
@@ -77,6 +77,7 @@ <translation id="2401189691232800402">Chrome OS 系統</translation> <translation id="2467438592969358367">Google Chrome 要求匯出你的密碼。如果允許,請輸入你的 Windows 密碼。</translation> <translation id="2485422356828889247">解除安裝</translation> +<translation id="2494974097748878569">Chrome 版 Google 助理</translation> <translation id="2534507159460261402">Google Pay (已複製到 Chrome)</translation> <translation id="2559253115192232574">在此之後,你造訪的網站可以要求 Chrome 查看你的興趣喜好,以便向你放送個人化廣告。Chrome 最多可以分享 3 個感興趣的主題。</translation> <translation id="2563121210305478421">要重新啟動 Chrome 嗎?</translation> @@ -274,6 +275,7 @@ <translation id="6739177684496155661">要繼續使用新的 Chrome 設定檔嗎?</translation> <translation id="6750954913813541382">Chrome 會將你在瀏覽器中輸入的文字傳送至 Google,以修正拼字錯誤</translation> <translation id="677276454032249905">確定要結束 Chrome 嗎?</translation> +<translation id="6785872064505734160">Chrome 版 Google 助理可協助你在不同的網站上完成動作</translation> <translation id="683440813066116847">允許 mDNS 流量的 Google Chrome Canary 輸入規則。</translation> <translation id="6881299373831449287">正在更新 Chrome</translation> <translation id="6885412569789873916">Chrome 測試版應用程式</translation>
diff --git a/chrome/app/resources/google_chrome_strings_zu.xtb b/chrome/app/resources/google_chrome_strings_zu.xtb index 26a27b5..dee0cf8 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="2401189691232800402">Isistimu ye-ChromeOS</translation> <translation id="2467438592969358367">I-Google Chrome ifuna ukuthumela amaphasiwedi akho. Thayipha iphasiwedi yakho ye-Windows ukuze uvumele lokhu.</translation> <translation id="2485422356828889247">Khipha</translation> +<translation id="2494974097748878569">Umsizi we-Google ku-Chrome</translation> <translation id="2534507159460261402">I-Google Pay (ikopishelwe ku-Chrome)</translation> <translation id="2559253115192232574">Kamuva, isayithi olivakashelayo lingacela i-Chrome ukuthi ibone izintshisekelo zakho ukuze yenze izikhangiso ozibonayo ngokwezifiso zakho. I-Chrome ikwazi ukwabelana ngezintshisekelo ezifika ku-3.</translation> <translation id="2563121210305478421">Qalisa kabusha i-Chrome?</translation> @@ -282,6 +283,7 @@ <translation id="6739177684496155661">Qhubeka kuphrofayela entsha ye-Chrome?</translation> <translation id="6750954913813541382">Ukuze kulungiswe amaphutha okupeletwa, i-Chrome ithumela umbhalo owuthayiphayo kusiphequluli ku-Google</translation> <translation id="677276454032249905">Phuma ku-Chrome noma kunjalo?</translation> +<translation id="6785872064505734160">Umsizi we-Google ku-Chrome angakuqedelela izenzo kuwo wonke amawebhusayithi</translation> <translation id="683440813066116847">Umyalo wokubophezeleka ngaphakathi kwe-Google Chrome Canary ukuze kuvunyelwe ithrafikhi ye-mDNS.</translation> <translation id="6881299373831449287">Ibuyekeza i-Chrome</translation> <translation id="6885412569789873916">Izinhlelo zokusebenza ze-beta ye-Chrome</translation>
diff --git a/chrome/browser/BUILD.gn b/chrome/browser/BUILD.gn index 4719087f..e2e8b96 100644 --- a/chrome/browser/BUILD.gn +++ b/chrome/browser/BUILD.gn
@@ -515,8 +515,8 @@ "enterprise/util/managed_browser_utils.cc", "enterprise/util/managed_browser_utils.h", "expired_flags_list.h", - "external_protocol/auto_launch_protocols_policy_handler.cc", - "external_protocol/auto_launch_protocols_policy_handler.h", + "external_protocol/constants.cc", + "external_protocol/constants.h", "external_protocol/external_protocol_handler.cc", "external_protocol/external_protocol_handler.h", "external_protocol/external_protocol_observer.cc", @@ -1152,8 +1152,6 @@ "plugins/pdf_iframe_navigation_throttle.h", "policy/boolean_disabling_policy_handler.cc", "policy/boolean_disabling_policy_handler.h", - "policy/browsing_history_policy_handler.cc", - "policy/browsing_history_policy_handler.h", "policy/chrome_browser_policy_connector.cc", "policy/chrome_browser_policy_connector.h", "policy/chrome_policy_conversions_client.cc", @@ -1172,14 +1170,10 @@ "policy/cloud/user_cloud_policy_invalidator_factory.h", "policy/configuration_policy_handler_list_factory.cc", "policy/configuration_policy_handler_list_factory.h", - "policy/developer_tools_policy_handler.cc", - "policy/developer_tools_policy_handler.h", "policy/device_management_service_configuration.cc", "policy/device_management_service_configuration.h", "policy/dm_token_utils.cc", "policy/dm_token_utils.h", - "policy/file_selection_dialogs_policy_handler.cc", - "policy/file_selection_dialogs_policy_handler.h", "policy/homepage_location_policy_handler.cc", "policy/homepage_location_policy_handler.h", "policy/javascript_policy_handler.cc", @@ -1407,8 +1401,6 @@ "profiles/force_safe_search_policy_handler.h", "profiles/force_youtube_safety_mode_policy_handler.cc", "profiles/force_youtube_safety_mode_policy_handler.h", - "profiles/guest_mode_policy_handler.cc", - "profiles/guest_mode_policy_handler.h", "profiles/incognito_mode_policy_handler.cc", "profiles/incognito_mode_policy_handler.h", "profiles/keep_alive/profile_keep_alive_types.cc", @@ -2073,7 +2065,7 @@ "//components/content_settings/common:mojom", "//components/content_settings/core/browser", "//components/content_settings/core/common", - "//components/contextual_search/core:browser", + "//components/contextual_search/core/browser", "//components/cookie_config", "//components/country_codes", "//components/crash/core/browser", @@ -2582,8 +2574,6 @@ "android/content/content_utils.cc", "android/context_menu/context_menu_native_delegate_impl.cc", "android/context_menu/context_menu_native_delegate_impl.h", - "android/contextualsearch/contextual_search_context.cc", - "android/contextualsearch/contextual_search_context.h", "android/contextualsearch/contextual_search_delegate.cc", "android/contextualsearch/contextual_search_delegate.h", "android/contextualsearch/contextual_search_field_trial.cc", @@ -2592,8 +2582,8 @@ "android/contextualsearch/contextual_search_manager.h", "android/contextualsearch/contextual_search_tab_helper.cc", "android/contextualsearch/contextual_search_tab_helper.h", - "android/contextualsearch/resolved_search_term.cc", - "android/contextualsearch/resolved_search_term.h", + "android/contextualsearch/native_contextual_search_context.cc", + "android/contextualsearch/native_contextual_search_context.h", "android/contextualsearch/unhandled_tap_notifier_impl.cc", "android/contextualsearch/unhandled_tap_notifier_impl.h", "android/contextualsearch/unhandled_tap_web_contents_observer.cc", @@ -4025,8 +4015,6 @@ "permissions/attestation_permission_request.h", "policy/device_account_initializer.cc", "policy/device_account_initializer.h", - "policy/local_sync_policy_handler.cc", - "policy/local_sync_policy_handler.h", "policy/managed_account_policy_handler.cc", "policy/managed_account_policy_handler.h", "policy/webhid_device_policy_handler.cc", @@ -4334,8 +4322,6 @@ "themes/custom_theme_supplier.cc", "themes/increased_contrast_theme_supplier.cc", "themes/increased_contrast_theme_supplier.h", - "themes/theme_color_policy_handler.cc", - "themes/theme_color_policy_handler.h", "themes/theme_helper.cc", "themes/theme_helper.h", "themes/theme_properties.cc", @@ -4498,6 +4484,12 @@ sources += [ "apps/app_service/app_service_proxy_desktop.cc", "apps/app_service/app_service_proxy_desktop.h", + "external_protocol/auto_launch_protocols_policy_handler.cc", + "external_protocol/auto_launch_protocols_policy_handler.h", + "policy/file_selection_dialogs_policy_handler.cc", + "policy/file_selection_dialogs_policy_handler.h", + "themes/theme_color_policy_handler.cc", + "themes/theme_color_policy_handler.h", ] } if (!is_chromeos_ash) { @@ -4516,8 +4508,6 @@ "lifetime/switch_utils.h", "metrics/upgrade_metrics_provider.cc", "metrics/upgrade_metrics_provider.h", - "net/disk_cache_dir_policy_handler.cc", - "net/disk_cache_dir_policy_handler.h", "platform_util.cc", "policy/cbcm_invalidations_initializer.cc", "policy/cbcm_invalidations_initializer.h", @@ -4608,6 +4598,19 @@ sources += [ "task_manager/sampling/shared_sampler_stub.cc" ] } + if (!is_ios) { + sources += [ + "net/disk_cache_dir_policy_handler.cc", + "net/disk_cache_dir_policy_handler.h", + "policy/browsing_history_policy_handler.cc", + "policy/browsing_history_policy_handler.h", + "policy/developer_tools_policy_handler.cc", + "policy/developer_tools_policy_handler.h", + "profiles/guest_mode_policy_handler.cc", + "profiles/guest_mode_policy_handler.h", + ] + } + if (is_chrome_branded) { deps += [ "//chrome/browser/lens/region_search" ] } @@ -6221,6 +6224,8 @@ "enterprise/signals/user_delegate_impl.h", "enterprise/signals/user_permission_service_factory.cc", "enterprise/signals/user_permission_service_factory.h", + "policy/local_sync_policy_handler.cc", + "policy/local_sync_policy_handler.h", ] deps += [ "//chrome/browser/enterprise/connectors/device_trust/attestation/common/proto:attestation_ca_proto",
diff --git a/chrome/browser/android/bottombar/overlay_panel_content.h b/chrome/browser/android/bottombar/overlay_panel_content.h index b04df598..cb668dc 100644 --- a/chrome/browser/android/bottombar/overlay_panel_content.h +++ b/chrome/browser/android/bottombar/overlay_panel_content.h
@@ -9,7 +9,6 @@ #include "base/android/jni_android.h" #include "base/task/cancelable_task_tracker.h" -#include "chrome/browser/android/contextualsearch/contextual_search_context.h" namespace content { class WebContents;
diff --git a/chrome/browser/android/contextualsearch/contextual_search_context.cc b/chrome/browser/android/contextualsearch/contextual_search_context.cc deleted file mode 100644 index 25cb1a8..0000000 --- a/chrome/browser/android/contextualsearch/contextual_search_context.cc +++ /dev/null
@@ -1,243 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "chrome/browser/android/contextualsearch/contextual_search_context.h" - -#include "base/android/jni_string.h" -#include "chrome/android/chrome_jni_headers/ContextualSearchContext_jni.h" -#include "components/translate/core/common/translate_constants.h" -#include "components/translate/core/language_detection/language_detection_util.h" -#include "content/public/browser/browser_thread.h" - -ContextualSearchContext::ContextualSearchContext(JNIEnv* env, jobject obj) { - java_object_.Reset(env, obj); -} - -ContextualSearchContext::ContextualSearchContext( - const std::string& home_country, - const GURL& page_url, - const std::string& encoding) - : can_resolve_(true), - can_send_base_page_url_(true), - home_country_(home_country), - base_page_url_(page_url), - base_page_encoding_(encoding) { - java_object_ = nullptr; -} - -ContextualSearchContext::~ContextualSearchContext() { -} - -// static -base::WeakPtr<ContextualSearchContext> -ContextualSearchContext::FromJavaContextualSearchContext( - const base::android::JavaRef<jobject>& j_contextual_search_context) { - DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - if (j_contextual_search_context.is_null()) - return NULL; - - ContextualSearchContext* contextual_search_context = - reinterpret_cast<ContextualSearchContext*>( - Java_ContextualSearchContext_getNativePointer( - base::android::AttachCurrentThread(), - j_contextual_search_context)); - return contextual_search_context->GetWeakPtr(); -} - -void ContextualSearchContext::SetResolveProperties( - JNIEnv* env, - jobject obj, - const base::android::JavaParamRef<jstring>& j_home_country, - jboolean j_may_send_base_page_url) { - can_resolve_ = true; - home_country_ = base::android::ConvertJavaStringToUTF8(env, j_home_country); - can_send_base_page_url_ = j_may_send_base_page_url; -} - -void ContextualSearchContext::SetSurroundingsAndSelection( - JNIEnv* env, - jobject obj, - const base::android::JavaParamRef<jstring>& j_surrounding_text, - jint j_selection_start, - jint j_selection_end) { - surrounding_text_ = - base::android::ConvertJavaStringToUTF16(env, j_surrounding_text); - DCHECK(j_selection_start >= 0); - DCHECK(j_selection_end <= (int)surrounding_text_.length()); - DCHECK(j_selection_start <= j_selection_end); - start_offset_ = j_selection_start; - end_offset_ = j_selection_end; -} - -void ContextualSearchContext::AdjustSelection(JNIEnv* env, - jobject obj, - jint j_start_adjust, - jint j_end_adjust) { - DCHECK(start_offset_ + j_start_adjust >= 0); - DCHECK(start_offset_ + j_start_adjust <= (int)surrounding_text_.length()); - DCHECK(end_offset_ + j_end_adjust >= 0); - DCHECK(end_offset_ + j_end_adjust <= (int)surrounding_text_.length()); - start_offset_ += j_start_adjust; - end_offset_ += j_end_adjust; -} - -// Accessors - -bool ContextualSearchContext::CanResolve() const { - return can_resolve_; -} - -bool ContextualSearchContext::CanSendBasePageUrl() const { - return can_send_base_page_url_; -} - -const GURL ContextualSearchContext::GetBasePageUrl() const { - return base_page_url_; -} - -void ContextualSearchContext::SetBasePageUrl(const GURL& base_page_url) { - this->base_page_url_ = base_page_url; -} - -const std::string ContextualSearchContext::GetBasePageEncoding() const { - return base_page_encoding_; -} - -void ContextualSearchContext::SetBasePageEncoding( - const std::string& base_page_encoding) { - this->base_page_encoding_ = base_page_encoding; -} - -const std::string ContextualSearchContext::GetHomeCountry() const { - return home_country_; -} - -int64_t ContextualSearchContext::GetPreviousEventId() const { - return previous_event_id_; -} - -int ContextualSearchContext::GetPreviousEventResults() const { - return previous_event_results_; -} - -void ContextualSearchContext::SetSelectionSurroundings( - int start_offset, - int end_offset, - const std::u16string& surrounding_text) { - this->start_offset_ = start_offset; - this->end_offset_ = end_offset; - this->surrounding_text_ = surrounding_text; -} - -const std::u16string ContextualSearchContext::GetSurroundingText() const { - return surrounding_text_; -} - -int ContextualSearchContext::GetStartOffset() const { - return start_offset_; -} - -int ContextualSearchContext::GetEndOffset() const { - return end_offset_; -} - -void ContextualSearchContext::PrepareToResolve( - JNIEnv* env, - const base::android::JavaParamRef<jobject>& obj, - jboolean j_is_exact_resolve, - const base::android::JavaParamRef<jstring>& j_related_searches_stamp) { - is_exact_resolve_ = j_is_exact_resolve; - related_searches_stamp_ = - base::android::ConvertJavaStringToUTF8(env, j_related_searches_stamp); - do_related_searches_ = !related_searches_stamp_.empty(); -} - -bool ContextualSearchContext::GetExactResolve() const { - return is_exact_resolve_; -} - -base::android::ScopedJavaLocalRef<jstring> -ContextualSearchContext::DetectLanguage( - JNIEnv* env, - const base::android::JavaParamRef<jobject>& obj) const { - std::string language = GetReliableLanguage(GetSelection()); - if (language.empty()) - language = GetReliableLanguage(this->surrounding_text_); - base::android::ScopedJavaLocalRef<jstring> j_language = - base::android::ConvertUTF8ToJavaString(env, language); - return j_language; -} - -void ContextualSearchContext::SetTranslationLanguages( - JNIEnv* env, - const base::android::JavaParamRef<jobject>& obj, - const base::android::JavaParamRef<jstring>& j_detected_language, - const base::android::JavaParamRef<jstring>& j_target_language, - const base::android::JavaParamRef<jstring>& j_fluent_languages) { - translation_languages_.detected_language = - base::android::ConvertJavaStringToUTF8(env, j_detected_language); - translation_languages_.target_language = - base::android::ConvertJavaStringToUTF8(env, j_target_language); - translation_languages_.fluent_languages = - base::android::ConvertJavaStringToUTF8(env, j_fluent_languages); -} - -const ContextualSearchContext::TranslationLanguages& -ContextualSearchContext::GetTranslationLanguages() const { - return translation_languages_; -} - -std::string ContextualSearchContext::GetReliableLanguage( - const std::u16string& contents) const { - std::string model_detected_language; - bool is_model_reliable; - float model_reliability_score; - std::string language = translate::DeterminePageLanguage( - /*content_language=*/std::string(), - /*html_lang=*/std::string(), contents, &model_detected_language, - &is_model_reliable, model_reliability_score); - // Make sure we return an empty string when unreliable or an unknown result. - if (!is_model_reliable || language == translate::kUnknownLanguageCode) - language = ""; - return language; -} - -std::u16string ContextualSearchContext::GetSelection() const { - int start = this->start_offset_; - int end = this->end_offset_; - DCHECK(start >= 0); - DCHECK(end >= 0); - DCHECK(end <= (int)this->surrounding_text_.length()); - DCHECK(start <= end); - return this->surrounding_text_.substr(start, end - start); -} - -bool ContextualSearchContext::GetRelatedSearches() const { - return do_related_searches_; -} - -const std::string ContextualSearchContext::GetRelatedSearchesStamp() const { - return related_searches_stamp_; -} - -// Boilerplate. - -base::WeakPtr<ContextualSearchContext> ContextualSearchContext::GetWeakPtr() { - return weak_factory_.GetWeakPtr(); -} - -// Java wrapper boilerplate - -void ContextualSearchContext::Destroy( - JNIEnv* env, - const base::android::JavaParamRef<jobject>& obj) { - delete this; -} - -jlong JNI_ContextualSearchContext_Init( - JNIEnv* env, - const base::android::JavaParamRef<jobject>& obj) { - ContextualSearchContext* context = new ContextualSearchContext(env, obj); - return reinterpret_cast<intptr_t>(context); -}
diff --git a/chrome/browser/android/contextualsearch/contextual_search_context.h b/chrome/browser/android/contextualsearch/contextual_search_context.h deleted file mode 100644 index baaac3a..0000000 --- a/chrome/browser/android/contextualsearch/contextual_search_context.h +++ /dev/null
@@ -1,184 +0,0 @@ -// Copyright 2015 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef CHROME_BROWSER_ANDROID_CONTEXTUALSEARCH_CONTEXTUAL_SEARCH_CONTEXT_H_ -#define CHROME_BROWSER_ANDROID_CONTEXTUALSEARCH_CONTEXTUAL_SEARCH_CONTEXT_H_ - -#include <string> - -#include "base/android/jni_android.h" -#include "base/memory/weak_ptr.h" -#include "url/gurl.h" - -// Encapsulates key parts of a Contextual Search Context, including surrounding -// text. This is the native implementation of the Java ContextualSearchContext. -struct ContextualSearchContext { - public: - // Languages used for translation. - struct TranslationLanguages { - std::string detected_language; - std::string target_language; - std::string fluent_languages; - }; - - ContextualSearchContext(JNIEnv* env, jobject obj); - // Constructor for tests. - ContextualSearchContext(const std::string& home_country, - const GURL& page_url, - const std::string& encoding); - - ContextualSearchContext(const ContextualSearchContext&) = delete; - ContextualSearchContext& operator=(const ContextualSearchContext&) = delete; - - ~ContextualSearchContext(); - - // Calls the destructor. Should be called when this native object is no - // longer needed. - void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); - - // Returns the native |ContextualSearchContext| given the Java object. - static base::WeakPtr<ContextualSearchContext> FromJavaContextualSearchContext( - const base::android::JavaRef<jobject>& j_contextual_search_context); - - // Returns whether this context can be resolved. - // The context can be resolved only after calling SetResolveProperites. - bool CanResolve() const; - - // Returns whether the base page URL may be sent (according to the Java - // policy). - bool CanSendBasePageUrl() const; - - // Sets the properties needed to resolve a context. - void SetResolveProperties( - JNIEnv* env, - jobject obj, - const base::android::JavaParamRef<jstring>& j_home_country, - jboolean j_may_send_base_page_url); - - // Sets the surrounding text to the given string and the selection to the - // given start/end range. - void SetSurroundingsAndSelection( - JNIEnv* env, - jobject obj, - const base::android::JavaParamRef<jstring>& j_surrounding_text, - jint j_selection_start, - jint j_selection_end); - - // Adjust the current selection offsets by the given signed amounts. - void AdjustSelection(JNIEnv* env, - jobject obj, - jint j_start_adjust, - jint j_end_adjust); - - // Gets the URL of the base page. - const GURL GetBasePageUrl() const; - // Sets the URL of the base page. - void SetBasePageUrl(const GURL& base_page_url); - - // Gets the encoding of the base page. This is not very important, since - // the surrounding text stored here in a std::u16string is implicitly encoded - // in UTF-16 (see http://www.chromium.org/developers/chromium-string-usage). - const std::string GetBasePageEncoding() const; - void SetBasePageEncoding(const std::string& base_page_encoding); - - // Gets the country code of the home country of the user, or an empty string. - const std::string GetHomeCountry() const; - - // Sets the selection and surroundings. - void SetSelectionSurroundings(int start_offset, - int end_offset, - const std::u16string& surrounding_text); - - // Gets the text surrounding the selection (including the selection). - const std::u16string GetSurroundingText() const; - - // Gets the start offset of the selection within the surrounding text (in - // characters). - int GetStartOffset() const; - // Gets the end offset of the selection within the surrounding text (in - // characters). - int GetEndOffset() const; - - int64_t GetPreviousEventId() const; - int GetPreviousEventResults() const; - - // Prepares the context to be used in a resolve request by supplying last - // minute parameters. - // |j_is_exact_resolve| indicates if the resolved term should be an exact - // match for the selection range instead of an expandable selection. - // |j_related_searches_stamp| is a value to stamp onto search URLs to - // identify related searches. If the string is empty then Related Searches - // are not being requested. - void PrepareToResolve( - JNIEnv* env, - const base::android::JavaParamRef<jobject>& obj, - jboolean j_is_exact_resolve, - const base::android::JavaParamRef<jstring>& j_related_searches_stamp); - - // Returns whether the resolve request is for an exact match instead of an - // expandable term. - bool GetExactResolve() const; - - // Detects the language of the context using CLD from the translate utility. - base::android::ScopedJavaLocalRef<jstring> DetectLanguage( - JNIEnv* env, - const base::android::JavaParamRef<jobject>& obj) const; - - // Sets the languages to remember for use in translation. - // See |GetTranslationLanguages|. - void SetTranslationLanguages( - JNIEnv* env, - const base::android::JavaParamRef<jobject>& obj, - const base::android::JavaParamRef<jstring>& j_detected_language, - const base::android::JavaParamRef<jstring>& j_target_language, - const base::android::JavaParamRef<jstring>& j_fluent_languages); - - // Returns the languages to use for translation, as set by - // |SetTranslationLanguages|. - const TranslationLanguages& GetTranslationLanguages() const; - - // Returns whether this request should include Related Searches in the - // response. - bool GetRelatedSearches() const; - - // Get the logging information stamp for Related Searches requests or the - // empty string if the feature is not enabled. - const std::string GetRelatedSearchesStamp() const; - - // Gets a WeakPtr to this instance. - base::WeakPtr<ContextualSearchContext> GetWeakPtr(); - - private: - // Gets the reliable language of the given |contents| using CLD, or an empty - // string if none can reliably be determined. - std::string GetReliableLanguage(const std::u16string& contents) const; - - // Gets the selection, or an empty string if none. - std::u16string GetSelection() const; - - bool can_resolve_ = false; - bool can_send_base_page_url_ = false; - std::string home_country_; - GURL base_page_url_; - std::string base_page_encoding_; - std::u16string surrounding_text_; - int start_offset_ = 0; - int end_offset_ = 0; - int64_t previous_event_id_ = 0L; - int previous_event_results_ = 0; - bool is_exact_resolve_ = false; - TranslationLanguages translation_languages_; - bool do_related_searches_ = false; - std::string related_searches_stamp_; - - // The linked Java object. - base::android::ScopedJavaGlobalRef<jobject> java_object_; - - // Member variables should appear before the WeakPtrFactory, to ensure - // that any WeakPtrs to this instance are invalidated before its members - // variable's destructors are executed, rendering them invalid. - base::WeakPtrFactory<ContextualSearchContext> weak_factory_{this}; -}; - -#endif // CHROME_BROWSER_ANDROID_CONTEXTUALSEARCH_CONTEXTUAL_SEARCH_CONTEXT_H_
diff --git a/chrome/browser/android/contextualsearch/contextual_search_delegate.cc b/chrome/browser/android/contextualsearch/contextual_search_delegate.cc index 16cb328..6b38923 100644 --- a/chrome/browser/android/contextualsearch/contextual_search_delegate.cc +++ b/chrome/browser/android/contextualsearch/contextual_search_delegate.cc
@@ -19,7 +19,6 @@ #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/android/contextualsearch/contextual_search_field_trial.h" -#include "chrome/browser/android/contextualsearch/resolved_search_term.h" #include "chrome/browser/android/proto/client_discourse_context.pb.h" #include "chrome/browser/flags/android/chrome_feature_list.h" #include "chrome/browser/language/language_model_manager_factory.h" @@ -27,6 +26,7 @@ #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/translate/translate_service.h" #include "components/contextual_search/core/browser/public.h" +#include "components/contextual_search/core/browser/resolved_search_term.h" #include "components/language/core/browser/language_model.h" #include "components/language/core/browser/language_model_manager.h" #include "components/language/core/browser/pref_names.h" @@ -102,7 +102,7 @@ } void ContextualSearchDelegate::GatherAndSaveSurroundingText( - base::WeakPtr<ContextualSearchContext> contextual_search_context, + base::WeakPtr<NativeContextualSearchContext> contextual_search_context, content::WebContents* web_contents) { DCHECK(web_contents); blink::mojom::LocalFrame::GetTextSurroundingSelectionCallback callback = @@ -127,7 +127,7 @@ } void ContextualSearchDelegate::StartSearchTermResolutionRequest( - base::WeakPtr<ContextualSearchContext> contextual_search_context, + base::WeakPtr<NativeContextualSearchContext> contextual_search_context, content::WebContents* web_contents) { DCHECK(web_contents); if (context_ == nullptr) @@ -285,7 +285,7 @@ } std::string ContextualSearchDelegate::BuildRequestUrl( - ContextualSearchContext* context) { + NativeContextualSearchContext* context) { if (!template_url_service_ || !template_url_service_->GetDefaultSearchProvider()) { return std::string(); @@ -367,6 +367,8 @@ // Pin the start and end offsets to ensure they point within the string. uint32_t surrounding_length = surrounding_text.length(); + // TODO(crbug.com/1343955): The case where end_offset < start_offset should be + // handled here as well. start_offset = std::min(surrounding_length, start_offset); end_offset = std::min(surrounding_length, end_offset); @@ -391,7 +393,7 @@ } const net::HttpRequestHeaders ContextualSearchDelegate::GetDiscourseContext( - const ContextualSearchContext& context) { + const NativeContextualSearchContext& context) { discourse_context::ClientDiscourseContext proto; discourse_context::Display* display = proto.add_display(); display->set_uri(context.GetBasePageUrl().spec());
diff --git a/chrome/browser/android/contextualsearch/contextual_search_delegate.h b/chrome/browser/android/contextualsearch/contextual_search_delegate.h index 5d502b8a..9101e872 100644 --- a/chrome/browser/android/contextualsearch/contextual_search_delegate.h +++ b/chrome/browser/android/contextualsearch/contextual_search_delegate.h
@@ -15,8 +15,8 @@ #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "base/values.h" -#include "chrome/browser/android/contextualsearch/contextual_search_context.h" -#include "chrome/browser/android/contextualsearch/resolved_search_term.h" +#include "chrome/browser/android/contextualsearch/native_contextual_search_context.h" +#include "components/contextual_search/core/browser/resolved_search_term.h" #include "net/http/http_request_headers.h" namespace content { @@ -59,7 +59,7 @@ // Gathers surrounding text and saves it locally in the given context. void GatherAndSaveSurroundingText( - base::WeakPtr<ContextualSearchContext> contextual_search_context, + base::WeakPtr<NativeContextualSearchContext> contextual_search_context, content::WebContents* web_contents); // Starts an asynchronous search term resolution request. @@ -68,7 +68,7 @@ // When the response is available the callback specified in the constructor // is run. void StartSearchTermResolutionRequest( - base::WeakPtr<ContextualSearchContext> contextual_search_context, + base::WeakPtr<NativeContextualSearchContext> contextual_search_context, content::WebContents* web_contents); // Gets the target language for translation purposes for this user. @@ -111,7 +111,7 @@ // Builds and returns the search term resolution request URL. // |context| is used to help build the query. - std::string BuildRequestUrl(ContextualSearchContext* context); + std::string BuildRequestUrl(NativeContextualSearchContext* context); // Uses the TemplateURL service to construct a search term resolution URL from // the given parameters. @@ -127,7 +127,7 @@ // Populates and returns the discourse context. const net::HttpRequestHeaders GetDiscourseContext( - const ContextualSearchContext& context); + const NativeContextualSearchContext& context); // Builds a Resolved Search Term by decoding the given JSON string. std::unique_ptr<ResolvedSearchTerm> GetResolvedSearchTermFromJson( @@ -180,7 +180,7 @@ // For testing. void SetContextForTesting( - const base::WeakPtr<ContextualSearchContext>& context) { + const base::WeakPtr<NativeContextualSearchContext>& context) { context_ = context; } @@ -204,7 +204,7 @@ // Used to hold the context until an upcoming search term request is started. // Owned by the Java ContextualSearchContext. - base::WeakPtr<ContextualSearchContext> context_; + base::WeakPtr<NativeContextualSearchContext> context_; }; #endif // CHROME_BROWSER_ANDROID_CONTEXTUALSEARCH_CONTEXTUAL_SEARCH_DELEGATE_H_
diff --git a/chrome/browser/android/contextualsearch/contextual_search_delegate_unittest.cc b/chrome/browser/android/contextualsearch/contextual_search_delegate_unittest.cc index 1564fdc..315534e1 100644 --- a/chrome/browser/android/contextualsearch/contextual_search_delegate_unittest.cc +++ b/chrome/browser/android/contextualsearch/contextual_search_delegate_unittest.cc
@@ -19,11 +19,11 @@ #include "base/test/scoped_feature_list.h" #include "base/test/task_environment.h" #include "base/values.h" -#include "chrome/browser/android/contextualsearch/contextual_search_context.h" -#include "chrome/browser/android/contextualsearch/resolved_search_term.h" +#include "chrome/browser/android/contextualsearch/native_contextual_search_context.h" #include "chrome/browser/android/proto/client_discourse_context.pb.h" #include "chrome/browser/flags/android/chrome_feature_list.h" #include "chrome/common/chrome_switches.h" +#include "components/contextual_search/core/browser/resolved_search_term.h" #include "components/search_engines/template_url_service.h" #include "components/variations/scoped_variations_ids_provider.h" #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" @@ -98,7 +98,7 @@ const std::u16string& surrounding_text, int start_offset, int end_offset) { - test_context_ = new ContextualSearchContext( + test_context_ = new NativeContextualSearchContext( std::string(), GURL(kSomeSpecificBasePage), "utf-8"); // ContextualSearchDelegate class takes ownership of the context. delegate_->SetContextForTesting(test_context_->GetWeakPtr()); @@ -135,7 +135,7 @@ // from tests, but can be called here because this is a friend class. //------------------------------------------------------------------- void CreateTestContext() { - test_context_ = new ContextualSearchContext( + test_context_ = new NativeContextualSearchContext( std::string(), GURL(kSomeSpecificBasePage), "utf-8"); delegate_->SetContextForTesting(test_context_->GetWeakPtr()); } @@ -177,7 +177,7 @@ void SetSurroundingContext(const std::u16string& surrounding_text, int start_offset, int end_offset) { - test_context_ = new ContextualSearchContext( + test_context_ = new NativeContextualSearchContext( std::string(), GURL(kSomeSpecificBasePage), "utf-8"); test_context_->SetSelectionSurroundings(start_offset, end_offset, surrounding_text); @@ -306,7 +306,7 @@ test_shared_url_loader_factory_; // Will be owned by the delegate. - raw_ptr<ContextualSearchContext> test_context_; + raw_ptr<NativeContextualSearchContext> test_context_; // Features to enable base::test::ScopedFeatureList feature_list_;
diff --git a/chrome/browser/android/contextualsearch/contextual_search_manager.cc b/chrome/browser/android/contextualsearch/contextual_search_manager.cc index eba3bc6..4217be6 100644 --- a/chrome/browser/android/contextualsearch/contextual_search_manager.cc +++ b/chrome/browser/android/contextualsearch/contextual_search_manager.cc
@@ -16,9 +16,10 @@ #include "base/time/time.h" #include "chrome/android/chrome_jni_headers/ContextualSearchManager_jni.h" #include "chrome/browser/android/contextualsearch/contextual_search_delegate.h" -#include "chrome/browser/android/contextualsearch/resolved_search_term.h" +#include "chrome/browser/android/contextualsearch/native_contextual_search_context.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/search_engines/template_url_service_factory.h" +#include "components/contextual_search/core/browser/resolved_search_term.h" #include "components/navigation_interception/intercept_navigation_delegate.h" #include "components/variations/variations_associated_data.h" #include "content/public/browser/render_view_host.h" @@ -69,8 +70,8 @@ WebContents* base_web_contents = WebContents::FromJavaWebContents(j_base_web_contents); DCHECK(base_web_contents); - base::WeakPtr<ContextualSearchContext> contextual_search_context = - ContextualSearchContext::FromJavaContextualSearchContext( + base::WeakPtr<NativeContextualSearchContext> contextual_search_context = + NativeContextualSearchContext::FromJavaContextualSearchContext( j_contextual_search_context); // Calls back to OnSearchTermResolutionResponse. delegate_->StartSearchTermResolutionRequest(contextual_search_context, @@ -85,8 +86,8 @@ WebContents* base_web_contents = WebContents::FromJavaWebContents(j_base_web_contents); DCHECK(base_web_contents); - base::WeakPtr<ContextualSearchContext> contextual_search_context = - ContextualSearchContext::FromJavaContextualSearchContext( + base::WeakPtr<NativeContextualSearchContext> contextual_search_context = + NativeContextualSearchContext::FromJavaContextualSearchContext( j_contextual_search_context); delegate_->GatherAndSaveSurroundingText(contextual_search_context, base_web_contents);
diff --git a/chrome/browser/android/contextualsearch/contextual_search_manager.h b/chrome/browser/android/contextualsearch/contextual_search_manager.h index 449443a..07170fb 100644 --- a/chrome/browser/android/contextualsearch/contextual_search_manager.h +++ b/chrome/browser/android/contextualsearch/contextual_search_manager.h
@@ -8,7 +8,6 @@ #include <stddef.h> #include "base/task/cancelable_task_tracker.h" -#include "chrome/browser/android/contextualsearch/contextual_search_context.h" #include "chrome/browser/android/contextualsearch/contextual_search_delegate.h" // Manages the native extraction and request logic for Contextual Search,
diff --git a/chrome/browser/android/contextualsearch/native_contextual_search_context.cc b/chrome/browser/android/contextualsearch/native_contextual_search_context.cc new file mode 100644 index 0000000..9cf4eac --- /dev/null +++ b/chrome/browser/android/contextualsearch/native_contextual_search_context.cc
@@ -0,0 +1,135 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/android/contextualsearch/native_contextual_search_context.h" + +#include "base/android/jni_string.h" +#include "chrome/android/chrome_jni_headers/ContextualSearchContext_jni.h" +#include "components/translate/core/common/translate_constants.h" +#include "components/translate/core/language_detection/language_detection_util.h" +#include "content/public/browser/browser_thread.h" + +NativeContextualSearchContext::NativeContextualSearchContext(JNIEnv* env, + jobject obj) { + java_object_.Reset(env, obj); +} + +NativeContextualSearchContext::NativeContextualSearchContext( + const std::string& home_country, + const GURL& page_url, + const std::string& encoding) + : ContextualSearchContext(home_country, page_url, encoding) { + java_object_ = nullptr; +} + +NativeContextualSearchContext::~NativeContextualSearchContext() = default; + +// static +base::WeakPtr<NativeContextualSearchContext> +NativeContextualSearchContext::FromJavaContextualSearchContext( + const base::android::JavaRef<jobject>& j_contextual_search_context) { + DCHECK_CURRENTLY_ON(content::BrowserThread::UI); + if (j_contextual_search_context.is_null()) + return nullptr; + + NativeContextualSearchContext* contextual_search_context = + reinterpret_cast<NativeContextualSearchContext*>( + Java_ContextualSearchContext_getNativePointer( + base::android::AttachCurrentThread(), + j_contextual_search_context)); + return contextual_search_context->GetWeakPtr(); +} + +void NativeContextualSearchContext::SetResolveProperties( + JNIEnv* env, + jobject obj, + const base::android::JavaParamRef<jstring>& j_home_country, + jboolean j_may_send_base_page_url) { + std::string home_country = + base::android::ConvertJavaStringToUTF8(env, j_home_country); + ContextualSearchContext::SetResolveProperties(home_country, + j_may_send_base_page_url); +} + +void NativeContextualSearchContext::SetSurroundingsAndSelection( + JNIEnv* env, + jobject obj, + const base::android::JavaParamRef<jstring>& j_surrounding_text, + jint j_selection_start, + jint j_selection_end) { + std::u16string surrounding_text = + base::android::ConvertJavaStringToUTF16(env, j_surrounding_text); + DCHECK(j_selection_start >= 0); + DCHECK(j_selection_end <= static_cast<int>(surrounding_text.length())); + DCHECK(j_selection_start <= j_selection_end); + ContextualSearchContext::SetSelectionSurroundings( + j_selection_start, j_selection_end, surrounding_text); +} + +void NativeContextualSearchContext::AdjustSelection(JNIEnv* env, + jobject obj, + jint j_start_adjust, + jint j_end_adjust) { + ContextualSearchContext::AdjustSelection(j_start_adjust, j_end_adjust); +} + +void NativeContextualSearchContext::PrepareToResolve( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj, + jboolean j_is_exact_resolve, + const base::android::JavaParamRef<jstring>& j_related_searches_stamp) { + std::string related_searches_stamp = + base::android::ConvertJavaStringToUTF8(env, j_related_searches_stamp); + ContextualSearchContext::PrepareToResolve(j_is_exact_resolve, + related_searches_stamp); +} + +base::android::ScopedJavaLocalRef<jstring> +NativeContextualSearchContext::DetectLanguage( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj) const { + std::string language = ContextualSearchContext::DetectLanguage(); + base::android::ScopedJavaLocalRef<jstring> j_language = + base::android::ConvertUTF8ToJavaString(env, language); + return j_language; +} + +void NativeContextualSearchContext::SetTranslationLanguages( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj, + const base::android::JavaParamRef<jstring>& j_detected_language, + const base::android::JavaParamRef<jstring>& j_target_language, + const base::android::JavaParamRef<jstring>& j_fluent_languages) { + std::string detected_language = + base::android::ConvertJavaStringToUTF8(env, j_detected_language); + std::string target_language = + base::android::ConvertJavaStringToUTF8(env, j_target_language); + std::string fluent_languages = + base::android::ConvertJavaStringToUTF8(env, j_fluent_languages); + ContextualSearchContext::SetTranslationLanguages( + detected_language, target_language, fluent_languages); +} + +// Boilerplate. + +base::WeakPtr<NativeContextualSearchContext> +NativeContextualSearchContext::GetWeakPtr() { + return weak_factory_.GetWeakPtr(); +} + +// Java wrapper boilerplate + +void NativeContextualSearchContext::Destroy( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj) { + delete this; +} + +jlong JNI_ContextualSearchContext_Init( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj) { + NativeContextualSearchContext* context = + new NativeContextualSearchContext(env, obj); + return reinterpret_cast<intptr_t>(context); +}
diff --git a/chrome/browser/android/contextualsearch/native_contextual_search_context.h b/chrome/browser/android/contextualsearch/native_contextual_search_context.h new file mode 100644 index 0000000..6220342 --- /dev/null +++ b/chrome/browser/android/contextualsearch/native_contextual_search_context.h
@@ -0,0 +1,103 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_ANDROID_CONTEXTUALSEARCH_NATIVE_CONTEXTUAL_SEARCH_CONTEXT_H_ +#define CHROME_BROWSER_ANDROID_CONTEXTUALSEARCH_NATIVE_CONTEXTUAL_SEARCH_CONTEXT_H_ + +#include <string> + +#include "base/android/jni_android.h" +#include "base/memory/weak_ptr.h" +#include "components/contextual_search/core/browser/contextual_search_context.h" +#include "url/gurl.h" + +// A ContextualSearchContext subclass that is modifiable via JNI. This is the +// native implementation of the Java ContextualSearchContext; Instance lifetimes +// are managed by the associated Java object. +class NativeContextualSearchContext : public ContextualSearchContext { + public: + NativeContextualSearchContext(JNIEnv* env, jobject obj); + // Constructor for tests. + NativeContextualSearchContext(const std::string& home_country, + const GURL& page_url, + const std::string& encoding); + + NativeContextualSearchContext(const NativeContextualSearchContext&) = delete; + NativeContextualSearchContext& operator=( + const NativeContextualSearchContext&) = delete; + + ~NativeContextualSearchContext(); + + // Calls the destructor. Should be called when this native object is no + // longer needed. + void Destroy(JNIEnv* env, const base::android::JavaParamRef<jobject>& obj); + + // Returns the NativeContextualSearchContext given the Java object. + static base::WeakPtr<NativeContextualSearchContext> + FromJavaContextualSearchContext( + const base::android::JavaRef<jobject>& j_contextual_search_context); + + // Sets the properties needed to resolve a context. + void SetResolveProperties( + JNIEnv* env, + jobject obj, + const base::android::JavaParamRef<jstring>& j_home_country, + jboolean j_may_send_base_page_url); + + // Sets the surrounding text to the given string and the selection to the + // given start/end range. + void SetSurroundingsAndSelection( + JNIEnv* env, + jobject obj, + const base::android::JavaParamRef<jstring>& j_surrounding_text, + jint j_selection_start, + jint j_selection_end); + + // Adjust the current selection offsets by the given signed amounts. + void AdjustSelection(JNIEnv* env, + jobject obj, + jint j_start_adjust, + jint j_end_adjust); + + // Prepares the context to be used in a resolve request by supplying last + // minute parameters. + // |j_is_exact_resolve| indicates if the resolved term should be an exact + // match for the selection range instead of an expandable selection. + // |j_related_searches_stamp| is a value to stamp onto search URLs to + // identify related searches. If the string is empty then Related Searches + // are not being requested. + void PrepareToResolve( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj, + jboolean j_is_exact_resolve, + const base::android::JavaParamRef<jstring>& j_related_searches_stamp); + + // Detects the language of the context using CLD from the translate utility. + base::android::ScopedJavaLocalRef<jstring> DetectLanguage( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj) const; + + // Sets the languages to remember for use in translation. + // See |GetTranslationLanguages|. + void SetTranslationLanguages( + JNIEnv* env, + const base::android::JavaParamRef<jobject>& obj, + const base::android::JavaParamRef<jstring>& j_detected_language, + const base::android::JavaParamRef<jstring>& j_target_language, + const base::android::JavaParamRef<jstring>& j_fluent_languages); + + // Gets a WeakPtr to this instance. + base::WeakPtr<NativeContextualSearchContext> GetWeakPtr(); + + private: + // The linked Java object. + base::android::ScopedJavaGlobalRef<jobject> java_object_; + + // Member variables should appear before the WeakPtrFactory, to ensure + // that any WeakPtrs to this instance are invalidated before its members + // variable's destructors are executed, rendering them invalid. + base::WeakPtrFactory<NativeContextualSearchContext> weak_factory_{this}; +}; + +#endif // CHROME_BROWSER_ANDROID_CONTEXTUALSEARCH_NATIVE_CONTEXTUAL_SEARCH_CONTEXT_H_
diff --git a/chrome/browser/android/explore_sites/ntp_json_fetcher.cc b/chrome/browser/android/explore_sites/ntp_json_fetcher.cc index c04e897..46bb434 100644 --- a/chrome/browser/android/explore_sites/ntp_json_fetcher.cc +++ b/chrome/browser/android/explore_sites/ntp_json_fetcher.cc
@@ -100,17 +100,17 @@ void NTPJsonFetcher::OnJsonParse( data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { - OnJsonParseError(*result.error); + if (!result.has_value()) { + OnJsonParseError(result.error()); return; } - if (!result.value->is_dict()) { + if (!result->is_dict()) { OnJsonParseError("Parsed JSON is not a dictionary."); return; } - std::move(callback_).Run(NTPCatalog::create(*result.value)); + std::move(callback_).Run(NTPCatalog::create(*result)); } void NTPJsonFetcher::OnJsonParseError(const std::string& error) {
diff --git a/chrome/browser/android/tab_web_contents_delegate_android.cc b/chrome/browser/android/tab_web_contents_delegate_android.cc index e95c473..5ff2d994 100644 --- a/chrome/browser/android/tab_web_contents_delegate_android.cc +++ b/chrome/browser/android/tab_web_contents_delegate_android.cc
@@ -439,7 +439,7 @@ auto* intercept_navigation_delegate = navigation_interception::InterceptNavigationDelegate::Get(web_contents); if (intercept_navigation_delegate) - intercept_navigation_delegate->UpdateLastUserGestureCarryoverTimestamp(); + intercept_navigation_delegate->OnResourceRequestWithGesture(); } content::PictureInPictureResult
diff --git a/chrome/browser/ash/BUILD.gn b/chrome/browser/ash/BUILD.gn index fc74571..671aeea 100644 --- a/chrome/browser/ash/BUILD.gn +++ b/chrome/browser/ash/BUILD.gn
@@ -1563,6 +1563,7 @@ "//chrome/services/file_util/public/cpp", "//chrome/services/keymaster/public/mojom", "//chrome/services/printing/public/mojom", + "//chromeos/ash/components/browser_context_helper", "//chromeos/ash/components/dbus/anomaly_detector", "//chromeos/ash/components/dbus/anomaly_detector:proto", "//chromeos/ash/components/dbus/attestation",
diff --git a/chrome/browser/ash/app_restore/full_restore_app_launch_handler_browsertest.cc b/chrome/browser/ash/app_restore/full_restore_app_launch_handler_browsertest.cc index d6f5233..371d584 100644 --- a/chrome/browser/ash/app_restore/full_restore_app_launch_handler_browsertest.cc +++ b/chrome/browser/ash/app_restore/full_restore_app_launch_handler_browsertest.cc
@@ -2197,6 +2197,108 @@ arc_helper_.StopInstance(); } +IN_PROC_BROWSER_TEST_F(FullRestoreAppLaunchHandlerArcAppBrowserTest, + DeskTemplateAfterFullRestoreArcApp) { + SetProfile(); + arc_helper_.InstallTestApps(kTestAppPackage, false); + + const std::string app_id = GetTestApp1Id(kTestAppPackage); + int32_t session_id1 = + ::full_restore::FullRestoreSaveHandler::GetInstance()->GetArcSessionId(); + ::app_restore::AppRestoreInfo::GetInstance()->AddObserver( + test_app_restore_info_observer()); + + SaveAppLaunchInfo(app_id, session_id1); + + // Create the window for app1. The task id needs to match the `window_app_id` + // arg of CreateExoWindow. + int32_t kTaskId1 = 100; + views::Widget* widget = CreateExoWindow("org.chromium.arc.100"); + aura::Window* window = widget->GetNativeWindow(); + + // Simulate creating the task. + arc_helper_.CreateTask(app_id, kTaskId1, session_id1); + + SaveWindowInfo(window); + WaitForAppLaunchInfoSaved(); + + // Simulate the system shutdown process, and the window is closed. + widget->CloseNow(); + + Restore(); + + app_host()->OnTaskDestroyed(kTaskId1); + + int32_t session_id2 = + ::app_restore::kArcSessionIdOffsetForRestoredLaunching + 1; + + // Create some desks so we can test that the exo window is placed in the + // correct desk container after the task is created. + ash::AutotestDesksApi().CreateNewDesk(); + ash::AutotestDesksApi().CreateNewDesk(); + ash::AutotestDesksApi().CreateNewDesk(); + + ForceLaunchApp(app_id, kTaskId1); + + // Create the window to simulate the restoration for the app. The task id + // needs to match the |window_app_id| arg of CreateExoWindow. + int32_t kTaskId2 = 200; + widget = CreateExoWindow("org.chromium.arc.200"); + window = widget->GetNativeWindow(); + + // The task is not ready, so the window is currently in a hidden container. + EXPECT_EQ(ash::Shell::GetContainer(window->GetRootWindow(), + ash::kShellWindowId_UnparentedContainer), + window->parent()); + + VerifyObserver(window, /*launch_count=*/0, /*init_count=*/1); + VerifyWindowProperty(window, kTaskId2, + ::app_restore::kParentToHiddenContainer, + /*hidden=*/true); + + // Simulate creating the task for the restored window. + arc_helper_.CreateTask(app_id, kTaskId2, session_id2); + + // Activate the most recently created desk. + ActivateDesk(/*index=*/2); + + // Capture the active desk as a template. + ash::ToggleOverview(); + ash::WaitForOverviewEnterAnimation(); + ClickSaveDeskAsTemplateButton(); + ash::ToggleOverview(); + ash::WaitForOverviewExitAnimation(); + + // Destroy the task and close the window. + app_host()->OnTaskDestroyed(kTaskId2); + widget->CloseNow(); + + // Launch the template. + ash::ToggleOverview(); + ash::WaitForOverviewEnterAnimation(); + ClickButton(ash::GetExpandedStateDesksTemplatesButton()); + ClickTemplateItem(/*index=*/0); + ash::ToggleOverview(); + ash::WaitForOverviewExitAnimation(); + + content::RunAllTasksUntilIdle(); + + int32_t session_id3 = + ::app_restore::kArcSessionIdOffsetForRestoredLaunching + 2; + int32_t kTaskId3 = 300; + + arc_helper_.CreateTask(app_id, kTaskId3, session_id3); + + widget = CreateExoWindow("org.chromium.arc.300"); + window = widget->GetNativeWindow(); + + content::RunAllTasksUntilIdle(); + + // Verify that the ARC window has a negative restore window ID (and lower than + // the special value -1). + EXPECT_LT(window->GetProperty(::app_restore::kRestoreWindowIdKey), -1); +} + class ArcAppLaunchHandlerArcAppBrowserTest : public FullRestoreAppLaunchHandlerArcAppBrowserTest { protected:
diff --git a/chrome/browser/ash/arc/policy/arc_policy_bridge.cc b/chrome/browser/ash/arc/policy/arc_policy_bridge.cc index 350dc4e..9032aaf 100644 --- a/chrome/browser/ash/arc/policy/arc_policy_bridge.cc +++ b/chrome/browser/ash/arc/policy/arc_policy_bridge.cc
@@ -703,7 +703,7 @@ void ArcPolicyBridge::OnReportComplianceParse( base::OnceCallback<void(const std::string&)> callback, data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { + if (!result.has_value()) { // TODO(poromov@): Report to histogram. DLOG(ERROR) << "Can't parse policy compliance report"; std::move(callback).Run(kPolicyCompliantJson); @@ -716,10 +716,10 @@ prefs::kArcPolicyComplianceReported, true); const base::DictionaryValue* dict = nullptr; - if (result.value->GetAsDictionary(&dict)) { + if (result->GetAsDictionary(&dict)) { UpdateComplianceReportMetrics(dict); for (Observer& observer : observers_) { - observer.OnComplianceReportReceived(&result.value.value()); + observer.OnComplianceReportReceived(&*result); } } }
diff --git a/chrome/browser/ash/chrome_browser_main_parts_ash.cc b/chrome/browser/ash/chrome_browser_main_parts_ash.cc index 715480b..dadf908 100644 --- a/chrome/browser/ash/chrome_browser_main_parts_ash.cc +++ b/chrome/browser/ash/chrome_browser_main_parts_ash.cc
@@ -198,6 +198,7 @@ #include "chrome/common/chrome_switches.h" #include "chrome/common/logging_chrome.h" #include "chrome/common/pref_names.h" +#include "chromeos/ash/components/browser_context_helper/browser_context_helper.h" #include "chromeos/ash/components/dbus/services/cros_dbus_service.h" #include "chromeos/ash/components/dbus/session_manager/fake_session_manager_client.h" #include "chromeos/ash/components/dbus/session_manager/session_manager_client.h" @@ -633,8 +634,9 @@ switches::kLoginUser, cryptohome::Identification(user_manager::StubAccountId()).id()); if (!command_line->HasSwitch(switches::kLoginProfile)) { - command_line->AppendSwitchASCII(switches::kLoginProfile, - chrome::kTestUserProfileDir); + command_line->AppendSwitchASCII( + switches::kLoginProfile, + ash::BrowserContextHelper::kTestUserBrowserContextDirName); } LOG(WARNING) << "Running as stub user with profile dir: "
diff --git a/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_impl.cc b/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_impl.cc index 36031ec8..4aad69d 100644 --- a/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_impl.cc +++ b/chrome/browser/ash/enhanced_network_tts/enhanced_network_tts_impl.cc
@@ -196,16 +196,18 @@ const bool is_last_request, data_decoder::DataDecoder::ValueOrError result) { // Extract results for the request. - if (result.value && result.value->is_list()) { - SendResponse(UnpackJsonResponse(result.value->GetList(), start_index, - is_last_request)); + if (result.has_value() && result->is_list()) { + SendResponse( + UnpackJsonResponse(result->GetList(), start_index, is_last_request)); // Only start the next request after finishing the current one. This method // will also reset the internal state if there is no more request. ProcessNextServerRequest(); } else { ResetAndSendErrorResponse(mojom::TtsRequestError::kReceivedUnexpectedData); DVLOG(1) << "Parsing server response JSON failed with error: " - << result.error.value_or("No reason reported."); + << (!result.has_value() || result.error().empty() + ? "No reason reported." + : result.error()); } }
diff --git a/chrome/browser/ash/login/chrome_restart_request.cc b/chrome/browser/ash/login/chrome_restart_request.cc index 94409805..c4f9398 100644 --- a/chrome/browser/ash/login/chrome_restart_request.cc +++ b/chrome/browser/ash/login/chrome_restart_request.cc
@@ -33,6 +33,7 @@ #include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/url_constants.h" +#include "chromeos/ash/components/browser_context_helper/browser_context_helper.h" #include "chromeos/ash/components/dbus/session_manager/session_manager_client.h" #include "chromeos/dbus/constants/dbus_switches.h" #include "chromeos/dbus/dbus_thread_manager.h" @@ -371,8 +372,9 @@ switches::kLoginUser, cryptohome::Identification(user_manager::GuestAccountId()).id()); if (!base::SysInfo::IsRunningOnChromeOS()) { - otr_switches.SetStringKey(switches::kLoginProfile, - chrome::kLegacyProfileDir); + otr_switches.SetStringKey( + switches::kLoginProfile, + ash::BrowserContextHelper::kLegacyBrowserContextDirName); } // Override the home page.
diff --git a/chrome/browser/ash/login/enrollment/enrollment_screen.cc b/chrome/browser/ash/login/enrollment/enrollment_screen.cc index 4afd66a..7c6b9b2 100644 --- a/chrome/browser/ash/login/enrollment/enrollment_screen.cc +++ b/chrome/browser/ash/login/enrollment/enrollment_screen.cc
@@ -195,7 +195,7 @@ : policy::EnrollmentConfig::MODE_ATTESTATION_MANUAL_FALLBACK; } else if (current_auth_ == AUTH_ATTESTATION && !enrollment_config_.is_mode_attestation()) { - config_.mode = config_.is_attestation_forced() + config_.mode = config_.is_attestation_auth_forced() ? policy::EnrollmentConfig::MODE_ATTESTATION_LOCAL_FORCED : policy::EnrollmentConfig::MODE_ATTESTATION; }
diff --git a/chrome/browser/ash/login/enrollment/enrollment_screen_browsertest.cc b/chrome/browser/ash/login/enrollment/enrollment_screen_browsertest.cc index ce0f133..283ae78 100644 --- a/chrome/browser/ash/login/enrollment/enrollment_screen_browsertest.cc +++ b/chrome/browser/ash/login/enrollment/enrollment_screen_browsertest.cc
@@ -299,8 +299,7 @@ EXPECT_FALSE(test::OobeJS().GetAttributeBool("isManualEnrollment_", {"enterprise-enrollment"})); - // TODO(b/238175743) This should be true. - EXPECT_FALSE( + EXPECT_TRUE( test::OobeJS().GetAttributeBool("isForced_", {"enterprise-enrollment"})); EXPECT_TRUE(test::OobeJS().GetAttributeBool("isAutoEnroll_", {"enterprise-enrollment"}));
diff --git a/chrome/browser/ash/login/login_browsertest.cc b/chrome/browser/ash/login/login_browsertest.cc index 6fc19a2..ef95f6f 100644 --- a/chrome/browser/ash/login/login_browsertest.cc +++ b/chrome/browser/ash/login/login_browsertest.cc
@@ -47,6 +47,7 @@ #include "chrome/common/chrome_switches.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/interactive_test_utils.h" +#include "chromeos/ash/components/browser_context_helper/browser_context_helper.h" #include "chromeos/ash/components/dbus/userdataauth/fake_userdataauth_client.h" #include "components/policy/proto/chrome_device_policy.pb.h" #include "components/safe_browsing/core/common/safe_browsing_prefs.h" @@ -280,9 +281,9 @@ // This profile should NOT be an OTR profile. IN_PROC_BROWSER_TEST_F(LoginUserTest, UserPassed) { Profile* profile = browser()->profile(); - std::string profile_base_path("hash"); - profile_base_path.insert(0, chrome::kProfileDirPrefix); - EXPECT_EQ(profile_base_path, profile->GetBaseName().value()); + std::string profile_base_name = + ash::BrowserContextHelper::GetUserBrowserContextDirName("hash"); + EXPECT_EQ(profile_base_name, profile->GetBaseName().value()); EXPECT_FALSE(profile->IsOffTheRecord()); TestSystemTrayIsVisible();
diff --git a/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc b/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc index e16884b..b70b344 100644 --- a/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc +++ b/chrome/browser/ash/login/screens/recommend_apps/recommend_apps_fetcher_impl.cc
@@ -629,21 +629,21 @@ void RecommendAppsFetcherImpl::OnJsonParsed( data_decoder::DataDecoder::ValueOrError result) { if (base::FeatureList::IsEnabled(features::kAppDiscoveryForOobe)) { - if (!result.value) { + if (!result.has_value()) { delegate_->OnParseResponseError(); return; } - delegate_->OnLoadSuccess(std::move(*result.value)); + delegate_->OnLoadSuccess(std::move(*result)); return; } - if (!result.value || (!result.value->is_list() && !result.value->is_dict())) { + if (!result.has_value() || (!result->is_list() && !result->is_dict())) { RecordUmaResponseParseResult( RECOMMEND_APPS_RESPONSE_PARSE_RESULT_INVALID_JSON); delegate_->OnParseResponseError(); return; } - absl::optional<base::Value> output = ParseResponse(*result.value); + absl::optional<base::Value> output = ParseResponse(*result); if (!output.has_value()) { RecordUmaResponseAppCount(0); delegate_->OnParseResponseError();
diff --git a/chrome/browser/ash/policy/core/device_policy_decoder_unittest.cc b/chrome/browser/ash/policy/core/device_policy_decoder_unittest.cc index 5ab4b56..fbf8855a 100644 --- a/chrome/browser/ash/policy/core/device_policy_decoder_unittest.cc +++ b/chrome/browser/ash/policy/core/device_policy_decoder_unittest.cc
@@ -155,8 +155,9 @@ std::string localized_error = l10n_util::GetStringFUTF8( IDS_POLICY_PROTO_PARSING_ERROR, base::UTF8ToUTF16(error)); EXPECT_EQ( - "Policy parsing error: Invalid policy value: The value type doesn't " - "match the schema type. (at url)", + "Policy parsing error: Invalid policy value: " + "Policy type mismatch: expected: \"string\", actual: \"integer\". (at " + "url)", localized_error); }
diff --git a/chrome/browser/ash/policy/enrollment/enrollment_config.h b/chrome/browser/ash/policy/enrollment/enrollment_config.h index de86256..f8c0c4f 100644 --- a/chrome/browser/ash/policy/enrollment/enrollment_config.h +++ b/chrome/browser/ash/policy/enrollment/enrollment_config.h
@@ -41,61 +41,61 @@ // Describes the enrollment mode, i.e. what triggered enrollment. enum Mode { // Enrollment not applicable. - MODE_NONE, + MODE_NONE = 0, // Manually triggered initial enrollment. - MODE_MANUAL, + MODE_MANUAL = 1, // Manually triggered re-enrollment. - MODE_MANUAL_REENROLLMENT, + MODE_MANUAL_REENROLLMENT = 2, // Forced enrollment triggered by local OEM manifest or device requisition, // user can't skip. - MODE_LOCAL_FORCED, + MODE_LOCAL_FORCED = 3, // Advertised enrollment triggered by local OEM manifest or device // requisition, user can skip. - MODE_LOCAL_ADVERTISED, + MODE_LOCAL_ADVERTISED = 4, // Server-backed-state-triggered forced enrollment, user can't skip. - MODE_SERVER_FORCED, + MODE_SERVER_FORCED = 5, // Server-backed-state-triggered advertised enrollment, user can skip. - MODE_SERVER_ADVERTISED, + MODE_SERVER_ADVERTISED = 6, // Recover from "spontaneous unenrollment", user can't skip. - MODE_RECOVERY, + MODE_RECOVERY = 7, // Start attestation-based enrollment. - MODE_ATTESTATION, + MODE_ATTESTATION = 8, // Start attestation-based enrollment and only uses that. - MODE_ATTESTATION_LOCAL_FORCED, + MODE_ATTESTATION_LOCAL_FORCED = 9, // Server-backed-state-triggered attestation-based enrollment, user can't // skip. - MODE_ATTESTATION_SERVER_FORCED, + MODE_ATTESTATION_SERVER_FORCED = 10, // Forced enrollment triggered as a fallback to attestation re-enrollment, // user can't skip. - MODE_ATTESTATION_MANUAL_FALLBACK, + MODE_ATTESTATION_MANUAL_FALLBACK = 11, // Deprecated: Demo mode does not support offline enrollment. // Enrollment for offline demo mode with locally stored policy data. - MODE_OFFLINE_DEMO_DEPRECATED, + MODE_OFFLINE_DEMO_DEPRECATED = 12, // Obsolete. Flow that happens when already enrolled device undergoes // version rollback. Enrollment information is preserved during rollback, // but some steps have to be repeated as stateful partition was wiped. - OBSOLETE_MODE_ENROLLED_ROLLBACK, + OBSOLETE_MODE_ENROLLED_ROLLBACK = 13, // Server-backed-state-triggered forced initial enrollment, user can't // skip. - MODE_INITIAL_SERVER_FORCED, + MODE_INITIAL_SERVER_FORCED = 14, // Server-backed-state-triggered attestation-based initial enrollment, // user can't skip. - MODE_ATTESTATION_INITIAL_SERVER_FORCED, + MODE_ATTESTATION_INITIAL_SERVER_FORCED = 15, // Forced enrollment triggered as a fallback to attestation initial // enrollment, user can't skip. - MODE_ATTESTATION_INITIAL_MANUAL_FALLBACK, + MODE_ATTESTATION_INITIAL_MANUAL_FALLBACK = 16, }; // An enumeration of authentication mechanisms that can be used for // enrollment. enum AuthMechanism { // Interactive authentication. - AUTH_MECHANISM_INTERACTIVE, + AUTH_MECHANISM_INTERACTIVE = 0, // Automatic authentication relying on the attestation process. - AUTH_MECHANISM_ATTESTATION, + AUTH_MECHANISM_ATTESTATION = 1, // Let the system determine the best mechanism (typically the one // that requires the least user interaction). - AUTH_MECHANISM_BEST_AVAILABLE, + AUTH_MECHANISM_BEST_AVAILABLE = 2, }; // Get the enrollment configuration that has been set up via signals such as @@ -141,13 +141,16 @@ // during OOBE if this returns true. bool is_forced() const { return mode == MODE_LOCAL_FORCED || mode == MODE_SERVER_FORCED || - mode == MODE_INITIAL_SERVER_FORCED || mode == MODE_RECOVERY || - is_attestation_forced() || is_manual_fallback(); + mode == MODE_ATTESTATION_LOCAL_FORCED || + mode == MODE_ATTESTATION_SERVER_FORCED || + mode == MODE_INITIAL_SERVER_FORCED || + mode == MODE_ATTESTATION_INITIAL_SERVER_FORCED || + mode == MODE_RECOVERY || is_manual_fallback(); } - // Whether attestation-based enrollment is forced. The user can't skip - // the enrollment step during OOBE if this returns true. - bool is_attestation_forced() const { + // Whether attestation-based authentication is forced. The user cannot enroll + // manually. + bool is_attestation_auth_forced() const { return auth_mechanism == AUTH_MECHANISM_ATTESTATION; }
diff --git a/chrome/browser/ash/power/ml/smart_dim/download_worker.cc b/chrome/browser/ash/power/ml/smart_dim/download_worker.cc index 0c8a2b76..fb3ae85e 100644 --- a/chrome/browser/ash/power/ml/smart_dim/download_worker.cc +++ b/chrome/browser/ash/power/ml/smart_dim/download_worker.cc
@@ -88,8 +88,8 @@ const std::string& model_flatbuffer, const data_decoder::DataDecoder::ValueOrError result) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - if (!result.value || !result.value->is_dict() || - !ParseMetaInfoFromJsonObject(result.value.value(), &metrics_model_name_, + if (!result.has_value() || !result->is_dict() || + !ParseMetaInfoFromJsonObject(*result, &metrics_model_name_, &dim_threshold_, &expected_feature_size_, &inputs_, &outputs_)) { LogLoadComponentEvent(LoadComponentEvent::kLoadMetadataError);
diff --git a/chrome/browser/ash/profiles/profile_helper.cc b/chrome/browser/ash/profiles/profile_helper.cc index 38df1b0..7e3329e 100644 --- a/chrome/browser/ash/profiles/profile_helper.cc +++ b/chrome/browser/ash/profiles/profile_helper.cc
@@ -25,6 +25,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_switches.h" +#include "chromeos/ash/components/browser_context_helper/browser_context_helper.h" #include "components/account_id/account_id.h" #include "components/user_manager/user.h" #include "components/user_manager/user_manager.h" @@ -36,17 +37,6 @@ // As defined in /chromeos/dbus/cryptohome/cryptohome_client.cc. static const char kUserIdHashSuffix[] = "-hash"; -bool ShouldAddProfileDirPrefix(const std::string& user_id_hash) { - // Do not add profile dir prefix for legacy profile dir and test - // user profile. The reason of not adding prefix for test user profile - // is to keep the promise that TestingProfile::kTestUserProfileDir and - // chrome::kTestUserProfileDir are always in sync. Otherwise, - // TestingProfile::kTestUserProfileDir needs to be dynamically calculated - // based on whether multi profile is enabled or not. - return user_id_hash != chrome::kLegacyProfileDir && - user_id_hash != chrome::kTestUserProfileDir; -} - class UsernameHashMatcher { public: explicit UsernameHashMatcher(const std::string& h) : username_hash(h) {} @@ -184,32 +174,15 @@ // static std::string ProfileHelper::GetUserIdHashFromProfile(const Profile* profile) { - if (!profile) - return std::string(); - - std::string profile_dir = profile->GetBaseName().value(); - - // Don't strip prefix if the dir is not supposed to be prefixed. - if (!ShouldAddProfileDirPrefix(profile_dir)) - return profile_dir; - - // Check that profile directory starts with the correct prefix. - std::string prefix(chrome::kProfileDirPrefix); - if (!base::StartsWith(profile_dir, prefix, base::CompareCase::SENSITIVE)) { - // This happens when creating a TestingProfile in browser tests. - return std::string(); - } - - return profile_dir.substr(prefix.length()); + return BrowserContextHelper::GetUserIdHashFromBrowserContext( + const_cast<Profile*>(profile)); } // static base::FilePath ProfileHelper::GetUserProfileDir( const std::string& user_id_hash) { - CHECK(!user_id_hash.empty()); - return ShouldAddProfileDirPrefix(user_id_hash) - ? base::FilePath(chrome::kProfileDirPrefix + user_id_hash) - : base::FilePath(user_id_hash); + return base::FilePath( + BrowserContextHelper::GetUserBrowserContextDirName(user_id_hash)); } // static
diff --git a/chrome/browser/ash/profiles/profile_helper.h b/chrome/browser/ash/profiles/profile_helper.h index 1df79a85..e9841e85 100644 --- a/chrome/browser/ash/profiles/profile_helper.h +++ b/chrome/browser/ash/profiles/profile_helper.h
@@ -85,10 +85,14 @@ // Returns OffTheRecord profile for use during signing phase. static Profile* GetSigninProfile(); + // DEPRECATED. Please use + // ash::BrowserContextHelper::GetUserIdHashFromBrowserContext() instead. // Returns user_id hash for |profile| instance or empty string if hash // could not be extracted from |profile|. static std::string GetUserIdHashFromProfile(const Profile* profile); + // DEPRECATED. Please use + // ash::BrowserContextHelper::GetUserBrowserContextDirName() instead. // Returns user profile dir in a format [u-user_id_hash]. static base::FilePath GetUserProfileDir(const std::string& user_id_hash);
diff --git a/chrome/browser/ash/profiles/profile_helper_browsertest.cc b/chrome/browser/ash/profiles/profile_helper_browsertest.cc index 69b77ad0..5c2c5dc 100644 --- a/chrome/browser/ash/profiles/profile_helper_browsertest.cc +++ b/chrome/browser/ash/profiles/profile_helper_browsertest.cc
@@ -11,13 +11,14 @@ #include "chrome/browser/profiles/profile_manager.h" #include "chrome/common/chrome_constants.h" #include "chrome/test/base/in_process_browser_test.h" +#include "chromeos/ash/components/browser_context_helper/browser_context_helper.h" #include "content/public/test/browser_test.h" #include "testing/gtest/include/gtest/gtest.h" namespace ash { namespace { -static const char kActiveUserHash[] = "01234567890"; +constexpr char kActiveUserHash[] = "01234567890"; } // namespace // The boolean parameter, retrieved by GetParam(), is true if testing with @@ -39,9 +40,8 @@ ProfileHelper::CreateInstance()); ActiveUserChanged(profile_helper.get(), kActiveUserHash); base::FilePath profile_dir = profile_helper->GetActiveUserProfileDir(); - std::string expected_dir; - expected_dir.append(chrome::kProfileDirPrefix); - expected_dir.append(kActiveUserHash); + std::string expected_dir = + BrowserContextHelper::GetUserBrowserContextDirName(kActiveUserHash); EXPECT_EQ(expected_dir, profile_dir.BaseName().value()); } @@ -50,9 +50,9 @@ ProfileHelper::CreateInstance()); base::FilePath profile_path = profile_helper->GetProfilePathByUserIdHash(kActiveUserHash); - base::FilePath expected_path = g_browser_process->profile_manager()-> - user_data_dir().Append( - std::string(chrome::kProfileDirPrefix) + kActiveUserHash); + base::FilePath expected_path = + g_browser_process->profile_manager()->user_data_dir().Append( + BrowserContextHelper::GetUserBrowserContextDirName(kActiveUserHash)); EXPECT_EQ(expected_path, profile_path); }
diff --git a/chrome/browser/ash/system_extensions/system_extensions_sandboxed_unpacker.cc b/chrome/browser/ash/system_extensions/system_extensions_sandboxed_unpacker.cc index 42b6cf4..c2a19e1 100644 --- a/chrome/browser/ash/system_extensions/system_extensions_sandboxed_unpacker.cc +++ b/chrome/browser/ash/system_extensions/system_extensions_sandboxed_unpacker.cc
@@ -89,13 +89,13 @@ void SystemExtensionsSandboxedUnpacker::OnSystemExtensionManifestParsed( GetSystemExtensionFromCallback callback, data_decoder::DataDecoder::ValueOrError value_or_error) { - if (value_or_error.error.has_value()) { + if (!value_or_error.has_value()) { std::move(callback).Run( SystemExtensionsInstallStatus::kFailedJsonErrorParsingManifest); return; } - base::Value& parsed_manifest = value_or_error.value.value(); + base::Value& parsed_manifest = *value_or_error; SystemExtension system_extension;
diff --git a/chrome/browser/ash/wallpaper_handlers/wallpaper_handlers.cc b/chrome/browser/ash/wallpaper_handlers/wallpaper_handlers.cc index 9b74bc60..a04c5e2 100644 --- a/chrome/browser/ash/wallpaper_handlers/wallpaper_handlers.cc +++ b/chrome/browser/ash/wallpaper_handlers/wallpaper_handlers.cc
@@ -690,14 +690,16 @@ *response_body, base::BindOnce( [](const GURL& service_url, - data_decoder::DataDecoder::ValueOrError result) { - if (result.error.has_value()) { + data_decoder::DataDecoder::ValueOrError result) + -> absl::optional<base::Value> { + if (!result.has_value()) { LOG(ERROR) << "Failed to parse JSON response from Google Photos " "API request to " << service_url.spec() - << ". Error message: " << result.error.value(); + << ". Error message: " << result.error(); + return absl::nullopt; } - return std::move(result.value); + return std::move(*result); }, service_url) .Then(base::BindOnce(&GooglePhotosFetcher::OnResponseReady,
diff --git a/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator.cc b/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator.cc index 7bb7bd0..05be072 100644 --- a/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator.cc +++ b/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator.cc
@@ -7,7 +7,6 @@ #include <memory> #include "chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator_impl.h" -#include "chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller.h" #include "chrome/grit/generated_resources.h" #include "url/gurl.h"
diff --git a/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator_impl.cc b/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator_impl.cc index ea9a857..099faffb 100644 --- a/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator_impl.cc +++ b/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator_impl.cc
@@ -8,27 +8,18 @@ #include "base/bind.h" #include "base/callback.h" -#include "base/containers/flat_set.h" #include "base/memory/weak_ptr.h" -#include "chrome/browser/consent_auditor/consent_auditor_factory.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/signin/identity_manager_factory.h" #include "chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller.h" #include "chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_prompt.h" #include "chrome/common/pref_names.h" -#include "components/consent_auditor/consent_auditor.h" #include "components/prefs/pref_service.h" -#include "components/signin/public/base/consent_level.h" -#include "components/signin/public/identity_manager/account_info.h" -#include "components/signin/public/identity_manager/identity_manager.h" -#include "components/sync/protocol/user_consent_types.pb.h" #include "content/public/browser/navigation_controller.h" #include "content/public/browser/navigation_entry.h" #include "content/public/browser/navigation_handle.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_observer.h" #include "net/base/registry_controlled_domains/registry_controlled_domain.h" -#include "third_party/abseil-cpp/absl/types/optional.h" ApcOnboardingCoordinatorImpl::ApcOnboardingCoordinatorImpl( content::WebContents* web_contents) @@ -94,54 +85,13 @@ base::Unretained(this))); } -void ApcOnboardingCoordinatorImpl::OnControllerResponseReceived( - bool success, - absl::optional<int> confirmation_grd_id, - const std::vector<int>& description_grd_ids) { +void ApcOnboardingCoordinatorImpl::OnControllerResponseReceived(bool success) { if (success) { GetPrefs()->SetBoolean(prefs::kAutofillAssistantOnDesktopEnabled, true); - CHECK(confirmation_grd_id.has_value()); - RecordConsentGiven(confirmation_grd_id.value(), description_grd_ids); } std::move(callback_).Run(success); } -void ApcOnboardingCoordinatorImpl::RecordConsentGiven( - int confirmation_grd_id, - const std::vector<int>& description_grd_ids) { - sync_pb::UserConsentTypes::AutofillAssistantConsent consent; - - // The only accepted resource ids are those contained in the model. Otherwise, - // something is going seriously wrong and we should stop Chrome from sending - // incorrect consent data. - const AssistantOnboardingInformation model = CreateOnboardingInformation(); - CHECK_EQ(confirmation_grd_id, model.button_accept_text_id); - consent.set_confirmation_grd_id(confirmation_grd_id); - - const base::flat_set<int> acceptable_ids = { - model.title_id, model.description_id, model.consent_text_id, - model.learn_more_title_id}; - CHECK_EQ(acceptable_ids.size(), description_grd_ids.size()); - for (int id : description_grd_ids) { - CHECK(acceptable_ids.contains(id)); - consent.add_description_grd_ids(id); - } - consent.set_status(sync_pb::UserConsentTypes::ConsentStatus:: - UserConsentTypes_ConsentStatus_GIVEN); - - WriteToConsentAuditor(consent); -} - -void ApcOnboardingCoordinatorImpl::WriteToConsentAuditor( - const sync_pb::UserConsentTypes::AutofillAssistantConsent& consent) { - Profile* profile = - Profile::FromBrowserContext(web_contents_->GetBrowserContext()); - ConsentAuditorFactory::GetForProfile(profile)->RecordAutofillAssistantConsent( - IdentityManagerFactory::GetForProfile(profile)->GetPrimaryAccountId( - signin::ConsentLevel::kSignin), - consent); -} - PrefService* ApcOnboardingCoordinatorImpl::GetPrefs() { return Profile::FromBrowserContext(web_contents_->GetBrowserContext()) ->GetPrefs();
diff --git a/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator_impl.h b/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator_impl.h index 3cc8e52d..48ec0f1f 100644 --- a/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator_impl.h +++ b/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator_impl.h
@@ -12,13 +12,10 @@ #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" #include "chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator.h" -#include "components/sync/protocol/user_consent_types.pb.h" +#include "chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller.h" +#include "chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_prompt.h" #include "content/public/browser/web_contents_observer.h" -#include "third_party/abseil-cpp/absl/types/optional.h" -class AssistantOnboardingController; -struct AssistantOnboardingInformation; -class AssistantOnboardingPrompt; class PrefService; // Implementation of the `ApcOnboardingCoordinator` interface that takes care @@ -67,21 +64,7 @@ void OpenOnboardingDialog(); // Handles the response from the UI controller prompting the user for consent. - void OnControllerResponseReceived( - bool success, - absl::optional<int> confirmation_grd_id, - const std::vector<int>& description_grd_ids); - - // Records that consent was given using a dialog with a confirmation button - // with label `confirmation_grd_id` and other elements with text contents - // `description_grd_ids`. - void RecordConsentGiven(int confirmation_grd_id, - const std::vector<int>& description_grd_ids); - - // Writes `consent` to the `ConsentAuditor` instance of this profile, which - // sends it to the backend via Chrome's sync server. - void WriteToConsentAuditor( - const sync_pb::UserConsentTypes::AutofillAssistantConsent& consent); + void OnControllerResponseReceived(bool success); // Returns the pref service needed to check whether onboarding was previously // accepted.
diff --git a/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator_impl_unittest.cc b/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator_impl_unittest.cc index 87a7e00..3acf96b 100644 --- a/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator_impl_unittest.cc +++ b/chrome/browser/autofill_assistant/password_change/apc_onboarding_coordinator_impl_unittest.cc
@@ -11,38 +11,27 @@ #include "base/memory/weak_ptr.h" #include "base/test/gmock_move_support.h" #include "base/test/mock_callback.h" -#include "chrome/browser/consent_auditor/consent_auditor_factory.h" #include "chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller.h" #include "chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_prompt.h" #include "chrome/browser/ui/autofill_assistant/password_change/mock_assistant_onboarding_controller.h" #include "chrome/common/pref_names.h" #include "chrome/test/base/chrome_render_view_host_test_harness.h" #include "chrome/test/base/testing_profile.h" -#include "components/consent_auditor/fake_consent_auditor.h" #include "components/prefs/pref_service.h" -#include "components/sync/protocol/user_consent_specifics.pb.h" -#include "components/sync/protocol/user_consent_types.pb.h" #include "content/public/common/referrer.h" #include "content/public/test/browser_task_environment.h" #include "content/public/test/test_renderer_host.h" #include "content/public/test/web_contents_tester.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -#include "third_party/abseil-cpp/absl/types/optional.h" #include "ui/base/page_transition_types.h" #include "url/gurl.h" -using ::testing::IsEmpty; -using ::testing::Not; -using ::testing::SizeIs; - namespace { constexpr char kUrl[] = "https://www.example.com"; constexpr char kOtherUrlWithSameDomain[] = "https://www.example.com/login"; -using consent_auditor::FakeConsentAuditor; - class TestApcOnboardingCoordinatorImpl : public ApcOnboardingCoordinatorImpl { public: explicit TestApcOnboardingCoordinatorImpl(content::WebContents* web_contents); @@ -61,14 +50,6 @@ content::WebContents* web_contents) : ApcOnboardingCoordinatorImpl(web_contents) {} -FakeConsentAuditor* CreateAndUseFakeConsentAuditor(Profile* profile) { - return static_cast<FakeConsentAuditor*>( - ConsentAuditorFactory::GetInstance()->SetTestingSubclassFactoryAndUse( - profile, base::BindRepeating([](content::BrowserContext*) { - return std::make_unique<FakeConsentAuditor>(); - }))); -} - } // namespace class ApcOnboardingCoordinatorImplTest @@ -79,20 +60,14 @@ void SetUp() override { content::RenderViewHostTestHarness::SetUp(); - - consent_auditor_ = CreateAndUseFakeConsentAuditor(profile()); coordinator_ = std::make_unique<TestApcOnboardingCoordinatorImpl>(web_contents()); } - FakeConsentAuditor* consent_auditor() { return consent_auditor_; } TestApcOnboardingCoordinatorImpl* coordinator() { return coordinator_.get(); } PrefService* GetPrefs() { return profile()->GetPrefs(); } private: - // Helper objects. - raw_ptr<FakeConsentAuditor> consent_auditor_ = nullptr; - // The object to be tested. std::unique_ptr<TestApcOnboardingCoordinatorImpl> coordinator_; }; @@ -139,28 +114,11 @@ // And call the controller. ASSERT_TRUE(controller_callback); EXPECT_CALL(coordinator_callback, Run(true)); - // Use sample model data for the callback. - const AssistantOnboardingInformation model = - ApcOnboardingCoordinator::CreateOnboardingInformation(); - std::move(controller_callback) - .Run(true, model.button_accept_text_id, - {model.title_id, model.description_id, model.consent_text_id, - model.learn_more_title_id}); + std::move(controller_callback).Run(true); // Consent is saved in the pref. EXPECT_TRUE( GetPrefs()->GetBoolean(prefs::kAutofillAssistantOnDesktopEnabled)); - - // Consent is also recorded via the `ConsentAuditor`. - ASSERT_THAT(consent_auditor()->recorded_consents(), SizeIs(1)); - const sync_pb::UserConsentSpecifics& consent_specifics = - consent_auditor()->recorded_consents().front(); - ASSERT_TRUE(consent_specifics.has_autofill_assistant_consent()); - EXPECT_TRUE( - consent_specifics.autofill_assistant_consent().has_confirmation_grd_id()); - EXPECT_THAT( - consent_specifics.autofill_assistant_consent().description_grd_ids(), - Not(IsEmpty())); } TEST_F(ApcOnboardingCoordinatorImplTest, PerformOnboardingAndDecline) { @@ -188,7 +146,7 @@ // And call the controller. ASSERT_TRUE(controller_callback); EXPECT_CALL(coordinator_callback, Run(false)); - std::move(controller_callback).Run(false, absl::nullopt, {}); + std::move(controller_callback).Run(false); // Consent is saved in the pref. EXPECT_FALSE(
diff --git a/chrome/browser/browser_switcher/ieem_sitelist_parser.cc b/chrome/browser/browser_switcher/ieem_sitelist_parser.cc index 53de1fe3..f1dd31e 100644 --- a/chrome/browser/browser_switcher/ieem_sitelist_parser.cc +++ b/chrome/browser/browser_switcher/ieem_sitelist_parser.cc
@@ -189,21 +189,20 @@ void RawXmlParsed(ParsingMode parsing_mode, base::OnceCallback<void(ParsedXml)> callback, data_decoder::DataDecoder::ValueOrError xml) { - if (!xml.value) { + if (!xml.has_value()) { // Copies the string, but it should only be around 20 characters. - std::move(callback).Run(ParsedXml({}, {}, *xml.error)); + std::move(callback).Run(ParsedXml({}, {}, xml.error())); return; } DCHECK(data_decoder::IsXmlElementOfType( - *xml.value, data_decoder::mojom::XmlParser::kElementType)); + *xml, data_decoder::mojom::XmlParser::kElementType)); ParsedXml result; - if (data_decoder::IsXmlElementNamed(*xml.value, kSchema1RulesElement)) { + if (data_decoder::IsXmlElementNamed(*xml, kSchema1RulesElement)) { // Enterprise Mode schema v.1 has <rules> element at its top level. - ParseIeFileVersionOne(*xml.value, parsing_mode, &result); - } else if (data_decoder::IsXmlElementNamed(*xml.value, - kSchema2SiteListElement)) { + ParseIeFileVersionOne(*xml, parsing_mode, &result); + } else if (data_decoder::IsXmlElementNamed(*xml, kSchema2SiteListElement)) { // Enterprise Mode schema v.2 has <site-list> element at its top level. - ParseIeFileVersionTwo(*xml.value, parsing_mode, &result); + ParseIeFileVersionTwo(*xml, parsing_mode, &result); } else { result.error = kInvalidRootElement; }
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc index 27e427b..3ffbf61 100644 --- a/chrome/browser/chrome_content_browser_client.cc +++ b/chrome/browser/chrome_content_browser_client.cc
@@ -13,6 +13,7 @@ #include "base/base_switches.h" #include "base/bind.h" +#include "base/callback.h" #include "base/command_line.h" #include "base/dcheck_is_on.h" #include "base/i18n/base_i18n_switches.h" @@ -686,6 +687,23 @@ #endif // BUILDFLAG(IS_WIN) && !defined(COMPONENT_BUILD) && // !defined(ADDRESS_SANITIZER) +// A small ChromeBrowserMainExtraParts that invokes a callback when threads are +// ready. Used to initialize ChromeContentBrowserClient data that needs the UI +// thread. +class ChromeBrowserMainExtraPartsThreadNotifier final + : public ChromeBrowserMainExtraParts { + public: + explicit ChromeBrowserMainExtraPartsThreadNotifier( + base::OnceClosure threads_ready_closure) + : threads_ready_closure_(std::move(threads_ready_closure)) {} + + // ChromeBrowserMainExtraParts: + void PostCreateThreads() final { std::move(threads_ready_closure_).Run(); } + + private: + base::OnceClosure threads_ready_closure_; +}; + bool IsSSLErrorOverrideAllowedForOrigin(const GURL& request_url, PrefService* prefs) { DCHECK(request_url.SchemeIsCryptographic()); @@ -1441,10 +1459,15 @@ is_integration_test, &startup_data_); #else NOTREACHED(); - main_parts = std::make_unique<ChromeBrowserManiParts>(is_integration_test, + main_parts = std::make_unique<ChromeBrowserMainParts>(is_integration_test, &startup_data_); #endif + main_parts->AddParts( + std::make_unique<ChromeBrowserMainExtraPartsThreadNotifier>( + base::BindOnce(&ChromeContentBrowserClient::InitOnUIThread, + weak_factory_.GetWeakPtr()))); + bool add_profiles_extra_parts = true; #if BUILDFLAG(IS_ANDROID) if (startup_data_.HasBuiltProfilePrefService()) @@ -1516,11 +1539,6 @@ const scoped_refptr<base::SequencedTaskRunner>& task_runner, base::OnceClosure task) { AfterStartupTaskUtils::PostTask(from_here, task_runner, std::move(task)); - - InitNetworkContextsParentDirectory(); - - DCHECK_CURRENTLY_ON(BrowserThread::UI); - safe_browsing_service_ = g_browser_process->safe_browsing_service(); } bool ChromeContentBrowserClient::IsBrowserStartupComplete() { @@ -4697,7 +4715,12 @@ } } -void ChromeContentBrowserClient::InitNetworkContextsParentDirectory() { +void ChromeContentBrowserClient::InitOnUIThread() { + DCHECK_CURRENTLY_ON(BrowserThread::UI); + + safe_browsing_service_ = g_browser_process->safe_browsing_service(); + + // Initialize `network_contexts_parent_directory_`. base::FilePath user_data_dir; base::PathService::Get(chrome::DIR_USER_DATA, &user_data_dir); DCHECK(!user_data_dir.empty());
diff --git a/chrome/browser/chrome_content_browser_client.h b/chrome/browser/chrome_content_browser_client.h index 45a9997..51ab032e 100644 --- a/chrome/browser/chrome_content_browser_client.h +++ b/chrome/browser/chrome_content_browser_client.h
@@ -831,8 +831,9 @@ friend class DisableWebRtcEncryptionFlagTest; friend class InProcessBrowserTest; - // Initializes |network_contexts_parent_directory_| on the UI thread. - void InitNetworkContextsParentDirectory(); + // Initializes `network_contexts_parent_directory_` and + // `safe_browsing_service_` on the UI thread. + void InitOnUIThread(); // Copies disable WebRTC encryption switch depending on the channel. static void MaybeCopyDisableWebRtcEncryptionSwitch(
diff --git a/chrome/browser/chromeos/BUILD.gn b/chrome/browser/chromeos/BUILD.gn index d08d66c3..b7bd5b5 100644 --- a/chrome/browser/chromeos/BUILD.gn +++ b/chrome/browser/chromeos/BUILD.gn
@@ -248,6 +248,7 @@ "//chrome/services/wilco_dtc_supportd/public/mojom", "//chromeos:chromeos_export", "//chromeos/ash/components/assistant:buildflags", + "//chromeos/ash/components/browser_context_helper", "//chromeos/ash/components/dbus/anomaly_detector", "//chromeos/ash/components/dbus/attestation", "//chromeos/ash/components/dbus/attestation:attestation_proto",
diff --git a/chrome/browser/device_api/managed_configuration_api.cc b/chrome/browser/device_api/managed_configuration_api.cc index d98e58f..78f7e518 100644 --- a/chrome/browser/device_api/managed_configuration_api.cc +++ b/chrome/browser/device_api/managed_configuration_api.cc
@@ -296,7 +296,7 @@ const url::Origin& origin, const std::string& url_hash, const data_decoder::DataDecoder::ValueOrError decoding_result) { - if (!decoding_result.value || !decoding_result.value->is_dict()) { + if (!decoding_result.has_value() || !decoding_result->is_dict()) { VLOG(1) << "Could not fetch managed configuration for app with origin = " << origin.Serialize(); PostStoreConfiguration(origin, base::Value::Dict()); @@ -308,7 +308,7 @@ // We need to transform each value into a string. base::Value::Dict result_dict; - for (auto item : decoding_result.value->DictItems()) { + for (auto item : decoding_result->GetDict()) { std::string result; JSONStringValueSerializer serializer(&result); serializer.Serialize(item.second);
diff --git a/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.h b/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.h index 7a5c1f2..def25c63 100644 --- a/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.h +++ b/chrome/browser/enterprise/connectors/analysis/content_analysis_delegate.h
@@ -7,31 +7,28 @@ #include <memory> #include <string> -#include <utility> #include <vector> -#include "base/callback_forward.h" -#include "base/feature_list.h" +#include "base/callback.h" #include "base/files/file_path.h" #include "base/memory/raw_ptr.h" #include "base/memory/read_only_shared_memory_region.h" #include "base/memory/weak_ptr.h" #include "base/time/time.h" +#include "chrome/browser/enterprise/connectors/analysis/analysis_settings.h" #include "chrome/browser/enterprise/connectors/analysis/content_analysis_delegate_base.h" #include "chrome/browser/enterprise/connectors/common.h" -#include "chrome/browser/enterprise/connectors/connectors_manager.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/binary_upload_service.h" #include "chrome/browser/safe_browsing/cloud_content_scanning/deep_scanning_utils.h" -#include "chrome/browser/safe_browsing/cloud_content_scanning/file_analysis_request.h" -#include "chrome/browser/safe_browsing/cloud_content_scanning/file_opening_job.h" -#include "chrome/browser/ui/tab_modal_confirm_dialog.h" -#include "chrome/browser/ui/tab_modal_confirm_dialog_delegate.h" #include "components/enterprise/common/proto/connectors.pb.h" -#include "content/public/browser/web_contents_view_delegate.h" #include "url/gurl.h" class Profile; +namespace content { +class WebContent; +} // namespace content + namespace enterprise_connectors { class ContentAnalysisDialog;
diff --git a/chrome/browser/enterprise/connectors/device_trust/device_trust_service.cc b/chrome/browser/enterprise/connectors/device_trust/device_trust_service.cc index 08ececd1..775810f 100644 --- a/chrome/browser/enterprise/connectors/device_trust/device_trust_service.cc +++ b/chrome/browser/enterprise/connectors/device_trust/device_trust_service.cc
@@ -24,13 +24,13 @@ // service after it is validated and decoded. void OnJsonParsed(DeviceTrustService::ParseJsonChallengeCallback callback, data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { + if (!result.has_value()) { std::move(callback).Run(std::string()); return; } // Check if json is malformed or it doesn't include the needed field. - const std::string* challenge = result.value->FindStringPath("challenge"); + const std::string* challenge = result->FindStringPath("challenge"); if (!challenge) { std::move(callback).Run(std::string()); return;
diff --git a/chrome/browser/enterprise/connectors/file_system/box_api_call_flow.cc b/chrome/browser/enterprise/connectors/file_system/box_api_call_flow.cc index 77669f8..4302623 100644 --- a/chrome/browser/enterprise/connectors/file_system/box_api_call_flow.cc +++ b/chrome/browser/enterprise/connectors/file_system/box_api_call_flow.cc
@@ -36,7 +36,8 @@ #define LOG_PARSE_FAIL(severity, flow, result) \ DLOG(severity) << "[BoxApiCallFlow] " << flow << "\nJson Parse Error: " \ - << (result.error ? result.error->data() : "<no error info>"); + << (!result.has_value() ? result.error().data() \ + : "<no error info>"); #define LOG_PARSE_FAIL_IF(condition, severity, flow, result) \ if (condition) { \ @@ -118,11 +119,11 @@ bool ExtractEntriesList(const Box::ParseResult& result, base::Value::ConstListView* list) { - if (!result.value) { + if (!result.has_value()) { return false; } - const base::Value* entries = result.value->FindPath("entries"); + const base::Value* entries = result->GetDict().Find("entries"); if (!entries || !entries->is_list()) { return false; } @@ -229,11 +230,10 @@ // API reference: https://developer.box.com/reference/resources/client-error/ void BoxApiCallFlow::OnFailureJsonParsed(int http_code, ParseResult result) { - DCHECK(result.value); base::Value *code = nullptr, *request_id = nullptr; auto response = Response{false, http_code}; - if (result.value && (code = result.value->FindPath("code")) && - (request_id = result.value->FindPath("request_id"))) { + if (result.has_value() && (code = result->FindPath("code")) && + (request_id = result->FindPath("request_id"))) { response = MakeApiFailure(http_code, code->GetString(), request_id->GetString()); } @@ -320,8 +320,8 @@ void BoxGetFileFolderApiCallFlow::OnSuccessJsonParsed(ParseResult result) { std::string folder_id; - if (result.value.has_value()) - folder_id = ExtractParentId(result.value.value()); + if (result.has_value()) + folder_id = ExtractParentId(*result); std::move(callback_).Run(Response{!folder_id.empty(), net::HTTP_OK}, folder_id); @@ -419,15 +419,15 @@ void BoxCreateUpstreamFolderApiCallFlow::OnSuccessJsonParsed( int network_response_code, ParseResult result) { - DCHECK(result.value); - if (!result.value) + DCHECK(result.has_value()); + if (!result.has_value()) return OnFailureJsonParsed(network_response_code, std::move(result)); std::string folder_id; absl::optional<base::Value> folder_info_dict; if (network_response_code == net::HTTP_CREATED) { - folder_info_dict = std::move(result.value); + folder_info_dict = std::move(*result); } else { // Right after a folder was created with a previous upload, the folder may // not be found via BoxFindUpstreamFolderApiCallFlow, therefore BoxUploader @@ -435,9 +435,9 @@ // folder is included in the response body so can also be extracted to // return a folder_id. DCHECK_EQ(network_response_code, net::HTTP_CONFLICT); - std::string* box_error_code = result.value->FindStringPath("code"); + std::string* box_error_code = result->FindStringPath("code"); base::Value* conflict_folders_list = - result.value->FindListPath("context_info.conflicts"); + result->FindListPath("context_info.conflicts"); if (box_error_code && *box_error_code == "item_name_in_use" && conflict_folders_list && conflict_folders_list->GetListDeprecated().size() > 0) { @@ -487,24 +487,23 @@ } void BoxGetCurrentUserApiCallFlow::OnJsonParsed(ParseResult result) { - if (!result.value.has_value()) { + if (!result.has_value()) { LOG_PARSE_FAIL(ERROR, "GetCurrentUser", result); std::move(callback_).Run(Response{false, net::HTTP_OK}, CreateEmptyDict()); return; } - if (!result.value->is_dict() || - !result.value->FindStringPath(kBoxEnterpriseIdFieldName) || - !result.value->FindStringPath(kBoxLoginFieldName) || - !result.value->FindStringPath(kBoxNameFieldName)) { + if (!result->is_dict() || + !result->FindStringPath(kBoxEnterpriseIdFieldName) || + !result->FindStringPath(kBoxLoginFieldName) || + !result->FindStringPath(kBoxNameFieldName)) { LOG(ERROR) << "[BoxApiCallFlow] GetCurrentUser succeeded but " "response does not include all of enterprise_id, login, and name: " - << *result.value; + << *result; std::move(callback_).Run(Response{false, net::HTTP_OK}, CreateEmptyDict()); return; } - std::move(callback_).Run(Response{true, net::HTTP_OK}, - std::move(result.value.value())); + std::move(callback_).Run(Response{true, net::HTTP_OK}, std::move(*result)); } void BoxGetCurrentUserApiCallFlow::ProcessFailure(Response response) { @@ -757,21 +756,19 @@ void BoxCreateUploadSessionApiCallFlow::OnSuccessJsonParsed( ParseResult result) { - LOG_PARSE_FAIL_IF(!result.value.has_value(), ERROR, "CreateUploadSession", - result); + LOG_PARSE_FAIL_IF(!result.has_value(), ERROR, "CreateUploadSession", result); const auto http_code = net::HTTP_CREATED; base::Value *endpoints = nullptr, *part_size = nullptr; - if (result.value.has_value() && - (part_size = result.value->FindPath("part_size")) && - (endpoints = result.value->FindPath("session_endpoints")) && + if (result.has_value() && (part_size = result->FindPath("part_size")) && + (endpoints = result->FindPath("session_endpoints")) && endpoints->FindPath("upload_part") && endpoints->FindPath("commit") && endpoints->FindPath("abort")) { std::move(callback_).Run(MakeSuccess(http_code), std::move(*endpoints), part_size->GetInt()); return; } - LOG_PARSE_FAIL_IF(!result.value, ERROR, "CreateUploadSession", result); + LOG_PARSE_FAIL_IF(!result.has_value(), ERROR, "CreateUploadSession", result); ProcessFailure(MakeApiFailure(http_code, "bad_response", "parse_fail")); } @@ -861,13 +858,13 @@ void BoxPartFileUploadApiCallFlow::OnSuccessJsonParsed(ParseResult result) { const auto http_code = net::HTTP_OK; - if (!result.value) { + if (!result.has_value()) { LOG_PARSE_FAIL(ERROR, "PartFileUpload", result); ProcessFailure(MakeApiFailure(http_code, "bad_response", "parse_fail")); return; } - base::Value* part = result.value->FindPath("part"); + base::Value* part = result->FindPath("part"); if (!part) { DLOG(ERROR) << "[BoxApiCallFlow] No info for uploaded part"; ProcessFailure(MakeApiFailure(http_code, "bad_response", "parse_fail"));
diff --git a/chrome/browser/extensions/api/omnibox/suggestion_parser.cc b/chrome/browser/extensions/api/omnibox/suggestion_parser.cc index 66ea40e..33de6e9 100644 --- a/chrome/browser/extensions/api/omnibox/suggestion_parser.cc +++ b/chrome/browser/extensions/api/omnibox/suggestion_parser.cc
@@ -140,25 +140,25 @@ std::move(callback).Run(std::move(result)); }; - if (value_or_error.error) { - run_callback_with_error(std::move(*value_or_error.error)); + if (!value_or_error.has_value()) { + run_callback_with_error(std::move(value_or_error.error())); return; } - DCHECK(value_or_error.value); + DCHECK(value_or_error.has_value()); // From this point on, we hope that everything is valid (e.g., that we don't // get non-dictionary values or unexpected top-level types. But, if we did, // emit a generic error. constexpr char kGenericError[] = "Invalid XML"; - if (!value_or_error.value->is_dict()) { + if (!value_or_error->is_dict()) { run_callback_with_error(kGenericError); return; } std::vector<const base::Value*> entries; - const base::Value& root_node = *value_or_error.value; + const base::Value& root_node = *value_or_error; if (has_multiple_entries) { if (!PopulateEntriesFromNode(root_node, &entries)) { run_callback_with_error(kGenericError);
diff --git a/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.cc b/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.cc index 9beda38..50f212b 100644 --- a/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.cc +++ b/chrome/browser/extensions/api/web_authentication_proxy/web_authentication_proxy_service.cc
@@ -214,13 +214,13 @@ RequestId request_id, data_decoder::DataDecoder::ValueOrError value_or_error) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (value_or_error.error) { + if (!value_or_error.has_value()) { std::move(respond_callback) - .Run("Parsing responseJson failed: " + *value_or_error.error); + .Run("Parsing responseJson failed: " + value_or_error.error()); return; } auto [response, error] = - webauthn_proxy::MakeCredentialResponseFromValue(*value_or_error.value); + webauthn_proxy::MakeCredentialResponseFromValue(*value_or_error); if (!response) { std::move(respond_callback).Run("Invalid responseJson: " + error); return; @@ -245,13 +245,13 @@ RequestId request_id, data_decoder::DataDecoder::ValueOrError value_or_error) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (value_or_error.error) { + if (!value_or_error.has_value()) { std::move(respond_callback) - .Run("Parsing responseJson failed: " + *value_or_error.error); + .Run("Parsing responseJson failed: " + value_or_error.error()); return; } auto [response, error] = - webauthn_proxy::GetAssertionResponseFromValue(*value_or_error.value); + webauthn_proxy::GetAssertionResponseFromValue(*value_or_error); if (!response) { std::move(respond_callback).Run("Invalid responseJson: " + error); return;
diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc index 87bbf05..4a09461 100644 --- a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc +++ b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc
@@ -1294,7 +1294,7 @@ void WebstorePrivateGetExtensionStatusFunction::OnManifestParsed( const ExtensionId& extension_id, data_decoder::DataDecoder::ValueOrError result) { - if (!result.value || !result.value->is_dict()) { + if (!result.has_value() || !result->is_dict()) { Respond(Error(kWebstoreInvalidManifestError)); return; } @@ -1307,7 +1307,7 @@ std::string error; auto dummy_extension = Extension::Create(base::FilePath(), mojom::ManifestLocation::kInternal, - base::Value::AsDictionaryValue(*result.value), + base::Value::AsDictionaryValue(*result), Extension::FROM_WEBSTORE, extension_id, &error); if (!dummy_extension) {
diff --git a/chrome/browser/extensions/permissions_updater.cc b/chrome/browser/extensions/permissions_updater.cc index 4691ed57..a1b35afa 100644 --- a/chrome/browser/extensions/permissions_updater.cc +++ b/chrome/browser/extensions/permissions_updater.cc
@@ -436,8 +436,10 @@ // by enterprise policy, we should not update the active permissions set in // preferences. That way, if the enterprise policy is changed, the removed // permissions would be re-added. - constexpr bool update_active_prefs = true; - SetPermissions(extension, std::move(total), update_active_prefs); + ExtensionPrefs::Get(browser_context_) + ->SetDesiredActivePermissions(extension->id(), *total); + + SetPermissions(extension, std::move(total)); NetworkPermissionsUpdateHelper::UpdatePermissions( browser_context_, REMOVED, extension, *successfully_removed, base::DoNothing()); @@ -489,7 +491,7 @@ } else { desired_permissions_wrapper = PermissionsManager::Get(browser_context_) - ->GetExtensionDesiredPermissionsFromPrefs(*extension); + ->GetBoundedExtensionDesiredPermissions(*extension); desired_permissions = desired_permissions_wrapper.get(); } @@ -500,9 +502,18 @@ if (GetDelegate()) GetDelegate()->InitializePermissions(extension, &granted_permissions); - bool update_active_permissions = false; if ((init_flag_ & INIT_FLAG_TRANSIENT) == 0) { - update_active_permissions = true; + // Set the desired permissions in prefs. + // - For new installs, this initializes the desired active permissions. + // - For updates, this ensures the desired active permissions contain any + // newly-added permissions and removes any no-longer-requested + // permissions. + // - For pref corruption, this resets the prefs to a sane state. + // - This also resets prefs from https://crbug.com/1343643, in which + // desired active permissions may not have included all required + // permissions. + ExtensionPrefs::Get(browser_context_) + ->SetDesiredActivePermissions(extension->id(), *desired_permissions); extension->permissions_data()->SetContextId( util::GetBrowserContextId(browser_context_)); @@ -511,8 +522,7 @@ ApplyPolicyHostRestrictions(*extension); } - SetPermissions(extension, std::move(granted_permissions), - update_active_permissions); + SetPermissions(extension, std::move(granted_permissions)); } void PermissionsUpdater::AddPermissionsForTesting( @@ -524,8 +534,7 @@ void PermissionsUpdater::SetPermissions( const Extension* extension, - std::unique_ptr<const PermissionSet> new_active, - bool update_prefs) { + std::unique_ptr<const PermissionSet> new_active) { // Calculate the withheld permissions as any permissions that were required, // but are not in the active set. const PermissionSet& required = @@ -550,13 +559,6 @@ extension->permissions_data()->SetPermissions(std::move(new_active), std::move(new_withheld)); - - if (update_prefs) { - ExtensionPrefs::Get(browser_context_) - ->SetDesiredActivePermissions( - extension->id(), - extension->permissions_data()->active_permissions()); - } } // static @@ -676,10 +678,13 @@ active_permissions_to_add, extension.permissions_data()->active_permissions()); - bool update_active_prefs = (permissions_store_mask & kActivePermissions) != 0; - SetPermissions(&extension, std::move(new_active), update_active_prefs); + SetPermissions(&extension, std::move(new_active)); ExtensionPrefs* prefs = ExtensionPrefs::Get(browser_context_); + if ((permissions_store_mask & kActivePermissions) != 0) { + prefs->AddDesiredActivePermissions(extension.id(), + prefs_permissions_to_add); + } if ((permissions_store_mask & kGrantedPermissions) != 0) { prefs->AddGrantedPermissions(extension.id(), prefs_permissions_to_add); @@ -706,10 +711,14 @@ extension.permissions_data()->active_permissions(), active_permissions_to_remove); - bool update_active_prefs = (permissions_store_mask & kActivePermissions) != 0; - SetPermissions(&extension, std::move(new_active), update_active_prefs); + SetPermissions(&extension, std::move(new_active)); ExtensionPrefs* prefs = ExtensionPrefs::Get(browser_context_); + if ((permissions_store_mask & kActivePermissions) != 0) { + prefs->RemoveDesiredActivePermissions(extension.id(), + prefs_permissions_to_remove); + } + // NOTE: Currently, this code path is only reached in unit tests. See comment // above REMOVE_HARD in the header file. if ((permissions_store_mask & kGrantedPermissions) != 0) {
diff --git a/chrome/browser/extensions/permissions_updater.h b/chrome/browser/extensions/permissions_updater.h index 22f06d19..7fac6f3 100644 --- a/chrome/browser/extensions/permissions_updater.h +++ b/chrome/browser/extensions/permissions_updater.h
@@ -204,11 +204,9 @@ const URLPatternSet default_runtime_allowed_hosts); // Sets the |extension|'s active permissions to |active|, and calculates and - // sets the |extension|'s new withheld permissions. If |update_prefs| is true, - // also updates the set of active permissions in the extension preferences. + // sets the |extension|'s new withheld permissions. void SetPermissions(const Extension* extension, - std::unique_ptr<const PermissionSet> active, - bool update_prefs); + std::unique_ptr<const PermissionSet> active); // Adds the given |active_permissions_to_add| to |extension|'s current // active permissions (i.e., the permissions associated with the |extension|
diff --git a/chrome/browser/extensions/permissions_updater_unittest.cc b/chrome/browser/extensions/permissions_updater_unittest.cc index b63cc79..cfc317f 100644 --- a/chrome/browser/extensions/permissions_updater_unittest.cc +++ b/chrome/browser/extensions/permissions_updater_unittest.cc
@@ -15,6 +15,7 @@ #include "base/run_loop.h" #include "base/strings/stringprintf.h" #include "base/values.h" +#include "chrome/browser/extensions/chrome_test_extension_loader.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_service_test_base.h" #include "chrome/browser/extensions/extension_util.h" @@ -34,6 +35,7 @@ #include "extensions/common/permissions/permissions_data.h" #include "extensions/common/value_builder.h" #include "extensions/test/permissions_manager_waiter.h" +#include "extensions/test/test_extension_dir.h" #include "testing/gtest/include/gtest/gtest.h" using extension_test_util::LoadManifest; @@ -801,4 +803,185 @@ } } +// Validates that we don't overwrite an extension's desired active permissions +// based on its current active permissions during an optional permissions grant. +// Regression test for https://crbug.com/1343643. +TEST_F(PermissionsUpdaterTest, + DontOverwriteDesiredActivePermissionsOnOptionalPermissionsGrant) { + InitializeEmptyExtensionService(); + + scoped_refptr<const Extension> extension = + CreateExtensionWithOptionalPermissions( + /*optional=*/ListBuilder().Append("tabs").Build(), + /*required=*/ListBuilder().Append("https://example.com/*").Build(), + "optional grant"); + ASSERT_TRUE(extension); + + { + // Grant the active permissions, as if the extension had just been + // installed. + PermissionsUpdater updater(profile()); + updater.InitializePermissions(extension.get()); + updater.GrantActivePermissions(extension.get()); + } + + // Withhold host permissions. This shouldn't affect the extension's + // desired active permissions. + ScriptingPermissionsModifier(profile(), extension) + .SetWithholdHostPermissions(true); + + ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); + + GURL example_com("https://example.com"); + EXPECT_FALSE(extension->permissions_data()->HasHostPermission(example_com)); + EXPECT_TRUE(prefs->GetDesiredActivePermissions(extension->id()) + ->effective_hosts() + .MatchesURL(example_com)); + + { + // Grant an optional permission. + APIPermissionSet apis; + apis.insert(APIPermissionID::kTab); + permissions_test_util::GrantOptionalPermissionsAndWaitForCompletion( + profile(), *extension, + PermissionSet(std::move(apis), ManifestPermissionSet(), URLPatternSet(), + URLPatternSet())); + } + + // Verify the desired active permissions. The extension should still have + // example.com as a desired host. + EXPECT_FALSE(extension->permissions_data()->HasHostPermission(example_com)); + EXPECT_TRUE(prefs->GetDesiredActivePermissions(extension->id()) + ->effective_hosts() + .MatchesURL(example_com)); +} + +// Validates that we don't overwrite an extension's desired active permissions +// based on its initial effective active permissions on load (which could be +// different, in the case of withheld host permissions). +// Regression test for https://crbug.com/1343643. +TEST_F(PermissionsUpdaterTest, + DontOverwriteDesiredActivePermissionsOnExtensionLoad) { + InitializeEmptyExtensionService(); + + static constexpr char kManifest[] = + R"({ + "name": "Test Extension", + "manifest_version": 3, + "version": "0.1", + "host_permissions": ["<all_urls>"] + })"; + TestExtensionDir test_dir; + test_dir.WriteManifest(kManifest); + + scoped_refptr<const Extension> extension = + ChromeTestExtensionLoader(profile()).LoadExtension( + test_dir.UnpackedPath()); + + const ExtensionId id = extension->id(); + ASSERT_TRUE(registry()->enabled_extensions().Contains(id)); + + ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); + + // The extension's desired active permissions should include <all_urls>. + EXPECT_TRUE(prefs->GetDesiredActivePermissions(id) + ->effective_hosts() + .MatchesAllURLs()); + + // Withhold host permissions. This shouldn't affect the extension's desired + // active permissions, which should still include <all_urls>. + ScriptingPermissionsModifier(profile(), extension) + .SetWithholdHostPermissions(true); + EXPECT_TRUE(prefs->GetDesiredActivePermissions(extension->id()) + ->effective_hosts() + .MatchesAllURLs()); + EXPECT_FALSE(extension->permissions_data() + ->active_permissions() + .effective_hosts() + .MatchesAllURLs()); + + // Reload extensions. + service()->ReloadExtensionsForTest(); + extension = registry()->enabled_extensions().GetByID(id); + ASSERT_TRUE(extension); + + // The extension's desired active permissions should remain unchanged, and + // should include <all_urls>. + EXPECT_TRUE(prefs->GetDesiredActivePermissions(id) + ->effective_hosts() + .MatchesAllURLs()); + EXPECT_FALSE(extension->permissions_data() + ->active_permissions() + .effective_hosts() + .MatchesAllURLs()); +} + +// Validates that extension desired active permissions are restored to a sane +// state on extension load (including all required permissions). +TEST_F(PermissionsUpdaterTest, DesiredActivePermissionsAreFixedOnLoad) { + InitializeEmptyExtensionService(); + + static constexpr char kManifest[] = + R"({ + "name": "Test Extension", + "manifest_version": 3, + "version": "0.1", + "permissions": ["tabs"], + "host_permissions": ["https://requested.example/*"] + })"; + TestExtensionDir test_dir; + test_dir.WriteManifest(kManifest); + + scoped_refptr<const Extension> extension = + ChromeTestExtensionLoader(profile()).LoadExtension( + test_dir.UnpackedPath()); + ASSERT_TRUE(extension); + + const ExtensionId id = extension->id(); + ASSERT_TRUE(registry()->enabled_extensions().Contains(id)); + + ExtensionPrefs* prefs = ExtensionPrefs::Get(profile()); + + const GURL requested_url("https://requested.example"); + const GURL unrequested_url("https://unrequested.example"); + + // The extension's desired active permissions should include example.com and + // tabs. + { + std::unique_ptr<const PermissionSet> desired = + prefs->GetDesiredActivePermissions(id); + EXPECT_TRUE(desired->effective_hosts().MatchesURL(requested_url)); + EXPECT_FALSE(desired->effective_hosts().MatchesURL(unrequested_url)); + EXPECT_TRUE(desired->HasAPIPermission(APIPermissionID::kTab)); + EXPECT_FALSE(desired->HasAPIPermission(APIPermissionID::kBookmark)); + } + + // Mangle the desired permissions in prefs (a la pref corruption, bugs, etc). + { + APIPermissionSet apis; + apis.insert(APIPermissionID::kBookmark); + URLPatternSet patterns; + patterns.AddOrigin(Extension::kValidHostPermissionSchemes, unrequested_url); + prefs->SetDesiredActivePermissions( + id, PermissionSet(std::move(apis), ManifestPermissionSet(), + std::move(patterns), URLPatternSet())); + } + + // Reload extensions. + service()->ReloadExtensionsForTest(); + extension = registry()->enabled_extensions().GetByID(id); + ASSERT_TRUE(extension); + + // The extension's desired active permissions should have been restored to + // their sane state of example.com and tabs. + { + std::unique_ptr<const PermissionSet> desired = + prefs->GetDesiredActivePermissions(id); + EXPECT_TRUE(desired->effective_hosts().MatchesURL(requested_url)); + EXPECT_FALSE(desired->effective_hosts().MatchesURL(unrequested_url)); + EXPECT_TRUE(desired->HasAPIPermission(APIPermissionID::kTab)); + EXPECT_FALSE(desired->HasAPIPermission(APIPermissionID::kBookmark)); + } +} + } // namespace extensions
diff --git a/chrome/browser/extensions/webstore_data_fetcher.cc b/chrome/browser/extensions/webstore_data_fetcher.cc index bb41ddf..f871d211 100644 --- a/chrome/browser/extensions/webstore_data_fetcher.cc +++ b/chrome/browser/extensions/webstore_data_fetcher.cc
@@ -121,12 +121,12 @@ void WebstoreDataFetcher::OnJsonParsed( data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { - delegate_->OnWebstoreResponseParseFailure(id_, *result.error); + if (!result.has_value()) { + delegate_->OnWebstoreResponseParseFailure(id_, result.error()); return; } - if (!result.value->is_dict()) { + if (!result->is_dict()) { delegate_->OnWebstoreResponseParseFailure(id_, kInvalidWebstoreResponseError); return; @@ -134,7 +134,7 @@ delegate_->OnWebstoreResponseParseSuccess( id_, base::DictionaryValue::From( - base::Value::ToUniquePtrValue(std::move(*result.value)))); + base::Value::ToUniquePtrValue(std::move(*result)))); } void WebstoreDataFetcher::OnSimpleLoaderComplete(
diff --git a/chrome/browser/extensions/webstore_install_helper.cc b/chrome/browser/extensions/webstore_install_helper.cc index 5c36dcb..4fa1f78 100644 --- a/chrome/browser/extensions/webstore_install_helper.cc +++ b/chrome/browser/extensions/webstore_install_helper.cc
@@ -113,11 +113,13 @@ data_decoder::DataDecoder::ValueOrError result) { CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); manifest_parse_complete_ = true; - if (result.value && result.value->is_dict()) { + if (result.has_value() && result->is_dict()) { parsed_manifest_ = base::DictionaryValue::From( - base::Value::ToUniquePtrValue(std::move(*result.value))); + base::Value::ToUniquePtrValue(std::move(*result))); } else { - error_ = result.error.value_or("Invalid JSON response"); + error_ = (!result.has_value() || result.error().empty()) + ? "Invalid JSON response" + : result.error(); parse_error_ = Delegate::MANIFEST_ERROR; } ReportResultsIfComplete();
diff --git a/chrome/browser/external_protocol/auto_launch_protocols_policy_handler.cc b/chrome/browser/external_protocol/auto_launch_protocols_policy_handler.cc index b4f8ce8..fd5932b 100644 --- a/chrome/browser/external_protocol/auto_launch_protocols_policy_handler.cc +++ b/chrome/browser/external_protocol/auto_launch_protocols_policy_handler.cc
@@ -10,6 +10,7 @@ #include "base/strings/string_util.h" #include "base/values.h" +#include "chrome/browser/external_protocol/constants.h" #include "chrome/common/pref_names.h" #include "components/policy/core/browser/policy_error_map.h" #include "components/policy/core/common/policy_map.h" @@ -21,10 +22,6 @@ namespace policy { -const char AutoLaunchProtocolsPolicyHandler::kProtocolNameKey[] = "protocol"; -const char AutoLaunchProtocolsPolicyHandler::kOriginListKey[] = - "allowed_origins"; - namespace { const char kValidProtocolChars[] = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+-."; @@ -79,7 +76,7 @@ // If the protocol is invalid mark it as an error. const std::string* protocol = protocol_origins_map.FindStringKey( - AutoLaunchProtocolsPolicyHandler::kProtocolNameKey); + policy::external_protocol::kProtocolNameKey); DCHECK(protocol); if (!IsValidProtocol(*protocol)) { errors->AddError(policy::key::kAutoLaunchProtocolsFromOrigins, i, @@ -87,7 +84,7 @@ } const base::Value* origins_list = protocol_origins_map.FindListKey( - AutoLaunchProtocolsPolicyHandler::kOriginListKey); + policy::external_protocol::kOriginListKey); for (const auto& entry : origins_list->GetListDeprecated()) { const std::string pattern = entry.GetString(); // If it's not a valid origin pattern mark it as an error. @@ -118,14 +115,14 @@ for (auto& protocol_origins_map : policy_value->GetListDeprecated()) { // If the protocol is invalid skip the entry. const std::string* protocol = protocol_origins_map.FindStringKey( - AutoLaunchProtocolsPolicyHandler::kProtocolNameKey); + policy::external_protocol::kProtocolNameKey); DCHECK(protocol); if (!IsValidProtocol(*protocol)) continue; // Remove invalid patterns from the list. base::Value* origin_patterns_list = protocol_origins_map.FindListKey( - AutoLaunchProtocolsPolicyHandler::kOriginListKey); + policy::external_protocol::kOriginListKey); origin_patterns_list->EraseListValueIf([](const base::Value& pattern) { return !IsValidOriginMatchingPattern(pattern.GetString()); });
diff --git a/chrome/browser/external_protocol/auto_launch_protocols_policy_handler.h b/chrome/browser/external_protocol/auto_launch_protocols_policy_handler.h index 2fc001d..e52eaa8e 100644 --- a/chrome/browser/external_protocol/auto_launch_protocols_policy_handler.h +++ b/chrome/browser/external_protocol/auto_launch_protocols_policy_handler.h
@@ -13,9 +13,6 @@ class AutoLaunchProtocolsPolicyHandler : public policy::SchemaValidatingPolicyHandler { public: - static const char kProtocolNameKey[]; - static const char kOriginListKey[]; - explicit AutoLaunchProtocolsPolicyHandler( const policy::Schema& chrome_schema);
diff --git a/chrome/browser/external_protocol/constants.cc b/chrome/browser/external_protocol/constants.cc new file mode 100644 index 0000000..fde61be --- /dev/null +++ b/chrome/browser/external_protocol/constants.cc
@@ -0,0 +1,13 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/external_protocol/constants.h" + +namespace policy::external_protocol { + +const char kProtocolNameKey[] = "protocol"; + +const char kOriginListKey[] = "allowed_origins"; + +} // namespace policy::external_protocol
diff --git a/chrome/browser/external_protocol/constants.h b/chrome/browser/external_protocol/constants.h new file mode 100644 index 0000000..5dbce10 --- /dev/null +++ b/chrome/browser/external_protocol/constants.h
@@ -0,0 +1,16 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROME_BROWSER_EXTERNAL_PROTOCOL_CONSTANTS_H_ +#define CHROME_BROWSER_EXTERNAL_PROTOCOL_CONSTANTS_H_ + +namespace policy::external_protocol { + +extern const char kProtocolNameKey[]; + +extern const char kOriginListKey[]; + +} // namespace policy::external_protocol + +#endif // CHROME_BROWSER_EXTERNAL_PROTOCOL_CONSTANTS_H_
diff --git a/chrome/browser/external_protocol/external_protocol_handler.cc b/chrome/browser/external_protocol/external_protocol_handler.cc index b1493fd..a2d3381d 100644 --- a/chrome/browser/external_protocol/external_protocol_handler.cc +++ b/chrome/browser/external_protocol/external_protocol_handler.cc
@@ -17,6 +17,7 @@ #include "build/build_config.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/external_protocol/auto_launch_protocols_policy_handler.h" +#include "chrome/browser/external_protocol/constants.h" #include "chrome/browser/platform_util.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/pref_names.h" @@ -267,11 +268,11 @@ const base::DictionaryValue& protocol_origins_map = base::Value::AsDictionaryValue(entry); const std::string* protocol = protocol_origins_map.FindStringKey( - policy::AutoLaunchProtocolsPolicyHandler::kProtocolNameKey); + policy::external_protocol::kProtocolNameKey); DCHECK(protocol); if (*protocol == scheme) { origin_patterns = protocol_origins_map.FindListKey( - policy::AutoLaunchProtocolsPolicyHandler::kOriginListKey); + policy::external_protocol::kOriginListKey); break; } }
diff --git a/chrome/browser/external_protocol/external_protocol_policy_browsertest.cc b/chrome/browser/external_protocol/external_protocol_policy_browsertest.cc index 607e0486..129d363 100644 --- a/chrome/browser/external_protocol/external_protocol_policy_browsertest.cc +++ b/chrome/browser/external_protocol/external_protocol_policy_browsertest.cc
@@ -4,6 +4,7 @@ #include "base/values.h" #include "chrome/browser/external_protocol/auto_launch_protocols_policy_handler.h" +#include "chrome/browser/external_protocol/constants.h" #include "chrome/browser/external_protocol/external_protocol_handler.h" #include "chrome/browser/policy/policy_test_utils.h" #include "chrome/browser/ui/browser.h" @@ -32,12 +33,12 @@ // in a list. base::DictionaryValue protocol_origins_map; // Set a protocol list with a matching protocol. - protocol_origins_map.SetStringKey( - AutoLaunchProtocolsPolicyHandler::kProtocolNameKey, kExampleScheme); + protocol_origins_map.SetStringKey(policy::external_protocol::kProtocolNameKey, + kExampleScheme); // Set origins list with a wildcard origin matching pattern. base::ListValue origins; origins.Append(kWildcardOrigin); - protocol_origins_map.SetKey(AutoLaunchProtocolsPolicyHandler::kOriginListKey, + protocol_origins_map.SetKey(policy::external_protocol::kOriginListKey, std::move(origins)); PolicyMap policies; policies.Set(key::kAutoLaunchProtocolsFromOrigins, POLICY_LEVEL_MANDATORY, @@ -59,12 +60,12 @@ // Single dictionary in the list for this test case. base::DictionaryValue protocol_origins_map; // Set a protocol. - protocol_origins_map.SetStringKey( - AutoLaunchProtocolsPolicyHandler::kProtocolNameKey, kExampleScheme); + protocol_origins_map.SetStringKey(policy::external_protocol::kProtocolNameKey, + kExampleScheme); // Set an origins list with the wildcard origin matching pattern. base::ListValue origins; origins.Append(kWildcardOrigin); - protocol_origins_map.SetKey(AutoLaunchProtocolsPolicyHandler::kOriginListKey, + protocol_origins_map.SetKey(policy::external_protocol::kOriginListKey, std::move(origins)); protocol_origins_map_list.Append(std::move(protocol_origins_map)); PolicyMap policies; @@ -95,11 +96,11 @@ // Single dictionary in the list for this test case. base::DictionaryValue protocol_origins_map; // Set a protocol list with a matching protocol. - protocol_origins_map.SetStringKey( - AutoLaunchProtocolsPolicyHandler::kProtocolNameKey, kExampleScheme); + protocol_origins_map.SetStringKey(policy::external_protocol::kProtocolNameKey, + kExampleScheme); // Set an empty origins list. base::ListValue origins; - protocol_origins_map.SetKey(AutoLaunchProtocolsPolicyHandler::kOriginListKey, + protocol_origins_map.SetKey(policy::external_protocol::kOriginListKey, std::move(origins)); protocol_origins_map_list.Append(std::move(protocol_origins_map)); PolicyMap policies; @@ -122,12 +123,12 @@ // Single dictionary in the list for this test case. base::DictionaryValue protocol_origins_map; // Set a protocol to match the test. - protocol_origins_map.SetStringKey( - AutoLaunchProtocolsPolicyHandler::kProtocolNameKey, kExampleScheme); + protocol_origins_map.SetStringKey(policy::external_protocol::kProtocolNameKey, + kExampleScheme); // Set an origins list with the wildcard origin matching pattern. base::ListValue origins; origins.Append(kWildcardOrigin); - protocol_origins_map.SetKey(AutoLaunchProtocolsPolicyHandler::kOriginListKey, + protocol_origins_map.SetKey(policy::external_protocol::kOriginListKey, std::move(origins)); protocol_origins_map_list.Append(std::move(protocol_origins_map)); PolicyMap policies; @@ -160,26 +161,26 @@ // Set invalid protocols, each with the wildcard origin matching pattern. protocol_origins_map1.SetStringKey( - AutoLaunchProtocolsPolicyHandler::kProtocolNameKey, kInvalidProtocol1); + policy::external_protocol::kProtocolNameKey, kInvalidProtocol1); base::ListValue origins1; origins1.Append(kWildcardOrigin); - protocol_origins_map1.SetKey(AutoLaunchProtocolsPolicyHandler::kOriginListKey, + protocol_origins_map1.SetKey(policy::external_protocol::kOriginListKey, std::move(origins1)); protocol_origins_map_list.Append(std::move(protocol_origins_map1)); protocol_origins_map2.SetStringKey( - AutoLaunchProtocolsPolicyHandler::kProtocolNameKey, kInvalidProtocol2); + policy::external_protocol::kProtocolNameKey, kInvalidProtocol2); base::ListValue origins2; origins2.Append(kWildcardOrigin); - protocol_origins_map2.SetKey(AutoLaunchProtocolsPolicyHandler::kOriginListKey, + protocol_origins_map2.SetKey(policy::external_protocol::kOriginListKey, std::move(origins2)); protocol_origins_map_list.Append(std::move(protocol_origins_map2)); protocol_origins_map3.SetStringKey( - AutoLaunchProtocolsPolicyHandler::kProtocolNameKey, kInvalidProtocol3); + policy::external_protocol::kProtocolNameKey, kInvalidProtocol3); base::ListValue origins3; origins3.Append(kWildcardOrigin); - protocol_origins_map3.SetKey(AutoLaunchProtocolsPolicyHandler::kOriginListKey, + protocol_origins_map3.SetKey(policy::external_protocol::kOriginListKey, std::move(origins3)); protocol_origins_map_list.Append(std::move(protocol_origins_map3)); @@ -205,13 +206,13 @@ // Single dictionary in the list for this test case. base::DictionaryValue protocol_origins_map; // Set a protocol to match the test. - protocol_origins_map.SetStringKey( - AutoLaunchProtocolsPolicyHandler::kProtocolNameKey, kExampleScheme); + protocol_origins_map.SetStringKey(policy::external_protocol::kProtocolNameKey, + kExampleScheme); // Set an origins list with an origin matching pattern that matches but is // only the host name. base::ListValue origins; origins.Append(kHost); - protocol_origins_map.SetKey(AutoLaunchProtocolsPolicyHandler::kOriginListKey, + protocol_origins_map.SetKey(policy::external_protocol::kOriginListKey, std::move(origins)); protocol_origins_map_list.Append(std::move(protocol_origins_map)); PolicyMap policies; @@ -250,13 +251,13 @@ // Single dictionary in the list for this test case. base::DictionaryValue protocol_origins_map; // Set a protocol to match the test. - protocol_origins_map.SetStringKey( - AutoLaunchProtocolsPolicyHandler::kProtocolNameKey, kExampleScheme); + protocol_origins_map.SetStringKey(policy::external_protocol::kProtocolNameKey, + kExampleScheme); // Set an origins list with an origin matching pattern that matches exactly // but has no scheme. base::ListValue origins; origins.Append(kExactHostName); - protocol_origins_map.SetKey(AutoLaunchProtocolsPolicyHandler::kOriginListKey, + protocol_origins_map.SetKey(policy::external_protocol::kOriginListKey, std::move(origins)); protocol_origins_map_list.Append(std::move(protocol_origins_map)); PolicyMap policies; @@ -295,13 +296,13 @@ // Single dictionary in the list for this test case. base::DictionaryValue protocol_origins_map; // Set a protocol to match the test. - protocol_origins_map.SetStringKey( - AutoLaunchProtocolsPolicyHandler::kProtocolNameKey, kExampleScheme); + protocol_origins_map.SetStringKey(policy::external_protocol::kProtocolNameKey, + kExampleScheme); // Set an origins list with an origin matching pattern that is the parent // domain but should match subdomains. base::ListValue origins; origins.Append(kParentDomain); - protocol_origins_map.SetKey(AutoLaunchProtocolsPolicyHandler::kOriginListKey, + protocol_origins_map.SetKey(policy::external_protocol::kOriginListKey, std::move(origins)); protocol_origins_map_list.Append(std::move(protocol_origins_map)); PolicyMap policies; @@ -328,13 +329,13 @@ // Single dictionary in the list for this test case. base::DictionaryValue protocol_origins_map; // Set a protocol to match the test. - protocol_origins_map.SetStringKey( - AutoLaunchProtocolsPolicyHandler::kProtocolNameKey, kExampleScheme); + protocol_origins_map.SetStringKey(policy::external_protocol::kProtocolNameKey, + kExampleScheme); // Set an origins list with an origin matching pattern that matches the scheme // and all hosts. base::ListValue origins; origins.Append(kProtocolWithWildcardHostname); - protocol_origins_map.SetKey(AutoLaunchProtocolsPolicyHandler::kOriginListKey, + protocol_origins_map.SetKey(policy::external_protocol::kOriginListKey, std::move(origins)); protocol_origins_map_list.Append(std::move(protocol_origins_map)); PolicyMap policies; @@ -367,13 +368,13 @@ // Single dictionary in the list for this test case. base::DictionaryValue protocol_origins_map; // Set a protocol to match the test. - protocol_origins_map.SetStringKey( - AutoLaunchProtocolsPolicyHandler::kProtocolNameKey, kExampleScheme); + protocol_origins_map.SetStringKey(policy::external_protocol::kProtocolNameKey, + kExampleScheme); // Set an origins list with an origin matching pattern that matches the full // origin exactly. base::ListValue origins; origins.Append(kFullOrigin); - protocol_origins_map.SetKey(AutoLaunchProtocolsPolicyHandler::kOriginListKey, + protocol_origins_map.SetKey(policy::external_protocol::kOriginListKey, std::move(origins)); protocol_origins_map_list.Append(std::move(protocol_origins_map)); PolicyMap policies; @@ -412,13 +413,13 @@ // Single dictionary in the list for this test case. base::DictionaryValue protocol_origins_map; // Set a protocol to match the test. - protocol_origins_map.SetStringKey( - AutoLaunchProtocolsPolicyHandler::kProtocolNameKey, kExampleScheme); + protocol_origins_map.SetStringKey(policy::external_protocol::kProtocolNameKey, + kExampleScheme); // Set an origins list with an origin matching pattern that doesn't match // because it is a parent domain that does not match subdomains. base::ListValue origins; origins.Append(kExactParentDomain); - protocol_origins_map.SetKey(AutoLaunchProtocolsPolicyHandler::kOriginListKey, + protocol_origins_map.SetKey(policy::external_protocol::kOriginListKey, std::move(origins)); protocol_origins_map_list.Append(std::move(protocol_origins_map)); PolicyMap policies; @@ -444,13 +445,13 @@ // Single dictionary in the list for this test case. base::DictionaryValue protocol_origins_map; // Set a protocol to match the test. - protocol_origins_map.SetStringKey( - AutoLaunchProtocolsPolicyHandler::kProtocolNameKey, kExampleScheme); + protocol_origins_map.SetStringKey(policy::external_protocol::kProtocolNameKey, + kExampleScheme); // Set an origins list with an origin matching pattern that doesn't match // because it contains a [/path] element. base::ListValue origins; origins.Append(kFullUrlWithPath); - protocol_origins_map.SetKey(AutoLaunchProtocolsPolicyHandler::kOriginListKey, + protocol_origins_map.SetKey(policy::external_protocol::kOriginListKey, std::move(origins)); protocol_origins_map_list.Append(std::move(protocol_origins_map)); PolicyMap policies;
diff --git a/chrome/browser/first_party_sets/first_party_sets_overrides_policy_handler_unittest.cc b/chrome/browser/first_party_sets/first_party_sets_overrides_policy_handler_unittest.cc index f1c8b031..05bde31 100644 --- a/chrome/browser/first_party_sets/first_party_sets_overrides_policy_handler_unittest.cc +++ b/chrome/browser/first_party_sets/first_party_sets_overrides_policy_handler_unittest.cc
@@ -150,8 +150,8 @@ EXPECT_FALSE( handler()->CheckPolicySettings(MakePolicyWithInput(input), &errors)); EXPECT_EQ(errors.GetErrors(policy::key::kFirstPartySetsOverrides), - u"Schema validation error at \"(ROOT)\": The value type doesn't " - u"match the schema type."); + u"Schema validation error at \"(ROOT)\": Policy type mismatch: " + u"expected: \"dictionary\", actual: \"list\"."); } TEST_F(FirstPartySetsOverridesPolicyHandlerTest, @@ -166,10 +166,9 @@ EXPECT_FALSE( handler()->CheckPolicySettings(MakePolicyWithInput(input), &errors)); - EXPECT_EQ( - errors.GetErrors(policy::key::kFirstPartySetsOverrides), - u"Schema validation error at \"replacements\": The value type doesn't " - u"match the schema type."); + EXPECT_EQ(errors.GetErrors(policy::key::kFirstPartySetsOverrides), + u"Schema validation error at \"replacements\": Policy type " + u"mismatch: expected: \"list\", actual: \"integer\"."); } TEST_F(FirstPartySetsOverridesPolicyHandlerTest, @@ -185,8 +184,8 @@ EXPECT_FALSE( handler()->CheckPolicySettings(MakePolicyWithInput(input), &errors)); EXPECT_EQ(errors.GetErrors(policy::key::kFirstPartySetsOverrides), - u"Schema validation error at \"additions\": The value type doesn't " - u"match the schema type."); + u"Schema validation error at \"additions\": Policy type mismatch: " + u"expected: \"list\", actual: \"integer\"."); } TEST_F(FirstPartySetsOverridesPolicyHandlerTest, @@ -228,8 +227,8 @@ EXPECT_FALSE( handler()->CheckPolicySettings(MakePolicyWithInput(input), &errors)); EXPECT_EQ(errors.GetErrors(policy::key::kFirstPartySetsOverrides), - u"Schema validation error at \"additions.items[0].owner\": The " - u"value type doesn't match the schema type."); + u"Schema validation error at \"additions.items[0].owner\": Policy " + u"type mismatch: expected: \"string\", actual: \"integer\"."); } TEST_F(FirstPartySetsOverridesPolicyHandlerTest, @@ -271,8 +270,8 @@ EXPECT_FALSE( handler()->CheckPolicySettings(MakePolicyWithInput(input), &errors)); EXPECT_EQ(errors.GetErrors(policy::key::kFirstPartySetsOverrides), - u"Schema validation error at \"additions.items[0].members\": The " - u"value type doesn't match the schema type."); + u"Schema validation error at \"additions.items[0].members\": " + u"Policy type mismatch: expected: \"list\", actual: \"integer\"."); } TEST_F(FirstPartySetsOverridesPolicyHandlerTest, @@ -295,7 +294,7 @@ EXPECT_EQ( errors.GetErrors(policy::key::kFirstPartySetsOverrides), u"Schema validation error at \"additions.items[0].members.items[1]\": " - u"The value type doesn't match the schema type."); + u"Policy type mismatch: expected: \"string\", actual: \"integer\"."); } TEST_F(FirstPartySetsOverridesPolicyHandlerTest,
diff --git a/chrome/browser/lacros/account_manager/account_profile_mapper.cc b/chrome/browser/lacros/account_manager/account_profile_mapper.cc index b3a9f83c..ae6c140 100644 --- a/chrome/browser/lacros/account_manager/account_profile_mapper.cc +++ b/chrome/browser/lacros/account_manager/account_profile_mapper.cc
@@ -8,6 +8,7 @@ #include "base/callback.h" #include "base/callback_helpers.h" #include "base/check.h" +#include "base/containers/contains.h" #include "base/containers/cxx20_erase.h" #include "base/containers/flat_map.h" #include "base/containers/flat_set.h" @@ -148,8 +149,8 @@ unassigned_accounts.erase(gaia_id); } } - for (const auto& pair : unassigned_accounts) - accounts_map[base::FilePath()].push_back(pair.second); + for (const auto& [gaia_id, account] : unassigned_accounts) + accounts_map[base::FilePath()].push_back(account); std::move(callback).Run(accounts_map); } @@ -249,8 +250,6 @@ if (profiles_with_updated_account.empty()) profiles_with_updated_account.push_back(base::FilePath()); - // TODO(https://crbug.com/1262946): Update this code when - // OnAccountUpserted() takes multiple paths. for (const base::FilePath& profile_path : profiles_with_updated_account) { for (auto& obs : observers_) obs.OnAccountUpserted(profile_path, account); @@ -302,16 +301,16 @@ base::ranges::set_difference(freed_account_ids, assigned_account_ids, std::back_inserter(unassigned_account_ids)); - // Notify observers about accounts that became unassiged. - for (const std::string& unassiged_account_id : unassigned_account_ids) { + // Notify observers about accounts that became unassigned. + for (const std::string& unassigned_account_id : unassigned_account_ids) { const account_manager::Account* account = - account_cache_.FindAccountByGaiaId(unassiged_account_id); + account_cache_.FindAccountByGaiaId(unassigned_account_id); // `account_cache_` might be outdated. if (!account) continue; for (auto& obs : observers_) - obs.OnAccountUpserted(base::FilePath(), *account); + obs.OnAccountRemoved(profile_path, *account); } } @@ -534,7 +533,6 @@ // Accounts that were removed. std::vector<std::pair<base::FilePath, std::string>> removed_ids = RemoveStaleAccounts(); - // Accounts that were added. ProfileAttributesEntry* entry_for_new_accounts = MaybeGetProfileForNewAccounts(); @@ -546,6 +544,7 @@ AccountCache::AccountIdSet old_account_ids = base::MakeFlatSet<std::string>( old_cache, {}, [](const auto& mapped_pair) { return mapped_pair.first; }); + // Accounts that were added. std::vector<const account_manager::Account*> added_accounts = AddNewGaiaAccounts(system_accounts, std::move(old_account_ids), entry_for_new_accounts); @@ -554,19 +553,31 @@ base::FilePath path_for_new_accounts; if (entry_for_new_accounts) path_for_new_accounts = entry_for_new_accounts->GetPath(); - for (auto& obs : observers_) { - for (const auto* account : added_accounts) { - DCHECK_EQ(account->key.account_type(), - account_manager::AccountType::kGaia); + // Accounts added (either to a profile or unassigned). + for (const auto* account : added_accounts) { + DCHECK_EQ(account->key.account_type(), + account_manager::AccountType::kGaia); + for (auto& obs : observers_) obs.OnAccountUpserted(path_for_new_accounts, *account); + } + // Accounts removed that were assigned to a profile: pass the profile path. + base::flat_set<std::string> removed_accounts_notified; + for (const auto& [profile_path, gaia_id] : removed_ids) { + auto it = old_cache.find(gaia_id); + if (it == old_cache.cend()) { + NOTREACHED() << "Account " << gaia_id << " missing."; + continue; } - for (const auto& pair : removed_ids) { - auto it = old_cache.find(pair.second); - if (it == old_cache.cend()) { - NOTREACHED() << "Account " << pair.second << " missing."; - continue; - } - obs.OnAccountRemoved(pair.first, it->second); + removed_accounts_notified.insert(gaia_id); + for (auto& obs : observers_) + obs.OnAccountRemoved(profile_path, it->second); + } + // Unassigned accounts removed: pass the empty path. + for (const auto& [gaia_id, account] : old_cache) { + if (!base::Contains(system_accounts, account) && + !removed_accounts_notified.contains(account.key.id())) { + for (auto& obs : observers_) + obs.OnAccountRemoved(base::FilePath(), account); } } } else {
diff --git a/chrome/browser/lacros/account_manager/account_profile_mapper.h b/chrome/browser/lacros/account_manager/account_profile_mapper.h index b2c4bf0..ad8be69 100644 --- a/chrome/browser/lacros/account_manager/account_profile_mapper.h +++ b/chrome/browser/lacros/account_manager/account_profile_mapper.h
@@ -76,6 +76,10 @@ class Observer : public base::CheckedObserver { public: // `profile_path` is empty if the account is not assigned to a profile. + // Note: to avoid sending too many notifications, the notification with an + // empty path may not always be sent. For example if an account is added to + // the facade and to a profile at the same time, only the notification with + // a non-empty path is sent. virtual void OnAccountUpserted(const base::FilePath& profile_path, const account_manager::Account& account) {} virtual void OnAccountRemoved(const base::FilePath& profile_path,
diff --git a/chrome/browser/lacros/account_manager/account_profile_mapper_unittest.cc b/chrome/browser/lacros/account_manager/account_profile_mapper_unittest.cc index 0f06e2f..84c76db 100644 --- a/chrome/browser/lacros/account_manager/account_profile_mapper_unittest.cc +++ b/chrome/browser/lacros/account_manager/account_profile_mapper_unittest.cc
@@ -705,14 +705,12 @@ TestMapperUpdate(mapper, {AccountFromGaiaID("A"), NonGaiaAccountFromID("B")}, /*expected_accounts_upserted=*/{}, /*expected_accounts_removed=*/{}, - /*expected_accounts_in_prefs=*/ - {{main_path(), {"A"}}}); + /*expected_accounts_in_prefs=*/{{main_path(), {"A"}}}); // Removal is ignored as well. TestMapperUpdate(mapper, {AccountFromGaiaID("A")}, /*expected_accounts_upserted=*/{}, /*expected_accounts_removed=*/{}, - /*expected_accounts_in_prefs=*/ - {{main_path(), {"A"}}}); + /*expected_accounts_in_prefs=*/{{main_path(), {"A"}}}); } // Tests that observers are notified when an existing account receives an @@ -762,6 +760,14 @@ ExpectOnAccountUpserted(&mock_observer, {{base::FilePath(), {"C"}}}); mapper->OnAccountUpserted(AccountFromGaiaID("C")); + testing::Mock::VerifyAndClearExpectations(&mock_observer); + TestMapperUpdateGaia( + mapper, + /*accounts_in_facade=*/{"A", "B"}, + /*expected_accounts_upserted=*/{}, + /*expected_accounts_removed=*/{{base::FilePath(), {"C"}}}, + /*expected_accounts_in_prefs=*/ + {{main_path(), {"A", "B"}}, {other_path, {"B"}}}); } // Tests that observers are notified when an existing account receives an @@ -837,8 +843,8 @@ TestMapperUpdateGaia( mapper, /*accounts_in_facade=*/{"A", "C", "D"}, - /*expected_accounts_upserted=*/{{base::FilePath(), {"C"}}}, - /*expected_accounts_removed=*/{{second_path, {"B"}}}, + /*expected_accounts_upserted=*/{}, + /*expected_accounts_removed=*/{{second_path, {"B", "C"}}}, /*expected_accounts_in_prefs=*/ {{main_path(), {"A"}}, {third_path, {"D"}}, {base::FilePath(), {"C"}}}); ProfileAttributesStorageTestObserver(attributes_storage()) @@ -883,8 +889,7 @@ /*accounts_in_facade=*/{"A"}, /*expected_accounts_upserted=*/{}, /*expected_accounts_removed=*/{{second_path, {"B"}}}, - /*expected_accounts_in_prefs=*/ - {{main_path(), {"A"}}}); + /*expected_accounts_in_prefs=*/{{main_path(), {"A"}}}); ProfileAttributesStorageTestObserver(attributes_storage()) .WaitForProfileBeingDeleted(second_path); @@ -1003,8 +1008,7 @@ /*accounts_in_facade=*/{"B"}, /*expected_accounts_upserted=*/{}, /*expected_accounts_removed=*/{{main_path(), {"A"}}}, - /*expected_accounts_in_prefs=*/ - {{main_path(), {"B"}}}); + /*expected_accounts_in_prefs=*/{{main_path(), {"B"}}}); } // Tests removing all accounts from a secondary profile (User signed out from @@ -1130,7 +1134,7 @@ base::ScopedObservation<AccountProfileMapper, AccountProfileMapper::Observer> observation{&mock_observer}; observation.Observe(mapper); - ExpectOnAccountRemoved(&mock_observer, {}); + ExpectOnAccountRemoved(&mock_observer, {{other_path, {"C"}}}); mapper->RemoveAllAccounts(other_path); CompleteFacadeGetAccountsGaia({"A", "C"}); VerifyAccountsInPrefs({{main_path(), {"A"}}, {base::FilePath(), {"C"}}}); @@ -1149,8 +1153,7 @@ base::ScopedObservation<AccountProfileMapper, AccountProfileMapper::Observer> observation{&mock_observer}; observation.Observe(mapper); - ExpectOnAccountUpserted(&mock_observer, {{base::FilePath(), {"B", "C"}}}); - ExpectOnAccountRemoved(&mock_observer, {}); + ExpectOnAccountRemoved(&mock_observer, {{other_path, {"B", "C"}}}); testing_profile_manager()->DeleteTestingProfile("Other"); VerifyAccountsInPrefs({{main_path(), {"A"}}, {base::FilePath(), {"B", "C"}}});
diff --git a/chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser.cc b/chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser.cc index dde8363e..18f0a0c1 100644 --- a/chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser.cc +++ b/chrome/browser/media/router/discovery/dial/safe_dial_app_info_parser.cc
@@ -103,7 +103,7 @@ void SafeDialAppInfoParser::OnXmlParsingDone( SafeDialAppInfoParser::ParseCallback callback, data_decoder::DataDecoder::ValueOrError result) { - if (!result.value || !result.value->is_dict()) { + if (!result.has_value() || !result->is_dict()) { std::move(callback).Run(nullptr, ParsingResult::kInvalidXML); return; } @@ -111,8 +111,8 @@ // NOTE: enforce namespace check for <service> element in future. Namespace // value will be "urn:dial-multiscreen-org:schemas:dial". bool unique_service = true; - const base::Value* service_element = data_decoder::FindXmlElementPath( - *result.value, {"service"}, &unique_service); + const base::Value* service_element = + data_decoder::FindXmlElementPath(*result, {"service"}, &unique_service); if (!service_element || !unique_service) { std::move(callback).Run(nullptr, ParsingResult::kInvalidXML); return;
diff --git a/chrome/browser/media/router/discovery/dial/safe_dial_device_description_parser.cc b/chrome/browser/media/router/discovery/dial/safe_dial_device_description_parser.cc index 827443f..7a37a64 100644 --- a/chrome/browser/media/router/discovery/dial/safe_dial_device_description_parser.cc +++ b/chrome/browser/media/router/discovery/dial/safe_dial_device_description_parser.cc
@@ -53,7 +53,7 @@ SafeDialDeviceDescriptionParser::ParseCallback callback, const GURL& app_url, data_decoder::DataDecoder::ValueOrError result) { - if (!result.value || !result.value->is_dict()) { + if (!result.has_value() || !result->is_dict()) { std::move(callback).Run( ParsedDialDeviceDescription(), SafeDialDeviceDescriptionParser::ParsingError::kInvalidXml); @@ -62,7 +62,7 @@ bool unique_device = true; const base::Value* device_element = data_decoder::FindXmlElementPath( - *result.value, {"root", "device"}, &unique_device); + *result, {"root", "device"}, &unique_device); if (!device_element) { NotifyParsingError( std::move(callback),
diff --git a/chrome/browser/media/router/providers/cast/cast_activity_manager.cc b/chrome/browser/media/router/providers/cast/cast_activity_manager.cc index a59d6cd..c7a10818 100644 --- a/chrome/browser/media/router/providers/cast/cast_activity_manager.cc +++ b/chrome/browser/media/router/providers/cast/cast_activity_manager.cc
@@ -114,11 +114,11 @@ bool off_the_record, mojom::MediaRouteProvider::CreateRouteCallback callback, data_decoder::DataDecoder::ValueOrError result) { - if (!cast_source.app_params().empty() && result.error) { - logger_->LogError( - mojom::LogCategory::kRoute, kLoggerComponent, - base::StrCat({"Error parsing JSON data in appParams: ", *result.error}), - sink.id(), cast_source.source_id(), presentation_id); + if (!cast_source.app_params().empty() && !result.has_value()) { + logger_->LogError(mojom::LogCategory::kRoute, kLoggerComponent, + base::StrCat({"Error parsing JSON data in appParams: ", + result.error()}), + sink.id(), cast_source.source_id(), presentation_id); std::move(callback).Run( absl::nullopt, nullptr, std::string("Invalid JSON Format of appParams"), mojom::RouteRequestResultCode::NO_SUPPORTED_PROVIDER); @@ -144,8 +144,15 @@ route.set_media_sink_name(sink.sink().name()); route.set_is_connecting(true); + // We either have a value, or an error, however `LaunchSession` calls this + // function is a default constructed `result`, which is supposed to be + // ignored. + absl::optional<base::Value> opt_result = absl::nullopt; + if (result.has_value() && !result->is_none()) + opt_result = std::move(*result); + DoLaunchSessionParams params(route, cast_source, sink, origin, tab_id, - std::move(result.value), std::move(callback)); + std::move(opt_result), std::move(callback)); // If there is currently a session on the sink, it must be terminated before // the new session can be launched. @@ -656,17 +663,17 @@ const std::string& media_route_id, const std::string& message, data_decoder::DataDecoder::ValueOrError result) { - if (result.error) { + if (!result.has_value()) { logger_->LogError( mojom::LogCategory::kRoute, kLoggerComponent, "Error parsing JSON data when sending route JSON message: " + - *result.error, + result.error(), "", MediaRoute::GetMediaSourceIdFromMediaRouteId(media_route_id), MediaRoute::GetPresentationIdFromMediaRouteId(media_route_id)); return; } - const std::string* client_id = result.value->FindStringKey("clientId"); + const std::string* client_id = result->FindStringKey("clientId"); if (!client_id) { logger_->LogError( mojom::LogCategory::kRoute, kLoggerComponent,
diff --git a/chrome/browser/media/router/providers/cast/cast_session_client_impl.cc b/chrome/browser/media/router/providers/cast/cast_session_client_impl.cc index cbfa464..71ca9b1b 100644 --- a/chrome/browser/media/router/providers/cast/cast_session_client_impl.cc +++ b/chrome/browser/media/router/providers/cast/cast_session_client_impl.cc
@@ -145,19 +145,19 @@ void CastSessionClientImpl::HandleParsedClientMessage( data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { + if (!result.has_value()) { ReportClientMessageParseError(activity_->route().media_route_id(), - *result.error); + result.error()); return; } // NOTE(jrw): This step isn't part of the Cast protocol per se, but it's // required for backward compatibility. There is one known case // (crbug.com/1129217) where not doing it breaks the Cast SDK. - RemoveNullFields(*result.value); + RemoveNullFields(*result); std::unique_ptr<CastInternalMessage> cast_message = - CastInternalMessage::From(std::move(*result.value)); + CastInternalMessage::From(std::move(*result)); if (!cast_message) { ReportClientMessageParseError(activity_->route().media_route_id(), "Not a Cast message");
diff --git a/chrome/browser/media/router/providers/cast/mirroring_activity.cc b/chrome/browser/media/router/providers/cast/mirroring_activity.cc index 36fcb28..03d88afb 100644 --- a/chrome/browser/media/router/providers/cast/mirroring_activity.cc +++ b/chrome/browser/media/router/providers/cast/mirroring_activity.cc
@@ -385,29 +385,29 @@ CastSession* session = GetSession(); DCHECK(session); - if (!result.value) { + if (!result.has_value()) { // TODO(crbug.com/905002): Record UMA metric for parse result. logger_->LogError( media_router::mojom::LogCategory::kMirroring, kLoggerComponent, - base::StrCat({"Failed to parse Cast client message:", *result.error}), + base::StrCat({"Failed to parse Cast client message:", result.error()}), route().media_sink_id(), route().media_source().id(), route().presentation_id()); return; } - const std::string message_namespace = GetMirroringNamespace(*result.value); + const std::string message_namespace = GetMirroringNamespace(*result); if (message_namespace == mirroring::mojom::kWebRtcNamespace) { logger_->LogInfo(media_router::mojom::LogCategory::kMirroring, kLoggerComponent, base::StrCat({"WebRTC message received: ", - GetScrubbedLogMessage(*result.value)}), + GetScrubbedLogMessage(*result)}), route().media_sink_id(), route().media_source().id(), route().presentation_id()); } cast::channel::CastMessage cast_message = cast_channel::CreateCastMessage( - message_namespace, std::move(*result.value), - message_handler_->sender_id(), session->transport_id()); + message_namespace, std::move(*result), message_handler_->sender_id(), + session->transport_id()); if (message_handler_->SendCastMessage(cast_data_.cast_channel_id, cast_message) == Result::kFailed) { logger_->LogError(
diff --git a/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc b/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc index 94973814..b99ebfae 100644 --- a/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc +++ b/chrome/browser/media/router/providers/dial/dial_media_route_provider.cc
@@ -216,19 +216,19 @@ void DialMediaRouteProvider::HandleParsedRouteMessage( const MediaRoute::Id& route_id, data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { + if (!result.has_value()) { logger_->LogError( mojom::LogCategory::kRoute, kLoggerComponent, - base::StrCat({"Failed to parse the route message. ", *result.error}), + base::StrCat({"Failed to parse the route message. ", result.error()}), "", MediaRoute::GetMediaSourceIdFromMediaRouteId(route_id), MediaRoute::GetPresentationIdFromMediaRouteId(route_id)); - ReportParseError(DialParseMessageResult::kParseError, *result.error); + ReportParseError(DialParseMessageResult::kParseError, result.error()); return; } std::string error; std::unique_ptr<DialInternalMessage> internal_message = - DialInternalMessage::From(std::move(*result.value), &error); + DialInternalMessage::From(std::move(*result), &error); if (!internal_message) { logger_->LogError(mojom::LogCategory::kRoute, kLoggerComponent, base::StrCat({"Invalid route message. ", error}), "",
diff --git a/chrome/browser/metrics/family_link_user_metrics_provider.cc b/chrome/browser/metrics/family_link_user_metrics_provider.cc index 7ec95e3..15f62354 100644 --- a/chrome/browser/metrics/family_link_user_metrics_provider.cc +++ b/chrome/browser/metrics/family_link_user_metrics_provider.cc
@@ -36,6 +36,13 @@ signin::IdentityManager* identity_manager) { CHECK(identity_manager); scoped_observations_.AddObservation(identity_manager); + // The account may have been updated before registering the observer. + // Set the log segment to the primary account info if it exists. + AccountInfo primary_account_info = identity_manager->FindExtendedAccountInfo( + identity_manager->GetPrimaryAccountInfo(signin::ConsentLevel::kSignin)); + + if (!primary_account_info.IsEmpty()) + OnExtendedAccountInfoUpdated(primary_account_info); } void FamilyLinkUserMetricsProvider::OnIdentityManagerShutdown( @@ -52,7 +59,7 @@ switch (is_subject_to_parental_controls) { case signin::Tribool::kFalse: case signin::Tribool::kUnknown: { - // Log as unsupervised user if the account is subject to parental + // Log as unsupervised user if the account is not subject to parental // controls or if the capability is not known. SetLogSegment(LogSegment::kUnsupervised); return;
diff --git a/chrome/browser/metrics/family_link_user_metrics_provider_unittest.cc b/chrome/browser/metrics/family_link_user_metrics_provider_unittest.cc index 199ef0d..8c8fb5a 100644 --- a/chrome/browser/metrics/family_link_user_metrics_provider_unittest.cc +++ b/chrome/browser/metrics/family_link_user_metrics_provider_unittest.cc
@@ -10,6 +10,7 @@ #include "components/signin/public/identity_manager/account_capabilities_test_mutator.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" #include "components/signin/public/identity_manager/test_identity_manager_observer.h" #include "components/sync_preferences/testing_pref_service_syncable.h" #include "testing/gtest/include/gtest/gtest.h" @@ -26,7 +27,6 @@ /*pref_service=*/&prefs_, signin::AccountConsistencyMethod::kMirror, &client_) { - metrics_provider_.IdentityManagerCreated(identity_manager()); EnableAccountCapabilitiesFetches(identity_manager()); } @@ -55,6 +55,7 @@ }; TEST_F(FamilyLinkUserMetricsProviderTest, UserWithUnknownCapabilities) { + metrics_provider()->IdentityManagerCreated(identity_manager()); AccountInfo account = identity_test_env()->MakeAccountAvailable(kTestEmail); base::RunLoop().RunUntilIdle(); @@ -68,6 +69,7 @@ } TEST_F(FamilyLinkUserMetricsProviderTest, AdultUser) { + metrics_provider()->IdentityManagerCreated(identity_manager()); AccountInfo account = identity_test_env()->MakeAccountAvailable(kTestEmail); base::RunLoop().RunUntilIdle(); @@ -90,6 +92,7 @@ } TEST_F(FamilyLinkUserMetricsProviderTest, UserWithOptionalSupervision) { + metrics_provider()->IdentityManagerCreated(identity_manager()); AccountInfo account = identity_test_env()->MakeAccountAvailable(kTestEmail); base::RunLoop().RunUntilIdle(); @@ -115,6 +118,7 @@ } TEST_F(FamilyLinkUserMetricsProviderTest, UserWithRequiredSupervision) { + metrics_provider()->IdentityManagerCreated(identity_manager()); AccountInfo account = identity_test_env()->MakeAccountAvailable(kTestEmail); base::RunLoop().RunUntilIdle(); @@ -138,3 +142,20 @@ FamilyLinkUserMetricsProvider::LogSegment::kSupervisionEnabledByPolicy, /*expected_bucket_count=*/1); } + +TEST_F(FamilyLinkUserMetricsProviderTest, + MetricsProviderInitAfterPrimaryAccountAdded) { + AccountInfo account = identity_test_env()->MakePrimaryAccountAvailable( + kTestEmail, signin::ConsentLevel::kSignin); + + // Identity manager observer set after primary account is made available. + metrics_provider()->IdentityManagerCreated(identity_manager()); + + base::HistogramTester histogram_tester; + metrics_provider()->ProvideCurrentSessionData(/*uma_proto_unused=*/nullptr); + + histogram_tester.ExpectUniqueSample( + FamilyLinkUserMetricsProvider::GetHistogramNameForTesting(), + FamilyLinkUserMetricsProvider::LogSegment::kUnsupervised, + /*expected_bucket_count=*/1); +}
diff --git a/chrome/browser/new_tab_page/modules/drive/drive_service.cc b/chrome/browser/new_tab_page/modules/drive/drive_service.cc index 33dfa75..24e15921 100644 --- a/chrome/browser/new_tab_page/modules/drive/drive_service.cc +++ b/chrome/browser/new_tab_page/modules/drive/drive_service.cc
@@ -290,14 +290,14 @@ void DriveService::OnJsonParsed( data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { + if (!result.has_value()) { for (auto& callback : callbacks_) { std::move(callback).Run(std::vector<drive::mojom::FilePtr>()); } callbacks_.clear(); return; } - auto* items = result.value->FindListPath("item"); + auto* items = result->FindListPath("item"); if (!items) { for (auto& callback : callbacks_) { std::move(callback).Run(std::vector<drive::mojom::FilePtr>());
diff --git a/chrome/browser/new_tab_page/modules/photos/photos_service.cc b/chrome/browser/new_tab_page/modules/photos/photos_service.cc index 7d5057a..1f5e9b6 100644 --- a/chrome/browser/new_tab_page/modules/photos/photos_service.cc +++ b/chrome/browser/new_tab_page/modules/photos/photos_service.cc
@@ -413,7 +413,7 @@ void PhotosService::OnJsonParsed( const std::string& token, data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { + if (!result.has_value()) { for (auto& callback : callbacks_) { std::move(callback).Run(std::vector<photos::mojom::MemoryPtr>()); } @@ -421,7 +421,7 @@ return; } - auto* memories = result.value->FindListPath("memory"); + auto* memories = result->FindListPath("memory"); if (!memories) { base::UmaHistogramCustomCounts("NewTabPage.Photos.DataResponseCount", 0, 0, 10, 11);
diff --git a/chrome/browser/new_tab_page/modules/task_module/task_module_service.cc b/chrome/browser/new_tab_page/modules/task_module/task_module_service.cc index f9d07d9..8e3a67696 100644 --- a/chrome/browser/new_tab_page/modules/task_module/task_module_service.cc +++ b/chrome/browser/new_tab_page/modules/task_module/task_module_service.cc
@@ -223,15 +223,15 @@ void TaskModuleService::OnJsonParsed( TaskModuleCallback callback, data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { + if (!result.has_value()) { std::move(callback).Run(nullptr); return; } // We receive a list of tasks ordered from highest to lowest priority. We only // support showing a single task though. Therefore, pick the first task. - auto* tasks = result.value->FindListPath( - base::StringPrintf("update.%s", GetTasksKey())); + auto* tasks = + result->FindListPath(base::StringPrintf("update.%s", GetTasksKey())); if (!tasks || tasks->GetListDeprecated().size() == 0) { std::move(callback).Run(nullptr); return;
diff --git a/chrome/browser/new_tab_page/one_google_bar/one_google_bar_loader_impl.cc b/chrome/browser/new_tab_page/one_google_bar/one_google_bar_loader_impl.cc index 8e4d22e..8715292 100644 --- a/chrome/browser/new_tab_page/one_google_bar/one_google_bar_loader_impl.cc +++ b/chrome/browser/new_tab_page/one_google_bar/one_google_bar_loader_impl.cc
@@ -369,13 +369,13 @@ void OneGoogleBarLoaderImpl::JsonParsed( data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { - DVLOG(1) << "Parsing JSON failed: " << *result.error; + if (!result.has_value()) { + DVLOG(1) << "Parsing JSON failed: " << result.error(); Respond(Status::FATAL_ERROR, absl::nullopt); return; } - absl::optional<OneGoogleBarData> data = JsonToOGBData(*result.value); + absl::optional<OneGoogleBarData> data = JsonToOGBData(*result); Respond(data.has_value() ? Status::OK : Status::FATAL_ERROR, data); }
diff --git a/chrome/browser/new_tab_page/promos/promo_service.cc b/chrome/browser/new_tab_page/promos/promo_service.cc index 049cc39..5791daa 100644 --- a/chrome/browser/new_tab_page/promos/promo_service.cc +++ b/chrome/browser/new_tab_page/promos/promo_service.cc
@@ -201,8 +201,8 @@ void PromoService::OnJsonParsed( data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { - DVLOG(1) << "Parsing JSON failed: " << *result.error; + if (!result.has_value()) { + DVLOG(1) << "Parsing JSON failed: " << result.error(); PromoDataLoaded(Status::FATAL_ERROR, absl::nullopt); return; } @@ -210,7 +210,7 @@ absl::optional<PromoData> data; PromoService::Status status; - if (JsonToPromoData(*result.value, &data)) { + if (JsonToPromoData(*result, &data)) { bool is_blocked = IsBlockedAfterClearingExpired(data->promo_id); if (is_blocked) data = PromoData();
diff --git a/chrome/browser/password_manager/android/password_store_android_backend.cc b/chrome/browser/password_manager/android/password_store_android_backend.cc index fb10d2c..9ed09d4f 100644 --- a/chrome/browser/password_manager/android/password_store_android_backend.cc +++ b/chrome/browser/password_manager/android/password_store_android_backend.cc
@@ -697,6 +697,9 @@ "PasswordManager.UnenrolledFromUPMDueToErrors", true); prefs_->SetBoolean( prefs::kUnenrolledFromGoogleMobileServicesDueToErrors, true); + prefs_->SetInteger( + prefs::kUnenrolledFromGoogleMobileServicesAfterApiErrorCode, + api_error); LOG(ERROR) << "Unenrolled from UPM due to error with code: " << api_error; }
diff --git a/chrome/browser/password_manager/android/password_store_android_backend_unittest.cc b/chrome/browser/password_manager/android/password_store_android_backend_unittest.cc index ef66d811..1882cff0 100644 --- a/chrome/browser/password_manager/android/password_store_android_backend_unittest.cc +++ b/chrome/browser/password_manager/android/password_store_android_backend_unittest.cc
@@ -173,6 +173,8 @@ prefs_.registry()->RegisterBooleanPref( prefs::kUnenrolledFromGoogleMobileServicesDueToErrors, false); prefs_.registry()->RegisterIntegerPref( + prefs::kUnenrolledFromGoogleMobileServicesAfterApiErrorCode, 0); + prefs_.registry()->RegisterIntegerPref( prefs::kCurrentMigrationVersionToGoogleMobileServices, 1); prefs_.registry()->RegisterDoublePref(prefs::kTimeOfLastMigrationAttempt, 20.22); @@ -654,6 +656,9 @@ EXPECT_TRUE(prefs()->GetBoolean( prefs::kUnenrolledFromGoogleMobileServicesDueToErrors)); EXPECT_EQ(prefs()->GetInteger( + prefs::kUnenrolledFromGoogleMobileServicesAfterApiErrorCode), + kInternalErrorCode); + EXPECT_EQ(prefs()->GetInteger( prefs::kCurrentMigrationVersionToGoogleMobileServices), 0); EXPECT_EQ(prefs()->GetDouble(prefs::kTimeOfLastMigrationAttempt), 0.0); @@ -692,6 +697,9 @@ EXPECT_FALSE(prefs()->GetBoolean( prefs::kUnenrolledFromGoogleMobileServicesDueToErrors)); + EXPECT_EQ(prefs()->GetInteger( + prefs::kUnenrolledFromGoogleMobileServicesAfterApiErrorCode), + 0); EXPECT_NE(prefs()->GetInteger( prefs::kCurrentMigrationVersionToGoogleMobileServices), 0); @@ -730,6 +738,9 @@ EXPECT_FALSE(prefs()->GetBoolean( prefs::kUnenrolledFromGoogleMobileServicesDueToErrors)); + EXPECT_EQ(prefs()->GetInteger( + prefs::kUnenrolledFromGoogleMobileServicesAfterApiErrorCode), + 0); EXPECT_NE(prefs()->GetInteger( prefs::kCurrentMigrationVersionToGoogleMobileServices), 0); @@ -769,6 +780,9 @@ EXPECT_TRUE(prefs()->GetBoolean( prefs::kUnenrolledFromGoogleMobileServicesDueToErrors)); EXPECT_EQ(prefs()->GetInteger( + prefs::kUnenrolledFromGoogleMobileServicesAfterApiErrorCode), + kPassphraseRequiredErrorCode); + EXPECT_EQ(prefs()->GetInteger( prefs::kCurrentMigrationVersionToGoogleMobileServices), 0); EXPECT_EQ(prefs()->GetDouble(prefs::kTimeOfLastMigrationAttempt), 0.0); @@ -1170,6 +1184,9 @@ false, {syncer::UserSelectableType::kPasswords}); prefs()->SetBoolean(prefs::kUnenrolledFromGoogleMobileServicesDueToErrors, true); + prefs()->SetInteger( + prefs::kUnenrolledFromGoogleMobileServicesAfterApiErrorCode, + static_cast<int>(AndroidBackendAPIErrorCode::kInternalError)); backend().OnSyncServiceInitialized(sync_service()); histogram_tester.ExpectUniqueSample( kUPMActiveHistogram,
diff --git a/chrome/browser/policy/configuration_policy_handler_list_factory.cc b/chrome/browser/policy/configuration_policy_handler_list_factory.cc index de4fa60..5a47c7d 100644 --- a/chrome/browser/policy/configuration_policy_handler_list_factory.cc +++ b/chrome/browser/policy/configuration_policy_handler_list_factory.cc
@@ -205,6 +205,9 @@ // clang-format off const PolicyToPreferenceMapEntry kSimplePolicyMap[] = { // Policies for all platforms - Start + { key::kComponentUpdatesEnabled, + prefs::kComponentUpdatesEnabled, + base::Value::Type::BOOLEAN }, { key::kDefaultPopupsSetting, prefs::kManagedDefaultPopupsSetting, base::Value::Type::INTEGER }, @@ -346,9 +349,6 @@ prefs::kClickToCallEnabled, base::Value::Type::BOOLEAN }, #endif // BUILDFLAG(ENABLE_CLICK_TO_CALL) - { key::kComponentUpdatesEnabled, - prefs::kComponentUpdatesEnabled, - base::Value::Type::BOOLEAN }, { key::kDNSInterceptionChecksEnabled, prefs::kDNSInterceptionChecksEnabled, base::Value::Type::BOOLEAN }, @@ -1770,6 +1770,7 @@ handlers->AddHandler( std::make_unique<ContextualSearchPolicyHandlerAndroid>()); #else + handlers->AddHandler(std::make_unique<BrowsingHistoryPolicyHandler>()); handlers->AddHandler(std::make_unique<BrowsingDataLifetimePolicyHandler>( key::kClearBrowsingDataOnExitList, browsing_data::prefs::kClearBrowsingDataOnExitList, chrome_schema)); @@ -1958,9 +1959,7 @@ SimpleSchemaValidatingPolicyHandler::MANDATORY_ALLOWED)); handlers->AddHandler( std::make_unique<WebUsbAllowDevicesForUrlsPolicyHandler>(chrome_schema)); - handlers->AddHandler(std::make_unique<FileSelectionDialogsPolicyHandler>()); handlers->AddHandler(std::make_unique<JavascriptPolicyHandler>()); - handlers->AddHandler(std::make_unique<BrowsingHistoryPolicyHandler>()); handlers->AddHandler( std::make_unique<ExplicitlyAllowedNetworkPortsPolicyHandler>()); @@ -2300,6 +2299,7 @@ extensions::pref_names::kNativeMessagingBlocklist, true)); handlers->AddHandler( std::make_unique<AutoLaunchProtocolsPolicyHandler>(chrome_schema)); + handlers->AddHandler(std::make_unique<FileSelectionDialogsPolicyHandler>()); #endif // BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID) #if !BUILDFLAG(IS_CHROMEOS_ASH) && !BUILDFLAG(IS_ANDROID) handlers->AddHandler(std::make_unique<SimpleSchemaValidatingPolicyHandler>(
diff --git a/chrome/browser/policy/policy_prefs_browsertest.cc b/chrome/browser/policy/policy_prefs_browsertest.cc index 4ee2aac0..b6dd759 100644 --- a/chrome/browser/policy/policy_prefs_browsertest.cc +++ b/chrome/browser/policy/policy_prefs_browsertest.cc
@@ -136,8 +136,7 @@ // failure/flakiness. // IMPORTANT: Please add hendrich@chromium.org on any related bugs when // disabling this test. -// TODO(crbug.com/1341434): Re-enable this test -IN_PROC_BROWSER_TEST_P(ChunkedPolicyPrefsTest, DISABLED_PolicyToPrefsMapping) { +IN_PROC_BROWSER_TEST_P(ChunkedPolicyPrefsTest, PolicyToPrefsMapping) { #if !BUILDFLAG(IS_CHROMEOS_ASH) policy::FakeBrowserDMTokenStorage storage; policy::BrowserDMTokenStorage::SetForTesting(&storage);
diff --git a/chrome/browser/policy/serial_allow_usb_devices_for_urls_policy_handler_unittest.cc b/chrome/browser/policy/serial_allow_usb_devices_for_urls_policy_handler_unittest.cc index a12a8504..59c581b 100644 --- a/chrome/browser/policy/serial_allow_usb_devices_for_urls_policy_handler_unittest.cc +++ b/chrome/browser/policy/serial_allow_usb_devices_for_urls_policy_handler_unittest.cc
@@ -218,9 +218,8 @@ EXPECT_EQ(1ul, errors.size()); constexpr char16_t kExpected[] = - u"Schema validation error at \"items[0].devices\": The value type " - u"doesn't " - u"match the schema type."; + u"Schema validation error at \"items[0].devices\": Policy type mismatch: " + u"expected: \"list\", actual: \"integer\"."; EXPECT_EQ(kExpected, errors.GetErrors(key::kSerialAllowUsbDevicesForUrls)); // Now try to apply the policy, it should have no effect. @@ -261,8 +260,8 @@ EXPECT_EQ(1ul, errors.size()); constexpr char16_t kExpected[] = - u"Schema validation error at \"items[0].urls\": The value type doesn't " - u"match the schema type."; + u"Schema validation error at \"items[0].urls\": Policy type mismatch: " + u"expected: \"list\", actual: \"integer\"."; EXPECT_EQ(kExpected, errors.GetErrors(key::kSerialAllowUsbDevicesForUrls)); // Now try to apply the policy, it should have no effect. @@ -298,7 +297,7 @@ constexpr char16_t kExpected[] = u"Schema validation error at \"items[0].devices.items[0].vendor_id\": " - u"The value type doesn't match the schema type."; + u"Policy type mismatch: expected: \"integer\", actual: \"string\"."; EXPECT_EQ(kExpected, errors.GetErrors(key::kSerialAllowUsbDevicesForUrls)); // Now try to apply the policy, it should have no effect. @@ -412,7 +411,7 @@ constexpr char16_t kExpected[] = u"Schema validation error at \"items[0].devices.items[0].product_id\": " - u"The value type doesn't match the schema type."; + u"Policy type mismatch: expected: \"integer\", actual: \"string\"."; EXPECT_EQ(kExpected, errors.GetErrors(key::kSerialAllowUsbDevicesForUrls)); // Now try to apply the policy, it should have no effect.
diff --git a/chrome/browser/prefs/browser_prefs.cc b/chrome/browser/prefs/browser_prefs.cc index 346d063..37969bd 100644 --- a/chrome/browser/prefs/browser_prefs.cc +++ b/chrome/browser/prefs/browser_prefs.cc
@@ -47,7 +47,6 @@ #include "chrome/browser/notifications/notifier_state_tracker.h" #include "chrome/browser/notifications/platform_notification_service_impl.h" #include "chrome/browser/permissions/quiet_notification_permission_ui_state.h" -#include "chrome/browser/policy/developer_tools_policy_handler.h" #include "chrome/browser/prefetch/prefetch_prefs.h" #include "chrome/browser/prefetch/prefetch_proxy/prefetch_proxy_origin_decider.h" #include "chrome/browser/prefetch/search_prefetch/search_prefetch_service.h" @@ -259,6 +258,7 @@ #include "chrome/browser/new_tab_page/modules/safe_browsing/safe_browsing_handler.h" #include "chrome/browser/new_tab_page/modules/task_module/task_module_service.h" #include "chrome/browser/new_tab_page/promos/promo_service.h" +#include "chrome/browser/policy/developer_tools_policy_handler.h" #include "chrome/browser/search/background/ntp_custom_background_service.h" #include "chrome/browser/serial/serial_policy_allowed_ports.h" #include "chrome/browser/signin/signin_promo.h" @@ -1310,7 +1310,6 @@ permissions::PermissionActionsHistory::RegisterProfilePrefs(registry); PermissionBubbleMediaAccessHandler::RegisterProfilePrefs(registry); PlatformNotificationServiceImpl::RegisterProfilePrefs(registry); - policy::DeveloperToolsPolicyHandler::RegisterProfilePrefs(registry); policy::URLBlocklistManager::RegisterProfilePrefs(registry); PrefProxyConfigTrackerImpl::RegisterProfilePrefs(registry); prefetch::RegisterPredictionOptionsProfilePrefs(registry); @@ -1442,6 +1441,7 @@ ntp_tiles::CustomLinksManagerImpl::RegisterProfilePrefs(registry); PhotosService::RegisterProfilePrefs(registry); PinnedTabCodec::RegisterProfilePrefs(registry); + policy::DeveloperToolsPolicyHandler::RegisterProfilePrefs(registry); PromoService::RegisterProfilePrefs(registry); RegisterReadAnythingProfilePrefs(registry); settings::SettingsUI::RegisterProfilePrefs(registry);
diff --git a/chrome/browser/profile_resetter/brandcode_config_fetcher.cc b/chrome/browser/profile_resetter/brandcode_config_fetcher.cc index 3aa6ea2..3b41d8b 100644 --- a/chrome/browser/profile_resetter/brandcode_config_fetcher.cc +++ b/chrome/browser/profile_resetter/brandcode_config_fetcher.cc
@@ -127,10 +127,10 @@ // failure. The difference is whether |default_settings_| is populated. base::ScopedClosureRunner scoped_closure(std::move(fetch_callback_)); - if (!value_or_error.value) + if (!value_or_error.has_value()) return; - const base::Value* node = &value_or_error.value.value(); + const base::Value* node = &*value_or_error; if (!data_decoder::IsXmlElementNamed(*node, "response")) return;
diff --git a/chrome/browser/profiles/profile_manager_browsertest.cc b/chrome/browser/profiles/profile_manager_browsertest.cc index 6043fb0..b127f0ee 100644 --- a/chrome/browser/profiles/profile_manager_browsertest.cc +++ b/chrome/browser/profiles/profile_manager_browsertest.cc
@@ -58,6 +58,7 @@ #include "chrome/browser/ash/profiles/profile_helper.h" #include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_paths.h" +#include "chromeos/ash/components/browser_context_helper/browser_context_helper.h" #include "testing/gtest/include/gtest/gtest.h" #endif @@ -526,8 +527,9 @@ class ProfileManagerCrOSBrowserTest : public ProfileManagerBrowserTest { protected: void SetUpCommandLine(base::CommandLine* command_line) override { - // Use a user hash other than the default chrome::kTestUserProfileDir - // so that the prefix case is tested. + // Use a user hash other than the default + // ash::BrowserContextHelper::kTestUserBrowserContextDirName so that + // the prefix case is tested. command_line->AppendSwitchASCII(ash::switches::kLoginProfile, "test-user-hash"); } @@ -541,8 +543,9 @@ base::FilePath profile_path; base::PathService::Get(chrome::DIR_USER_DATA, &profile_path); - profile_path = profile_path.AppendASCII( - std::string(chrome::kProfileDirPrefix) + "test-user-hash"); + profile_path = profile_path.Append( + ash::BrowserContextHelper::GetUserBrowserContextDirName( + "test-user-hash")); EXPECT_EQ(profile_path.value(), last_used_profile->GetPath().value()); }
diff --git a/chrome/browser/resources/BUILD.gn b/chrome/browser/resources/BUILD.gn index 68e0be9..75bfb210 100644 --- a/chrome/browser/resources/BUILD.gn +++ b/chrome/browser/resources/BUILD.gn
@@ -125,7 +125,6 @@ "gaia_auth_host:closure_compile", "image_editor:closure_compile", "inline_login:closure_compile", - "omnibox:closure_compile", ] } if (is_chromeos_ash) {
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn b/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn index 16f2ef1..9dd0cb0 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/BUILD.gn
@@ -22,7 +22,6 @@ "../common/automation_predicate.js", "../common/automation_util.js", "../common/constants.js", - "../common/cursors/cursor.js", "../common/cursors/recovery_strategy.js", "../common/key_code.js", "../common/string_util.js", @@ -59,6 +58,7 @@ # ES6 modules. chromevox_es6_modules = [ + "../common/cursors/cursor.js", "../common/cursors/range.js", "../common/event_generator.js", "../common/instance_checker.js",
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/auto_scroll_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/auto_scroll_handler.js index 484b972..82ebe7c 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/auto_scroll_handler.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/auto_scroll_handler.js
@@ -7,8 +7,10 @@ */ import {ChromeVoxState} from '/chromevox/background/chromevox_state.js'; import {CommandHandlerInterface} from '/chromevox/background/command_handler_interface.js'; +import {CursorUnit} from '/common/cursors/cursor.js'; import {CursorRange} from '/common/cursors/range.js'; + // setTimeout and its clean-up are referencing each other. So, we need to set // "ignoreReadBeforeAssign" in this file. ESLint doesn't support per-line rule // option modification. @@ -53,7 +55,7 @@ * before scrolling. * @param {constants.Dir} dir The direction to navigate. * @param {?AutomationPredicate.Unary} pred The predicate to match. - * @param {?cursors.Unit} unit The unit to navigate by. + * @param {?CursorUnit} unit The unit to navigate by. * @param {?Object} speechProps The optional speech properties given to * |navigateToRange| to provide feedback of the current command. * @param {AutomationPredicate.Unary} rootPred The predicate that expresses @@ -82,7 +84,7 @@ // At the beginning or the end of the document, there is a case where the // range stays there. It's worth trying scrolling the containing scrollable. if (!scrollable && target.equals(rangeBeforeScroll) && - (unit === cursors.Unit.WORD || unit === cursors.Unit.CHARACTER)) { + (unit === CursorUnit.WORD || unit === CursorUnit.CHARACTER)) { scrollable = this.tryFindingContainingScrollableIfAtEdge_(target, dir, scrollable); } @@ -150,7 +152,7 @@ * before scrolling. * @param {constants.Dir} dir The direction to navigate. * @param {?AutomationPredicate.Unary} pred The predicate to match. - * @param {?cursors.Unit} unit The unit to navigate by. + * @param {?CursorUnit} unit The unit to navigate by. * @param {?Object} speechProps The optional speech properties given to * |navigateToRange| to provide feedback of the current command. * @param {AutomationPredicate.Unary} rootPred The predicate that expresses @@ -273,7 +275,7 @@ * range in the scrollable. * * @param {?AutomationPredicate.Unary} pred The predicate to match. - * @param {?cursors.Unit} unit The unit to navigate by. + * @param {?CursorUnit} unit The unit to navigate by. * @param {constants.Dir} dir The direction to navigate. * @param {AutomationPredicate.Unary} rootPred The predicate that expresses * the current navigation root. @@ -285,7 +287,7 @@ let nextRange = null; if (!pred && unit) { nextRange = CursorRange.fromNode(scrollable).sync(unit, dir); - if (unit === cursors.Unit.NODE) { + if (unit === CursorUnit.NODE) { nextRange = CommandHandlerInterface.instance.skipLabelOrDescriptionFor( nextRange, dir); }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js index d761aedb..9d551cd 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/background_test.js
@@ -54,6 +54,7 @@ '/chromevox/background/page_load_sound_handler.js'); await importModule( 'PointerHandler', '/chromevox/background/pointer_handler.js'); + await importModule('Cursor', '/common/cursors/cursor.js'); this.forceContextualLastOutput(); } @@ -1360,8 +1361,8 @@ function outputLinkRange(start, end) { return function() { new Output() - .withSpeech(new CursorRange( - new cursors.Cursor(link, start), new cursors.Cursor(link, end))) + .withSpeech( + new CursorRange(new Cursor(link, start), new Cursor(link, end))) .go(); }; }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js index 6754bc87..f450bfd 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/command_handler.js
@@ -27,6 +27,7 @@ import {GestureGranularity} from '/chromevox/common/gesture_command_data.js'; import {ChromeVoxKbHandler} from '/chromevox/common/keyboard_handler.js'; import {PanelCommand, PanelCommandType} from '/chromevox/common/panel_command.js'; +import {Cursor, CursorUnit} from '/common/cursors/cursor.js'; import {CursorRange} from '/common/cursors/range.js'; import {EventGenerator} from '/common/event_generator.js'; @@ -417,15 +418,15 @@ case 'nextCharacter': didNavigate = true; speechProps['phoneticCharacters'] = true; - unit = cursors.Unit.CHARACTER; - current = current.move(cursors.Unit.CHARACTER, Dir.FORWARD); + unit = CursorUnit.CHARACTER; + current = current.move(CursorUnit.CHARACTER, Dir.FORWARD); break; case 'previousCharacter': dir = Dir.BACKWARD; didNavigate = true; speechProps['phoneticCharacters'] = true; - unit = cursors.Unit.CHARACTER; - current = current.move(cursors.Unit.CHARACTER, dir); + unit = CursorUnit.CHARACTER; + current = current.move(CursorUnit.CHARACTER, dir); break; case 'nativeNextCharacter': case 'nativePreviousCharacter': @@ -439,14 +440,14 @@ return true; case 'nextWord': didNavigate = true; - unit = cursors.Unit.WORD; - current = current.move(cursors.Unit.WORD, Dir.FORWARD); + unit = CursorUnit.WORD; + current = current.move(CursorUnit.WORD, Dir.FORWARD); break; case 'previousWord': dir = Dir.BACKWARD; didNavigate = true; - unit = cursors.Unit.WORD; - current = current.move(cursors.Unit.WORD, dir); + unit = CursorUnit.WORD; + current = current.move(CursorUnit.WORD, dir); break; case 'nativeNextWord': case 'nativePreviousWord': @@ -463,15 +464,15 @@ case 'forward': case 'nextLine': didNavigate = true; - unit = cursors.Unit.LINE; - current = current.move(cursors.Unit.LINE, Dir.FORWARD); + unit = CursorUnit.LINE; + current = current.move(CursorUnit.LINE, Dir.FORWARD); break; case 'backward': case 'previousLine': dir = Dir.BACKWARD; didNavigate = true; - unit = cursors.Unit.LINE; - current = current.move(cursors.Unit.LINE, dir); + unit = CursorUnit.LINE; + current = current.move(CursorUnit.LINE, dir); break; case 'nextButton': dir = Dir.FORWARD; @@ -647,8 +648,8 @@ skipSettingSelection = true; didNavigate = true; unit = (EventSourceState.get() === EventSourceType.TOUCH_GESTURE) ? - cursors.Unit.GESTURE_NODE : - cursors.Unit.NODE; + CursorUnit.GESTURE_NODE : + CursorUnit.NODE; current = current.move(unit, dir); current = this.skipLabelOrDescriptionFor(current, dir); break; @@ -780,7 +781,7 @@ const prevRange = ChromeVoxState.instance.currentRange; const newRange = ChromeVoxState.instance.currentRange.move( - cursors.Unit.NODE, Dir.FORWARD); + CursorUnit.NODE, Dir.FORWARD); // Stop if we've wrapped back to the document. const maybeDoc = newRange.start.node; @@ -913,10 +914,9 @@ const root = ChromeVoxState.instance.currentRange.start.node.root; if (root && root.selectionStartObject && root.selectionEndObject) { const sel = new CursorRange( - new cursors.Cursor( + new Cursor( root.selectionStartObject, root.selectionStartOffset), - new cursors.Cursor( - root.selectionEndObject, root.selectionEndOffset)); + new Cursor(root.selectionEndObject, root.selectionEndOffset)); const o = new Output() .format('@end_selection') @@ -1495,7 +1495,7 @@ ancestor = ancestor.parent; } if (ancestor) { - current = current.move(cursors.Unit.NODE, dir); + current = current.move(CursorUnit.NODE, dir); } else { break; }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/desktop_automation_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/desktop_automation_handler.js index b5bed5f..b815276f 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/desktop_automation_handler.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/desktop_automation_handler.js
@@ -15,6 +15,7 @@ import {Output} from '/chromevox/background/output/output.js'; import {ChromeVoxEvent, CustomAutomationEvent} from '/chromevox/common/custom_automation_event.js'; import {EventSourceType} from '/chromevox/common/event_source_type.js'; +import {WrappingCursor} from '/common/cursors/cursor.js'; import {CursorRange} from '/common/cursors/range.js'; const ActionType = chrome.automation.ActionType; @@ -512,9 +513,9 @@ // Sync to the selection's deep equivalent especially in editables, where // selection is often on the root text field with a child offset. const selectedRange = new CursorRange( - new cursors.WrappingCursor(selectionStartObject, selectionStartOffset) + new WrappingCursor(selectionStartObject, selectionStartOffset) .deepEquivalent, - new cursors.WrappingCursor(selectionEndObject, selectionEndOffset) + new WrappingCursor(selectionEndObject, selectionEndOffset) .deepEquivalent); // Sync ChromeVox range with selection.
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editable_line.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editable_line.js index d0bc12f..cb55681 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editable_line.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editable_line.js
@@ -9,6 +9,7 @@ * of a line get saved. */ import {Output} from '/chromevox/background/output/output.js'; +import {Cursor, CURSOR_NODE_INDEX, CursorMovement, CursorUnit} from '/common/cursors/cursor.js'; import {CursorRange} from '/common/cursors/range.js'; const AutomationEvent = chrome.automation.AutomationEvent; @@ -18,8 +19,8 @@ const FormType = LibLouis.FormType; const RoleType = chrome.automation.RoleType; const StateType = chrome.automation.StateType; -const Movement = cursors.Movement; -const Unit = cursors.Unit; +const Movement = CursorMovement; +const Unit = CursorUnit; export class EditableLine { /** @@ -32,25 +33,25 @@ * automatically truncated up to either the line start or end. */ constructor(startNode, startIndex, endNode, endIndex, opt_baseLineOnStart) { - /** @private {!cursors.Cursor} */ - this.start_ = new cursors.Cursor(startNode, startIndex); + /** @private {!Cursor} */ + this.start_ = new Cursor(startNode, startIndex); this.start_ = this.start_.deepEquivalent || this.start_; - /** @private {!cursors.Cursor} */ - this.end_ = new cursors.Cursor(endNode, endIndex); + /** @private {!Cursor} */ + this.end_ = new Cursor(endNode, endIndex); this.end_ = this.end_.deepEquivalent || this.end_; /** @private {AutomationNode|undefined} */ this.endContainer_; // Update |startIndex| and |endIndex| if the calls above to - // cursors.Cursor.deepEquivalent results in cursors to different container + // Cursor.deepEquivalent results in cursors to different container // nodes. The cursors can point directly to inline text boxes, in which case // we should not adjust the container start or end index. if (!AutomationPredicate.text(startNode) || (this.start_.node !== startNode && this.start_.node.parent !== startNode)) { startIndex = - (this.start_.index === cursors.NODE_INDEX && this.start_.node.name) ? + (this.start_.index === CURSOR_NODE_INDEX && this.start_.node.name) ? this.start_.node.name.length : this.start_.index; } @@ -58,7 +59,7 @@ if (!AutomationPredicate.text(endNode) || (this.end_.node !== endNode && this.end_.node.parent !== endNode)) { endIndex = - (this.end_.index === cursors.NODE_INDEX && this.end_.node.name) ? + (this.end_.index === CURSOR_NODE_INDEX && this.end_.node.name) ? this.end_.node.name.length : this.end_.index; } @@ -377,7 +378,7 @@ // (e.g. in a multi-line selection). try { return this.value_.getSpanStart(this.start_) + - (this.start_.index === cursors.NODE_INDEX ? 0 : this.start_.index); + (this.start_.index === CURSOR_NODE_INDEX ? 0 : this.start_.index); } catch (e) { // When that happens, fall back to the start of this line. return 0; @@ -391,7 +392,7 @@ get endOffset() { try { return this.value_.getSpanStart(this.end_) + - (this.end_.index === cursors.NODE_INDEX ? 0 : this.end_.index); + (this.end_.index === CURSOR_NODE_INDEX ? 0 : this.end_.index); } catch (e) { return this.value_.length; } @@ -462,12 +463,12 @@ return this.value_; } - /** @return {!cursors.Cursor} */ + /** @return {!Cursor} */ get start() { return this.start_; } - /** @return {!cursors.Cursor} */ + /** @return {!Cursor} */ get end() { return this.end_; } @@ -568,9 +569,9 @@ return false; } - const start = new cursors.Cursor( + const start = new Cursor( this.lineStartContainer_, this.localLineStartContainerOffset_); - const end = new cursors.Cursor( + const end = new Cursor( this.lineEndContainer_, this.localLineEndContainerOffset_ - 1); const localStart = start.deepEquivalent || start; const localEnd = end.deepEquivalent || end; @@ -688,7 +689,7 @@ // When |start| and |end| are equal, that means we've reached // the end of the document. This is a node boundary as well. start.equals(end)) { - end = new cursors.Cursor(start.node, start.index + 1); + end = new Cursor(start.node, start.index + 1); } return new CursorRange(start, end); }
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing.js index deadfea..615cc37 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/editing.js
@@ -16,20 +16,20 @@ import {Output} from '/chromevox/background/output/output.js'; import {AbstractTts} from '/chromevox/common/abstract_tts.js'; import {ChromeVoxEvent} from '/chromevox/common/custom_automation_event.js'; +import {Cursor, CursorMovement, CursorUnit} from '/common/cursors/cursor.js'; import {CursorRange} from '/common/cursors/range.js'; const AutomationEvent = chrome.automation.AutomationEvent; const AutomationIntent = chrome.automation.AutomationIntent; const AutomationNode = chrome.automation.AutomationNode; -const Cursor = cursors.Cursor; const Dir = constants.Dir; const EventType = chrome.automation.EventType; const FormType = LibLouis.FormType; const Range = CursorRange; const RoleType = chrome.automation.RoleType; const StateType = chrome.automation.StateType; -const Movement = cursors.Movement; -const Unit = cursors.Unit; +const Movement = CursorMovement; +const Unit = CursorUnit; /** * A handler for automation events in a focused text field or editable root
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/intent_handler.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/intent_handler.js index cd0dff7f..f3a9404 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/intent_handler.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/intent_handler.js
@@ -12,13 +12,10 @@ import {CursorRange} from '/common/cursors/range.js'; const AutomationIntent = chrome.automation.AutomationIntent; -const Cursor = cursors.Cursor; const Dir = constants.Dir; const IntentCommandType = chrome.automation.IntentCommandType; const IntentTextBoundaryType = chrome.automation.IntentTextBoundaryType; -const Movement = cursors.Movement; const RoleType = chrome.automation.RoleType; -const Unit = cursors.Unit; /** * A stateless class that turns intents into speech.
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/intent_handler_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/intent_handler_test.js index 5f115c4f..2bd9de0 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/intent_handler_test.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/editing/intent_handler_test.js
@@ -23,8 +23,6 @@ window.Dir = constants.Dir; window.IntentTextBoundaryType = chrome.automation.IntentTextBoundaryType; - window.Movement = cursors.Movement; - window.Unit = cursors.Unit; } };
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/loader.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/loader.js index bc3e7adc..e5438882 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/loader.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/loader.js
@@ -10,7 +10,9 @@ // below block). These requires represent a dependency graph sourced from // loader.js via a script node in our top level html. Once done, that script can // itself be type="module". + goog.require('AbstractEarcons'); +goog.require('AncestryRecoveryStrategy'); goog.require('AutomationPredicate'); goog.require('AutomationTreeWalker'); goog.require('AutomationUtil'); @@ -40,6 +42,7 @@ goog.require('PanelNodeMenuData'); goog.require('PanelTabMenuItemData'); goog.require('QueueMode'); +goog.require('RecoveryStrategy'); goog.require('Spannable'); goog.require('SpeechLog'); goog.require('StringUtil'); @@ -50,12 +53,9 @@ goog.require('TtsInterface'); goog.require('constants'); -goog.require('cursors.Cursor'); -goog.require('cursors.Unit'); goog.require('goog.i18n.MessageFormat'); goog.require('ALL_NODE_MENU_DATA'); - // ChromeVox ES6 module(s). // // During the transition to ES6 modules, this top level module will import all
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js index d8808b97..13b16f1 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output.js
@@ -15,6 +15,7 @@ import {PhoneticData} from '/chromevox/background/phonetic_data.js'; import {EventSourceType} from '/chromevox/common/event_source_type.js'; import {LocaleOutputHelper} from '/chromevox/common/locale_output_helper.js'; +import {Cursor, CURSOR_NODE_INDEX} from '/common/cursors/cursor.js'; import {CursorRange} from '/common/cursors/range.js'; const AriaCurrentState = chrome.automation.AriaCurrentState; @@ -259,8 +260,7 @@ end = end.lastChild; } prevRange = CursorRange.fromNode(range.start.node.parent); - range = new CursorRange( - cursors.Cursor.fromNode(start), cursors.Cursor.fromNode(end)); + range = new CursorRange(Cursor.fromNode(start), Cursor.fromNode(end)); } this.render_( range, prevRange, type, this.brailleBuffer_, this.brailleRulesStr_); @@ -1155,8 +1155,8 @@ } const subrange = new CursorRange( - new cursors.Cursor(leftmost, cursors.NODE_INDEX), - new cursors.Cursor(rightmost, cursors.NODE_INDEX)); + new Cursor(leftmost, CURSOR_NODE_INDEX), + new Cursor(rightmost, CURSOR_NODE_INDEX)); let prev = null; if (node) { prev = CursorRange.fromNode(node); @@ -1737,16 +1737,15 @@ if (hasPartialNodeStart && node === range.start.node) { if (range.start.index !== range.start.node.name.length) { const partialRange = new CursorRange( - new cursors.Cursor(node, range.start.index), - new cursors.Cursor( + new Cursor(node, range.start.index), + new Cursor( node, node.name.length, {preferNodeStartEquivalent: true})); this.subNode_(partialRange, prevRange, type, rangeBuff, ruleStr); } } else if (hasPartialNodeEnd && node === range.end.node) { if (range.end.index !== 0) { const partialRange = new CursorRange( - new cursors.Cursor(node, 0), - new cursors.Cursor(node, range.end.index)); + new Cursor(node, 0), new Cursor(node, range.end.index)); this.subNode_(partialRange, prevRange, type, rangeBuff, ruleStr); } } else {
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_test.js index b6d64d1..e9407b5a 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_test.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/output/output_test.js
@@ -104,6 +104,7 @@ await importModule( 'OutputRoleInfo', '/chromevox/background/output/output_role_info.js'); await importModule('CursorRange', '/common/cursors/range.js'); + await importModule('Cursor', '/common/cursors/cursor.js'); window.Dir = AutomationUtil.Dir; this.forceContextualLastOutput(); @@ -791,8 +792,7 @@ `); const start = root.firstChild.firstChild; const end = root.firstChild.lastChild; - const range = new CursorRange( - cursors.Cursor.fromNode(start), cursors.Cursor.fromNode(end)); + const range = new CursorRange(Cursor.fromNode(start), Cursor.fromNode(end)); const o = new Output().withBraille(range, null, 'navigate'); checkBrailleOutput( 'this is a test of emphasized text',
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/i_search.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/i_search.js index 03d18c8..83e0afb 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/i_search.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/i_search.js
@@ -5,15 +5,14 @@ /** * @fileoverview The logic behind incremental search. */ -import {Output} from '/chromevox/background/output/output.js'; import {ISearchHandler} from '/chromevox/background/panel/i_search_handler.js'; -import {CursorRange} from '/common/cursors/range.js'; +import {Cursor} from '/common/cursors/cursor.js'; const Dir = constants.Dir; /** Controls an incremental search. */ export class ISearch { - /** @param {!cursors.Cursor} cursor */ + /** @param {!Cursor} cursor */ constructor(cursor) { if (!cursor.node) { throw 'Incremental search started from invalid range.'; @@ -26,8 +25,8 @@ cursor.node, Dir.FORWARD, AutomationPredicate.leaf) || cursor.node; - /** @type {!cursors.Cursor} */ - this.cursor = cursors.Cursor.fromNode(leaf); + /** @type {!Cursor} */ + this.cursor = Cursor.fromNode(leaf); /** @private {number} */ this.callbackId_ = 0; @@ -63,7 +62,7 @@ } while (result && !AutomationPredicate.object(result)); if (result) { - this.cursor = cursors.Cursor.fromNode(result); + this.cursor = Cursor.fromNode(result); const start = result.name.toLocaleLowerCase().indexOf(searchStr); const end = start + searchStr.length; this.handler_.onSearchResultChanged(result, start, end);
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/i_search_test.js b/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/i_search_test.js index 73c5a003..ad36353 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/i_search_test.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/background/panel/i_search_test.js
@@ -20,6 +20,7 @@ async setUpDeferred() { await super.setUpDeferred(); await importModule('ISearch', '/chromevox/background/panel/i_search.js'); + await importModule('Cursor', '/common/cursors/cursor.js'); } get linksAndHeadingsDoc() { @@ -78,7 +79,7 @@ AX_TEST_F('ChromeVoxISearchTest', 'Simple', async function() { const rootNode = await this.runWithLoadedTree(this.linksAndHeadingsDoc); const handler = new FakeISearchHandler(this); - const search = new ISearch(new cursors.Cursor(rootNode, 0)); + const search = new ISearch(new Cursor(rootNode, 0)); search.handler = handler; // Simple forward search.
diff --git a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel_loader.js b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel_loader.js index 4fb14cf..0b1380e 100644 --- a/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel_loader.js +++ b/chrome/browser/resources/chromeos/accessibility/chromevox/panel/panel_loader.js
@@ -6,6 +6,8 @@ * @fileoverview Loads the panel script. */ +goog.require('AncestryRecoveryStrategy'); +goog.require('AutomationPredicate'); goog.require('AutomationTreeWalker'); goog.require('AutomationUtil'); goog.require('BackgroundBridge'); @@ -26,13 +28,13 @@ goog.require('PanelNodeMenuData'); goog.require('PanelNodeMenuItemData'); goog.require('QueueMode'); +goog.require('RecoveryStrategy'); goog.require('Spannable'); +goog.require('StringUtil'); goog.require('TextLog'); goog.require('TtsCategory'); goog.require('constants'); -goog.require('cursors.Cursor'); -goog.require('cursors.Unit'); goog.require('goog.i18n.MessageFormat'); goog.require('ALL_NODE_MENU_DATA');
diff --git a/chrome/browser/resources/chromeos/accessibility/common/cursors/cursor.js b/chrome/browser/resources/chromeos/accessibility/common/cursors/cursor.js index cc095be..81ca54a 100644 --- a/chrome/browser/resources/chromeos/accessibility/common/cursors/cursor.js +++ b/chrome/browser/resources/chromeos/accessibility/common/cursors/cursor.js
@@ -7,18 +7,6 @@ * the automation tree. */ -goog.provide('cursors.Cursor'); -goog.provide('cursors.Movement'); -goog.provide('cursors.Unit'); - -goog.require('AncestryRecoveryStrategy'); -goog.require('AutomationPredicate'); -goog.require('AutomationUtil'); -goog.require('RecoveryStrategy'); -goog.require('StringUtil'); -goog.require('constants'); - -goog.scope(function() { const AutomationNode = chrome.automation.AutomationNode; const Dir = constants.Dir; const RoleType = chrome.automation.RoleType; @@ -29,13 +17,13 @@ * The special index that represents a cursor pointing to a node without * pointing to any part of its accessible text. */ -cursors.NODE_INDEX = -1; +export const CURSOR_NODE_INDEX = -1; /** - * Represents units of cursors.Movement. + * Represents units of CursorMovement. * @enum {string} */ -cursors.Unit = { +export const CursorUnit = { /** A single character within accessible name or value. */ CHARACTER: 'character', @@ -62,7 +50,7 @@ * Represents the ways in which cursors can move given a cursor unit. * @enum {string} */ -cursors.Movement = { +export const CursorMovement = { /** Move to the beginning or end of the current unit. */ BOUND: 'bound', @@ -79,11 +67,11 @@ /** * Represents a position within the automation tree. */ -cursors.Cursor = class { +export class Cursor { /** * @param {!AutomationNode} node * @param {number} index A 0-based index into this cursor node's primary - * accessible name. An index of |cursors.NODE_INDEX| means the node as a + * accessible name. An index of |CURSOR_NODE_INDEX| means the node as a * whole is pointed to and covers the case where the accessible text is * empty. * @param {{wrapped: (boolean|undefined), @@ -122,10 +110,10 @@ /** * Convenience method to construct a Cursor from a node. * @param {!AutomationNode} node - * @return {!cursors.Cursor} + * @return {!Cursor} */ static fromNode(node) { - return new cursors.Cursor(node, cursors.NODE_INDEX); + return new Cursor(node, CURSOR_NODE_INDEX); } /** @@ -135,9 +123,9 @@ */ static getLeafPredForUnit(unit) { switch (unit) { - case cursors.Unit.TEXT: + case CursorUnit.TEXT: return AutomationPredicate.leaf; - case cursors.Unit.GESTURE_NODE: + case CursorUnit.GESTURE_NODE: return AutomationPredicate.gestureObject; default: return AutomationPredicate.object; @@ -147,7 +135,7 @@ /** * Returns true if |rhs| is equal to this cursor. * Use this for strict equality between cursors. - * @param {!cursors.Cursor} rhs + * @param {!Cursor} rhs * @return {boolean} */ equals(rhs) { @@ -163,7 +151,7 @@ * Use this for loose equality between cursors where specific * character-based indicies do not matter such as when processing * node-targeted events. - * @param {!cursors.Cursor} rhs + * @param {!Cursor} rhs * @return {boolean} */ contentEquals(rhs) { @@ -189,7 +177,7 @@ /** * Compares this cursor with |rhs|. - * @param {cursors.Cursor} rhs + * @param {Cursor} rhs * @return Dir.BACKWARD if |rhs| comes before this cursor in * document order. Forward otherwise. */ @@ -212,7 +200,7 @@ get node() { if (this.requiresRecovery()) { // If we need to recover, the index is no longer valid. - this.index_ = cursors.NODE_INDEX; + this.index_ = CURSOR_NODE_INDEX; } return this.recovery_.node; } @@ -235,12 +223,12 @@ /** * An index appropriate for making selections. If this cursor has a - * cursors.NODE_INDEX index, the selection index is a node offset e.g. the + * CURSOR_NODE_INDEX index, the selection index is a node offset e.g. the * index in parent. If not, the index is a character offset. * @return {number} */ get selectionIndex() { - return this.index_ === cursors.NODE_INDEX ? 0 : this.index_; + return this.index_ === CURSOR_NODE_INDEX ? 0 : this.index_; } /** @@ -254,10 +242,10 @@ /** * Makes a Cursor which has been moved from this cursor by the unit in the * given direction using the given movement type. - * @param {cursors.Unit} unit - * @param {cursors.Movement} movement + * @param {CursorUnit} unit + * @param {CursorMovement} movement * @param {Dir} dir - * @return {!cursors.Cursor} The moved cursor. + * @return {!Cursor} The moved cursor. */ move(unit, movement, dir) { const originalNode = this.node; @@ -269,13 +257,13 @@ let newIndex = this.index_; switch (unit) { - case cursors.Unit.CHARACTER: + case CursorUnit.CHARACTER: const text = this.getText(); switch (movement) { - case cursors.Movement.BOUND: - case cursors.Movement.DIRECTIONAL: - if (newIndex === cursors.NODE_INDEX) { + case CursorMovement.BOUND: + case CursorMovement.DIRECTIONAL: + if (newIndex === CURSOR_NODE_INDEX) { newIndex = 0; } @@ -296,8 +284,8 @@ } } break; - case cursors.Movement.SYNC: - if (newIndex === cursors.NODE_INDEX) { + case CursorMovement.SYNC: + if (newIndex === CURSOR_NODE_INDEX) { newIndex = dir === Dir.FORWARD ? 0 : StringUtil.previousCodePointOffset(text, text.length); @@ -313,7 +301,7 @@ break; } break; - case cursors.Unit.WORD: + case CursorUnit.WORD: // If we're not already on a node with word stops, find the next one. if (!AutomationPredicate.leafWithWordStop(newNode)) { newNode = @@ -328,13 +316,13 @@ (newNode.wordStarts && newNode.wordStarts.length) ? newNode.wordStarts[0] : 0; - if (newIndex < firstWordStart && movement !== cursors.Movement.SYNC) { - // Also catches cursors.NODE_INDEX case. + if (newIndex < firstWordStart && movement !== CursorMovement.SYNC) { + // Also catches CURSOR_NODE_INDEX case. newIndex = firstWordStart; } switch (movement) { - case cursors.Movement.BOUND: { + case CursorMovement.BOUND: { let wordStarts, wordEnds; if (newNode.role === RoleType.INLINE_TEXT_BOX) { wordStarts = newNode.wordStarts; @@ -355,13 +343,13 @@ newIndex = dir === Dir.FORWARD ? end : start; } } break; - case cursors.Movement.SYNC: - if (newIndex === cursors.NODE_INDEX) { + case CursorMovement.SYNC: + if (newIndex === CURSOR_NODE_INDEX) { newIndex = dir === Dir.FORWARD ? firstWordStart - 1 : this.getText().length; } // fallthrough - case cursors.Movement.DIRECTIONAL: { + case CursorMovement.DIRECTIONAL: { let wordStarts, wordEnds; let start; if (newNode.role === RoleType.INLINE_TEXT_BOX) { @@ -385,7 +373,7 @@ // Successfully found the next word stop within the same text // node. newIndex = start; - } else if (movement === cursors.Movement.DIRECTIONAL) { + } else if (movement === CursorMovement.DIRECTIONAL) { // Use adjacent word in adjacent next node in direction |dir|. if (dir === Dir.BACKWARD && newIndex > firstWordStart) { // The backward case is special at the beginning of nodes. @@ -412,24 +400,24 @@ } } break; - case cursors.Unit.TEXT: - case cursors.Unit.NODE: - case cursors.Unit.GESTURE_NODE: + case CursorUnit.TEXT: + case CursorUnit.NODE: + case CursorUnit.GESTURE_NODE: switch (movement) { - case cursors.Movement.BOUND: + case CursorMovement.BOUND: newIndex = dir === Dir.FORWARD ? this.getText().length - 1 : 0; break; - case cursors.Movement.DIRECTIONAL: - const pred = cursors.Cursor.getLeafPredForUnit(unit); + case CursorMovement.DIRECTIONAL: + const pred = Cursor.getLeafPredForUnit(unit); newNode = AutomationUtil.findNextNode(newNode, dir, pred) || originalNode; - newIndex = cursors.NODE_INDEX; + newIndex = CURSOR_NODE_INDEX; break; } break; - case cursors.Unit.LINE: + case CursorUnit.LINE: switch (movement) { - case cursors.Movement.BOUND: + case CursorMovement.BOUND: newNode = AutomationUtil.findNodeUntil( newNode, dir, AutomationPredicate.linebreak, true); newNode = newNode || originalNode; @@ -437,7 +425,7 @@ AutomationUtil.getText(newNode).length : 0; break; - case cursors.Movement.DIRECTIONAL: + case CursorMovement.DIRECTIONAL: newNode = AutomationUtil.findNodeUntil( newNode, dir, AutomationPredicate.linebreak); if (newNode) { @@ -451,12 +439,12 @@ } newNode = newNode || originalNode; newIndex = (newIndex !== undefined) ? newIndex : this.index_; - return new cursors.Cursor(newNode, newIndex); + return new Cursor(newNode, newIndex); } /** * Returns the deepest equivalent cursor. - * @return {!cursors.Cursor} + * @return {!Cursor} */ get deepEquivalent() { let newNode = this.node; @@ -538,7 +526,7 @@ if (cur > newIndex) { targetLine = line; if (!line.name) { - targetIndex = cursors.NODE_INDEX; + targetIndex = CURSOR_NODE_INDEX; } else { targetIndex = newIndex - (cur - lineLength); } @@ -549,8 +537,7 @@ // If we got here, that means the index is actually beyond the total // length of text. Just get the last line. targetLine = lines[lines.length - 1]; - targetIndex = - targetLine ? targetLine.name.length : cursors.NODE_INDEX; + targetIndex = targetLine ? targetLine.name.length : CURSOR_NODE_INDEX; } newNode = targetLine; newIndex = targetIndex; @@ -558,7 +545,7 @@ } } if (!isTextIndex) { - newIndex = cursors.NODE_INDEX; + newIndex = CURSOR_NODE_INDEX; } return new this.constructor(newNode, newIndex); @@ -608,18 +595,18 @@ get wrapped() { return this.wrapped_; } -}; +} /** - * A cursors.Cursor that wraps from beginning to end and vice versa when + * A Cursor that wraps from beginning to end and vice versa when * moved. */ -cursors.WrappingCursor = class extends cursors.Cursor { +export class WrappingCursor extends Cursor { /** * @param {!AutomationNode} node * @param {number} index A 0-based index into this cursor node's primary - * accessible name. An index of |cursors.NODE_INDEX| means the node as a + * accessible name. An index of |CURSOR_NODE_INDEX| means the node as a * whole is pointed to and covers the case where the accessible text is * empty. * @param {{wrapped: (boolean|undefined)}} args @@ -631,10 +618,10 @@ /** * Convenience method to construct a Cursor from a node. * @param {!AutomationNode} node - * @return {!cursors.WrappingCursor} + * @return {!WrappingCursor} */ static fromNode(node) { - return new cursors.WrappingCursor(node, cursors.NODE_INDEX); + return new WrappingCursor(node, CURSOR_NODE_INDEX); } /** @override */ @@ -646,14 +633,13 @@ // Regular movement. if (!AutomationPredicate.root(this.node) || dir === Dir.FORWARD || - movement === cursors.Movement.BOUND) { - result = cursors.Cursor.prototype.move.call(this, unit, movement, dir); + movement === CursorMovement.BOUND) { + result = Cursor.prototype.move.call(this, unit, movement, dir); } // Moving to the bounds of a unit never wraps. - if (movement === cursors.Movement.BOUND || - movement === cursors.Movement.SYNC) { - return new cursors.WrappingCursor(result.node, result.index); + if (movement === CursorMovement.BOUND || movement === CursorMovement.SYNC) { + return new WrappingCursor(result.node, result.index); } // There are two cases for wrapping: @@ -663,8 +649,8 @@ // For 1, simply place the new cursor on the document node. // For 2, place range on the root (if not already there). If at root, // try to descend to the first leaf-like object. - if (movement === cursors.Movement.DIRECTIONAL && result.equals(this)) { - const pred = cursors.Cursor.getLeafPredForUnit(unit); + if (movement === CursorMovement.DIRECTIONAL && result.equals(this)) { + const pred = Cursor.getLeafPredForUnit(unit); let endpoint = this.node; if (!endpoint) { return this; @@ -694,7 +680,7 @@ directedFocus, dir, AutomationPredicate.object) : AutomationUtil.findLastNode(directedFocus, pred)) || directedFocus; - return new cursors.WrappingCursor(directedFocus, cursors.NODE_INDEX); + return new WrappingCursor(directedFocus, CURSOR_NODE_INDEX); } // Always consider this cursor wrapped when moving forward. @@ -706,10 +692,8 @@ endpoint = AutomationUtil.findLastNode(endpoint, pred) || endpoint; } - return new cursors.WrappingCursor( - endpoint, cursors.NODE_INDEX, {wrapped}); + return new WrappingCursor(endpoint, CURSOR_NODE_INDEX, {wrapped}); } - return new cursors.WrappingCursor(result.node, result.index); + return new WrappingCursor(result.node, result.index); } -}; -}); // goog.scope +}
diff --git a/chrome/browser/resources/chromeos/accessibility/common/cursors/cursors_test.js b/chrome/browser/resources/chromeos/accessibility/common/cursors/cursors_test.js index 4bb5eab..d1811ffc 100644 --- a/chrome/browser/resources/chromeos/accessibility/common/cursors/cursors_test.js +++ b/chrome/browser/resources/chromeos/accessibility/common/cursors/cursors_test.js
@@ -15,7 +15,7 @@ super(true /* isCommonClass */); } - /** Test cursors.Cursor. @const {string} */ + /** Test Cursor. @const {string} */ get CURSOR() { return 'cursor'; } @@ -31,27 +31,31 @@ // Various aliases. window.BACKWARD = constants.Dir.BACKWARD; window.FORWARD = constants.Dir.FORWARD; - window.CHARACTER = cursors.Unit.CHARACTER; - window.WORD = cursors.Unit.WORD; - window.LINE = cursors.Unit.LINE; - window.NODE = cursors.Unit.NODE; - window.BOUND = cursors.Movement.BOUND; - window.DIRECTIONAL = cursors.Movement.DIRECTIONAL; - window.SYNC = cursors.Movement.SYNC; } /** @override */ async setUpDeferred() { await super.setUpDeferred(); await importModule('CursorRange', '/common/cursors/range.js'); + await importModule( + ['Cursor', 'CursorMovement', 'CursorUnit', 'WrappingCursor'], + '/common/cursors/cursor.js'); + // Various aliases + window.CHARACTER = CursorUnit.CHARACTER; + window.WORD = CursorUnit.WORD; + window.LINE = CursorUnit.LINE; + window.NODE = CursorUnit.NODE; + window.BOUND = CursorMovement.BOUND; + window.DIRECTIONAL = CursorMovement.DIRECTIONAL; + window.SYNC = CursorMovement.SYNC; } /** * Performs a series of operations on a cursor and asserts the result. - * @param {cursors.Cursor} cursor The starting cursor. + * @param {Cursor} cursor The starting cursor. * @param {!Array<Array< - * cursors.Unit| - * cursors.Movement| + * CursorUnit| + * CursorMovement| * constants.Dir| * {index: number, value: string}>>} moves An array of arrays. Each * inner array contains 4 items: unit, movement, direction, and assertions @@ -70,7 +74,7 @@ * Performs a series of operations on a range and asserts the result. * @param {CursorRange} range The starting range. * @param {!Array<Array< - * cursors.Unit| + * CursorUnit| * constants.Dir| * {index: number, value: string}>>} moves An array of arrays. Each * inner array contains 4 items: unit, direction, start and end assertions @@ -107,8 +111,8 @@ * Runs the specified moves on the |doc| and asserts expectations. * @param {function} doc * @param {!Array<Array< - * cursors.Unit| - * cursors.Movement| + * CursorUnit| + * CursorMovement| * constants.Dir| * {index: number, value: string}>>} moves An array of arrays. Each * inner array contains 4 items: see |cursorMoveAndAssert| and @@ -123,9 +127,9 @@ start = AutomationUtil.findNodePost(root, FORWARD, AutomationPredicate.leaf); - const cursor = new cursors.Cursor(start, 0); + const cursor = new Cursor(start, 0); if (!opt_testType || opt_testType === this.CURSOR) { - const cursor = new cursors.Cursor(start, 0); + const cursor = new Cursor(start, 0); this.cursorMoveAndAssert(cursor, moves); } else if (opt_testType === this.RANGE) { const range = new CursorRange(cursor, cursor); @@ -382,7 +386,7 @@ const root = await this.runWithLoadedTree(this.multiInlineDoc); const para = root.firstChild; assertEquals('paragraph', para.role); - let cursor = new cursors.Cursor(para.firstChild, 0); + let cursor = new Cursor(para.firstChild, 0); cursor = cursor.move(NODE, DIRECTIONAL, FORWARD); assertEquals('staticText', cursor.node.role); assertEquals('end', cursor.node.name); @@ -402,7 +406,7 @@ const root = await this.runWithLoadedTree(this.multiInlineDoc); const first = root; const last = root.lastChild.firstChild; - let cursor = new cursors.WrappingCursor(first, -1); + let cursor = new WrappingCursor(first, -1); // Wrap from first node to last node. cursor = cursor.move(NODE, DIRECTIONAL, BACKWARD); @@ -440,12 +444,11 @@ const p1 = root.find({role: RoleType.PARAGRAPH}); const p2 = p1.nextSibling; - const singleSel = new CursorRange( - new cursors.Cursor(link, 0), new cursors.Cursor(link, 1)); + const singleSel = + new CursorRange(new Cursor(link, 0), new Cursor(link, 1)); const multiSel = new CursorRange( - new cursors.Cursor(p1.firstChild, 2), - new cursors.Cursor(p2.firstChild, 4)); + new Cursor(p1.firstChild, 2), new Cursor(p2.firstChild, 4)); function verifySel() { if (root.selectionStartObject === link.firstChild) { @@ -495,12 +498,12 @@ assertEquals('test', testNode.name); const ofSelectionNode = root.lastChild.lastChild; - const cur = new cursors.Cursor(ofSelectionNode, 0); + const cur = new Cursor(ofSelectionNode, 0); assertEquals('of selection', cur.selectionNode.name); assertEquals(RoleType.STATIC_TEXT, cur.selectionNode.role); assertEquals(0, cur.selectionIndex); - const curIntoO = new cursors.Cursor(ofSelectionNode, 1); + const curIntoO = new Cursor(ofSelectionNode, 1); assertEquals('of selection', curIntoO.selectionNode.name); assertEquals(RoleType.STATIC_TEXT, curIntoO.selectionNode.role); assertEquals(1, curIntoO.selectionIndex); @@ -548,31 +551,31 @@ `); const textNode = root.find({role: RoleType.STATIC_TEXT}); - let text = new cursors.Cursor(textNode, 2); + let text = new Cursor(textNode, 2); deep = text.deepEquivalent; assertEquals('this ', deep.node.name); assertEquals(RoleType.INLINE_TEXT_BOX, deep.node.role); assertEquals(2, deep.index); - text = new cursors.Cursor(textNode, 5); + text = new Cursor(textNode, 5); deep = text.deepEquivalent; assertEquals('is ', deep.node.name); assertEquals(RoleType.INLINE_TEXT_BOX, deep.node.role); assertEquals(0, deep.index); - text = new cursors.Cursor(textNode, 7); + text = new Cursor(textNode, 7); deep = text.deepEquivalent; assertEquals('is ', deep.node.name); assertEquals(RoleType.INLINE_TEXT_BOX, deep.node.role); assertEquals(2, deep.index); - text = new cursors.Cursor(textNode, 8); + text = new Cursor(textNode, 8); deep = text.deepEquivalent; assertEquals('a ', deep.node.name); assertEquals(RoleType.INLINE_TEXT_BOX, deep.node.role); assertEquals(0, deep.index); - text = new cursors.Cursor(textNode, 11); + text = new Cursor(textNode, 11); deep = text.deepEquivalent; assertEquals('test', deep.node.name); assertEquals(RoleType.INLINE_TEXT_BOX, deep.node.role); @@ -580,14 +583,14 @@ // This is the only selection that can be placed at the length of the // node's text. This only happens at the end of a line. - text = new cursors.Cursor(textNode, 14); + text = new Cursor(textNode, 14); deep = text.deepEquivalent; assertEquals('test', deep.node.name); assertEquals(RoleType.INLINE_TEXT_BOX, deep.node.role); assertEquals(4, deep.index); // However, any offset larger is invalid. - text = new cursors.Cursor(textNode, 15); + text = new Cursor(textNode, 15); deep = text.deepEquivalent; assertTrue(text.equals(deep)); }); @@ -600,7 +603,7 @@ `); const paragraph = root.find({role: RoleType.PARAGRAPH}); assertEquals(1, paragraph.children.length); - const cursor = new cursors.Cursor(paragraph, 1); + const cursor = new Cursor(paragraph, 1); const deep = cursor.deepEquivalent; assertEquals(RoleType.STATIC_TEXT, deep.node.role); @@ -669,8 +672,8 @@ assertEquals('hello', hello.name); assertEquals('world', world.name); - const range = new CursorRange( - cursors.Cursor.fromNode(hello), cursors.Cursor.fromNode(world)); + const range = + new CursorRange(Cursor.fromNode(hello), Cursor.fromNode(world)); range.select(); // Wait for the selection to change.
diff --git a/chrome/browser/resources/chromeos/accessibility/common/cursors/range.js b/chrome/browser/resources/chromeos/accessibility/common/cursors/range.js index 97395b5..9241926 100644 --- a/chrome/browser/resources/chromeos/accessibility/common/cursors/range.js +++ b/chrome/browser/resources/chromeos/accessibility/common/cursors/range.js
@@ -7,6 +7,8 @@ * the automation tree. */ +import {Cursor, CURSOR_NODE_INDEX, CursorMovement, CursorUnit, WrappingCursor} from '/common/cursors/cursor.js'; + const AutomationNode = chrome.automation.AutomationNode; const RoleType = chrome.automation.RoleType; const StateType = chrome.automation.StateType; @@ -18,13 +20,13 @@ */ export class CursorRange { /** - * @param {!cursors.Cursor} start - * @param {!cursors.Cursor} end + * @param {!Cursor} start + * @param {!Cursor} end */ constructor(start, end) { - /** @type {!cursors.Cursor} @private */ + /** @type {!Cursor} @private */ this.start_ = start; - /** @type {!cursors.Cursor} @private */ + /** @type {!Cursor} @private */ this.end_ = end; } @@ -34,7 +36,7 @@ * @return {!CursorRange} */ static fromNode(node) { - const cursor = cursors.WrappingCursor.fromNode(node); + const cursor = WrappingCursor.fromNode(node); return new CursorRange(cursor, cursor); } @@ -114,7 +116,7 @@ * @param {constants.Dir} dir Which endpoint cursor to return; * constants.Dir.FORWARD for end, * constants.Dir.BACKWARD for start. - * @return {!cursors.Cursor} + * @return {!Cursor} */ getBound(dir) { return dir === constants.Dir.FORWARD ? this.end_ : this.start_; @@ -129,14 +131,14 @@ } /** - * @return {!cursors.Cursor} + * @return {!Cursor} */ get start() { return this.start_; } /** - * @return {!cursors.Cursor} + * @return {!Cursor} */ get end() { return this.end_; @@ -168,7 +170,7 @@ /** * Makes a Range which has been moved from this range by the given unit and * direction. - * @param {cursors.Unit} unit + * @param {CursorUnit} unit * @param {constants.Dir} dir * @return {CursorRange} */ @@ -180,23 +182,26 @@ let newEnd; switch (unit) { - case cursors.Unit.CHARACTER: - newStart = newStart.move(unit, cursors.Movement.DIRECTIONAL, dir); - newEnd = newStart.move(unit, cursors.Movement.DIRECTIONAL, constants.Dir.FORWARD); + case CursorUnit.CHARACTER: + newStart = newStart.move(unit, CursorMovement.DIRECTIONAL, dir); + newEnd = newStart.move( + unit, CursorMovement.DIRECTIONAL, constants.Dir.FORWARD); // Character crossed a node; collapses to the end of the node. if (newStart.node !== newEnd.node) { - newEnd = new cursors.Cursor(newStart.node, newStart.index + 1); + newEnd = new Cursor(newStart.node, newStart.index + 1); } break; - case cursors.Unit.WORD: - case cursors.Unit.LINE: - newStart = newStart.move(unit, cursors.Movement.DIRECTIONAL, dir); - newStart = newStart.move(unit, cursors.Movement.BOUND, constants.Dir.BACKWARD); - newEnd = newStart.move(unit, cursors.Movement.BOUND, constants.Dir.FORWARD); + case CursorUnit.WORD: + case CursorUnit.LINE: + newStart = newStart.move(unit, CursorMovement.DIRECTIONAL, dir); + newStart = + newStart.move(unit, CursorMovement.BOUND, constants.Dir.BACKWARD); + newEnd = + newStart.move(unit, CursorMovement.BOUND, constants.Dir.FORWARD); break; - case cursors.Unit.NODE: - case cursors.Unit.GESTURE_NODE: - newStart = newStart.move(unit, cursors.Movement.DIRECTIONAL, dir); + case CursorUnit.NODE: + case CursorUnit.GESTURE_NODE: + newStart = newStart.move(unit, CursorMovement.DIRECTIONAL, dir); newEnd = newStart; break; default: @@ -227,12 +232,12 @@ // We want to adjust to select the entire node for node offsets; // otherwise, use the plain character offset. const startIndex = start.selectionIndex; - let endIndex = end.index === cursors.NODE_INDEX ? end.selectionIndex + 1 : - end.selectionIndex; + let endIndex = end.index === CURSOR_NODE_INDEX ? end.selectionIndex + 1 : + end.selectionIndex; // If the range covers more than one node, ends on the node, and is over // text, then adjust the selection to cover the entire end node. - if (start.node !== end.node && end.index === cursors.NODE_INDEX && + if (start.node !== end.node && end.index === CURSOR_NODE_INDEX && AutomationPredicate.text(end.node)) { endIndex = end.getText().length; } @@ -259,14 +264,14 @@ * current range. If no matching range is found, then null is returned. * Note that there is a chance that new range's end spans beyond the current * end when the given unit is larger than the current range. - * @param {cursors.Unit} unit + * @param {CursorUnit} unit * @param {constants.Dir} dir * @return {CursorRange} */ sync(unit, dir) { switch (unit) { - case cursors.Unit.CHARACTER: - case cursors.Unit.WORD: + case CursorUnit.CHARACTER: + case CursorUnit.WORD: let startCursor = this.start; if (!AutomationPredicate.leafWithWordStop(startCursor.node)) { let startNode = startCursor.node; @@ -281,21 +286,21 @@ if (!startNode) { return null; } - startCursor = cursors.WrappingCursor.fromNode(startNode); + startCursor = WrappingCursor.fromNode(startNode); } - const start = startCursor.move(unit, cursors.Movement.SYNC, dir); + const start = startCursor.move(unit, CursorMovement.SYNC, dir); if (!start) { return null; } - let end = start.move(unit, cursors.Movement.BOUND, constants.Dir.FORWARD); + let end = start.move(unit, CursorMovement.BOUND, constants.Dir.FORWARD); if (start.node !== end.node || start.equals(end)) { // Character crossed a node or reached the end. // Collapses to the end of the node. - end = new cursors.WrappingCursor(start.node, start.getText().length); + end = new WrappingCursor(start.node, start.getText().length); } return new CursorRange(start, end); - case cursors.Unit.LINE: + case CursorUnit.LINE: let newNode; if (dir === constants.Dir.FORWARD) { newNode = AutomationUtil.findNodeUntil( @@ -308,10 +313,10 @@ return null; } return CursorRange.fromNode(newNode); - case cursors.Unit.TEXT: - case cursors.Unit.NODE: - case cursors.Unit.GESTURE_NODE: - const pred = cursors.Cursor.getLeafPredForUnit(unit); + case CursorUnit.TEXT: + case CursorUnit.NODE: + case CursorUnit.GESTURE_NODE: + const pred = Cursor.getLeafPredForUnit(unit); let node; if (dir === constants.Dir.FORWARD) { node = AutomationUtil.findNextNode(
diff --git a/chrome/browser/resources/omnibox/BUILD.gn b/chrome/browser/resources/omnibox/BUILD.gn index 01d7114..be26c269 100644 --- a/chrome/browser/resources/omnibox/BUILD.gn +++ b/chrome/browser/resources/omnibox/BUILD.gn
@@ -2,11 +2,59 @@ # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. -import("//third_party/closure_compiler/closure_args.gni") -import("//third_party/closure_compiler/compile_js.gni") import("//tools/grit/grit_rule.gni") +import("//tools/typescript/ts_library.gni") import("//ui/webui/resources/tools/generate_grd.gni") +# TODO(crbug.com/1323980): Migrate files listed below to TypeScript. +ts_files = [ + "omnibox_element.js", + "omnibox_input.js", + "omnibox.js", + "omnibox_output.js", +] + +copy("copy_mojo") { + deps = [ "//chrome/browser/ui/webui/omnibox:mojo_bindings_webui_js" ] + sources = [ "$root_gen_dir/mojom-webui/chrome/browser/ui/webui/omnibox/omnibox.mojom-webui.js" ] + outputs = [ "$target_gen_dir/{{source_file_part}}" ] +} + +copy("copy_src") { + sources = ts_files + outputs = [ "$target_gen_dir/{{source_file_part}}" ] +} + +ts_library("build_ts") { + root_dir = target_gen_dir + out_dir = "$target_gen_dir/tsc" + tsconfig_base = "tsconfig_base.json" + in_files = ts_files + [ "omnibox.mojom-webui.js" ] + deps = [ "//ui/webui/resources:library" ] + extra_deps = [ + ":copy_mojo", + ":copy_src", + ] +} + +generate_grd("build_grd") { + grd_prefix = "omnibox" + out_grd = "$target_gen_dir/resources.grd" + input_files = [ + "icon_tabs.svg", + "omnibox.css", + "omnibox.html", + "omnibox_input.css", + "omnibox_output_column_widths.css", + "output_results_group.css", + ] + input_files_base_dir = rebase_path(".", "//") + + manifest_files = + filter_include(get_target_outputs(":build_ts"), [ "*.manifest" ]) + deps = [ ":build_ts" ] +} + grit("resources") { enable_input_discovery_for_gn_analyze = false source = "$target_gen_dir/resources.grd" @@ -20,73 +68,3 @@ ] output_dir = "$root_gen_dir/chrome" } - -generate_grd("build_grd") { - grd_prefix = "omnibox" - out_grd = "$target_gen_dir/resources.grd" - input_files = [ - "icon_tabs.svg", - "omnibox.css", - "omnibox_element.js", - "omnibox.html", - "omnibox_input.css", - "omnibox_input.js", - "omnibox.js", - "omnibox_output_column_widths.css", - "omnibox_output.js", - "output_results_group.css", - ] - input_files_base_dir = rebase_path(".", "//") - grdp_files = [ "$target_gen_dir/mojo_resources.grdp" ] - deps = [ ":build_mojo_grdp" ] -} - -generate_grd("build_mojo_grdp") { - grd_prefix = "omnibox" - out_grd = "$target_gen_dir/mojo_resources.grdp" - deps = [ "//chrome/browser/ui/webui/omnibox:mojo_bindings_webui_js" ] - input_files = [ "omnibox.mojom-webui.js" ] - input_files_base_dir = - rebase_path("${root_gen_dir}/mojom-webui/chrome/browser/ui/webui/omnibox", - "$root_build_dir") - resource_path_rewrites = [ "omnibox.mojom-webui.js|chrome/browser/ui/webui/omnibox/omnibox.mojom-webui.js" ] -} - -js_type_check("closure_compile") { - closure_flags = default_closure_args + mojom_js_args + - [ "js_module_root=" + rebase_path(".", root_build_dir) ] - deps = [ - ":omnibox", - ":omnibox_element", - ":omnibox_input", - ":omnibox_output", - ] -} - -js_library("omnibox") { - deps = [ - ":omnibox_input", - ":omnibox_output", - "//chrome/browser/ui/webui/omnibox:mojo_bindings_webui_js", - "//ui/webui/resources/js:cr.m", - "//ui/webui/resources/js:load_time_data.m", - "//ui/webui/resources/js:util.m", - ] -} - -js_library("omnibox_element") { - deps = [ "//ui/webui/resources/js:assert.m" ] -} - -js_library("omnibox_input") { - deps = [ ":omnibox_element" ] -} - -js_library("omnibox_output") { - deps = [ - ":omnibox_element", - ":omnibox_input", - "//chrome/browser/ui/webui/omnibox:mojo_bindings_webui_js", - ] - externs_list = [ "$externs_path/pending.js" ] -}
diff --git a/chrome/browser/resources/omnibox/omnibox.js b/chrome/browser/resources/omnibox/omnibox.js index fa94652..9ce05e4 100644 --- a/chrome/browser/resources/omnibox/omnibox.js +++ b/chrome/browser/resources/omnibox/omnibox.js
@@ -3,12 +3,14 @@ // found in the LICENSE file. import './strings.m.js'; +import './omnibox_input.js'; +import './omnibox_output.js'; -import {OmniboxPageCallbackRouter, OmniboxPageHandler, OmniboxPageHandlerRemote, OmniboxResponse} from '/chrome/browser/ui/webui/omnibox/omnibox.mojom-webui.js'; import {sendWithPromise} from 'chrome://resources/js/cr.m.js'; import {loadTimeData} from 'chrome://resources/js/load_time_data.m.js'; import {$} from 'chrome://resources/js/util.m.js'; +import {OmniboxPageCallbackRouter, OmniboxPageHandler, OmniboxPageHandlerRemote, OmniboxResponse} from './omnibox.mojom-webui.js'; import {DisplayInputs, OmniboxInput, QueryInputs} from './omnibox_input.js'; import {OmniboxOutput} from './omnibox_output.js';
diff --git a/chrome/browser/resources/omnibox/omnibox_output.js b/chrome/browser/resources/omnibox/omnibox_output.js index 988c1ee..fd9a9460 100644 --- a/chrome/browser/resources/omnibox/omnibox_output.js +++ b/chrome/browser/resources/omnibox/omnibox_output.js
@@ -2,8 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import {ACMatchClassification, AutocompleteMatch, OmniboxResponse} from '/chrome/browser/ui/webui/omnibox/omnibox.mojom-webui.js'; - +import {ACMatchClassification, AutocompleteMatch, OmniboxResponse} from './omnibox.mojom-webui.js'; import {OmniboxElement} from './omnibox_element.js'; import {DisplayInputs, OmniboxInput} from './omnibox_input.js';
diff --git a/chrome/browser/resources/omnibox/tsconfig_base.json b/chrome/browser/resources/omnibox/tsconfig_base.json new file mode 100644 index 0000000..99a81eca --- /dev/null +++ b/chrome/browser/resources/omnibox/tsconfig_base.json
@@ -0,0 +1,6 @@ +{ + "extends": "../../../../tools/typescript/tsconfig_base.json", + "compilerOptions": { + "allowJs": true + } +}
diff --git a/chrome/browser/resources/settings/chromeos/BUILD.gn b/chrome/browser/resources/settings/chromeos/BUILD.gn index be698c0..bf39c21 100644 --- a/chrome/browser/resources/settings/chromeos/BUILD.gn +++ b/chrome/browser/resources/settings/chromeos/BUILD.gn
@@ -127,6 +127,7 @@ # Preprocess all WebUI mojom files, which are bundled in optimized builds. preprocess_if_expr("preprocess_mojo_webui") { deps = [ + ":generate_ash_search_mojo_webui", ":generate_personalization_search_mojo_webui", ":generate_settings_mojo_webui", ] @@ -136,6 +137,7 @@ in_files = [ "mojom-webui/routes.mojom-webui.js", "mojom-webui/setting.mojom-webui.js", + "mojom-webui/search/user_action_recorder.mojom-webui.js", "mojom-webui/personalization/search.mojom-webui.js", ] } @@ -157,6 +159,17 @@ [ "$target_gen_dir/mojom-webui/personalization/{{source_file_part}}" ] } +copy("generate_ash_search_mojo_webui") { + deps = + [ "//chrome/browser/ui/webui/settings/ash/search:mojo_bindings_webui_js" ] + sources = [ + "$root_gen_dir/mojom-webui/chrome/browser/ui/webui/settings/ash/search/search.mojom-webui.js", + "$root_gen_dir/mojom-webui/chrome/browser/ui/webui/settings/ash/search/search_result_icon.mojom-webui.js", + "$root_gen_dir/mojom-webui/chrome/browser/ui/webui/settings/ash/search/user_action_recorder.mojom-webui.js", + ] + outputs = [ "$target_gen_dir/mojom-webui/search/{{source_file_part}}" ] +} + # Mojo files generated by non-OS-settings targets, not bundled. preprocess_if_expr("preprocess_external_mojo") { deps = [ @@ -502,6 +515,7 @@ "chromeos/date_time_page/date_time_page.js", "chromeos/date_time_page/timezone_selector.js", "chromeos/date_time_page/timezone_subpage.js", + "chromeos/device_page/audio.js", "chromeos/device_page/device_page.js", "chromeos/device_page/display.js", "chromeos/device_page/display_layout.js",
diff --git a/chrome/browser/resources/settings/chromeos/device_page/BUILD.gn b/chrome/browser/resources/settings/chromeos/device_page/BUILD.gn index 5353c5e3..997dc96 100644 --- a/chrome/browser/resources/settings/chromeos/device_page/BUILD.gn +++ b/chrome/browser/resources/settings/chromeos/device_page/BUILD.gn
@@ -11,6 +11,7 @@ closure_flags = os_settings_closure_flags is_polymer3 = true deps = [ + ":audio", ":device_page", ":device_page_browser_proxy", ":display", @@ -28,6 +29,15 @@ ] } +js_library("audio") { + deps = [ + "..:os_route", + "..:route_observer_behavior", + "../..:router", + "//ui/webui/resources/js:i18n_behavior.m", + ] +} + js_library("device_page") { deps = [ ":device_page_browser_proxy", @@ -182,6 +192,7 @@ html_to_js("web_components") { js_files = [ + "audio.js", "device_page.js", "display_layout.js", "display.js",
diff --git a/chrome/browser/resources/settings/chromeos/device_page/audio.html b/chrome/browser/resources/settings/chromeos/device_page/audio.html new file mode 100644 index 0000000..9dd823a8 --- /dev/null +++ b/chrome/browser/resources/settings/chromeos/device_page/audio.html
@@ -0,0 +1,4 @@ + <!-- Output section --> + <template is="dom-if" if="[[showAudioInfo]]"> + <div id="audioSubpageTitle">$i18n{audioTitle}</div> + </template>
diff --git a/chrome/browser/resources/settings/chromeos/device_page/audio.js b/chrome/browser/resources/settings/chromeos/device_page/audio.js new file mode 100644 index 0000000..88ac4ca7 --- /dev/null +++ b/chrome/browser/resources/settings/chromeos/device_page/audio.js
@@ -0,0 +1,72 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import '../../icons.html.js'; +import '../../settings_shared_css.js'; + +import {I18nBehavior, I18nBehaviorInterface} from 'chrome://resources/js/i18n_behavior.m.js'; +import {html, mixinBehaviors, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js'; + +import {Route} from '../../router.js'; +import {routes} from '../os_route.js'; +import {RouteObserverBehavior, RouteObserverBehaviorInterface} from '../route_observer_behavior.js'; + +/** + * @fileoverview + * 'audio-settings' allow users to configure their audio settings in system + * settings. + */ + +/** + * @constructor + * @extends {PolymerElement} + * @implements {I18nBehaviorInterface} + * @implements {RouteObserverBehaviorInterface} + */ +const SettingsAudioElementBase = + mixinBehaviors([RouteObserverBehavior, I18nBehavior], PolymerElement); + +/** @polymer */ +class SettingsAudioElement extends SettingsAudioElementBase { + static get is() { + return 'settings-audio'; + } + + static get template() { + return html`{__html_template__}`; + } + + static get properties() { + return { + /** @type {boolean} */ + showAudioInfo: { + type: Boolean, + value: false, + } + }; + } + + constructor() { + super(); + } + + /** @override */ + ready() { + super.ready(); + } + + /** + * @param {!Route} route + * @param {!Route=} oldRoute + */ + currentRouteChanged(route, oldRoute) { + // Does not apply to this page. + // TODO(owenzhang): Add DeepLinkingBehavior and attempt deep link. + if (route !== routes.AUDIO) { + return; + } + } +} + +customElements.define(SettingsAudioElement.is, SettingsAudioElement);
diff --git a/chrome/browser/resources/settings/chromeos/device_page/device_page.html b/chrome/browser/resources/settings/chromeos/device_page/device_page.html index 78e4791..db0c7ef4 100644 --- a/chrome/browser/resources/settings/chromeos/device_page/device_page.html +++ b/chrome/browser/resources/settings/chromeos/device_page/device_page.html
@@ -21,6 +21,7 @@ role-description="$i18n{subpageArrowRoleDescription}"></cr-link-row> <template is="dom-if" if="[[showAudioInfo_]]"> <cr-link-row class="hr" id="audioRow" label="$i18n{audioTitle}" + on-click="onAudioTap_" role-description="$i18n{subpageArrowRoleDescription}"> </cr-link-row> </template> @@ -60,6 +61,11 @@ <settings-display prefs="{{prefs}}"></settings-display> </settings-subpage> </template> + <template is="dom-if" route-path="/audio"> + <settings-subpage page-title="$i18n{audioTitle}"> + <settings-audio show-audio-info="[[showAudioInfo_]]"></settings-audio> + </settings-subpage> + </template> <template is="dom-if" route-path="/storage"> <settings-subpage page-title="$i18n{storageTitle}"> <settings-storage prefs="{{prefs}}"
diff --git a/chrome/browser/resources/settings/chromeos/device_page/device_page.js b/chrome/browser/resources/settings/chromeos/device_page/device_page.js index d998fc1..0d3f74e 100644 --- a/chrome/browser/resources/settings/chromeos/device_page/device_page.js +++ b/chrome/browser/resources/settings/chromeos/device_page/device_page.js
@@ -7,6 +7,7 @@ * peripheral settings. */ import 'chrome://resources/cr_elements/cr_link_row/cr_link_row.js'; +import './audio.js'; import './display.js'; import './keyboard.js'; import './pointers.js'; @@ -135,7 +136,9 @@ if (routes.DISPLAY) { map.set(routes.DISPLAY.path, '#displayRow'); } - // TODO(crbug.com/1092970): Create routes.Audio page. + if (routes.AUDIO) { + map.set(routes.AUDIO.path, '#audioRow'); + } if (routes.STORAGE) { map.set(routes.STORAGE.path, '#storageRow'); } @@ -252,6 +255,14 @@ } /** + * Handler for tapping the Audio settings menu item. + * @private + */ + onAudioTap_() { + Router.getInstance().navigateTo(routes.AUDIO); + } + + /** * Handler for tapping the Storage settings menu item. * @private */
diff --git a/chrome/browser/resources/settings/chromeos/os_icons.html b/chrome/browser/resources/settings/chromeos/os_icons.html index 7126bbcd..59e4e50 100644 --- a/chrome/browser/resources/settings/chromeos/os_icons.html +++ b/chrome/browser/resources/settings/chromeos/os_icons.html
@@ -108,6 +108,7 @@ <g id="accessibility"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 3C12 4.10457 11.1046 5 10 5C8.89543 5 8 4.10457 8 3C8 1.89543 8.89543 1 10 1C11.1046 1 12 1.89543 12 3ZM2 7C2 6.44772 2.44772 6 3 6H17C17.5523 6 18 6.44772 18 7C18 7.55228 17.5523 8 17 8H13V13V18C13 18.5523 12.5523 19 12 19C11.4477 19 11 18.5523 11 18V13H9V18C9 18.5523 8.55228 19 8 19C7.44772 19 7 18.5523 7 18V13V8H3C2.44772 8 2 7.55228 2 7Z"></path></g> <g id="android"><path fill-rule="evenodd" clip-rule="evenodd" d="M7.15545 1.37568C7.05465 1.22183 6.84735 1.17314 6.6918 1.26969C6.54236 1.36576 6.49393 1.55821 6.57371 1.71244L7.41124 3.15992C6.02666 3.96928 5.12596 5.40608 5 7.00763H15C14.874 5.40607 13.9733 3.96926 12.5887 3.15991L13.4251 1.71451L13.4262 1.71238C13.5114 1.54737 13.4473 1.34438 13.2866 1.25867C13.1324 1.17889 12.9404 1.2266 12.8443 1.37604L11.9968 2.83646L11.9911 2.83895C11.9846 2.84172 11.9767 2.84511 11.9674 2.84906C10.7051 2.33473 9.29491 2.33473 8.03265 2.84904L8.00441 2.83702L8.00315 2.83647L7.15693 1.37795L7.15545 1.37568ZM8 5.5C8.27614 5.5 8.5 5.27614 8.5 5C8.5 4.72386 8.27614 4.5 8 4.5C7.72386 4.5 7.5 4.72386 7.5 5C7.5 5.27614 7.72386 5.5 8 5.5ZM12.5 5C12.5 5.27614 12.2761 5.5 12 5.5C11.7239 5.5 11.5 5.27614 11.5 5C11.5 4.72386 11.7239 4.5 12 4.5C12.2761 4.5 12.5 4.72386 12.5 5Z"></path><path d="M5 7.50378H15V14.5038C15 15.0561 14.5523 15.5038 14 15.5038H6C5.44772 15.5038 5 15.0561 5 14.5038V7.50378Z"></path><rect x="7" y="14.5038" width="2" height="4" rx="1"></rect><rect x="11" y="14.5038" width="2" height="4" rx="1"></rect><rect x="3" y="7.50378" width="1.5" height="6.5" rx="0.75"></rect><rect x="15.5" y="7.50378" width="1.5" height="6.5" rx="0.75"></rect></g> <g id="assistant"><path d="M6.36364 3C8.77382 3 10.7273 4.95418 10.7273 7.36364C10.7273 9.77309 8.77382 11.7273 6.36364 11.7273C3.95345 11.7273 2 9.77309 2 7.36364C2 4.95418 3.95345 3 6.36364 3Z"></path><path d="M18 6.99997C18 7.60215 17.5113 8.09088 16.9091 8.09088C16.3069 8.09088 15.8182 7.60215 15.8182 6.99997C15.8182 6.39778 16.3069 5.90906 16.9091 5.90906C17.5113 5.90906 18 6.39778 18 6.99997Z"></path><path d="M15.8182 9.54547C15.8182 10.7506 14.8414 11.7273 13.6363 11.7273C12.4313 11.7273 11.4545 10.7506 11.4545 9.54547C11.4545 8.34037 12.4313 7.36365 13.6363 7.36365C14.8414 7.36365 15.8182 8.34037 15.8182 9.54547Z"></path><path d="M13.6363 17.5455C15.0422 17.5455 16.1818 16.4059 16.1818 15C16.1818 13.5942 15.0422 12.4546 13.6363 12.4546C12.2305 12.4546 11.0909 13.5942 11.0909 15C11.0909 16.4059 12.2305 17.5455 13.6363 17.5455Z"></path></g> + <g id="audio"><path fill-rule="evenodd" clip-rule="evenodd" d="M1 13H4.46667L8 16.4V3.40002L4.46667 7.00002H1V13ZM10 6.40002V13.4C11.776 12.7652 12.5 10.9044 12.5 9.90002C12.5 8.89568 11.776 7.0435 10 6.40002ZM10 4.16171C12.4771 4.89717 14.5 7.18908 14.5 9.90002C14.5 12.611 12.4771 14.9029 10 15.6383V17.4C13.4371 16.6218 16 13.5602 16 9.90002C16 6.23982 13.4371 3.17825 10 2.40002V4.16171Z"></path></g> <g id="auth-key"><path d="M6.364 5C3.956 5 2 7.018 2 9.5S3.956 14 6.364 14c1.898 0 3.512-1.252 4.11-3H13.5v3h3v-3H18V8h-7.527c-.597-1.747-2.21-3-4.11-3zm0 6c-.8 0-1.455-.675-1.455-1.5S5.563 8 6.363 8c.8 0 1.454.675 1.454 1.5S7.164 11 6.364 11z"></path></g> <g id="cellular"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.002 15.002V7.41622L7.41622 15.002H15.002ZM16.002 17.002C16.5543 17.002 17.002 16.5543 17.002 16.002V5.002C17.002 4.1111 15.9249 3.66493 15.2949 4.2949L4.2949 15.2949C3.66493 15.9249 4.1111 17.002 5.002 17.002H16.002Z"></path><path fill-rule="evenodd" clip-rule="evenodd" d="M13.5 16.002C13.5 16.5543 13.0523 17.002 12.5 17.002H5.002C4.1111 17.002 3.66493 15.9249 4.2949 15.2949L11.7929 7.79289C12.4229 7.16293 13.5 7.6091 13.5 8.5V16.002Z"></path></g> <g id="chrome"><path d="M17.4167 6.24996H10C8.16671 6.24996 6.58337 7.66663 6.33337 9.41663L3.58337 4.66663C5.08337 2.83329 7.41671 1.66663 10 1.66663C13.25 1.66663 16.0834 3.49996 17.4167 6.24996Z"></path><path d="M6.75002 11.8333C7.41669 13 8.58335 13.75 10 13.75C10.5 13.75 10.9167 13.6666 11.4167 13.5L8.66669 18.25C4.66669 17.5833 1.66669 14.1666 1.66669 9.99996C1.66669 8.33329 2.16669 6.74996 3.00002 5.41663L6.75002 11.8333Z"></path><path d="M13.75 9.99992C13.75 10.6666 13.5833 11.3333 13.25 11.8333L9.5 18.3333H10C14.5833 18.3333 18.3333 14.5833 18.3333 9.99992C18.3333 8.99992 18.1667 7.99992 17.8333 7.08325H12.3333C13.1667 7.74992 13.75 8.83325 13.75 9.99992Z"></path><path d="M12.9167 9.99992C12.9167 11.6107 11.6109 12.9166 10 12.9166C8.38921 12.9166 7.08337 11.6107 7.08337 9.99992C7.08337 8.38909 8.38921 7.08325 10 7.08325C11.6109 7.08325 12.9167 8.38909 12.9167 9.99992Z"></path></g>
diff --git a/chrome/browser/resources/settings/chromeos/os_route.js b/chrome/browser/resources/settings/chromeos/os_route.js index 7ee38e8..48ac95e 100644 --- a/chrome/browser/resources/settings/chromeos/os_route.js +++ b/chrome/browser/resources/settings/chromeos/os_route.js
@@ -135,6 +135,9 @@ createSubpage(r.DEVICE, mojom.STYLUS_SUBPAGE_PATH, Subpage.kStylus); r.DISPLAY = createSubpage(r.DEVICE, mojom.DISPLAY_SUBPAGE_PATH, Subpage.kDisplay); + if (loadTimeData.getBoolean('enableAudioSettingsPage')) { + r.AUDIO = createSubpage(r.DEVICE, mojom.AUDIO_SUBPAGE_PATH, Subpage.kAudio); + } r.STORAGE = createSubpage(r.DEVICE, mojom.STORAGE_SUBPAGE_PATH, Subpage.kStorage); r.EXTERNAL_STORAGE_PREFERENCES = createSubpage(
diff --git a/chrome/browser/resources/settings/chromeos/os_settings.gni b/chrome/browser/resources/settings/chromeos/os_settings.gni index 3b22c89..19b3e0e 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings.gni +++ b/chrome/browser/resources/settings/chromeos/os_settings.gni
@@ -20,6 +20,9 @@ "js_module_root=" + rebase_path( "$root_gen_dir/mojom-webui/chrome/browser/ui/webui/settings/chromeos/constants", root_build_dir), + "js_module_root=" + rebase_path( + "$root_gen_dir/mojom-webui/chrome/browser/ui/webui/settings/ash", + root_build_dir), "browser_resolver_prefix_replacements=\"../../../mojom-webui/=../../../\"", "browser_resolver_prefix_replacements=\"../../mojom-webui/=../../\"", "browser_resolver_prefix_replacements=\"../mojom-webui/=../\"",
diff --git a/chrome/browser/resources/settings/chromeos/os_settings.js b/chrome/browser/resources/settings/chromeos/os_settings.js index c5bd8ef..0fc40d38 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings.js +++ b/chrome/browser/resources/settings/chromeos/os_settings.js
@@ -7,6 +7,7 @@ import './bluetooth_page/bluetooth_device_list_item.js'; import './bluetooth_page/bluetooth_page.js'; import './bluetooth_page/bluetooth_subpage.js'; +import './device_page/audio.js'; import './device_page/device_page.js'; import './device_page/display.js'; import './device_page/display_layout.js';
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_routes.js b/chrome/browser/resources/settings/chromeos/os_settings_routes.js index 678fc077..dd7cccb 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings_routes.js +++ b/chrome/browser/resources/settings/chromeos/os_settings_routes.js
@@ -23,6 +23,7 @@ * APPS: !Route, * ANDROID_APPS_DETAILS: !Route, * ANDROID_APPS_DETAILS_ARC_VM_SHARED_USB_DEVICES: !Route, + * AUDIO: !Route, * CROSTINI: !Route, * CROSTINI_ANDROID_ADB: !Route, * CROSTINI_DETAILS: !Route,
diff --git a/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_search_result_row.js b/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_search_result_row.js index 3b14749..042b9f38 100644 --- a/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_search_result_row.js +++ b/chrome/browser/resources/settings/chromeos/os_settings_search_box/os_search_result_row.js
@@ -672,6 +672,8 @@ return 'os-settings:apps'; case Icon.kAssistant: return 'os-settings:assistant'; + case Icon.kAudio: + return 'os-settings:audio'; case Icon.kAuthKey: return 'os-settings:auth-key'; case Icon.kAvatar:
diff --git a/chrome/browser/safe_xml_parser_browsertest.cc b/chrome/browser/safe_xml_parser_browsertest.cc index e349e54b..69b8080 100644 --- a/chrome/browser/safe_xml_parser_browsertest.cc +++ b/chrome/browser/safe_xml_parser_browsertest.cc
@@ -63,13 +63,11 @@ data_decoder::DataDecoder::ValueOrError result) { base::ScopedClosureRunner runner(std::move(quit_loop_closure)); if (!expected_value) { - EXPECT_FALSE(result.value); - EXPECT_TRUE(result.error); + EXPECT_FALSE(result.has_value()); return; } - EXPECT_FALSE(result.error); - ASSERT_TRUE(result.value); - EXPECT_EQ(*expected_value, *result.value); + ASSERT_TRUE(result.has_value()); + EXPECT_EQ(*expected_value, *result); } };
diff --git a/chrome/browser/sessions/session_restore_browsertest.cc b/chrome/browser/sessions/session_restore_browsertest.cc index e758061..90fa98a5 100644 --- a/chrome/browser/sessions/session_restore_browsertest.cc +++ b/chrome/browser/sessions/session_restore_browsertest.cc
@@ -74,6 +74,7 @@ #include "chrome/common/pref_names.h" #include "chrome/common/url_constants.h" #include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/testing_profile.h" #include "chrome/test/base/ui_test_utils.h" #include "components/keep_alive_registry/keep_alive_types.h" #include "components/keep_alive_registry/scoped_keep_alive.h" @@ -2902,12 +2903,8 @@ // be read, but a read error should be logged. base::FilePath user_data_dir; EXPECT_TRUE(base::PathService::Get(chrome::DIR_USER_DATA, &user_data_dir)); -#if BUILDFLAG(IS_CHROMEOS_ASH) - const std::string profile_dir = chrome::kTestUserProfileDir; -#else - const std::string profile_dir = chrome::kInitialProfile; -#endif - base::FilePath sessions_dir = user_data_dir.AppendASCII(profile_dir); + base::FilePath sessions_dir = + user_data_dir.AppendASCII(TestingProfile::kTestUserProfileDir); if (!base::DeletePathRecursively( sessions_dir.Append(sessions::kSessionsDirectory))) { ADD_FAILURE() << "Unable to delete sessions directory";
diff --git a/chrome/browser/speech/extension_api/tts_engine_extension_api.cc b/chrome/browser/speech/extension_api/tts_engine_extension_api.cc index 53c9bf2..896e6a3 100644 --- a/chrome/browser/speech/extension_api/tts_engine_extension_api.cc +++ b/chrome/browser/speech/extension_api/tts_engine_extension_api.cc
@@ -493,11 +493,11 @@ EXTENSION_FUNCTION_VALIDATE(utterance_id_value.is_int()); int utterance_id = utterance_id_value.GetInt(); - const base::DictionaryValue* audio = nullptr; - EXTENSION_FUNCTION_VALIDATE(args()[1].GetAsDictionary(&audio)); + const base::Value::Dict* audio = args()[1].GetIfDict(); + EXTENSION_FUNCTION_VALIDATE(audio); const std::vector<uint8_t>* audio_buffer_blob = - audio->FindBlobPath(tts_extension_api_constants::kAudioBufferKey); + audio->FindBlob(tts_extension_api_constants::kAudioBufferKey); if (!audio_buffer_blob) return RespondNow(Error("No audio buffer found.")); @@ -513,13 +513,13 @@ int char_index = 0; const base::Value* char_index_value = - audio->FindKey(tts_extension_api_constants::kCharIndexKey); + audio->Find(tts_extension_api_constants::kCharIndexKey); EXTENSION_FUNCTION_VALIDATE(char_index_value); EXTENSION_FUNCTION_VALIDATE(char_index_value->is_int()); char_index = char_index_value->GetInt(); absl::optional<bool> is_last_buffer = - audio->FindBoolPath(tts_extension_api_constants::kIsLastBufferKey); + audio->FindBool(tts_extension_api_constants::kIsLastBufferKey); EXTENSION_FUNCTION_VALIDATE(is_last_buffer); TtsExtensionEngine::GetInstance()->SendAudioBuffer(
diff --git a/chrome/browser/sync/test/integration/ash_custom_passphrase_sharing_sync_test.cc b/chrome/browser/sync/test/integration/ash_custom_passphrase_sharing_sync_test.cc index e7f7452..3d7bdf0e 100644 --- a/chrome/browser/sync/test/integration/ash_custom_passphrase_sharing_sync_test.cc +++ b/chrome/browser/sync/test/integration/ash_custom_passphrase_sharing_sync_test.cc
@@ -18,6 +18,7 @@ #include "chrome/browser/sync/test/integration/sync_test.h" #include "chrome/common/chrome_constants.h" #include "chrome/common/pref_names.h" +#include "chromeos/ash/components/browser_context_helper/browser_context_helper.h" #include "chromeos/crosapi/mojom/account_manager.mojom.h" #include "chromeos/crosapi/mojom/sync.mojom-test-utils.h" #include "chromeos/crosapi/mojom/sync.mojom.h" @@ -161,7 +162,8 @@ // TODO(crbug.com/1102768): eventually this should be the case for all Ash // tests. DCHECK_EQ(index, 0); - return base::FilePath(chrome::kTestUserProfileDir); + return base::FilePath( + ash::BrowserContextHelper::kTestUserBrowserContextDirName); } void SetupCrosapi() {
diff --git a/chrome/browser/sync/test/integration/single_client_custom_passphrase_sync_test.cc b/chrome/browser/sync/test/integration/single_client_custom_passphrase_sync_test.cc index 2963f4a3..a93d9e7 100644 --- a/chrome/browser/sync/test/integration/single_client_custom_passphrase_sync_test.cc +++ b/chrome/browser/sync/test/integration/single_client_custom_passphrase_sync_test.cc
@@ -302,7 +302,7 @@ ASSERT_TRUE(AddURL(/*profile=*/0, title, page_url)); CommittedBookmarkEntityNameObserver observer(GetFakeServer()); - ASSERT_TRUE(SetupSync()); + ASSERT_TRUE(SetupSync(WAIT_FOR_SYNC_SETUP_TO_COMPLETE)); ASSERT_TRUE(WaitForNigori(PassphraseType::kCustomPassphrase)); // If WaitForEncryptedServerBookmarks() succeeds, that means that a
diff --git a/chrome/browser/sync/test/integration/sync_test.cc b/chrome/browser/sync/test/integration/sync_test.cc index 5647703e..a3f8a46a 100644 --- a/chrome/browser/sync/test/integration/sync_test.cc +++ b/chrome/browser/sync/test/integration/sync_test.cc
@@ -42,6 +42,7 @@ #include "chrome/browser/sync/test/integration/device_info_helper.h" #include "chrome/browser/sync/test/integration/fake_sync_gcm_driver_for_instance_id.h" #include "chrome/browser/sync/test/integration/invalidations/fake_sync_instance_id_driver.h" +#include "chrome/browser/sync/test/integration/session_hierarchy_match_checker.h" #include "chrome/browser/sync/test/integration/single_client_status_change_checker.h" #include "chrome/browser/sync/test/integration/sync_datatype_helper.h" #include "chrome/browser/sync/test/integration/sync_disabled_checker.h" @@ -93,6 +94,7 @@ #include "services/network/public/cpp/weak_wrapper_shared_url_loader_factory.h" #include "services/network/public/mojom/url_response_head.mojom.h" #include "url/gurl.h" +#include "url/url_constants.h" #if BUILDFLAG(IS_CHROMEOS_ASH) #include "ash/components/account_manager/account_manager_factory.h" @@ -1315,6 +1317,21 @@ } } +#if BUILDFLAG(IS_ANDROID) + // On Android, default about:blank page is loaded by default. Wait for + // Session to be committed to prevent unexpected commit requests during + // test. It shouldn't be called when custom passphrase is enabled because + // SessionHierarchyMatchChecker doesn't support custom passphrases. + DCHECK(client_decryption_passphrases_.find(profile_index) == + client_decryption_passphrases_.end()); + if (!SessionHierarchyMatchChecker( + fake_server::SessionsHierarchy({{url::kAboutBlankURL}}), + GetSyncService(profile_index), GetFakeServer()) + .Wait()) { + return false; + } +#endif // BUILDFLAG(IS_ANDROID) + // Wait for any other locally nudged changes to be committed. if (!CommittedAllNudgedChangesChecker(GetSyncService(profile_index)).Wait()) { return false;
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 2821e5b..4761363 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
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">Prentbeskrywings is af</translation> <translation id="2172905120685242547">Maak venster toe?</translation> <translation id="2175927920773552910">QR-kode</translation> -<translation id="2176767904800337188">'n Virtuele kaart verberg jou werklike kaart om te help om jou teen potensiële bedrog te beskerm. <ph name="BEGIN_LINK1" />Kom meer te wete oor virtuele kaarte<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Deling</translation> <translation id="2189903024544168260">Belangstelling is verwyder</translation> <translation id="2194856509914051091">Dinge om in ag te neem</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">Blaaigeskiedenis</translation> <translation id="2497852260688568942">Jou administrateur het sinkronisering gedeaktiveer</translation> <translation id="250020030759455918">Jy sal jou <ph name="SITE_NAME" />-aanmeldingstatus, -blaaierdata en -werfdata in Chrome sien</translation> -<translation id="2512164632052122970">Inhoudtale</translation> <translation id="2513403576141822879">Sien <ph name="BEGIN_LINK" />Sinkornisering en Google-dienste<ph name="END_LINK" /> vir meer instellings wat verband hou met privaatheid, sekuriteit en data-insameling</translation> <translation id="2517472476991765520">Skandeer</translation> <translation id="2523184218357549926">Stuur URL'e van bladsye wat jy besoek na Google toe</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb index dea9ebd..7028d84 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_am.xtb
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">የምስል መግለጫዎች ጠፍተዋል</translation> <translation id="2172905120685242547">መስኮት ይዘጋ?</translation> <translation id="2175927920773552910">የQR ኮድ</translation> -<translation id="2176767904800337188">ምናባዊ ካርድ እርስዎን ሊሆን ከሚችል ማጭበርበር ለመጠበቅ እንዲረዳዎ ትክክለኛውን ካርድዎን አስመስሎ ይደብቀዋል። <ph name="BEGIN_LINK1" />ስለምናባዊ ካርዶች የበለጠ ይረዱ<ph name="END_LINK1" /></translation> <translation id="218608176142494674">ማጋራት</translation> <translation id="2189903024544168260">ዝንባሌ ተወግዷል</translation> <translation id="2194856509914051091">ከግምት ውስጥ መግባት ያለባቸው ነገሮች</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">ታሪክ አሰሳ</translation> <translation id="2497852260688568942">ስምረት በእርስዎ አስተዳዳሪ ተሰናክሏል</translation> <translation id="250020030759455918">የእርስዎን <ph name="SITE_NAME" /> በመለያ የመግባት ሁኔታ፣ የአሰሳ ውሂብ እና የጣቢያ ውሂብ በChrome ውስጥ ይመለከታሉ</translation> -<translation id="2512164632052122970">የይዘት ቋንቋዎች</translation> <translation id="2513403576141822879">ከግላዊነት፣ ደህንነት እና የውሂብ ስብስብ ጋር ለሚዛመዱ ተጨማሪ ቅንብሮች <ph name="BEGIN_LINK" />ስምረት እና የGoogle አገልግሎቶች<ph name="END_LINK" /></translation> <translation id="2517472476991765520">ቃኝ</translation> <translation id="2523184218357549926">የሚጎበኙዋቸውን ገጾች ዩአርኤሎች ወደ Google ይልካል</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 b358787..e325e65 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
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">ميزة أوصاف الصور غير مفعَّلة.</translation> <translation id="2172905120685242547">هل تريد إغلاق النافذة؟</translation> <translation id="2175927920773552910">رمز الاستجابة السريعة</translation> -<translation id="2176767904800337188">تخفي البطاقة الافتراضية بطاقتك الفعلية للمساعدة في حمايتك من عمليات الاحتيال المحتمَلة. <ph name="BEGIN_LINK1" />مزيد من المعلومات حول البطاقات الافتراضية<ph name="END_LINK1" /></translation> <translation id="218608176142494674">المشاركة</translation> <translation id="2189903024544168260">تم حذف الاهتمام.</translation> <translation id="2194856509914051091">ملاحظات مهمّة</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">سجلّ التصفّح</translation> <translation id="2497852260688568942">تم إيقاف المزامنة من قِبل المشرف</translation> <translation id="250020030759455918">ستظهر لك حالة تسجيل الدخول على <ph name="SITE_NAME" />، وبيانات التصفُّح وبيانات الموقع الإلكتروني في Chrome.</translation> -<translation id="2512164632052122970">لغات المحتوى</translation> <translation id="2513403576141822879">لعرض مزيد من الإعدادات المتعلِّقة بالخصوصية والأمان وجمع البيانات، يُرجى الاطِّلاع على <ph name="BEGIN_LINK" />خدمات Google والمزامنة<ph name="END_LINK" /></translation> <translation id="2517472476991765520">فحص</translation> <translation id="2523184218357549926">يتم إرسال عناوين URL للصفحات التي تزورها إلى Google.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb index 8d95fb9..2a99d98 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_as.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">ছিংক অফ কৰিবনে?</translation> <translation id="1430915738399379752">প্ৰিণ্ট কৰক</translation> <translation id="1436784010935106834">আঁতৰোৱা হ’ল</translation> +<translation id="1437543266176261764"><ph name="APP_NAME" />ত চলি আছে</translation> <translation id="1448440926884431741">আপুনি ট্ৰেক কৰা প্ৰ’ডাক্টসমূহ বুকমাৰ্কত শৃংখলাবদ্ধ কৰক</translation> <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> শ্বেয়াৰ কৰিব নোৱাৰি</translation> <translation id="1466383950273130737">Chromeৰ ভাষা বাছনি কৰক</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">প্ৰতিচ্ছবিৰ বিৱৰণ অফ আছে</translation> <translation id="2172905120685242547">ৱিণ্ড’ বন্ধ কৰিবনে?</translation> <translation id="2175927920773552910">কিউআৰ ক’ড</translation> -<translation id="2176767904800337188">আপোনাক সম্ভাব্য প্ৰতাৰণাৰ পৰা সুৰক্ষিত কৰাত সহায় কৰিবলৈ এখন ভাৰ্ছুৱেল কাৰ্ডে আপোনাৰ প্ৰকৃত কাৰ্ড হিচাপে কাম কৰে। <ph name="BEGIN_LINK1" />ভাৰ্ছুৱেল কাৰ্ডৰ বিষয়ে অধিক জানক<ph name="END_LINK1" /></translation> <translation id="218608176142494674">শ্বেয়াৰ কৰি থকা হৈছে</translation> <translation id="2189903024544168260">আগ্ৰহ আঁতৰোৱা হ’ল</translation> <translation id="2194856509914051091">বিবেচনা কৰিব লগা বিষয়</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">ব্ৰাউজিঙৰ ইতিহাস</translation> <translation id="2497852260688568942">আপোনাৰ প্ৰশাসকে ছিংক অক্ষম কৰিছে</translation> <translation id="250020030759455918">আপুনি আপোনাৰ <ph name="SITE_NAME" />ৰ ছাইন ইনৰ স্থিতি, ব্ৰাউজ কৰা ডেটা আৰু ছাইটৰ ডেটা Chromeত দেখা পাব</translation> -<translation id="2512164632052122970">সমলৰ ভাষা</translation> <translation id="2513403576141822879">গোপনীয়তা, সুৰক্ষা আৰু ডেটা সংগ্ৰহৰ সৈতে জড়িত অধিক ছেটিঙৰ বাবে <ph name="BEGIN_LINK" />ছিংক আৰু Google সেৱা<ph name="END_LINK" /> চাওক</translation> <translation id="2517472476991765520">স্কেন কৰক</translation> <translation id="2523184218357549926">আপুনি চোৱা পৃষ্ঠাসমূহৰ URL Googleলৈ পঠিওৱা হয়</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb index f63d8fd..dbfff6ab 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_az.xtb
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">Şəkil təsvirləri deaktivdir</translation> <translation id="2172905120685242547">Pəncərə bağlansın?</translation> <translation id="2175927920773552910">QR Kod</translation> -<translation id="2176767904800337188">Virtual kart sizi potensial dələduzluqdan qorumaq üçün faktiki kartınızı gizlədir. <ph name="BEGIN_LINK1" />Virtual kartlar haqqında ətraflı məlumat<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Paylaşım</translation> <translation id="2189903024544168260">Maraq silinib</translation> <translation id="2194856509914051091">Nəzərə alınmalı amillər</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">Brauzer tarixçəsi</translation> <translation id="2497852260688568942">Sinxronizasiya administratorunuz tərəfindən deaktiv edilib</translation> <translation id="250020030759455918">Chrome'da <ph name="SITE_NAME" /> üçün giriş statusu, baxış datası və sayt datanızı görəcəksiniz</translation> -<translation id="2512164632052122970">Məzmun dilləri</translation> <translation id="2513403576141822879">Məxfilik, təhlükəsizlik və data toplanması ilə bağlı daha çox ayarlar üçün <ph name="BEGIN_LINK" />Sinxronizasiya və Google xidmətləri<ph name="END_LINK" /> səhifəsinə daxil olun</translation> <translation id="2517472476991765520">Skan edin</translation> <translation id="2523184218357549926">Daxil olduğunuz səhifələrin linkləri Google'a göndərilir</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 9afd930a..f45e620 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
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">Апісанні відарысаў выключаны</translation> <translation id="2172905120685242547">Закрыць акно?</translation> <translation id="2175927920773552910">QR-код</translation> -<translation id="2176767904800337188">Каб абараніць вас ад патэнцыяльнага махлярства, замест захаванай вамі карткі будзе паказвацца віртуальная. <ph name="BEGIN_LINK1" />Даведацца больш пра віртуальныя карткі<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Абагульванне</translation> <translation id="2189903024544168260">Інтарэс выдалены</translation> <translation id="2194856509914051091">Інфармацыя для разгляду</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">Гісторыя прагляду сайтаў</translation> <translation id="2497852260688568942">Сінхранізацыя выключана вашым адміністратарам</translation> <translation id="250020030759455918">Вы ўбачыце, ці выкананы ўваход на сайт <ph name="SITE_NAME" />, гісторыю праглядаў і даныя сайтаў у Chrome</translation> -<translation id="2512164632052122970">Мовы змесціва</translation> <translation id="2513403576141822879">Дадатковыя налады прыватнасці, бяспекі і збору даных глядзіце ў раздзеле <ph name="BEGIN_LINK" />Сінхранізацыя і сэрвісы Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Пошук</translation> <translation id="2523184218357549926">Адпраўка URL-адрасоў наведаных вамі старонак у Google</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 2c20113..35f4dc2 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
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">Функцията за описания на изображенията е изключена</translation> <translation id="2172905120685242547">Да се затвори ли прозорецът?</translation> <translation id="2175927920773552910">Код за бърза реакция</translation> -<translation id="2176767904800337188">Виртуалната карта прикрива действителната ви, за да ви защити от потенциална измама. <ph name="BEGIN_LINK1" />Научете повече за виртуалните карти<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Споделяне</translation> <translation id="2189903024544168260">Интересът е премахнат</translation> <translation id="2194856509914051091">Обмислете следните неща</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">История на сърфирането</translation> <translation id="2497852260688568942">Синхронизирането е деактивирано от администратора ви</translation> <translation id="250020030759455918">В Chrome ще виждате дали сте влезли в профила си в <ph name="SITE_NAME" />, както и съответните данни за сърфирането и сайта</translation> -<translation id="2512164632052122970">Езици на съдържанието</translation> <translation id="2513403576141822879">За още настройки за поверителността, сигурността и събирането на данни вижте <ph name="BEGIN_LINK" />Синхронизиране и услуги на Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Сканиране</translation> <translation id="2523184218357549926">Изпраща до Google URL адресите на страниците, които посещавате</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 33bfc28..ec753da 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
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">ছবির বিবরণ বন্ধ করা আছে</translation> <translation id="2172905120685242547">উইন্ডো বন্ধ করবেন?</translation> <translation id="2175927920773552910">QR কোড</translation> -<translation id="2176767904800337188">কোনও ভার্চুয়াল কার্ড আপনাকে সম্ভাব্য জালিয়াতির হাত থেকে রক্ষা করতে আপনার আসল কার্ডের ছদ্মবেশ নিতে পারে। <ph name="BEGIN_LINK1" />ভার্চুয়াল কার্ড সম্পর্কে আরও জানুন<ph name="END_LINK1" /></translation> <translation id="218608176142494674">শেয়ার করা সংক্রান্ত বিজ্ঞপ্তি</translation> <translation id="2189903024544168260">আগ্রহ সরিয়ে দেওয়া হয়েছে</translation> <translation id="2194856509914051091">যা যা দেখে নেওয়া প্রয়োজন</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">ব্রাউজিং ইতিহাস</translation> <translation id="2497852260688568942">আপনার প্রশাসকের দ্বারা সিঙ্ক অক্ষম করা হয়েছে</translation> <translation id="250020030759455918">আপনি Chrome-এ <ph name="SITE_NAME" /> সাইটে নিজের সাইন-ইন স্ট্যাটাস, ব্রাউজিং ডেটা ও সাইট ডেটা দেখতে পাবেন</translation> -<translation id="2512164632052122970">কন্টেন্টের ভাষা</translation> <translation id="2513403576141822879">আপনার গোপনীয়তা, নিরাপত্তা এবং ডেটা সংগ্রহের সাথে সম্পর্কযুক্ত আরও সেটিংসের জন্য <ph name="BEGIN_LINK" />সিঙ্ক এবং Google পরিষেবাগুলি<ph name="END_LINK" /> দেখুন</translation> <translation id="2517472476991765520">স্ক্যান করুন</translation> <translation id="2523184218357549926">আপনার দেখা পৃষ্ঠাগুলির ইউআরএল Google-এ পাঠায়</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb index cc91f6f..6c706b85 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_bs.xtb
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">Opisi slika su isključeni</translation> <translation id="2172905120685242547">Zatvoriti prozor?</translation> <translation id="2175927920773552910">QR kôd</translation> -<translation id="2176767904800337188">Virtuelna kartica kamuflira stvarnu karticu radi zaštite od potencijalne prevare. <ph name="BEGIN_LINK1" />Saznajte više o virtuelnim karticama<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Dijeljenje</translation> <translation id="2189903024544168260">Interesovanje je uklonjeno</translation> <translation id="2194856509914051091">Stvari za razmatranje</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">Historija pregledanja</translation> <translation id="2497852260688568942">Sinhronizaciju je onemogućio vaš administrator</translation> <translation id="250020030759455918">Vidjet ćete svoj status prijave na web lokaciji <ph name="SITE_NAME" />, podatke pregledanja i podatke web lokacije na Chromeu</translation> -<translation id="2512164632052122970">Jezici sadržaja</translation> <translation id="2513403576141822879">Više postavki koje se odnose na privatnost, sigurnost i prikupljanje podataka dostupno je u odjeljku <ph name="BEGIN_LINK" />Sinkronizacija i prilagodba<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Skeniraj</translation> <translation id="2523184218357549926">URL-ove stranica koje posjećujete šalje Googleu</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb index c8e3679c..71624c91 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ca.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Vols desactivar la sincronització?</translation> <translation id="1430915738399379752">Imprimeix</translation> <translation id="1436784010935106834">Eliminat</translation> +<translation id="1437543266176261764">S'està executant a <ph name="APP_NAME" /></translation> <translation id="1448440926884431741">Organitza els productes que segueixes a Adreces d'interès</translation> <translation id="1450753235335490080">No es pot compartir <ph name="CONTENT_TYPE" /></translation> <translation id="1466383950273130737">Tria l'idioma de Chrome</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Les descripcions de les imatges estan desactivades</translation> <translation id="2172905120685242547">Vols tancar la finestra?</translation> <translation id="2175927920773552910">Codi QR</translation> -<translation id="2176767904800337188">Una targeta virtual oculta la teva targeta real per contribuir a protegir-te de possibles fraus. <ph name="BEGIN_LINK1" />Més informació sobre les targetes virtuals<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Compartició</translation> <translation id="2189903024544168260">S'ha suprimit l'interès</translation> <translation id="2194856509914051091">Aspectes que cal tenir en compte</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Historial de navegació</translation> <translation id="2497852260688568942">L'administrador ha desactivat la sincronització</translation> <translation id="250020030759455918">Veuràs l'estat de l'inici de sessió a <ph name="SITE_NAME" />, les dades de navegació i les dades del lloc web a Chrome</translation> -<translation id="2512164632052122970">Idiomes del contingut</translation> <translation id="2513403576141822879">Per trobar més opcions de configuració relacionades amb la privadesa, la seguretat i la recollida de dades, consulta <ph name="BEGIN_LINK" />Sincronització i serveis de Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Escaneja</translation> <translation id="2523184218357549926">Envia a Google els URL de les pàgines que visites</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb index 1f9fb26..c5f902b 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cs.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Vypnout synchronizaci?</translation> <translation id="1430915738399379752">Tisk</translation> <translation id="1436784010935106834">Odebráno</translation> +<translation id="1437543266176261764">Spuštěno v aplikaci <ph name="APP_NAME" /></translation> <translation id="1448440926884431741">Sledované produkty můžete třídit v záložkách</translation> <translation id="1450753235335490080">Sdílení obsahu typu <ph name="CONTENT_TYPE" /> se nezdařilo</translation> <translation id="1466383950273130737">Vyberte jazyk Chromu</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Popisy obrázků jsou vypnuté</translation> <translation id="2172905120685242547">Zavřít okno?</translation> <translation id="2175927920773552910">QR kód</translation> -<translation id="2176767904800337188">Virtuální karta maskuje vaši skutečnou kartu a chrání vás před případným podvodem. <ph name="BEGIN_LINK1" />Další informace o virtuálních kartách<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Sdílení</translation> <translation id="2189903024544168260">Zájem odstraněn</translation> <translation id="2194856509914051091">Co je třeba zvážit</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Historie procházení</translation> <translation id="2497852260688568942">Synchronizace je administrátorem zakázána.</translation> <translation id="250020030759455918">Uvidíte stav přihlášení, údaje o prohlížení a data webu <ph name="SITE_NAME" /> v Chromu</translation> -<translation id="2512164632052122970">Jazyky obsahu</translation> <translation id="2513403576141822879">Další nastavení související s ochranou soukromí, zabezpečením a shromažďováním dat naleznete v části <ph name="BEGIN_LINK" />Synchronizace a služby Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Naskenovat</translation> <translation id="2523184218357549926">Odesílá do Googlu adresy URL stránek, které navštěvujete</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cy.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cy.xtb index ca76470..a02db1d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_cy.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_cy.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Diffodd cysoni?</translation> <translation id="1430915738399379752">Argraffu</translation> <translation id="1436784010935106834">Tynnwyd</translation> +<translation id="1437543266176261764">Yn rhedeg yn <ph name="APP_NAME" /></translation> <translation id="1448440926884431741">Trefnu eich cynhyrchion sy'n cael eu dilyn yn Nodau tudalen</translation> <translation id="1450753235335490080">Methu â rhannu <ph name="CONTENT_TYPE" /></translation> <translation id="1466383950273130737">Dewiswch iaith Chrome</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Mae'r disgrifiadau lluniau wedi'u diffodd</translation> <translation id="2172905120685242547">Cau'r ffenestr?</translation> <translation id="2175927920773552910">Cod QR</translation> -<translation id="2176767904800337188">Mae cerdyn rhithwir yn cuddio eich cerdyn go iawn i helpu i'ch amddiffyn rhag twyll posib. <ph name="BEGIN_LINK1" />Dysgu rhagor am gardiau rhithwir<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Rhannu</translation> <translation id="2189903024544168260">Tynnwyd diddordeb</translation> <translation id="2194856509914051091">Pethau i'w hystyried</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Hanes pori</translation> <translation id="2497852260688568942">Mae Cysoni wedi'i analluogi gan eich gweinyddwr</translation> <translation id="250020030759455918">Byddwch yn gweld eich statws mewngofnodi, pori data, a data gwefan <ph name="SITE_NAME" /> yn Chrome</translation> -<translation id="2512164632052122970">Ieithoedd cynnwys</translation> <translation id="2513403576141822879">Am ragor o osodiadau sy'n ymwneud â phreifatrwydd, diogelwch a chasglu data, gweler <ph name="BEGIN_LINK" />Cysoni a gwasanaethau Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Sganio</translation> <translation id="2523184218357549926">Yn anfon URL o dudalennau rydych yn ymweld â nhw at Google</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb index 57c115d5..3ca9b89 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_da.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Vil du deaktivere synkronisering?</translation> <translation id="1430915738399379752">Udskriv</translation> <translation id="1436784010935106834">Fjernet</translation> +<translation id="1437543266176261764">Kører i <ph name="APP_NAME" /></translation> <translation id="1448440926884431741">Organiser de produkter, du holder øje med, i Bogmærker</translation> <translation id="1450753235335490080">Delingen af <ph name="CONTENT_TYPE" /> mislykkedes</translation> <translation id="1466383950273130737">Vælg sprog i Chrome</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Billedbeskrivelser er slået fra</translation> <translation id="2172905120685242547">Vil du lukke vinduet?</translation> <translation id="2175927920773552910">QR-kode</translation> -<translation id="2176767904800337188">Et virtuelt kort skjuler dit faktiske kort og beskytter dig på den måde mod potentiel svindel. <ph name="BEGIN_LINK1" />Få flere oplysninger om virtuelle kort<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Deling</translation> <translation id="2189903024544168260">Interessen er fjernet</translation> <translation id="2194856509914051091">Vigtige oplysninger</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Browserhistorik</translation> <translation id="2497852260688568942">Synkronisering er deaktiveret af din administrator.</translation> <translation id="250020030759455918">Du kan se loginstatus, browserdata og websiteoplysninger for <ph name="SITE_NAME" /> i Chrome</translation> -<translation id="2512164632052122970">Indholdets sprog</translation> <translation id="2513403576141822879">Du kan finde flere indstillinger vedrørende privatliv, sikkerhed og dataindsamling ved at gå til <ph name="BEGIN_LINK" />Synkronisering og Google-tjenester<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Scan</translation> <translation id="2523184218357549926">Sender webadresser på de sider, du besøger, til Google</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 cb8ddf31..dcc91435 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
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">Bildbeschreibungen sind deaktiviert</translation> <translation id="2172905120685242547">Fenster schließen?</translation> <translation id="2175927920773552910">QR-Code</translation> -<translation id="2176767904800337188">Wenn du eine virtuelle Karte verwendest, werden deine tatsächlichen Kartendetails nicht preisgegeben – dadurch bist du besser vor Betrugsversuchen geschützt. <ph name="BEGIN_LINK1" />Weitere Informationen zu virtuellen Karten<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Freigabe</translation> <translation id="2189903024544168260">Interesse entfernt</translation> <translation id="2194856509914051091">Wichtige Punkte</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">Browserverlauf</translation> <translation id="2497852260688568942">Die Synchronisierung wurde von deinem Administrator deaktiviert</translation> <translation id="250020030759455918">Du kannst deinen Anmeldestatus für <ph name="SITE_NAME" />, Browserdaten und Websitedaten in Chrome einsehen</translation> -<translation id="2512164632052122970">Content-Sprachen</translation> <translation id="2513403576141822879">Weitere Einstellungen in Verbindung mit Datenschutz, Sicherheit und der Erhebung von Daten findest du unter <ph name="BEGIN_LINK" />Synchronisierung und Google-Dienste<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Scannen</translation> <translation id="2523184218357549926">URLs der von dir besuchten Seiten werden an Google gesendet</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb index 890511d..5485d4a 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_el.xtb
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">Οι περιγραφές εικόνων είναι απενεργοποιημένες</translation> <translation id="2172905120685242547">Κλείσιμο παραθύρου;</translation> <translation id="2175927920773552910">Κωδικός QR</translation> -<translation id="2176767904800337188">Μια εικονική κάρτα κρύβει την πραγματική κάρτα προκειμένου να σας προστατεύσει από πιθανή απάτη. <ph name="BEGIN_LINK1" />Μάθετε περισσότερα σχετικά με τις εικονικές κάρτες<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Κοινοποίηση</translation> <translation id="2189903024544168260">Το ενδιαφέρον καταργήθηκε</translation> <translation id="2194856509914051091">Λάβετε υπόψη τα εξής</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">Ιστορικό περιήγησης</translation> <translation id="2497852260688568942">Ο συγχρονισμός έχει απενεργοποιηθεί από τον διαχειριστή σας</translation> <translation id="250020030759455918">Θα δείτε στο Chrome την κατάσταση σύνδεσής σας στον ιστότοπο <ph name="SITE_NAME" />, τα δεδομένα περιήγησης και τα δεδομένα ιστοτόπου.</translation> -<translation id="2512164632052122970">Γλώσσες περιεχομένου</translation> <translation id="2513403576141822879">Για περισσότερες ρυθμίσεις που σχετίζονται με το απόρρητο, την ασφάλεια και τη συλλογή δεδομένων, ανατρέξτε στην ενότητα <ph name="BEGIN_LINK" />Συγχρονισμός και υπηρεσίες Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Σάρωση</translation> <translation id="2523184218357549926">Αποστέλλει στην Google URL των σελίδων που επισκέπτεστε</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb index 1607416..4ccdc67 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_en-GB.xtb
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">Image descriptions are off</translation> <translation id="2172905120685242547">Close window?</translation> <translation id="2175927920773552910">QR code</translation> -<translation id="2176767904800337188">A virtual card disguises your actual card to help protect you from potential fraud. <ph name="BEGIN_LINK1" />Learn more about virtual cards<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Sharing</translation> <translation id="2189903024544168260">Interest removed</translation> <translation id="2194856509914051091">Things to consider</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">Browsing history</translation> <translation id="2497852260688568942">Sync is disabled by your administrator</translation> <translation id="250020030759455918">You'll see your <ph name="SITE_NAME" /> sign-in status, browsing data and site data in Chrome</translation> -<translation id="2512164632052122970">Content languages</translation> <translation id="2513403576141822879">For more settings that relate to privacy, security and data collection, see <ph name="BEGIN_LINK" />Sync and Google services<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Scan</translation> <translation id="2523184218357549926">Sends URLs of pages that you visit to Google</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 b3020c7..96f0efd 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
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">Las descripciones de imágenes están desactivadas.</translation> <translation id="2172905120685242547">¿Deseas cerrar la ventana?</translation> <translation id="2175927920773552910">Código QR</translation> -<translation id="2176767904800337188">La tarjeta virtual oculta tu tarjeta real para protegerte contra posibles fraudes. <ph name="BEGIN_LINK1" />Obtén más información sobre las tarjetas virtuales<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Uso compartido</translation> <translation id="2189903024544168260">Se quitó el interés.</translation> <translation id="2194856509914051091">Aspectos para tener en cuenta</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">Historial de navegación</translation> <translation id="2497852260688568942">Tu administrador inhabilitó la sincronización</translation> <translation id="250020030759455918">Verás tu estado de acceso para <ph name="SITE_NAME" />, los datos de navegación y los datos del sitio en Chrome.</translation> -<translation id="2512164632052122970">Idiomas del contenido</translation> <translation id="2513403576141822879">Para obtener más opciones de configuración relacionadas con la privacidad, la seguridad y la recopilación de datos, visita <ph name="BEGIN_LINK" />Sincronización y servicios<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Buscar</translation> <translation id="2523184218357549926">Envía a Google las URL de las páginas que visitas</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb index 69f8a66..14fc6d6a 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_es.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">¿Desactivar sincronización?</translation> <translation id="1430915738399379752">Imprimir</translation> <translation id="1436784010935106834">Eliminado</translation> +<translation id="1437543266176261764">Se está ejecutando en <ph name="APP_NAME" /></translation> <translation id="1448440926884431741">Organiza los productos que sigues en Marcadores</translation> <translation id="1450753235335490080">No se ha podido compartir: <ph name="CONTENT_TYPE" /></translation> <translation id="1466383950273130737">Elegir idioma de Chrome</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Las descripciones de imágenes están desactivadas</translation> <translation id="2172905120685242547">¿Cerrar ventana?</translation> <translation id="2175927920773552910">Código QR</translation> -<translation id="2176767904800337188">Una tarjeta virtual oculta tu tarjeta real para protegerte frente a posibles fraudes. <ph name="BEGIN_LINK1" />Más información sobre tarjetas virtuales<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Compartir</translation> <translation id="2189903024544168260">Interés eliminado</translation> <translation id="2194856509914051091">Notas importantes</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Historial de navegación</translation> <translation id="2497852260688568942">El administrador ha inhabilitado la sincronización</translation> <translation id="250020030759455918">Verás tu estado de inicio de sesión, datos de navegación y datos del sitio de <ph name="SITE_NAME" /> en Chrome.</translation> -<translation id="2512164632052122970">Idiomas del contenido</translation> <translation id="2513403576141822879">Para ver más opciones relacionadas con la privacidad, la seguridad y la recogida de datos, accede a <ph name="BEGIN_LINK" />Sincronización y servicios de Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Escanear</translation> <translation id="2523184218357549926">Envía las URL de las páginas que visitas a Google</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb index 3520d615..acf2ad21 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_et.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Kas lülitada sünkroonimine välja?</translation> <translation id="1430915738399379752">Printimine</translation> <translation id="1436784010935106834">Eemaldatud</translation> +<translation id="1437543266176261764">Käitatakse rakenduses <ph name="APP_NAME" /></translation> <translation id="1448440926884431741">Korrastage jälgitavaid tooteid teenusega Bookmarks</translation> <translation id="1450753235335490080">Üksust <ph name="CONTENT_TYPE" /> ei saa jagada</translation> <translation id="1466383950273130737">Valige Chrome'i keel</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Pildikirjeldused on välja lülitatud</translation> <translation id="2172905120685242547">Kas sulgeda aken?</translation> <translation id="2175927920773552910">QR-kood</translation> -<translation id="2176767904800337188">Virtuaalkaart varjab teie päriskaarti, et teid võimalike pettuste eest kaitsta. <ph name="BEGIN_LINK1" />Lisateave virtuaalkaartide kohta<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Jagamine</translation> <translation id="2189903024544168260">Huvi eemaldati</translation> <translation id="2194856509914051091">Olulised aspektid</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Sirvimise ajalugu</translation> <translation id="2497852260688568942">Administraator on sünkroonimise keelanud</translation> <translation id="250020030759455918">Näete Chrome'is oma saidi <ph name="SITE_NAME" /> sisselogimise olekut, sirvimisandmeid ja saidi andmeid</translation> -<translation id="2512164632052122970">Sisu keeled</translation> <translation id="2513403576141822879">Privaatsuse, turvalisuse ning andmete kogumisega seotud lisaseadete nägemiseks avage valik <ph name="BEGIN_LINK" />Sünkroonimine ja Google'i teenused<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Kontrolli</translation> <translation id="2523184218357549926">Saadab Google'ile teie külastatud lehtede URL-id</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 32c8d29..80220a50 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
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Sinkronizazioa desaktibatu nahi duzu?</translation> <translation id="1430915738399379752">Inprimatu</translation> <translation id="1436784010935106834">Kendu egin da</translation> +<translation id="1437543266176261764"><ph name="APP_NAME" /> aplikazioan exekutatzen</translation> <translation id="1448440926884431741">Antolatu jarraipena egiten diezun produktuak Laster-markak atalean</translation> <translation id="1450753235335490080">Ezin da partekatu <ph name="CONTENT_TYPE" /></translation> <translation id="1466383950273130737">Hautatu Chrome-ren hizkuntza</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Desaktibatu dira irudien azalpenak</translation> <translation id="2172905120685242547">Leihoa itxi nahi duzu?</translation> <translation id="2175927920773552910">QR kodea</translation> -<translation id="2176767904800337188">Txartel birtualek benetako txartelak mozorrotzen dituzte, iruzurren aurka babestuago egon daitezen. <ph name="BEGIN_LINK1" />Lortu txartel birtualei buruzko informazio gehiago<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Partekatzea</translation> <translation id="2189903024544168260">Kendu da interesa</translation> <translation id="2194856509914051091">Kontuan hartu beharrekoak</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Arakatze-historia</translation> <translation id="2497852260688568942">Administratzaileak sinkronizazioa desgaitu du</translation> <translation id="250020030759455918"><ph name="SITE_NAME" /> webgunean saioa hasi duzun ala ez, arakatze-datuak eta webguneetako datuak ikusiko dituzu Chrome-n</translation> -<translation id="2512164632052122970">Edukiaren hizkuntzak</translation> <translation id="2513403576141822879">Pribatutasunarekin, segurtasunarekin eta datu-bilketarekin lotutako ezarpen gehiago ikusteko, joan <ph name="BEGIN_LINK" />Sinkronizazioa eta Google-ren zerbitzuak<ph name="END_LINK" /> atalera</translation> <translation id="2517472476991765520">Bilatu</translation> <translation id="2523184218357549926">Bisitatzen dituzun orrien URLak bidaltzen dizkio Google-ri</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 777a437..5a459f53 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
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">توضیحات تصویر خاموش است</translation> <translation id="2172905120685242547">پنجره بسته شود؟</translation> <translation id="2175927920773552910">رمزینه پاسخسریع</translation> -<translation id="2176767904800337188">کارت مجازی با پنهان کردن کارت واقعیتان از شما دربرابر کلاهبرداریهای احتمالی محافظت میکند. <ph name="BEGIN_LINK1" />درباره کارتهای مجازی بیشتر بدانید<ph name="END_LINK1" /></translation> <translation id="218608176142494674">همرسانی</translation> <translation id="2189903024544168260">علاقه برداشته شد</translation> <translation id="2194856509914051091">مواردی که باید درنظر داشت</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">سابقه مرور</translation> <translation id="2497852260688568942">سرپرستتان همگامسازی را غیرفعال کرده است</translation> <translation id="250020030759455918">وضعیت ورود به سیستم <ph name="SITE_NAME" />، دادههای محصول مرور، و دادههای سایت را در Chrome خواهید دید</translation> -<translation id="2512164632052122970">زبانهای محتوا</translation> <translation id="2513403576141822879">برای تنظیمات بیشتر مرتبط با حریم خصوصی، امنیت و جمعآوری دادهها، <ph name="BEGIN_LINK" />همگامسازی و سرویسهای Google<ph name="END_LINK" /> را ببینید</translation> <translation id="2517472476991765520">اسکن</translation> <translation id="2523184218357549926">نشانی وب صفحههایی را که بازدید میکنید برای Google ارسال میکند</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 e37bc54..4ee717a 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
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Laitetaanko synkronointi pois päältä?</translation> <translation id="1430915738399379752">Tulosta</translation> <translation id="1436784010935106834">Poistettu</translation> +<translation id="1437543266176261764">Käynnissä: <ph name="APP_NAME" /></translation> <translation id="1448440926884431741">Järjestele seurattuja tuotteita kirjanmerkeissä</translation> <translation id="1450753235335490080">Jakaminen ei onnistu: <ph name="CONTENT_TYPE" /></translation> <translation id="1466383950273130737">Valitse Chromen kieli</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Kuvaselitykset ovat poissa päältä</translation> <translation id="2172905120685242547">Suljetaanko ikkuna?</translation> <translation id="2175927920773552910">QR-koodi</translation> -<translation id="2176767904800337188">Virtuaalinen kortti salaa käyttämäsi kortin. Näin saat paremman suojauksen mahdollisia petoksia vastaan. <ph name="BEGIN_LINK1" />Lue lisää virtuaalisista korteista<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Jakaminen</translation> <translation id="2189903024544168260">Kiinnostuksen kohde poistettu</translation> <translation id="2194856509914051091">Huomioitavaa</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Selaushistoria</translation> <translation id="2497852260688568942">Järjestelmänvalvoja on poistanut synkronoinnin käytöstä.</translation> <translation id="250020030759455918">Näet kirjautumisen tilan, selausdatan ja sivustodatan (<ph name="SITE_NAME" />) Chromessa</translation> -<translation id="2512164632052122970">Sisällön kielet</translation> <translation id="2513403576141822879">Näet lisää yksityisyyteen, tietoturvaan ja datankeruuseen liittyviä asetuksia <ph name="BEGIN_LINK" />Synkronointi ja Google-palvelut<ph name="END_LINK" /> ‑kohdassa.</translation> <translation id="2517472476991765520">Etsi</translation> <translation id="2523184218357549926">Lähettää avaamiesi sivujen URL-osoitteet Googlelle</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb index e58e226..4087ec3 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fil.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">I-off ang pag-sync?</translation> <translation id="1430915738399379752">I-print</translation> <translation id="1436784010935106834">Inalis</translation> +<translation id="1437543266176261764">Tumatakbo sa <ph name="APP_NAME" /></translation> <translation id="1448440926884431741">Ayusin ang mga sinusubaybayan mong produkto sa Mga Bookmark</translation> <translation id="1450753235335490080">Hindi maibahagi ang <ph name="CONTENT_TYPE" /></translation> <translation id="1466383950273130737">Piliin ang wika ng Chrome</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Naka-off ang mga paglalarawan ng larawan</translation> <translation id="2172905120685242547">Isara ang window?</translation> <translation id="2175927920773552910">QR Code</translation> -<translation id="2176767904800337188">Pinagpapanggap ng virtual card ang iyong aktwal na card para makatulong na protektahan ka laban sa potensyal na panloloko. <ph name="BEGIN_LINK1" />Matuto pa tungkol sa mga virtual na card<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Pagbabahagi</translation> <translation id="2189903024544168260">Naalis na ang interes</translation> <translation id="2194856509914051091">Mga bagay na dapat isaalang-alang</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">History ng Pag-browse</translation> <translation id="2497852260688568942">Na-disable ng iyong administrator ang pag-sync</translation> <translation id="250020030759455918">Makikita mo sa Chrome ang iyong status ng pag-sign in sa <ph name="SITE_NAME" />, data mula sa pag-browse, at data ng site</translation> -<translation id="2512164632052122970">Mga wika ng content</translation> <translation id="2513403576141822879">Para sa higit pang setting na nauugnay sa privacy, seguridad, at pangongolekta ng data, tingnan ang <ph name="BEGIN_LINK" />Pag-sync at mga serbisyo ng Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">I-scan</translation> <translation id="2523184218357549926">Ipinapadala sa Google ang mga URL ng mga page na binibisita mo</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 7d28d18f..43c9188 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
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">Les descriptions d'images sont désactivées</translation> <translation id="2172905120685242547">Fermer la fenêtre?</translation> <translation id="2175927920773552910">Code QR</translation> -<translation id="2176767904800337188">Une carte virtuelle masque votre carte réelle pour vous protéger de fraudes potentielles. <ph name="BEGIN_LINK1" />En savoir plus sur les cartes virtuelles<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Partage</translation> <translation id="2189903024544168260">Centre d'intérêt retiré</translation> <translation id="2194856509914051091">Points à prendre en compte</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">Historique de navigation</translation> <translation id="2497852260688568942">La synchronisation est désactivée par votre administrateur</translation> <translation id="250020030759455918">Vous verrez votre état de connexion à <ph name="SITE_NAME" />, vos données de navigation et vos données de site dans Chrome</translation> -<translation id="2512164632052122970">Langues du contenu</translation> <translation id="2513403576141822879">Pour plus de paramètres relatifs à la confidentialité, à la sécurité et à la collecte de données, voir <ph name="BEGIN_LINK" />Synchronisation et services Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Rechercher</translation> <translation id="2523184218357549926">Envoie les URL des pages que vous consultez à Google</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb index 2f449b2..922ef84a 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_fr.xtb
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">Les descriptions d'images sont désactivées</translation> <translation id="2172905120685242547">Fermer la fenêtre ?</translation> <translation id="2175927920773552910">Code QR</translation> -<translation id="2176767904800337188">Une carte virtuelle masque votre carte réelle pour vous protéger des fraudes potentielles. <ph name="BEGIN_LINK1" />En savoir plus sur les cartes virtuelles<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Partage</translation> <translation id="2189903024544168260">Centre d'intérêt supprimé</translation> <translation id="2194856509914051091">Éléments à prendre en compte</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">Historique de navigation</translation> <translation id="2497852260688568942">Votre administrateur a désactivé la synchronisation</translation> <translation id="250020030759455918">Vous verrez votre état de connexion à <ph name="SITE_NAME" />, ainsi que vos données de navigation et les données du site dans Chrome</translation> -<translation id="2512164632052122970">Langues du contenu</translation> <translation id="2513403576141822879">Pour accéder à d'autres paramètres liés à la confidentialité, à la sécurité et à la collecte de données, consultez la section <ph name="BEGIN_LINK" />Services Google/Synchronisation<ph name="END_LINK" />.</translation> <translation id="2517472476991765520">Scanner</translation> <translation id="2523184218357549926">Envoie les URL des pages que vous consultez à Google</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb index b3cefd2..a1076b0 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gl.xtb
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">As descricións das imaxes están desactivadas</translation> <translation id="2172905120685242547">Queres pechar a ventá?</translation> <translation id="2175927920773552910">Código QR</translation> -<translation id="2176767904800337188">As tarxetas virtuais ocultan as tarxetas reais para protexerte de posibles fraudes. <ph name="BEGIN_LINK1" />Máis información sobre as tarxetas virtuais<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Uso compartido</translation> <translation id="2189903024544168260">Quitouse o interese</translation> <translation id="2194856509914051091">Cuestións que se deben ter en conta</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">Historial de navegación</translation> <translation id="2497852260688568942">O administrador desactivou a sincronización</translation> <translation id="250020030759455918">Poderás ver o teu estado de inicio de sesión de <ph name="SITE_NAME" />, os teus datos de navegación e os datos do sitio en Chrome</translation> -<translation id="2512164632052122970">Idiomas do contido</translation> <translation id="2513403576141822879">Para ver máis opcións relacionadas coa configuración da privacidade, seguranza e recompilación de datos, consulta <ph name="BEGIN_LINK" />Sincronización e servizos de Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Buscar</translation> <translation id="2523184218357549926">Envía a Google os URL das páxinas que visitas</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb index 4aae4e5..78bb2c6 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_gu.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">સિંક બંધ કરીએ?</translation> <translation id="1430915738399379752">પ્રિન્ટ</translation> <translation id="1436784010935106834">દૂર કરેલું</translation> +<translation id="1437543266176261764"><ph name="APP_NAME" />માં ચાલી રહી છે</translation> <translation id="1448440926884431741">Bookmarksમાં તમારી ટ્રૅક કરેલી પ્રોડક્ટની ગોઠવણ કરો</translation> <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> શેર કરી શકતાં નથી</translation> <translation id="1466383950273130737">Chromeની ભાષા પસંદ કરો</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">છબીના વર્ણનોની સુવિધા બંધ છે</translation> <translation id="2172905120685242547">વિન્ડો બંધ કરીએ?</translation> <translation id="2175927920773552910">QR કોડ</translation> -<translation id="2176767904800337188">સંભવિત કપટથી તમારું સંરક્ષણ કરવા માટે, વર્ચ્યુઅલ કાર્ડ તમારા વાસ્તવિક કાર્ડની ઓળખ છુપાવે છે. <ph name="BEGIN_LINK1" />વર્ચ્યુઅલ કાર્ડ વિશે વધુ જાણો<ph name="END_LINK1" /></translation> <translation id="218608176142494674">શેરિંગ</translation> <translation id="2189903024544168260">રુચિ કાઢી નાખી</translation> <translation id="2194856509914051091">ધ્યાનમાં લેવા જેવી બાબતો</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">બ્રાઉઝિંગ ઇતિહાસ</translation> <translation id="2497852260688568942">સમન્વયન, તમારા વ્યવસ્થાપક દ્વારા અક્ષમ કરવામાં આવ્યું છે</translation> <translation id="250020030759455918">તમને Chromeમાં તમારું <ph name="SITE_NAME" />નું સાઇન ઇન સ્ટેટસ, બ્રાઉઝિંગ ડેટા અને સાઇટ ડેટા દેખાશે</translation> -<translation id="2512164632052122970">કન્ટેન્ટની ભાષાઓ</translation> <translation id="2513403576141822879">ગોપનીયતા, સુરક્ષા, અને ડેટા સંગ્રહથી સંબંધિત વધુ સેટિંગ માટે, <ph name="BEGIN_LINK" />સિંક અને Google સેવાઓ<ph name="END_LINK" /> જુઓ</translation> <translation id="2517472476991765520">સ્કૅન કરો</translation> <translation id="2523184218357549926">તમે મુલાકાત લો તે પેજના URLs Googleને મોકલે છે</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb index 5cd7bbb..f6f47d5f 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hi.xtb
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">इमेज की जानकारी जोड़ने की सुविधा बंद कर दी गई है</translation> <translation id="2172905120685242547">क्या आप विंडो बंद करना चाहते हैं?</translation> <translation id="2175927920773552910">क्यूआर कोड</translation> -<translation id="2176767904800337188">वर्चुअल कार्ड आपके असली कार्ड की पहचान ज़ाहिर नहीं होने देता है. इससे, आपको धोखाधड़ी से बचने में मदद मिलती है. <ph name="BEGIN_LINK1" />वर्चुअल कार्ड के बारे में ज़्यादा जानें<ph name="END_LINK1" /></translation> <translation id="218608176142494674">शेयर किया जा रहा है</translation> <translation id="2189903024544168260">पसंद का विषय हटाया गया</translation> <translation id="2194856509914051091">इन बातों का ध्यान रखें</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">ब्राउज़िंग इतिहास</translation> <translation id="2497852260688568942">सिंक को आपके व्यवस्थापक ने अक्षम कर दिया है</translation> <translation id="250020030759455918">आपको Chrome में अपनी <ph name="SITE_NAME" /> की साइन इन स्थिति, ब्राउज़िंग डेटा, और साइट डेटा दिखेगा</translation> -<translation id="2512164632052122970">कॉन्टेंट की भाषाएं</translation> <translation id="2513403576141822879">निजता, सुरक्षा और डेटा इकट्ठा करने से जुड़ी ज़्यादा सेटिंग के लिए, <ph name="BEGIN_LINK" />सिंक और Google सेवाएं<ph name="END_LINK" /> देखें</translation> <translation id="2517472476991765520">स्कैन करें</translation> <translation id="2523184218357549926">आप जिन पेजों पर जाते हैं उनके यूआरएल Google को भेजती है</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb index 40f6d29..6eeb4d65 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_hr.xtb
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">Isključeni su opisi slika</translation> <translation id="2172905120685242547">Zatvoriti prozor?</translation> <translation id="2175927920773552910">QR kôd</translation> -<translation id="2176767904800337188">Virtualna kartica skriva vašu stvarnu karticu kako bi vas bolje zaštitila od potencijalne prijevare. <ph name="BEGIN_LINK1" />Saznajte više o virtualnim karticama<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Dijeljenje</translation> <translation id="2189903024544168260">Interes je uklonjen</translation> <translation id="2194856509914051091">Važne napomene</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">Povijest pregledavanja</translation> <translation id="2497852260688568942">Administrator je onemogućio sinkronizaciju</translation> <translation id="250020030759455918">Vidjet ćete svoj status prijave na <ph name="SITE_NAME" />, podatke o pregledavanju i podatke web-lokacije u Chromeu</translation> -<translation id="2512164632052122970">Jezici sadržaja</translation> <translation id="2513403576141822879">Više postavki koje se odnose na privatnost, sigurnost i prikupljanje podataka dostupno je u odjeljku <ph name="BEGIN_LINK" />Sinkronizacija i prilagodba<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Traži</translation> <translation id="2523184218357549926">Šalje Googleu URL-ove stranica koje posjećujete</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 57182bf..6103af2f 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
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Kikapcsolja a szinkronizálást?</translation> <translation id="1430915738399379752">Nyomtatás</translation> <translation id="1436784010935106834">Eltávolítva</translation> +<translation id="1437543266176261764">Itt fut: <ph name="APP_NAME" /></translation> <translation id="1448440926884431741">A nyomon követett termékeket a Könyvjelzők között rendszerezheti</translation> <translation id="1450753235335490080">Nem sikerült a(z) <ph name="CONTENT_TYPE" /> megosztása</translation> <translation id="1466383950273130737">Chrome nyelvének kiválasztása</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">A képleírások ki vannak kapcsolva</translation> <translation id="2172905120685242547">Bezárja az ablakot?</translation> <translation id="2175927920773552910">QR-kód</translation> -<translation id="2176767904800337188">A virtuális kártya álcázza a tényleges kártyáját, így segíthet az esetleges csalások elleni védekezésben. <ph name="BEGIN_LINK1" />További információ a virtuális kártyákról<ph name="END_LINK1" />.</translation> <translation id="218608176142494674">Megosztás</translation> <translation id="2189903024544168260">Érdeklődési kör eltávolítva</translation> <translation id="2194856509914051091">Megfontolandó szempontok</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Böngészés előzményei</translation> <translation id="2497852260688568942">A szinkronizálást letiltotta a rendszergazda</translation> <translation id="250020030759455918">Láthatja a(z) <ph name="SITE_NAME" /> bejelentkezési állapotát, a böngészőadatokat és a webhelyadatokat a Chrome-ban</translation> -<translation id="2512164632052122970">Tartalmak nyelvei</translation> <translation id="2513403576141822879">A <ph name="BEGIN_LINK" />Szinkronizálás és Google<ph name="END_LINK" /> részben további beállításokat talál az adatvédelemre, biztonságra és adatgyűjtésre vonatkozóan</translation> <translation id="2517472476991765520">Keresés</translation> <translation id="2523184218357549926">A felkeresett oldalak URL-címének elküldése a Google-nak</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 9841705..e1d2195 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
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Անջատե՞լ համաժամացումը</translation> <translation id="1430915738399379752">Տպում</translation> <translation id="1436784010935106834">Հեռացված</translation> +<translation id="1437543266176261764">Կատարվում է <ph name="APP_NAME" />-ում</translation> <translation id="1448440926884431741">Էջանիշներում դասավորեք ապրանքները, որոնց հետևում եք</translation> <translation id="1450753235335490080">Չհաջողվեց ուղարկել բովանդակությունը (<ph name="CONTENT_TYPE" />)</translation> <translation id="1466383950273130737">Ընտրեք Chrome-ի լեզուն</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Պատկերների նկարագրություններն անջատված են</translation> <translation id="2172905120685242547">Փակե՞լ պատուհանը</translation> <translation id="2175927920773552910">QR կոդ</translation> -<translation id="2176767904800337188">Վիրտուալ քարտը թաքցնում է ձեր իրական քարտը՝ օգնելով պաշտպանել ձեզ հնարավոր խարդախությունից։ <ph name="BEGIN_LINK1" />Իմանալ ավելին վիրտուալ քարտերի մասին<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Ընդհանուր օգտագործում</translation> <translation id="2189903024544168260">Հետաքրքրությունը հեռացվեց</translation> <translation id="2194856509914051091">Կարևոր տեղեկություններ</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Դիտարկումների պատմություն</translation> <translation id="2497852260688568942">Ձեր ադմինիստրատորն անջատել է համաժամացումը</translation> <translation id="250020030759455918">Դուք կտեսնեք ձեր <ph name="SITE_NAME" /> հաշվի մուտքի կարգավիճակը, այցելությունների պատմությունը և կայքի տվյալները Chrome-ում</translation> -<translation id="2512164632052122970">Բովանդակության լեզուները</translation> <translation id="2513403576141822879"><ph name="BEGIN_LINK" />Համաժամացում և Google-ի ծառայություններ<ph name="END_LINK" /> բաժնում դուք կարող եք գտնել գաղտնիության, անվտանգության և տվյալների հավաքման հետ կապված լրացուցիչ կարգավորումներ։</translation> <translation id="2517472476991765520">Որոնել</translation> <translation id="2523184218357549926">Ձեր այցելած էջերի URL-ներն ուղարկում է Google-ին</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb index 2dd8d86c..89f6b1e 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_id.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Nonaktifkan sinkronisasi?</translation> <translation id="1430915738399379752">Cetak</translation> <translation id="1436784010935106834">Dihapus</translation> +<translation id="1437543266176261764">Berjalan di <ph name="APP_NAME" /></translation> <translation id="1448440926884431741">Atur produk yang dipantau di Bookmark</translation> <translation id="1450753235335490080">Tidak dapat membagikan <ph name="CONTENT_TYPE" /></translation> <translation id="1466383950273130737">Pilih bahasa Chrome</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Deskripsi gambar nonaktif</translation> <translation id="2172905120685242547">Tutup jendela?</translation> <translation id="2175927920773552910">Kode QR</translation> -<translation id="2176767904800337188">Kartu virtual menyamarkan kartu Anda yang sebenarnya untuk membantu melindungi Anda dari kemungkinan penipuan. <ph name="BEGIN_LINK1" />Pelajari kartu virtual lebih lanjut<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Berbagi</translation> <translation id="2189903024544168260">Minat dihapus</translation> <translation id="2194856509914051091">Hal-hal yang perlu dipertimbangkan</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Histori penjelajahan</translation> <translation id="2497852260688568942">Sinkronisasi dinonaktifkan oleh administrator</translation> <translation id="250020030759455918">Di Chrome, Anda akan melihat status login, data penjelajahan, dan data situs <ph name="SITE_NAME" /></translation> -<translation id="2512164632052122970">Bahasa konten</translation> <translation id="2513403576141822879">Untuk setelan lainnya yang berkaitan dengan privasi, keamanan, dan pengumpulan data, lihat <ph name="BEGIN_LINK" />Sinkronisasi dan layanan Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Pindai</translation> <translation id="2523184218357549926">Mengirimkan URL halaman yang Anda buka ke Google</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb index e76e403..d8900ca 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_is.xtb
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">Slökkt er á lýsingum mynda</translation> <translation id="2172905120685242547">Loka glugga?</translation> <translation id="2175927920773552910">QR-kóði</translation> -<translation id="2176767904800337188">Sýndarkort dulbýr raunverulega kortið þitt og hjálpar þannig til við að koma í veg fyrir svik. <ph name="BEGIN_LINK1" />Nánar um sýndarkort<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Deiling</translation> <translation id="2189903024544168260">Áhugasvið fjarlægt</translation> <translation id="2194856509914051091">Atriði til að hafa í huga</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">Vafraferill</translation> <translation id="2497852260688568942">Kerfisstjóri hefur gert samstillingu óvirka</translation> <translation id="250020030759455918">Þú sérð innskráningarstöðu þína, vafragögn og vefsvæðagögn fyrir <ph name="SITE_NAME" /> í Chrome.</translation> -<translation id="2512164632052122970">Tungumál innihalds</translation> <translation id="2513403576141822879">Frekari upplýsingar sem tengjast persónuvernd, öryggi og gagnasöfnun má finna í <ph name="BEGIN_LINK" />Samstilling og sérstillingar<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Leita</translation> <translation id="2523184218357549926">Sendir vefslóðir síðna sem þú skoðar til Google</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 a716215..a86afee 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
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">Le descrizioni delle immagini sono disattivate</translation> <translation id="2172905120685242547">Chiudere la finestra?</translation> <translation id="2175927920773552910">Codice QR</translation> -<translation id="2176767904800337188">Una carta virtuale nasconde la tua carta effettiva per proteggerti meglio da potenziali attività fraudolente. <ph name="BEGIN_LINK1" />Scopri di più sulle carte virtuali<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Condivisione</translation> <translation id="2189903024544168260">Interesse rimosso</translation> <translation id="2194856509914051091">Aspetti da considerare</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">Cronologia di navigazione</translation> <translation id="2497852260688568942">La sincronizzazione è stata disattivata dall'amministratore</translation> <translation id="250020030759455918">Troverai lo stato di accesso a <ph name="SITE_NAME" />, i dati di navigazione e i dati relativi al sito in Chrome</translation> -<translation id="2512164632052122970">Lingue dei contenuti</translation> <translation id="2513403576141822879">Per altre impostazioni relative a privacy, sicurezza e raccolta dei dati, consulta la sezione <ph name="BEGIN_LINK" />Sincronizzazione e servizi Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Scansiona</translation> <translation id="2523184218357549926">Invia a Google gli URL delle pagine che visiti</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 e0eaeecb..ffd44c57 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
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">התכונה 'תיאורי תמונות' מושבתת</translation> <translation id="2172905120685242547">לסגור את החלון?</translation> <translation id="2175927920773552910">קוד QR</translation> -<translation id="2176767904800337188">כרטיס וירטואלי מסווה את הכרטיס שלך בפועל כדי להגן עליך מפני תרמיות פוטנציאליות. <ph name="BEGIN_LINK1" />כאן מפורט מידע נוסף על כרטיסים וירטואליים<ph name="END_LINK1" /></translation> <translation id="218608176142494674">שיתוף</translation> <translation id="2189903024544168260">תחום העניין הוסר</translation> <translation id="2194856509914051091">מה כדאי לקחת בחשבון</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">היסטוריית גלישה</translation> <translation id="2497852260688568942">מנהל המערכת שלך השבית את הסנכרון</translation> <translation id="250020030759455918">ב-Chrome יוצגו סטטוס הכניסה שלך ל-<ph name="SITE_NAME" />, נתוני הגלישה ונתוני האתר</translation> -<translation id="2512164632052122970">שפות תוכן</translation> <translation id="2513403576141822879">אפשר למצוא הגדרות נוספות בנושא פרטיות, אבטחה ואיסוף נתונים בדף <ph name="BEGIN_LINK" />סנכרון ושירותי Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">סריקה</translation> <translation id="2523184218357549926">שליחת כתובות אתרים של דפים שבהם ביקרת ל-Google</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 1714e84..f20be31 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
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">同期を OFF にしますか?</translation> <translation id="1430915738399379752">印刷</translation> <translation id="1436784010935106834">削除しました</translation> +<translation id="1437543266176261764"><ph name="APP_NAME" /> で実行中</translation> <translation id="1448440926884431741">ブックマークでトラッキングしている商品を整理できます</translation> <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> を共有できません</translation> <translation id="1466383950273130737">Chrome の言語を選択</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">画像の説明をオフにしました</translation> <translation id="2172905120685242547">ウィンドウを閉じますか?</translation> <translation id="2175927920773552910">QR コード</translation> -<translation id="2176767904800337188">仮想カードは、実際のカードの代わりとして機能し、不正行為から保護します。<ph name="BEGIN_LINK1" />仮想カードの詳細<ph name="END_LINK1" /></translation> <translation id="218608176142494674">共有</translation> <translation id="2189903024544168260">興味 / 関心を削除しました</translation> <translation id="2194856509914051091">留意事項</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">閲覧履歴</translation> <translation id="2497852260688568942">同期は管理者により無効にされています</translation> <translation id="250020030759455918">Chrome での <ph name="SITE_NAME" /> のログイン ステータス、閲覧データ、サイトデータが表示されます。</translation> -<translation id="2512164632052122970">コンテンツの言語</translation> <translation id="2513403576141822879">プライバシー、セキュリティ、データ収集に関連するその他の設定については、<ph name="BEGIN_LINK" />同期と Google サービス<ph name="END_LINK" />をご覧ください</translation> <translation id="2517472476991765520">スキャン</translation> <translation id="2523184218357549926">アクセスしたページの URL を Google に送信します</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb index 52deb84..ff926c6 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ka.xtb
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">სურათების აღწერილობები გამორთულია</translation> <translation id="2172905120685242547">გსურთ, დახუროთ ფანჯარა?</translation> <translation id="2175927920773552910">QR კოდი</translation> -<translation id="2176767904800337188">ვირტუალური ბარათი შენიღბავს თქვენს რეალურ ბარათს, რაც დაგიცავთ თაღლითობის პოტენციური შემთხვევებისგან. <ph name="BEGIN_LINK1" />შეიტყვეთ მეტი ვირტუალური ბარათების შესახებ<ph name="END_LINK1" /></translation> <translation id="218608176142494674">გაზიარება</translation> <translation id="2189903024544168260">ინტერესი წაიშალა</translation> <translation id="2194856509914051091">გასათვალისწინებელი საკითხები</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">ნახვის ისტორია</translation> <translation id="2497852260688568942">სინქრონიზაცია გათიშულია თქვენი ადმინისტრატორის მიერ</translation> <translation id="250020030759455918">Chrome-ში იხილავთ როგორც <ph name="SITE_NAME" />-ში შესვლის სტატუსს, ისე დათვალიერების/საიტის მონაცემებს</translation> -<translation id="2512164632052122970">კონტენტის ენები</translation> <translation id="2513403576141822879">კონფიდენციალურობასთან, უსაფრთხოებასთან და მონაცემთა შეგროვებასთან დაკავშირებული სხვა პარამეტრებისთვის იხილეთ <ph name="BEGIN_LINK" />სინქრონიზაცია და Google-ის სერვისები<ph name="END_LINK" /></translation> <translation id="2517472476991765520">სკანირება</translation> <translation id="2523184218357549926">Google-ს უგზავნის თქვენ მიერ მონახულებული გვერდების URL-ებს</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb index e84fa482..240b07a 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_kk.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Синхрондау өшірілсін бе?</translation> <translation id="1430915738399379752">Басып шығару</translation> <translation id="1436784010935106834">Жойылды</translation> +<translation id="1437543266176261764"><ph name="APP_NAME" /> қолданбасында орындалуда</translation> <translation id="1448440926884431741">Бақыланатын өнімдерді "Бетбелгілер" бөлімінен реттеңіз.</translation> <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> бөлісу мүмкін емес</translation> <translation id="1466383950273130737">Chrome тілін таңдаңыз</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Кескін сипаттамалары өшірулі.</translation> <translation id="2172905120685242547">Терезені жабу керек пе?</translation> <translation id="2175927920773552910">QR коды</translation> -<translation id="2176767904800337188">Виртуалдық карта қолданыстағы картаны алаяқтықтан қорғауға көмектеседі. <ph name="BEGIN_LINK1" />Виртуалдық карталар туралы толығырақ ақпарат алыңыз.<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Бөлісу</translation> <translation id="2189903024544168260">Қызығушылық өшірілді.</translation> <translation id="2194856509914051091">Ескеретін жайттар</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Шолу журналы</translation> <translation id="2497852260688568942">Синхрондау мүмкіндігін әкімші өшіріп қойған</translation> <translation id="250020030759455918"><ph name="SITE_NAME" /> сайтына кіру күйін, браузерді пайдалану деректерін және Chrome-дағы сайт деректерін көресіз.</translation> -<translation id="2512164632052122970">Мазмұн тілдері</translation> <translation id="2513403576141822879">Құпиялылық, қауіпсіздік және дерек жинағына қатысты басқа да параметрлерді <ph name="BEGIN_LINK" />Синхрондау және Google қызметтері<ph name="END_LINK" /> бөлімінен қараңыз</translation> <translation id="2517472476991765520">Іздеу</translation> <translation id="2523184218357549926">Кірген беттердің URL мекенжайларын Google-ға жібереді</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb index 999d9eef..7c4eb8d4 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_km.xtb
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">ការពណ៌នាអំពីរូបភាពត្រូវបានបិទ</translation> <translation id="2172905120685242547">បិទវិនដូឬ?</translation> <translation id="2175927920773552910">កូដ QR</translation> -<translation id="2176767904800337188">កាតនិម្មិតក្លែងធ្វើជាកាតពិតប្រាកដរបស់អ្នក ដើម្បីជួយការពារអ្នកពីការគៃបន្លំដែលអាចកើតមាន។ <ph name="BEGIN_LINK1" />ស្វែងយល់បន្ថែមអំពីកាតនិម្មិត<ph name="END_LINK1" /></translation> <translation id="218608176142494674">ការចែករំលែក</translation> <translation id="2189903024544168260">ចំណាប់អារម្មណ៍ត្រូវបានដកចេញ</translation> <translation id="2194856509914051091">ចំណុចដែលត្រូវពិចារណា</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">ប្រវត្តិរុករក</translation> <translation id="2497852260688568942">សមកាលកម្មបានបិទដោយអ្នកគ្រប់គ្រងរបស់អ្នក</translation> <translation id="250020030759455918">អ្នកនឹងមើលឃើញស្ថានភាពចូល <ph name="SITE_NAME" />, ទិន្នន័យរុករក និងទិន្នន័យគេហទំព័ររបស់អ្នកនៅក្នុង Chrome</translation> -<translation id="2512164632052122970">ភាសារបស់ខ្លឹមសារ</translation> <translation id="2513403576141822879">សម្រាប់ការកំណត់ច្រើនទៀតពាក់ព័ន្ធនឹងឯកជនភាព សុវត្ថិភាព និងការប្រមូលទិន្នន័យ សូមមើល<ph name="BEGIN_LINK" />សមកាលកម្ម និងសេវាកម្ម Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">ស្កេន</translation> <translation id="2523184218357549926">ផ្ញើ URL នៃទំព័រដែលអ្នកចូលមើលទៅ Google</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 75b9869..c715f114 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
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">ಚಿತ್ರ ವಿವರಣೆಗಳು ಆಫ್ ಆಗಿವೆ</translation> <translation id="2172905120685242547">ವಿಂಡೋವನ್ನು ಮುಚ್ಚಬೇಕೆ?</translation> <translation id="2175927920773552910">QR ಕೋಡ್</translation> -<translation id="2176767904800337188">ವರ್ಚುವಲ್ ಕಾರ್ಡ್ ಸಂಭಾವ್ಯ ವಂಚನೆಯಿಂದ ನಿಮ್ಮನ್ನು ರಕ್ಷಿಸಲು ನಿಮ್ಮ ನಿಜವಾದ ಕಾರ್ಡ್ಗೆ ಮಾರುವೇಷ ತೊಡಿಸುತ್ತದೆ. <ph name="BEGIN_LINK1" />ವರ್ಚುವಲ್ ಕಾರ್ಡ್ಗಳ ಕುರಿತು ಇನ್ನಷ್ಟು ತಿಳಿಯಿರಿ<ph name="END_LINK1" /></translation> <translation id="218608176142494674">ಹಂಚಿಕೆ</translation> <translation id="2189903024544168260">ಆಸಕ್ತಿಯನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ</translation> <translation id="2194856509914051091">ಪರಿಗಣಿಸಬೇಕಾದ ಸಂಗತಿಗಳು</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">ಬ್ರೌಸಿಂಗ್ ಇತಿಹಾಸ</translation> <translation id="2497852260688568942">ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸಿಂಕ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದ್ದಾರೆ</translation> <translation id="250020030759455918">ನಿಮ್ಮ <ph name="SITE_NAME" /> ಸೈನ್-ಇನ್ ಸ್ಥಿತಿ, ಬ್ರೌಸಿಂಗ್ ಡೇಟಾ ಮತ್ತು ಸೈಟ್ ಡೇಟಾವನ್ನು Chrome ನಲ್ಲಿ ನೋಡುವಿರಿ</translation> -<translation id="2512164632052122970">ವಿಷಯದ ಭಾಷೆಗಳು</translation> <translation id="2513403576141822879">ಗೌಪ್ಯತೆ, ಸುರಕ್ಷತೆ ಮತ್ತು ಡೇಟಾ ಸಂಗ್ರಹಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಹೆಚ್ಚಿನ ಸೆಟ್ಟಿಂಗ್ಗಳಿಗಾಗಿ <ph name="BEGIN_LINK" />ಸಿಂಕ್ ಮತ್ತು Google ಸೇವೆಗಳನ್ನು<ph name="END_LINK" /> ನೋಡಿ</translation> <translation id="2517472476991765520">ಸ್ಕ್ಯಾನ್</translation> <translation id="2523184218357549926">ನೀವು ಭೇಟಿ ನೀಡುವ ಪುಟಗಳ URLಗಳನ್ನು Google ಗೆ ಕಳುಹಿಸುತ್ತದೆ</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 e0f966e..76f9f1e 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
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">동기화를 사용 중지하시겠습니까?</translation> <translation id="1430915738399379752">인쇄</translation> <translation id="1436784010935106834">삭제됨</translation> +<translation id="1437543266176261764"><ph name="APP_NAME" />에서 실행 중</translation> <translation id="1448440926884431741">추적 중인 제품을 북마크로 정리하세요.</translation> <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> 공유할 수 없음</translation> <translation id="1466383950273130737">Chrome 언어 선택</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">이미지 설명 사용 중지됨</translation> <translation id="2172905120685242547">창을 닫으시겠습니까?</translation> <translation id="2175927920773552910">QR 코드</translation> -<translation id="2176767904800337188">가상 카드는 실제 카드를 숨겨서 사기당할 위험을 줄여줍니다. <ph name="BEGIN_LINK1" />가상 카드 자세히 알아보기<ph name="END_LINK1" /></translation> <translation id="218608176142494674">공유</translation> <translation id="2189903024544168260">관심분야 삭제됨</translation> <translation id="2194856509914051091">고려사항</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">인터넷 사용 기록</translation> <translation id="2497852260688568942">관리자가 동기화를 사용 중지했습니다.</translation> <translation id="250020030759455918">Chrome에서 <ph name="SITE_NAME" /> 로그인 상태, 인터넷 사용 기록, 사이트 데이터를 볼 수 있습니다.</translation> -<translation id="2512164632052122970">콘텐츠 언어</translation> <translation id="2513403576141822879">개인정보 보호, 보안, 데이터 수집에 관한 설정을 더 보려면 <ph name="BEGIN_LINK" />동기화 및 Google 서비스<ph name="END_LINK" />를 참조하세요.</translation> <translation id="2517472476991765520">검색</translation> <translation id="2523184218357549926">방문한 페이지의 URL을 Google에 전송</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb index 28bddf4..7d6bb65 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ky.xtb
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">Сүрөттөмөлөр өчүк</translation> <translation id="2172905120685242547">Терезе жабылсынбы?</translation> <translation id="2175927920773552910">QR коду</translation> -<translation id="2176767904800337188">Шылуундуктан коргоого көмөктөшүү үчүн виртуалдык карта чыныгы картаңыздын маалыматын жашырат. <ph name="BEGIN_LINK1" />Виртуалдык карталар жөнүндө кеңири маалымат алыңыз<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Бөлүшүү</translation> <translation id="2189903024544168260">Кызыккан нерсеңиз тууралуу маалымат өчүрүлдү</translation> <translation id="2194856509914051091">Эске ала турган нерселер</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">Серептөө таржымалы</translation> <translation id="2497852260688568942">Шайкештирүү функциясын администраторуңуз өчүрүп койгон</translation> <translation id="250020030759455918">Chrome'до <ph name="SITE_NAME" /> сайтына кирүү статусуңузду, серептөө дайындарын жана сайттын маалыматын көрөсүз</translation> -<translation id="2512164632052122970">Мазмун тилдери</translation> <translation id="2513403576141822879">Купуялыкка, коопсуздукка жана дайындарды чогултууга байланыштуу дагы башка жөндөөлөрдү көрүү үчүн <ph name="BEGIN_LINK" />Шайкештирүү жана Google кызматтары<ph name="END_LINK" /> бөлүмүнө өтүңүз</translation> <translation id="2517472476991765520">Скандоо</translation> <translation id="2523184218357549926">Баш баккан барактарыңыздын URL'дерин Google'га жөнөтөт</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb index 25e2998c3..94b4582 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lo.xtb
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">ຄຳອະທິບາຍຮູບພາບປິດຢູ່</translation> <translation id="2172905120685242547">ປິດໜ້າຈໍບໍ?</translation> <translation id="2175927920773552910">ລະຫັດ QR</translation> -<translation id="2176767904800337188">ບັດສະເໝືອນຈະປອມແປງບັດແທ້ຂອງທ່ານເພື່ອຊ່ວຍປົກປ້ອງທ່ານຈາກຄວາມສ່ຽງໃນການສໍ້ໂກງ. <ph name="BEGIN_LINK1" />ສຶກສາເພີ່ມເຕີມກ່ຽວກັບບັດສະເໝືອນ<ph name="END_LINK1" /></translation> <translation id="218608176142494674">ການແບ່ງປັນ</translation> <translation id="2189903024544168260">ລຶບຄວາມສົນໃຈອອກແລ້ວ</translation> <translation id="2194856509914051091">ສິ່ງທີ່ຕ້ອງພິຈາລະນາ</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">ປະຫວັດການທ່ອງເວັບ</translation> <translation id="2497852260688568942">ການຊິ້ງຂໍ້ມູນຖືກປິດນຳໃຊ້ໂດຍຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ</translation> <translation id="250020030759455918">ທ່ານຈະເຫັນສະຖານະການເຂົ້າສູ່ລະບົບ <ph name="SITE_NAME" />, ຂໍ້ມູນການທ່ອງເວັບ ແລະ ຂໍ້ມູນເວັບໄຊຂອງທ່ານໃນ Chrome</translation> -<translation id="2512164632052122970">ພາສາເນື້ອຫາ</translation> <translation id="2513403576141822879">ສຳລັບການຕັ້ງຄ່າເພີ່ມເຕີມທີ່ກ່ຽວຂ້ອງກັບຄວາມເປັນສ່ວນຕົວ, ຄວາມປອດໄພ ແລະ ການເກັບຂໍ້ມູນ, ກະລຸນາເບິ່ງ <ph name="BEGIN_LINK" />ການຊິ້ງຂໍ້ມູນ ແລະ ການບໍລິການຂອງ Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">ສະແກນ</translation> <translation id="2523184218357549926">ສົ່ງ URL ຂອງໜ້າຕ່າງໆທີ່ທ່ານເຂົ້າເບິ່ງໃຫ້ Google</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb index 94146c8..54caeec8 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lt.xtb
@@ -117,7 +117,7 @@ <translation id="1538801903729528855">Dar geriau išnaudokite veiksmų balsu galimybes žiniatinklyje</translation> <translation id="1544826120773021464">Jei norite tvarkyti „Google“ paskyrą, palieskite mygtuką „Tvarkyti“</translation> <translation id="1549000191223877751">Perkelti į kitą langą</translation> -<translation id="1553358976309200471">Atnaujinkite „Chrome“</translation> +<translation id="1553358976309200471">Atnaujinti „Chrome“</translation> <translation id="1554532453982918912">Padėkite tobulinti „Chrome“ žmonėms, naudojantiems ją kaip jūs</translation> <translation id="1558391695376153246">Uždaryti inkogn. skirtukus</translation> <translation id="1571304935088121812">Kopijuoti naudotojo vardą</translation> @@ -223,7 +223,6 @@ <translation id="2172688499998841696">Vaizdų aprašai išjungti</translation> <translation id="2172905120685242547">Uždaryti langą?</translation> <translation id="2175927920773552910">QR kodas</translation> -<translation id="2176767904800337188">Virtualioji kortelė maskuoja tikrąją kortelę, kad padėtų apsaugoti jus nuo galimų apgaulių. <ph name="BEGIN_LINK1" />Sužinokite daugiau apie virtualiąsias korteles<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Bendrinimas</translation> <translation id="2189903024544168260">Pomėgis pašalintas</translation> <translation id="2194856509914051091">Į ką reikėtų atsižvelgti</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">Naršymo istorija</translation> <translation id="2497852260688568942">Sinchronizavimą išjungė jūsų administratorius</translation> <translation id="250020030759455918">Matysite <ph name="SITE_NAME" /> prisijungimo būseną, naršymo duomenis ir svetainės duomenis sistemoje „Chrome“</translation> -<translation id="2512164632052122970">Turinio kalbos</translation> <translation id="2513403576141822879">Daugiau nustatymų, susijusių su privatumu, sauga ir duomenų rinkimu, žr. skiltyje <ph name="BEGIN_LINK" />„Sinchronizavimas ir „Google“ paslaugos“<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Nuskaityti</translation> <translation id="2523184218357549926">Siunčiami „Google“ puslapių, kuriuose lankotės, URL</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb index 5e55b0c18..1b1c7881 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_lv.xtb
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">Attēlu aprakstu pievienošana ir izslēgta</translation> <translation id="2172905120685242547">Vai aizvērt logu?</translation> <translation id="2175927920773552910">kvadrātkods</translation> -<translation id="2176767904800337188">Virtuāla karte nomaskē jūsu patieso karti, lai efektīvāk aizsargātu jūs pret iespējamu krāpšanu. <ph name="BEGIN_LINK1" />Uzziniet vairāk par virtuālajām kartēm<ph name="END_LINK1" />.</translation> <translation id="218608176142494674">Kopīgošana</translation> <translation id="2189903024544168260">Interese ir noņemta</translation> <translation id="2194856509914051091">Svarīgi apsvērumi</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">Pārlūkošanas vēsture</translation> <translation id="2497852260688568942">Administrators ir atspējojis sinhronizēšanu.</translation> <translation id="250020030759455918">Tiks rādīts jūsu pierakstīšanās statuss vietnē <ph name="SITE_NAME" />, pārlūkošanas dati un vietnes dati pārlūkā Chrome.</translation> -<translation id="2512164632052122970">Satura valodas</translation> <translation id="2513403576141822879">Papildu iestatījumus, kas attiecas uz konfidencialitāti, drošību un datu apkopošanu, skatiet lapā <ph name="BEGIN_LINK" />Sinhronizēšana un Google pakalpojumi<ph name="END_LINK" />.</translation> <translation id="2517472476991765520">Meklēt</translation> <translation id="2523184218357549926">Nosūta Google serveriem apmeklēto lapu vietrāžus URL</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 b40da8c..bc37779 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
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">Описите за слики се исклучени.</translation> <translation id="2172905120685242547">Да се затвори прозорецот?</translation> <translation id="2175927920773552910">QR-код</translation> -<translation id="2176767904800337188">Виртуелната картичка ја маскира вашата актуелна картичка за да ја заштити од потенцијална измама. <ph name="BEGIN_LINK1" />Дознајте повеќе за виртуелните картички<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Се споделува</translation> <translation id="2189903024544168260">Интересот е отстранет</translation> <translation id="2194856509914051091">Нешта што треба да се земат предвид</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">Историја на прелистување</translation> <translation id="2497852260688568942">Администраторот ја оневозможил синхронизацијата</translation> <translation id="250020030759455918">Ќе ги видите статусот на најавување на <ph name="SITE_NAME" />, податоците од прелистување и податоците за сајтовите во Chrome</translation> -<translation id="2512164632052122970">Јазици за содржините</translation> <translation id="2513403576141822879">За повеќе поставки што се однесуваат на приватноста, безбедноста и собирањето податоци, одете на <ph name="BEGIN_LINK" />Синхронизација и услуги на Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Скенирај</translation> <translation id="2523184218357549926">Испраќа URL-адреси од страници што ги посетувате до Google</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 f042e9a..4625434 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
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">ചിത്രത്തിന്റെ വിവരണങ്ങൾ ഓഫാണ്</translation> <translation id="2172905120685242547">വിൻഡോ അടയ്ക്കണോ?</translation> <translation id="2175927920773552910">QR കോഡ്</translation> -<translation id="2176767904800337188">വഞ്ചിക്കപ്പെടാനിടയുള്ള സാഹചര്യങ്ങളിൽ നിന്ന് പരിരക്ഷിക്കാൻ സഹായിക്കുന്നതിന് വെർച്വൽ കാർഡ് നിങ്ങളുടെ യഥാർത്ഥ കാർഡ് വിവരങ്ങൾ മറയ്ക്കുന്നു. <ph name="BEGIN_LINK1" />വെർച്വൽ കാർഡുകളെ കുറിച്ച് കൂടുതലറിയുക<ph name="END_LINK1" /></translation> <translation id="218608176142494674">പങ്കിടൽ</translation> <translation id="2189903024544168260">താൽപ്പര്യം നീക്കം ചെയ്തു</translation> <translation id="2194856509914051091">പരിഗണിക്കേണ്ട കാര്യങ്ങൾ</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">ബ്രൌസിംഗ് ചരിത്രം</translation> <translation id="2497852260688568942">നിങ്ങളുടെ അഡ്മിനിസ്ട്രേറ്റർ സമന്വയിപ്പിക്കൽ പ്രവർത്തനരഹിതമാക്കി</translation> <translation id="250020030759455918">നിങ്ങളുടെ <ph name="SITE_NAME" /> സൈൻ ഇൻ നില, ബ്രൗസിംഗ് ഡാറ്റ, സൈറ്റ് ഡാറ്റ എന്നിവ Chrome-ൽ കാണാം</translation> -<translation id="2512164632052122970">ഉള്ളടക്ക ഭാഷകൾ</translation> <translation id="2513403576141822879">സ്വകാര്യത, സുരക്ഷ, ഡാറ്റാ ശേഖരണം എന്നിവയുമായി ബന്ധപ്പെട്ട കൂടുതൽ ക്രമീകരണത്തിന്, <ph name="BEGIN_LINK" />സമന്വയവും Google സേവനങ്ങളും<ph name="END_LINK" /> കാണുക</translation> <translation id="2517472476991765520">സ്കാൻ ചെയ്യുക</translation> <translation id="2523184218357549926">Google-ൽ നിങ്ങൾ സന്ദർശിക്കുന്ന പേജുകളുടെ URL-കൾ അയയ്ക്കുന്നു</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb index 9dbf61ab..44f4752 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_mn.xtb
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">Зургийн тайлбар унтраалттай байна</translation> <translation id="2172905120685242547">Цонхыг хаах уу?</translation> <translation id="2175927920773552910">QR код</translation> -<translation id="2176767904800337188">Виртуал карт нь таныг болзошгүй залилангаас хамгаалахад туслахын тулд таны жинхэнэ картыг далдалдаг. <ph name="BEGIN_LINK1" />Виртуал картын талаар нэмэлт мэдээлэл авах<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Хуваалцаж байна</translation> <translation id="2189903024544168260">Сонирхлыг хассан</translation> <translation id="2194856509914051091">Анхаарч үзэх зүйлс</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">Хайлтын түүх</translation> <translation id="2497852260688568942">Таны админ синкийг идэвхгүй болгосон байна.</translation> <translation id="250020030759455918">Та Chrome-с өөрийн <ph name="SITE_NAME" />-н нэвтрэлтийн төлөв, интернэтээр үзсэн өгөгдөл болон сайтын өгөгдлийг харна</translation> -<translation id="2512164632052122970">Контентын хэлнүүд</translation> <translation id="2513403576141822879">Нууцлал, аюулгүй байдал болон өгөгдөл цуглуулахтай холбоотой бусад тохиргоог харахын тулд <ph name="BEGIN_LINK" />Синк болон Google-н үйлчилгээ<ph name="END_LINK" />-г харна уу</translation> <translation id="2517472476991765520">Шалгах</translation> <translation id="2523184218357549926">Таны зочилсон хуудасны URL-г Google-д илгээдэг</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 5f7daad7..96401a2 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
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">इमेजची वर्णने बंद आहेत</translation> <translation id="2172905120685242547">विंडो बंद करायची आहे का?</translation> <translation id="2175927920773552910">QR कोड</translation> -<translation id="2176767904800337188">संभाव्य घोटाळ्यापासून तुमचे संरक्षण करण्यात मदत व्हावी, यासाठी व्हर्च्युअल कार्ड तुमच्या मूळ कार्डची ओळख लपवते. <ph name="BEGIN_LINK1" />व्हर्च्युअल कार्डबद्दल अधिक जाणून घ्या<ph name="END_LINK1" /></translation> <translation id="218608176142494674">शेअर करत आहे</translation> <translation id="2189903024544168260">स्वारस्य काढून टाकले आहे</translation> <translation id="2194856509914051091">विचार करण्याच्या गोष्टी</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">ब्राउझिंग इतिहास</translation> <translation id="2497852260688568942">तुमच्या ॲडमिनिस्ट्रेटरने सिंक अक्षम केले आहे</translation> <translation id="250020030759455918">तुम्हाला Chrome मध्ये तुमची <ph name="SITE_NAME" /> साइन-इन स्थिती, ब्राउझिंग डेटा आणि साइट डेटा दिसेल</translation> -<translation id="2512164632052122970">आशयाच्या भाषा</translation> <translation id="2513403576141822879">गोपनीयता, सुरक्षितता आणि डेटा संकलनाशी संबंधित अधिक सेटिंग्जसाठी, <ph name="BEGIN_LINK" />सिंक आणि Google सेवा<ph name="END_LINK" /> पहा</translation> <translation id="2517472476991765520">स्कॅन करा</translation> <translation id="2523184218357549926">तुम्ही भेट दिलेल्या पेजच्या URL Google ला पाठवते</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb index 3ec28fd..d442538 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ms.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Matikan penyegerakan?</translation> <translation id="1430915738399379752">Cetak</translation> <translation id="1436784010935106834">Dibuang</translation> +<translation id="1437543266176261764">Dijalankan dalam <ph name="APP_NAME" /></translation> <translation id="1448440926884431741">Atur produk yang dijejaki dalam Penanda Halaman</translation> <translation id="1450753235335490080">Tidak dapat berkongsi <ph name="CONTENT_TYPE" /></translation> <translation id="1466383950273130737">Pilih bahasa Chrome</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Perihalan imej dimatikan</translation> <translation id="2172905120685242547">Tutup tetingkap?</translation> <translation id="2175927920773552910">Kod QR</translation> -<translation id="2176767904800337188">Kad maya menggantikan kad sebenar anda untuk melindungi anda daripada kemungkinan penipuan. <ph name="BEGIN_LINK1" />Ketahui lebih lanjut tentang kad maya<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Perkongsian</translation> <translation id="2189903024544168260">Minat dialih keluar</translation> <translation id="2194856509914051091">Perkara yang perlu dipertimbangkan</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Sejarah penyemakan imbas</translation> <translation id="2497852260688568942">Penyegerakan dilumpuhkan oleh pentadbir anda</translation> <translation id="250020030759455918">Anda akan melihat status log masuk <ph name="SITE_NAME" />, data semakan imbas dan data tapak anda dalam Chrome</translation> -<translation id="2512164632052122970">Bahasa kandungan</translation> <translation id="2513403576141822879">Untuk mendapatkan lebih banyak tetapan yang berkaitan dengan privasi, keselamatan dan pengumpulan data, lihat <ph name="BEGIN_LINK" />Penyegerakan dan perkhidmatan Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Imbas</translation> <translation id="2523184218357549926">Menghantar URL halaman yang anda lawati kepada Google</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb index ade93c3..959e3be8 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_my.xtb
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">ပုံအကြောင်းအရာများကို ပိတ်ထားသည်</translation> <translation id="2172905120685242547">ဝင်ဒိုး ပိတ်မလား။</translation> <translation id="2175927920773552910">QR ကုဒ်</translation> -<translation id="2176767904800337188">လိမ်လည်ခံရခြင်းမှ ကာကွယ်ပေးနိုင်ရန်အတွက် ပကတိအသွင်ကတ်သည် သင့်ကတ်အစစ်ကို ရုပ်ဖျက်ပေးသည်။ <ph name="BEGIN_LINK1" />ပကတိအသွင်ကတ်များအကြောင်း ပိုမိုလေ့လာရန်<ph name="END_LINK1" /></translation> <translation id="218608176142494674">မျှဝေခြင်း</translation> <translation id="2189903024544168260">စိတ်ဝင်စားမှု ဖယ်ရှားလိုက်သည်</translation> <translation id="2194856509914051091">စဉ်းစားရန် အချက်များ</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">အသုံးပြုခြင်း မှတ်တမ်း</translation> <translation id="2497852260688568942">စင့်ခ်ပြုလုပ်ခြင်းကို သင့်စီမံခန့်ခွဲသူက ပိတ်ဆို့ထားပါသည်</translation> <translation id="250020030759455918">သင်၏ <ph name="SITE_NAME" /> လက်မှတ်ထိုးဝင်မှု အခြေအနေ၊ ဖွင့်ကြည့်ထားသည့်မှတ်တမ်းဒေတာနှင့် ဝဘ်ဆိုက်ဒေတာများကို Chrome တွင် မြင်ရပါမည်</translation> -<translation id="2512164632052122970">အကြောင်းအရာ၏ ဘာသာစကားများ</translation> <translation id="2513403576141822879">ပုဂ္ဂိုလ်ရေးရာ၊ လုံခြုံမှုနှင့် ဒေတာစုဆောင်းမှုတို့နှင့် ဆက်စပ်နေသည့် နောက်ထပ် ဆက်တင်များအတွက် <ph name="BEGIN_LINK" />စင့်ခ်လုပ်ခြင်းနှင့် Google ဝန်ဆောင်မှုများ<ph name="END_LINK" /> ကို ကြည့်ပါ</translation> <translation id="2517472476991765520">ရှာဖွေရန်</translation> <translation id="2523184218357549926">သင်ကြည့်ရှုသည့် စာမျက်နှာများ၏ URL များကို Google သို့ ပို့သည်</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 e3ea2c3..3233a47 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
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">सिंक गर्ने सुविधा अफ गर्ने हो?</translation> <translation id="1430915738399379752">प्रिन्ट गर्नुहोस्</translation> <translation id="1436784010935106834">हटाइयो</translation> +<translation id="1437543266176261764">यो क्रियाकलाप <ph name="APP_NAME" /> मार्फत गरिँदै छ</translation> <translation id="1448440926884431741">"बुकमार्कहरू" मा गई आफूले ट्रयाक गरेका उत्पादनहरू व्यवस्थापन गर्नुहोस्</translation> <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> आदान प्रदान गर्न सकिएन</translation> <translation id="1466383950273130737">Chrome मा प्रयोग गरिने भाषा छान्नुहोस्</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">'फोटोको वर्णन' सुविधा अफ छ</translation> <translation id="2172905120685242547">विन्डो बन्द गर्ने हो?</translation> <translation id="2175927920773552910">QR कोड</translation> -<translation id="2176767904800337188">भर्चुअल कार्डले तपाईंलाई ठगीबाट जोगाउनका निम्ति तपाईंको कार्डको वास्तविक जानकारी लुकाउँछ। <ph name="BEGIN_LINK1" />भर्चुअल कार्डका बारेमा थप जान्नुहोस्<ph name="END_LINK1" /></translation> <translation id="218608176142494674">आदान प्रदान गर्दै</translation> <translation id="2189903024544168260">रुचि हटाइयो</translation> <translation id="2194856509914051091">विचार गर्नु पर्ने कुराहरू</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">ब्राउजिङ इतिहास</translation> <translation id="2497852260688568942">तपाईंको प्रशासकले सिंंक असक्षम पार्नुभएको छ।</translation> <translation id="250020030759455918">तपाईं Chrome मा आफ्नो <ph name="SITE_NAME" /> को साइन इनसम्बन्धी अवस्था, ब्राउजिङ डेटा र साइट डेटा देख्नु हुने छ</translation> -<translation id="2512164632052122970">सामग्रीका भाषाहरू</translation> <translation id="2513403576141822879">गोपनीयता, सुरक्षा र डेटाको सङ्कलनसँग सम्बन्धित थप सेटिङहरूका लागि <ph name="BEGIN_LINK" />सिंक तथा वैयक्तीकरण<ph name="END_LINK" /> नामक खण्ड हेर्नुहोस्</translation> <translation id="2517472476991765520">स्क्यान गर्नुहोस्</translation> <translation id="2523184218357549926">तपाईं जाने पृष्ठका URL हरू Google मा पठाउँछ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb index da1cca6..6ce6047 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_nl.xtb
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">Afbeeldingsbeschrijvingen staan uit</translation> <translation id="2172905120685242547">Venster sluiten?</translation> <translation id="2175927920773552910">QR-code</translation> -<translation id="2176767904800337188">Een virtuele kaart vermomt je werkelijke kaart om je te beschermen tegen potentiële fraude. <ph name="BEGIN_LINK1" />Meer informatie over virtuele kaarten<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Delen</translation> <translation id="2189903024544168260">Interesse verwijderd</translation> <translation id="2194856509914051091">Overwegingen</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">Browsegeschiedenis</translation> <translation id="2497852260688568942">Synchronisatie is uitgezet door je beheerder</translation> <translation id="250020030759455918">Je ziet je inlogstatus, browsegegevens en sitegegevens van <ph name="SITE_NAME" /> in Chrome</translation> -<translation id="2512164632052122970">Contenttalen</translation> <translation id="2513403576141822879">Bekijk <ph name="BEGIN_LINK" />Synchronisatie en Google-services<ph name="END_LINK" /> voor meer instellingen die verband houden met privacy, beveiliging en gegevensverzameling.</translation> <translation id="2517472476991765520">Scannen</translation> <translation id="2523184218357549926">Hiermee worden de URL's van pagina's die je bezoekt, verzonden naar Google</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb index bb9bf63d..3bb93cd 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_no.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Vil du slå av synkronisering?</translation> <translation id="1430915738399379752">Skriv ut</translation> <translation id="1436784010935106834">Fjernet</translation> +<translation id="1437543266176261764">Kjører i <ph name="APP_NAME" /></translation> <translation id="1448440926884431741">Organiser sporede produkter i Bokmerker</translation> <translation id="1450753235335490080">Kan ikke dele <ph name="CONTENT_TYPE" /></translation> <translation id="1466383950273130737">Velg språk for Chrome</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Bildebeskrivelser er av</translation> <translation id="2172905120685242547">Vil du lukke vinduet?</translation> <translation id="2175927920773552910">QR-kode</translation> -<translation id="2176767904800337188">Et virtuelt kort skjuler det faktiske kortet ditt for å beskytte deg mot potensiell svindel. <ph name="BEGIN_LINK1" />Finn ut mer om virtuelle kort<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Deling</translation> <translation id="2189903024544168260">Interessen er fjernet</translation> <translation id="2194856509914051091">Ting å tenke på</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Nettleserlogg</translation> <translation id="2497852260688568942">Administratoren din har slått av synkronisering</translation> <translation id="250020030759455918">Du kommer til å se påloggingsstatus, nettlesingsdata og nettstedsdata for <ph name="SITE_NAME" /> i Chrome</translation> -<translation id="2512164632052122970">Innholdsspråk</translation> <translation id="2513403576141822879">Se <ph name="BEGIN_LINK" />Synkronisering og Google tjenester<ph name="END_LINK" /> for flere innstillinger knyttet til personvern, sikkerhet og datainnsamling.</translation> <translation id="2517472476991765520">Skann</translation> <translation id="2523184218357549926">Sender Google nettadressene til sider du besøker</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb index e2a971ab..1329351 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_or.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">ସିଙ୍କ ବନ୍ଦ କରିବେ?</translation> <translation id="1430915738399379752">ପ୍ରିଣ୍ଟ କରନ୍ତୁ</translation> <translation id="1436784010935106834">କାଢ଼ି ଦିଆଯାଇଛି</translation> +<translation id="1437543266176261764"><ph name="APP_NAME" />ରେ ଚାଲୁଛି</translation> <translation id="1448440926884431741">ଆପଣଙ୍କ ଟ୍ରାକ କରାଯାଇଥିବା ପ୍ରଡକ୍ଟଗୁଡ଼ିକୁ ବୁକମାର୍କରେ ବ୍ୟବସ୍ଥିତ କରନ୍ତୁ</translation> <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> ସେୟାର୍ କରାଯାଇ ପାରିବ ନାହିଁ</translation> <translation id="1466383950273130737">Chromeର ଭାଷା ବାଛନ୍ତୁ</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">ଛବିର ବର୍ଣ୍ଣନା ବନ୍ଦ ଅଛି</translation> <translation id="2172905120685242547">ୱିଣ୍ଡୋ ବନ୍ଦ କରିବେ?</translation> <translation id="2175927920773552910">QR କୋଡ୍</translation> -<translation id="2176767904800337188">ଆପଣଙ୍କୁ ସମ୍ଭାବ୍ୟ ଠକାମୀରୁ ସୁରକ୍ଷିତ ରଖିବାରେ ସାହାଯ୍ୟ କରିବା ପାଇଁ, ଏକ ଭର୍ଚୁଆଲ କାର୍ଡ ଆପଣଙ୍କ ପ୍ରକୃତ କାର୍ଡକୁ ଲୁଚାଇ ରଖିଥାଏ। <ph name="BEGIN_LINK1" />ଭର୍ଚୁଆଲ କାର୍ଡଗୁଡ଼ିକ ବିଷୟରେ ଅଧିକ ଜାଣନ୍ତୁ<ph name="END_LINK1" /></translation> <translation id="218608176142494674">ସେୟାରିଂ</translation> <translation id="2189903024544168260">ରୁଚିକୁ କାଢ଼ି ଦିଆଯାଇଛି</translation> <translation id="2194856509914051091">ବିଚାରଯୋଗ୍ୟ ବିଷୟଗୁଡ଼ିକ</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">ବ୍ରାଉଜିଂ ଇତିବୃତ୍ତି</translation> <translation id="2497852260688568942">ଆପଣଙ୍କର ବ୍ୟବସ୍ଥାପକଙ୍କ ଦ୍ୱାରା ସିଙ୍କ ଅକ୍ଷମ କରାଯାଇଛି</translation> <translation id="250020030759455918">ଆପଣ <ph name="SITE_NAME" />ରେ ଆପଣଙ୍କ ସାଇନ୍-ଇନ୍ ସ୍ଥିତି, ବ୍ରାଉଜିଂ ଡାଟା ଏବଂ ସାଇଟ୍ ଡାଟା, Chromeରେ ଦେଖିବେ</translation> -<translation id="2512164632052122970">ବିଷୟବସ୍ତୁର ଭାଷା</translation> <translation id="2513403576141822879">ଗୋପନୀୟତା, ସୁରକ୍ଷା ଏବଂ ଡାଟା ସଂଗ୍ରହ ସହ ସମ୍ବନ୍ଧିତ ଅଧିକ ସେଟିଂସ୍ ପାଇଁ <ph name="BEGIN_LINK" />ସିଙ୍କ ଓ Google ସେବା<ph name="END_LINK" /> ଦେଖନ୍ତୁ</translation> <translation id="2517472476991765520">ସ୍କାନ୍ କରନ୍ତୁ</translation> <translation id="2523184218357549926">Googleକୁ ଆପଣ ଭିଜିଟ୍ କରିଥିବା ପୃଷ୍ଠାର URL ପଠାଏ</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 8e20385..dee6db63 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
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">ਕੀ ਸਿੰਕ ਨੂੰ ਬੰਦ ਕਰਨਾ ਹੈ?</translation> <translation id="1430915738399379752">ਪ੍ਰਿੰਟ ਕਰੋ</translation> <translation id="1436784010935106834">ਹਟਾਈਆਂ ਗਈਆਂ</translation> +<translation id="1437543266176261764">ਇਹ ਸਰਗਰਮੀ <ph name="APP_NAME" /> ਵਿੱਚ ਚੱਲ ਰਹੀ ਹੈ</translation> <translation id="1448440926884431741">Bookmarks ਵਿੱਚ ਆਪਣੇ ਟਰੈਕ ਕੀਤੇ ਉਤਪਾਦਾਂ ਨੂੰ ਵਿਵਸਥਿਤ ਕਰੋ</translation> <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> ਨੂੰ ਸਾਂਝਾ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ</translation> <translation id="1466383950273130737">Chrome ਦੀ ਭਾਸ਼ਾ ਚੁਣੋ</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">ਚਿੱਤਰ ਦੇ ਵਰਣਨ ਬੰਦ ਹਨ</translation> <translation id="2172905120685242547">ਕੀ ਵਿੰਡੋ ਨੂੰ ਬੰਦ ਕਰਨਾ ਹੈ?</translation> <translation id="2175927920773552910">QR ਕੋਡ</translation> -<translation id="2176767904800337188">ਆਭਾਸੀ ਕਾਰਡ ਤੁਹਾਨੂੰ ਸੰਭਾਵੀ ਧੋਖਾਧੜੀ ਤੋਂ ਬਚਾਉਣ ਵਿੱਚ ਮਦਦ ਕਰਨ ਲਈ ਤੁਹਾਡੇ ਅਸਲ ਕਾਰਡ ਦਾ ਭੇਸ ਲੈਂਦਾ ਹੈ। <ph name="BEGIN_LINK1" />ਆਭਾਸੀ ਕਾਰਡਾਂ ਬਾਰੇ ਹੋਰ ਜਾਣੋ<ph name="END_LINK1" /></translation> <translation id="218608176142494674">ਸਾਂਝਾਕਰਨ</translation> <translation id="2189903024544168260">ਦਿਲਚਸਪੀ ਨੂੰ ਹਟਾਇਆ ਗਿਆ</translation> <translation id="2194856509914051091">ਵਿਚਾਰੇ ਜਾਣ ਵਾਲੀਆਂ ਚੀਜ਼ਾਂ</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">ਬ੍ਰਾਊਜ਼ਿੰਗ ਇਤਿਹਾਸ</translation> <translation id="2497852260688568942">ਸਿੰਕ ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਦੁਆਰਾ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ।</translation> <translation id="250020030759455918">ਤੁਸੀਂ Chrome ਵਿੱਚ ਆਪਣੀ <ph name="SITE_NAME" /> ਸਾਈਨ-ਇਨ ਸਥਿਤੀ, ਬ੍ਰਾਊਜ਼ਿੰਗ ਡਾਟਾ ਅਤੇ ਸਾਈਟ ਡਾਟਾ ਦੇਖੋਗੇ</translation> -<translation id="2512164632052122970">ਸਮੱਗਰੀ ਭਾਸ਼ਾਵਾਂ</translation> <translation id="2513403576141822879">ਪਰਦੇਦਾਰੀ, ਸੁਰੱਖਿਆ ਅਤੇ ਡਾਟਾ ਇਕੱਤਰ ਕਰਨ ਸੰਬੰਧੀ ਹੋਰ ਸੈਟਿੰਗਾਂ ਲਈ, <ph name="BEGIN_LINK" />ਸਿੰਕ ਅਤੇ Google ਸੇਵਾਵਾਂ<ph name="END_LINK" /> ਦੇਖੋ</translation> <translation id="2517472476991765520">ਸਕੈਨ ਕਰੋ</translation> <translation id="2523184218357549926">Google ਨੂੰ ਤੁਹਾਡੇ ਵੱਲੋਂ ਦੇਖੇ ਜਾਣ ਵਾਲੇ ਪੰਨਿਆਂ ਦੇ URL ਭੇਜਦੀ ਹੈ</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb index 7860a75..62b2cf3 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pl.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Wyłączyć synchronizację?</translation> <translation id="1430915738399379752">Drukuj</translation> <translation id="1436784010935106834">Usunięto</translation> +<translation id="1437543266176261764">Działa w <ph name="APP_NAME" /></translation> <translation id="1448440926884431741">Porządkuj obserwowane produkty w Zakładkach</translation> <translation id="1450753235335490080"><ph name="CONTENT_TYPE" />: nie udało się udostępnić</translation> <translation id="1466383950273130737">Wybierz język Chrome</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Opisy do obrazów są wyłączone</translation> <translation id="2172905120685242547">Zamknąć okno?</translation> <translation id="2175927920773552910">Kod QR</translation> -<translation id="2176767904800337188">Karta wirtualna ukrywa Twoją prawdziwą kartę, aby chronić Cię przed oszustwami. <ph name="BEGIN_LINK1" />Więcej informacji o kartach wirtualnych<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Udostępnianie</translation> <translation id="2189903024544168260">Zainteresowanie zostało usunięte</translation> <translation id="2194856509914051091">Istotne kwestie</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Historia przeglądania</translation> <translation id="2497852260688568942">Synchronizację wyłączył administrator</translation> <translation id="250020030759455918">Będziesz mieć dostęp do stanu logowania, danych przeglądania oraz danych witryny w Chrome dotyczących Twojej strony <ph name="SITE_NAME" /></translation> -<translation id="2512164632052122970">Języki treści</translation> <translation id="2513403576141822879">Więcej ustawień związanych z prywatnością, bezpieczeństwem i zbieraniem danych znajdziesz w sekcji <ph name="BEGIN_LINK" />Synchronizacja i usługi Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Skanuj</translation> <translation id="2523184218357549926">Adresy URL odwiedzanych stron będą wysyłane do Google</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb index 495e27c..d252496 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-BR.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Desativar a sincronização?</translation> <translation id="1430915738399379752">Imprimir</translation> <translation id="1436784010935106834">Removido</translation> +<translation id="1437543266176261764">Em execução no app <ph name="APP_NAME" /></translation> <translation id="1448440926884431741">Organize seus produtos monitorados nos favoritos</translation> <translation id="1450753235335490080">Falha no compartilhamento de <ph name="CONTENT_TYPE" /></translation> <translation id="1466383950273130737">Idioma do Chrome</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">As descrições de imagens estão desativadas</translation> <translation id="2172905120685242547">Fechar a janela?</translation> <translation id="2175927920773552910">Código QR</translation> -<translation id="2176767904800337188">O cartão virtual encobre o real para proteger você contra possíveis tentativas de fraude. <ph name="BEGIN_LINK1" />Saiba mais sobre os cartões virtuais<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Compartilhamento</translation> <translation id="2189903024544168260">Interesse removido</translation> <translation id="2194856509914051091">Considerações</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Histórico de navegação</translation> <translation id="2497852260688568942">A sincronização foi desativada pelo administrador</translation> <translation id="250020030759455918">Seu status de login, dados de navegação e dados do site para <ph name="SITE_NAME" /> serão exibidos no Chrome</translation> -<translation id="2512164632052122970">Idiomas do conteúdo</translation> <translation id="2513403576141822879">Para ver mais configurações relacionadas à privacidade, segurança e coleta de dados, acesse <ph name="BEGIN_LINK" />Serviços do Google e de sincronização<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Verificar</translation> <translation id="2523184218357549926">Envia URLs das páginas que você visita para o Google</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb index 9edda5d..3d36b81 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_pt-PT.xtb
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">As descrições das imagens estão desativadas.</translation> <translation id="2172905120685242547">Pretende fechar a janela?</translation> <translation id="2175927920773552910">Código QR</translation> -<translation id="2176767904800337188">Um cartão virtual disfarça o seu cartão real como medida de proteção contra potenciais fraudes. <ph name="BEGIN_LINK1" />Saiba mais sobre cartões virtuais<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Partilha</translation> <translation id="2189903024544168260">Interesse removido</translation> <translation id="2194856509914051091">Aspetos a considerar</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">Histórico de navegação</translation> <translation id="2497852260688568942">A sincronização foi desativada pelo gestor</translation> <translation id="250020030759455918">Pode ver o seu estado de início de sessão em <ph name="SITE_NAME" />, os dados de navegação e os dados do site no Chrome.</translation> -<translation id="2512164632052122970">Idiomas do conteúdo</translation> <translation id="2513403576141822879">Para obter mais definições relacionadas com privacidade, segurança e recolha de dados, consulte <ph name="BEGIN_LINK" />Sincronização e serviços Google<ph name="END_LINK" />.</translation> <translation id="2517472476991765520">Digitalizar</translation> <translation id="2523184218357549926">Envia para a Google os URLs das páginas que visita.</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb index 1bebb0e..3ee1c80 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ro.xtb
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">Descrierile imaginilor sunt dezactivate</translation> <translation id="2172905120685242547">Închizi fereastra?</translation> <translation id="2175927920773552910">Cod QR</translation> -<translation id="2176767904800337188">Cardul virtual îți maschează cardul fizic pentru a te proteja împotriva fraudelor. <ph name="BEGIN_LINK1" />Află mai multe despre cardurile virtuale<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Trimitere</translation> <translation id="2189903024544168260">Categoria de interese a fost eliminată</translation> <translation id="2194856509914051091">De reținut</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">Istoricul de navigare</translation> <translation id="2497852260688568942">Sincronizarea este dezactivată de administrator</translation> <translation id="250020030759455918">Vei vedea starea de conectare la <ph name="SITE_NAME" />, datele de navigare și datele privind site-ul în Chrome</translation> -<translation id="2512164632052122970">Limbile conținutului</translation> <translation id="2513403576141822879">Pentru mai multe setări privind confidențialitatea, securitatea și colectarea datelor, consultă <ph name="BEGIN_LINK" />Sincronizare și servicii Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Scanează</translation> <translation id="2523184218357549926">Trimite la Google adresele URL ale paginilor pe care le accesezi</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 d753bea80..a5bf3b1 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
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">Описания изображений отключены.</translation> <translation id="2172905120685242547">Закрыть окно?</translation> <translation id="2175927920773552910">QR-код</translation> -<translation id="2176767904800337188">Чтобы защитить ваши данные от мошенников, вместо настоящей карты будет использоваться виртуальная. Подробнее <ph name="BEGIN_LINK1" />о виртуальных картах<ph name="END_LINK1" />…</translation> <translation id="218608176142494674">Совместный доступ</translation> <translation id="2189903024544168260">Интерес удален.</translation> <translation id="2194856509914051091">Важная информация</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">История браузера</translation> <translation id="2497852260688568942">Ваш администратор отключил синхронизацию</translation> <translation id="250020030759455918">Вы увидите статус входа на сайт <ph name="SITE_NAME" />, а также данные о работе в браузере и данные сайтов в Chrome.</translation> -<translation id="2512164632052122970">Языки контента</translation> <translation id="2513403576141822879">Остальные настройки конфиденциальности, безопасности и сбора данных вы можете найти в разделе <ph name="BEGIN_LINK" />Синхронизация сервисов Google<ph name="END_LINK" />.</translation> <translation id="2517472476991765520">Сканировать</translation> <translation id="2523184218357549926">Отправлять URL посещенных страниц в Google</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 5e7d6b7..c2c201f 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
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">රූප විස්තර ක්රියාවිරහිතයි</translation> <translation id="2172905120685242547">කවුළුව වසන්නද?</translation> <translation id="2175927920773552910">QR කේතය</translation> -<translation id="2176767904800337188">අතථ්ය කාඩ්පතක් සිදු විය හැකි වංචාවෙන් ඔබව සුරක්ෂිත කර ගැනීමට ඔබගේ සැබෑ කාඩ්පත මෙන් වෙස්වළා ගනී. <ph name="BEGIN_LINK1" />අතථ්ය කාඩ්පත් ගැන තව දැන ගන්න<ph name="END_LINK1" /></translation> <translation id="218608176142494674">බෙදා ගැනීම</translation> <translation id="2189903024544168260">ලැදිකම ඉවත් කරන ලදි</translation> <translation id="2194856509914051091">සලකා බැලිය යුතු කරුණු</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">බ්රවුස් ඉතිහාසය</translation> <translation id="2497852260688568942">සමමුහුර්ත කිරීම ඔබේ පරිපාලක විසින් අබල කර ඇත</translation> <translation id="250020030759455918">ඔබ Chrome තුළ ඔබේ <ph name="SITE_NAME" /> පුරන තත්ත්වය, බ්රවුස් කිරීමේ දත්ත, සහ අඩවි දත්ත දකිනු ඇත</translation> -<translation id="2512164632052122970">අන්තර්ගත භාෂා</translation> <translation id="2513403576141822879">රහස්යතාව, ආරක්ෂාව, සහ දත්ත රැස් කිරීමට අදාළ තවත් සැකසීම් සඳහා, <ph name="BEGIN_LINK" />සමමුහුර්තකරණය සහ Google සේවා<ph name="END_LINK" /> බලන්න</translation> <translation id="2517472476991765520">ස්කෑන් කරන්න</translation> <translation id="2523184218357549926">Google වෙත ඔබ පිවිසෙන පිටු URL යවයි</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 9529546..6dc886ee 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
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Chcete vypnúť synchronizáciu?</translation> <translation id="1430915738399379752">Tlačiť</translation> <translation id="1436784010935106834">Odstránené</translation> +<translation id="1437543266176261764">Spustené v aplikácii <ph name="APP_NAME" /></translation> <translation id="1448440926884431741">Organizujte svoje sledované produkty v Záložkách</translation> <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> sa nedá zdieľať</translation> <translation id="1466383950273130737">Vyberte jazyk Chromu</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Popisy obrázkov sú vypnuté</translation> <translation id="2172905120685242547">Chcete zavrieť okno?</translation> <translation id="2175927920773552910">QR kód</translation> -<translation id="2176767904800337188">Virtuálnou kartou sa zamaskuje vaša skutočná karta, čo vás lepšie ochráni pred potenciálnymi podvodmi <ph name="BEGIN_LINK1" />Ďalšie informácie o virtuálnych kartách<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Zdieľanie</translation> <translation id="2189903024544168260">Záujem bol odstránený</translation> <translation id="2194856509914051091">Čo je potrebné zohľadniť</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">História prehliadania</translation> <translation id="2497852260688568942">Synchronizácia je zakázaná správcom</translation> <translation id="250020030759455918">Zobrazí sa váš stav prihlásenia na webe <ph name="SITE_NAME" />, dáta prehliadania a údaje webu v Chrome</translation> -<translation id="2512164632052122970">Jazyky obsahu</translation> <translation id="2513403576141822879">Ďalšie nastavenia týkajúce sa ochrany súkromia, zabezpečenia a zhromažďovania dát nájdete v časti <ph name="BEGIN_LINK" />Synchronizácia a služby Googlu<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Skenovať</translation> <translation id="2523184218357549926">Odosiela Googlu webové adresy navštívených stránok</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 c5ac5f1..a91372c 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
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Želite izklopiti sinhronizacijo?</translation> <translation id="1430915738399379752">Natisni</translation> <translation id="1436784010935106834">Odstranjeno</translation> +<translation id="1437543266176261764">Izvaja se v aplikaciji <ph name="APP_NAME" /></translation> <translation id="1448440926884431741">Organizirajte spremljane izdelke v zaznamkih.</translation> <translation id="1450753235335490080">Ni mogoče deliti tega: <ph name="CONTENT_TYPE" /></translation> <translation id="1466383950273130737">Izbierite Chromov jezik</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Opisi slik so izklopljeni</translation> <translation id="2172905120685242547">Želite zapreti okno?</translation> <translation id="2175927920773552910">Koda QR</translation> -<translation id="2176767904800337188">Navidezna kartica zakrije dejansko kartico in ste tako zaščiteni pred morebitno prevaro. <ph name="BEGIN_LINK1" />Preberite več o navideznih karticah<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Deljenje z drugimi</translation> <translation id="2189903024544168260">Zanimanje je odstranjeno.</translation> <translation id="2194856509914051091">Kaj morate upoštevati</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Zgodovina brskanja</translation> <translation id="2497852260688568942">Sinhronizacijo je onemogočil skrbnik</translation> <translation id="250020030759455918">Prikazano bo stanje prijave na spletnem mestu <ph name="SITE_NAME" />, podatki brskanja in podatki spletnega mesta v Chromu.</translation> -<translation id="2512164632052122970">Vsebinski jeziki</translation> <translation id="2513403576141822879">Če vas zanima več nastavitev, povezanih z zasebnostjo, varnostjo in zbiranjem podatkov, si oglejte razdelek <ph name="BEGIN_LINK" />Sinhronizacija in Googlove storitve<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Išči</translation> <translation id="2523184218357549926">Googlu pošlje URL-je strani, ki jih obiščete</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb index 1fd1907..03044ea 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sq.xtb
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">Përshkrimet e imazheve janë joaktive</translation> <translation id="2172905120685242547">Të mbyllet dritarja?</translation> <translation id="2175927920773552910">Kodi QR</translation> -<translation id="2176767904800337188">Një kartë virtuale fsheh kartën tënde aktuale për të të mbrojtur nga mashtrimi i mundshëm. <ph name="BEGIN_LINK1" />Mëso më shumë rreth kartave virtuale<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Ndarja</translation> <translation id="2189903024544168260">Interesi u hoq</translation> <translation id="2194856509914051091">Gjëra për të pasur parasysh</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">Historiku i shfletimit</translation> <translation id="2497852260688568942">Sinkronizimi është çaktivizuar nga administratori</translation> <translation id="250020030759455918">Do të shikosh statusin e identifikimit për <ph name="SITE_NAME" />, të dhënat e shfletimit dhe të dhënat e sajtit në Chrome</translation> -<translation id="2512164632052122970">Gjuhët e përmbajtjes</translation> <translation id="2513403576141822879">Për cilësime të mëtejshme në lidhje me privatësinë, sigurinë dhe mbledhjen e të dhënave, shih <ph name="BEGIN_LINK" />Sinkronizimi dhe shërbimet e Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Skano</translation> <translation id="2523184218357549926">Dërgon te Google URL-të e faqeve që ti viziton</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb index b73205b..68e53609 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr-Latn.xtb
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">Opisi slika su isključeni</translation> <translation id="2172905120685242547">Želite da zatvorite prozor?</translation> <translation id="2175927920773552910">QR kôd</translation> -<translation id="2176767904800337188">Virtuelna kartica krije vašu stvarnu karticu da bi vas zaštitila od potencijalne prevare. <ph name="BEGIN_LINK1" />Saznajte više o virtuelnim karticama<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Deljenje</translation> <translation id="2189903024544168260">Interesovanje je uklonjeno</translation> <translation id="2194856509914051091">Šta treba imati u vidu</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">Istorija pregledanja</translation> <translation id="2497852260688568942">Administrator je onemogućio sinhronizaciju</translation> <translation id="250020030759455918">U Chrome-u ćete videti da li ste prijavljeni, podatke pregledanja i podatke o sajtu za <ph name="SITE_NAME" /></translation> -<translation id="2512164632052122970">Jezici sadržaja</translation> <translation id="2513403576141822879">Više podešavanja u vezi sa privatnošću, bezbednošću i prikupljanjem podataka potražite u odeljku <ph name="BEGIN_LINK" />Sinhronizacija i Google usluge<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Skeniraj</translation> <translation id="2523184218357549926">URL-ovi stranica koje posećujete se šalju Google-u</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb index 85a335f..b4f9e50 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sr.xtb
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">Описи слика су искључени</translation> <translation id="2172905120685242547">Желите да затворите прозор?</translation> <translation id="2175927920773552910">QR кôд</translation> -<translation id="2176767904800337188">Виртуелна картица крије вашу стварну картицу да би вас заштитила од потенцијалне преваре. <ph name="BEGIN_LINK1" />Сазнајте више о виртуелним картицама<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Дељење</translation> <translation id="2189903024544168260">Интересовање је уклоњено</translation> <translation id="2194856509914051091">Шта треба имати у виду</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">Историја прегледања</translation> <translation id="2497852260688568942">Администратор је онемогућио синхронизацију</translation> <translation id="250020030759455918">У Chrome-у ћете видети да ли сте пријављени, податке прегледања и податке о сајту за <ph name="SITE_NAME" /></translation> -<translation id="2512164632052122970">Језици садржаја</translation> <translation id="2513403576141822879">Више подешавања у вези са приватношћу, безбедношћу и прикупљањем података потражите у одељку <ph name="BEGIN_LINK" />Синхронизација и Google услуге<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Скенирај</translation> <translation id="2523184218357549926">URL-ови страница које посећујете се шаљу Google-у</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb index 1d1df674..4001d9d 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_sv.xtb
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">Bildbeskrivningar har inaktiverats</translation> <translation id="2172905120685242547">Vill du stänga fönstret?</translation> <translation id="2175927920773552910">QR-kod</translation> -<translation id="2176767904800337188">Ett virtuellt kort döljer det riktiga kortet och skyddar dig från eventuella bedrägerier. <ph name="BEGIN_LINK1" />Läs mer om virtuella kort<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Delar</translation> <translation id="2189903024544168260">Intresset har tagits bort</translation> <translation id="2194856509914051091">Tänk på detta</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">Webbhistorik</translation> <translation id="2497852260688568942">Synkronisering har inaktiverats av administratören</translation> <translation id="250020030759455918">Din inloggningsstatus, webbdata och webbplatsdata för <ph name="SITE_NAME" /> visas i Chrome</translation> -<translation id="2512164632052122970">Innehållets språk</translation> <translation id="2513403576141822879">Fler inställningar som rör integritet, säkerhet och datainsamling finns under <ph name="BEGIN_LINK" />Synkronisering och Googles tjänster<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Sök</translation> <translation id="2523184218357549926">Skickar webbadresserna till sidor du besöker till Google</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 b7af317..2bcd68d29 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
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">Kipengele cha maelezo ya picha kimezimwa</translation> <translation id="2172905120685242547">Ungependa kufunga dirisha?</translation> <translation id="2175927920773552910">Msimbo wa QR</translation> -<translation id="2176767904800337188">Kadi pepe inaficha kadi yako halisi ili kusaidia kukulinda dhidi ya ulaghai unaoweza kujitokeza. <ph name="BEGIN_LINK1" />Pata maelezo zaidi kuhusu kadi pepe<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Inashiriki</translation> <translation id="2189903024544168260">Jambo linalokuvutia limeondolewa</translation> <translation id="2194856509914051091">Mambo ya kuzingatia</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">Historia ya kuvinjari</translation> <translation id="2497852260688568942">Usawazishaji umezimwa na msimamizi wako</translation> <translation id="250020030759455918">Utaona hali yako ya kuingia katika akaunti ya <ph name="SITE_NAME" />, data ya kuvinjari na data ya tovuti katika Chrome</translation> -<translation id="2512164632052122970">Lugha za maudhui</translation> <translation id="2513403576141822879">Ili upate mipangilio zaidi inayohusiana na faragha, usalama na ukusanyaji wa data, angalia <ph name="BEGIN_LINK" />Usawazishaji na huduma za Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Tafuta</translation> <translation id="2523184218357549926">Hutuma URL za kurasa unazotembelea kwa Google</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 dd343ef..069138e 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
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">ஒத்திசைவை முடக்கவா?</translation> <translation id="1430915738399379752">அச்சிடுக</translation> <translation id="1436784010935106834">அகற்றப்பட்டது</translation> +<translation id="1437543266176261764"><ph name="APP_NAME" /> ஆப்ஸில் இயங்குகிறது</translation> <translation id="1448440926884431741">நீங்கள் கண்காணிக்கும் தயாரிப்புகளை Bookmarksஸில் ஒழுங்கமைக்கலாம்</translation> <translation id="1450753235335490080"><ph name="CONTENT_TYPE" />ஐப் பகிர முடியவில்லை</translation> <translation id="1466383950273130737">Chromeமிற்கான மொழியைத் தேர்வுசெய்யுங்கள்</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">'பட விளக்கங்கள்' முடக்கப்பட்டது</translation> <translation id="2172905120685242547">சாளரத்தை மூட வேண்டுமா?</translation> <translation id="2175927920773552910">QR குறியீடு</translation> -<translation id="2176767904800337188">மோசடி அபாயங்களில் இருந்து உங்கள் அசல் கார்டைப் பாதுகாக்க விர்ச்சுவல் கார்டு உதவுகிறது. <ph name="BEGIN_LINK1" />விர்ச்சுவல் கார்டுகள் குறித்து மேலும் அறிக<ph name="END_LINK1" /></translation> <translation id="218608176142494674">பகிர்தல்</translation> <translation id="2189903024544168260">ஆர்வம் அகற்றப்பட்டது</translation> <translation id="2194856509914051091">கருத்தில்கொள்ள வேண்டியவை</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">உலாவல் வரலாறு</translation> <translation id="2497852260688568942">உங்கள் நிர்வாகி ஒத்திசைவை முடக்கியுள்ளார்</translation> <translation id="250020030759455918"><ph name="SITE_NAME" /> என்ற தளம் தொடர்பான உங்களின் உள்நுழைவு நிலை, உலாவிய தரவு, தளத்தின் தரவு ஆகியவை Chromeமில் காட்டப்படும்</translation> -<translation id="2512164632052122970">உள்ளடக்க மொழிகள்</translation> <translation id="2513403576141822879">தனியுரிமை, பாதுகாப்பு, தரவுச் சேகரிப்பு ஆகியவற்றுடன் தொடர்புடைய மேலும் பல அமைப்புகளுக்கு, <ph name="BEGIN_LINK" />ஒத்திசைவும் Google சேவைகளும்<ph name="END_LINK" /> என்பதைப் பார்க்கவும்</translation> <translation id="2517472476991765520">ஸ்கேன் செய்</translation> <translation id="2523184218357549926">நீங்கள் பார்வையிடும் பக்கங்களின் URLகளை Googleளுக்கு அனுப்பும்</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb index def0a70e..ace30ef6 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_te.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">సింక్ను ఆఫ్ చేయాలా?</translation> <translation id="1430915738399379752">ప్రింట్</translation> <translation id="1436784010935106834">తీసివేయబడింది</translation> +<translation id="1437543266176261764"><ph name="APP_NAME" />లో రన్ అవుతోంది</translation> <translation id="1448440926884431741">ట్రాక్ చేసిన మీ ప్రోడక్ట్లను బుక్మార్క్లలో ఆర్గనైజ్ చేయండి</translation> <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> షేర్ చేయడం సాధ్యపడలేదు</translation> <translation id="1466383950273130737">Chrome భాషను ఎంపిక చేయండి</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">ఇమేజ్ వివరణలు ఆఫ్ చేయబడ్డాయి</translation> <translation id="2172905120685242547">విండోను మూసివేయాలా?</translation> <translation id="2175927920773552910">QR కోడ్</translation> -<translation id="2176767904800337188">మోసం జరిగే అవకాశమున్న సందర్భంలో మిమ్మల్ని రక్షించడంలో సహాయపడటానికి, వర్చువల్ కార్డ్ మీ అసలు కార్డ్ సమాచారాన్ని దాచిపెడుతుంది. <ph name="BEGIN_LINK1" />వర్చువల్ కార్డ్ల గురించి మరింత తెలుసుకోండి<ph name="END_LINK1" /></translation> <translation id="218608176142494674">షేరింగ్</translation> <translation id="2189903024544168260">ఆసక్తి ఉన్న అంశం తీసివేయబడింది</translation> <translation id="2194856509914051091">పరిగణించాల్సిన విషయాలు</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">బ్రౌజింగ్ హిస్టరీ</translation> <translation id="2497852260688568942">సింక్ను మీ నిర్వాహకులు నిలిపివేశారు</translation> <translation id="250020030759455918">మీరు Chromeలో మీ <ph name="SITE_NAME" /> సైన్ ఇన్ స్టేటస్, బ్రౌజింగ్ డేటా ఇంకా సైట్ డేటాను చూస్తారు</translation> -<translation id="2512164632052122970">కంటెంట్ భాషలు</translation> <translation id="2513403576141822879">గోప్యత, భద్రత మరియు డేటా సేకరణకు సంబంధించిన మరిన్ని సెట్టింగ్ల కోసం, <ph name="BEGIN_LINK" />సింక్ మరియు Google సేవలను<ph name="END_LINK" /> చూడండి</translation> <translation id="2517472476991765520">స్కాన్ చేయి</translation> <translation id="2523184218357549926">మీరు సందర్శించే పేజీల URLలను Googleకి పంపుతుంది</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb index 8c0c8ed..31e60c7 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_th.xtb
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">คำอธิบายรูปภาพปิดอยู่</translation> <translation id="2172905120685242547">ปิดหน้าต่างใช่ไหม</translation> <translation id="2175927920773552910">คิวอาร์โค้ด</translation> -<translation id="2176767904800337188">บัตรเสมือนจะอำพรางบัตรจริงไว้เพื่อช่วยปกป้องคุณจากการฉ้อโกงที่อาจเกิดขึ้น <ph name="BEGIN_LINK1" />ดูข้อมูลเพิ่มเติมเกี่ยวกับบัตรเสมือน<ph name="END_LINK1" /></translation> <translation id="218608176142494674">การแชร์</translation> <translation id="2189903024544168260">นำความสนใจออกแล้ว</translation> <translation id="2194856509914051091">สิ่งที่ควรพิจารณา</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">ประวัติการเข้าชมที่เรียกดู</translation> <translation id="2497852260688568942">ผู้ดูแลระบบปิดใช้การซิงค์</translation> <translation id="250020030759455918">คุณจะเห็นสถานะการลงชื่อเข้าใช้ ข้อมูลการท่องเว็บ และข้อมูลเว็บไซต์ของ <ph name="SITE_NAME" /> ใน Chrome</translation> -<translation id="2512164632052122970">ภาษาของเนื้อหา</translation> <translation id="2513403576141822879">ดูการตั้งค่าเพิ่มเติมเกี่ยวกับความเป็นส่วนตัว ความปลอดภัย และการรวบรวมข้อมูลได้ที่<ph name="BEGIN_LINK" />การซิงค์และบริการต่างๆ ของ Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">สแกน</translation> <translation id="2523184218357549926">ส่ง URL ของหน้าที่คุณเข้าชมไปยัง Google</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 919db4e4c..0a327efb 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
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">Resim açıklamaları kapalı</translation> <translation id="2172905120685242547">Pencere kapatılsın mı?</translation> <translation id="2175927920773552910">QR Kodu</translation> -<translation id="2176767904800337188">Sanal kart gerçek kartınızı saklayarak olası sahtekarlıklardan korunmanıza yardımcı olur. <ph name="BEGIN_LINK1" />Sanal kartlar hakkında daha fazla bilgi<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Paylaşım</translation> <translation id="2189903024544168260">İlgi alanı kaldırıldı</translation> <translation id="2194856509914051091">Dikkate alınması gereken noktalar</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">Tarama geçmişi</translation> <translation id="2497852260688568942">Yöneticiniz senkronizasyonu devre dışı bıraktı</translation> <translation id="250020030759455918"><ph name="SITE_NAME" /> sitenizin oturum açma durumunu, tarama verilerini ve site verilerini Chrome'da görürsünüz</translation> -<translation id="2512164632052122970">İçerik dilleri</translation> <translation id="2513403576141822879">Gizlilik, güvenlik ve veri toplamayla ilgili daha fazla ayar için <ph name="BEGIN_LINK" />Senkronizasyon ve Google hizmetleri<ph name="END_LINK" /> konusuna bakın</translation> <translation id="2517472476991765520">Tara</translation> <translation id="2523184218357549926">Ziyaret ettiğiniz sayfaların URL'lerini Google'a gönderir</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb index b4b8c01..ef4a255 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uk.xtb
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">Описи зображень вимкнено</translation> <translation id="2172905120685242547">Закрити вікно?</translation> <translation id="2175927920773552910">QR-код</translation> -<translation id="2176767904800337188">Щоб захистити вас від потенційного шахрайства, замість справжньої картки буде використовуватися віртуальна. <ph name="BEGIN_LINK1" />Докладніше про віртуальні картки<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Спільний доступ</translation> <translation id="2189903024544168260">Інтерес вилучено</translation> <translation id="2194856509914051091">Що варто врахувати</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">Історія веб-перегляду</translation> <translation id="2497852260688568942">Ваш адміністратор вимкнув синхронізацію</translation> <translation id="250020030759455918">Ви зможете переглядати статус входу на сайті <ph name="SITE_NAME" />, дані веб-перегляду й сайту в Chrome</translation> -<translation id="2512164632052122970">Мови контенту</translation> <translation id="2513403576141822879">Інші налаштування конфіденційності, безпеки та збору даних доступні в розділі <ph name="BEGIN_LINK" />Синхронізація та сервіси Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Сканувати</translation> <translation id="2523184218357549926">Надсилає в Google URL-адреси відвіданих сторінок</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb index 6d8c29f..1c8bc12 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_ur.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">مطابقت پذیری کو آف کریں؟</translation> <translation id="1430915738399379752">پرنٹ کریں</translation> <translation id="1436784010935106834">ہٹا دیا گیا</translation> +<translation id="1437543266176261764"><ph name="APP_NAME" /> میں چل رہا ہے</translation> <translation id="1448440926884431741">اپنے ٹریک کردہ پروڈکٹس کو بُک مارکس میں منظم کریں</translation> <translation id="1450753235335490080"><ph name="CONTENT_TYPE" /> کا اشتراک نہیں کیا جا سکتا</translation> <translation id="1466383950273130737">Chrome کی زبان منتخب کریں</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">تصویر کی تفصیلات آف ہیں</translation> <translation id="2172905120685242547">ونڈو کو بند کر دیں؟</translation> <translation id="2175927920773552910">QR کوڈ</translation> -<translation id="2176767904800337188">ورچوئل کارڈ آپ کے اصل کارڈ کو چھپاتا ہے تاکہ آپ کی ممکنہ دھوکہ دہی سے حفاظت کرنے میں مدد کر سکے۔ <ph name="BEGIN_LINK1" />ورچوئل کارڈز کے بارے میں مزید جانیں<ph name="END_LINK1" /></translation> <translation id="218608176142494674">اشتراک</translation> <translation id="2189903024544168260">دلچسپی کو ہٹا دیا گیا</translation> <translation id="2194856509914051091">قابل غور چیزیں</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">براؤزنگ سرگزشت</translation> <translation id="2497852260688568942">مطابقت پذیری کو آپ کے منتظم نے غیر فعال کر دیا ہے</translation> <translation id="250020030759455918">آپ Chrome میں اپنا <ph name="SITE_NAME" /> سائن ان اسٹیٹس، براؤزنگ ڈیٹا اور سائٹ کا ڈیٹا دیکھیں گے</translation> -<translation id="2512164632052122970">مواد کی زبانیں</translation> <translation id="2513403576141822879">راز داری، سیکیورٹی اور ڈیٹا کی جمع آوری سے متعلق مزید ترتیبات کے لیے، <ph name="BEGIN_LINK" />مطابقت پذیری اور Google سروسز<ph name="END_LINK" /> دیکھیں</translation> <translation id="2517472476991765520">اسکین کریں</translation> <translation id="2523184218357549926">Google کو ان صفحات کے URLs بھیجتی ہے جنہیں آپ ملاحظہ کرتے ہیں</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb index 7269df59..937fd78 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_uz.xtb
@@ -224,7 +224,6 @@ <translation id="2172688499998841696">Rasmlar tavsifi yoqilmagan</translation> <translation id="2172905120685242547">Oyna yopilsinmi?</translation> <translation id="2175927920773552910">QR kod</translation> -<translation id="2176767904800337188">Virtual karta haqiqiy kartani ehtimoliy firibgarlikdan himoya qiladi. <ph name="BEGIN_LINK1" />Virtual kartalar haqida batafsil<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Ulashish</translation> <translation id="2189903024544168260">Qiziqish olib tashlandi</translation> <translation id="2194856509914051091">Bularni hisobga olish kerak</translation> @@ -273,7 +272,6 @@ <translation id="2496180316473517155">Kezish tarixi</translation> <translation id="2497852260688568942">Sinxronizatsiyani administrator o‘chirib qo‘ygan</translation> <translation id="250020030759455918"><ph name="SITE_NAME" /> saytiga kirish holati, brauzer va sayt maʼlumotlari Chromeda chiqadi</translation> -<translation id="2512164632052122970">Kontent tillari</translation> <translation id="2513403576141822879">Maxfiylik, xavfsizlik va ma’lumotlar yig‘ilishi haqida batafsil axborot olish uchun <ph name="BEGIN_LINK" />Sinxronizatsiya va shaxsiy sozlamalar<ph name="END_LINK" /> bilan tanishing</translation> <translation id="2517472476991765520">Qidiruv</translation> <translation id="2523184218357549926">Siz tashrif buyurgan URL manzillarni Google serverlariga yuboradi</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 ae1ef87b..acd3345 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
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">Tắt tính năng đồng bộ hoá?</translation> <translation id="1430915738399379752">In</translation> <translation id="1436784010935106834">Đã xóa</translation> +<translation id="1437543266176261764">Chạy trong <ph name="APP_NAME" /></translation> <translation id="1448440926884431741">Sắp xếp các sản phẩm bạn theo dõi trong phần Dấu trang</translation> <translation id="1450753235335490080">Không thể chia sẻ <ph name="CONTENT_TYPE" /></translation> <translation id="1466383950273130737">Chọn ngôn ngữ cho Chrome</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">Tính năng mô tả hình ảnh đang tắt</translation> <translation id="2172905120685242547">Đóng cửa sổ?</translation> <translation id="2175927920773552910">Mã QR</translation> -<translation id="2176767904800337188">Thẻ ảo giúp ngụy trang thẻ thực của bạn để bảo vệ bạn khỏi nguy cơ bị lừa đảo. <ph name="BEGIN_LINK1" />Tìm hiểu thêm về thẻ ảo<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Chia sẻ</translation> <translation id="2189903024544168260">Đã xoá mối quan tâm</translation> <translation id="2194856509914051091">Những yếu tố cần xem xét</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">Lịch sử duyệt web</translation> <translation id="2497852260688568942">Quản trị viên của bạn đã tắt tính năng đồng bộ hóa</translation> <translation id="250020030759455918">Trong Chrome, bạn sẽ thấy trạng thái đăng nhập, dữ liệu duyệt web và dữ liệu trang web trên <ph name="SITE_NAME" /></translation> -<translation id="2512164632052122970">Ngôn ngữ nội dung</translation> <translation id="2513403576141822879">Bạn có thể xem thêm tùy chọn cài đặt liên quan đến quyền riêng tư, bảo mật và hoạt động thu thập dữ liệu trong phần <ph name="BEGIN_LINK" />Đồng bộ hóa và dịch vụ của Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Quét</translation> <translation id="2523184218357549926">Gửi cho Google URL của các trang bạn truy cập</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 a4de704..c2e00a6 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
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">关闭同步功能?</translation> <translation id="1430915738399379752">打印</translation> <translation id="1436784010935106834">已删除</translation> +<translation id="1437543266176261764">正在“<ph name="APP_NAME" />”应用内运行</translation> <translation id="1448440926884431741">在“书签”页面中整理您跟踪的商品</translation> <translation id="1450753235335490080">无法分享<ph name="CONTENT_TYPE" /></translation> <translation id="1466383950273130737">选择要让 Chrome 采用的语言</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">“图片说明”功能已关闭</translation> <translation id="2172905120685242547">关闭窗口?</translation> <translation id="2175927920773552910">二维码</translation> -<translation id="2176767904800337188">使用虚拟卡可隐藏您的实体卡信息,保护您免遭潜在欺诈活动的威胁。<ph name="BEGIN_LINK1" />详细了解虚拟卡<ph name="END_LINK1" /></translation> <translation id="218608176142494674">共享</translation> <translation id="2189903024544168260">移除了兴趣</translation> <translation id="2194856509914051091">注意事项</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">浏览记录</translation> <translation id="2497852260688568942">您的管理员已停用同步</translation> <translation id="250020030759455918">您会在 Chrome 中看到自己的 <ph name="SITE_NAME" /> 登录状态、浏览数据和网站数据</translation> -<translation id="2512164632052122970">内容语言</translation> <translation id="2513403576141822879">若想了解更多与隐私、安全和数据收集相关的设置,请参阅<ph name="BEGIN_LINK" />同步功能和 Google 服务<ph name="END_LINK" /></translation> <translation id="2517472476991765520">扫描</translation> <translation id="2523184218357549926">将您所访问的网页的网址发送给 Google</translation>
diff --git a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb index 98f512f..0bcbff1 100644 --- a/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb +++ b/chrome/browser/ui/android/strings/translations/android_chrome_strings_zh-HK.xtb
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">要關閉同步功能嗎?</translation> <translation id="1430915738399379752">列印</translation> <translation id="1436784010935106834">已移除</translation> +<translation id="1437543266176261764">在 <ph name="APP_NAME" /> 中執行</translation> <translation id="1448440926884431741">在「書籤」中整理追蹤的產品</translation> <translation id="1450753235335490080">無法分享<ph name="CONTENT_TYPE" /></translation> <translation id="1466383950273130737">選取 Chrome 的語言</translation> @@ -223,7 +224,6 @@ <translation id="2172688499998841696">圖片描述功能已關閉</translation> <translation id="2172905120685242547">要關閉視窗嗎?</translation> <translation id="2175927920773552910">二維條碼</translation> -<translation id="2176767904800337188">虛擬卡會隱藏您的實體卡,保護您免受潛在欺詐行為的威脅。<ph name="BEGIN_LINK1" />進一步瞭解虛擬卡<ph name="END_LINK1" /></translation> <translation id="218608176142494674">共用</translation> <translation id="2189903024544168260">已移除興趣</translation> <translation id="2194856509914051091">考慮因素</translation> @@ -272,7 +272,6 @@ <translation id="2496180316473517155">瀏覽記錄</translation> <translation id="2497852260688568942">您的管理員已停用同步功能</translation> <translation id="250020030759455918">您可在 Chrome 中查看 <ph name="SITE_NAME" /> 登入狀態、瀏覽資料和網站資料</translation> -<translation id="2512164632052122970">內容語言</translation> <translation id="2513403576141822879">如需更多與私隱權、安全性和資料收集相關的設定,請參閱<ph name="BEGIN_LINK" />同步處理和 Google 服務<ph name="END_LINK" /></translation> <translation id="2517472476991765520">掃瞄</translation> <translation id="2523184218357549926">將您瀏覽的網頁網址傳送給 Google</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 23ea6068..ea406ab 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
@@ -97,6 +97,7 @@ <translation id="1428770807407000502">要關閉同步處理嗎?</translation> <translation id="1430915738399379752">列印</translation> <translation id="1436784010935106834">已移除</translation> +<translation id="1437543266176261764">在 <ph name="APP_NAME" /> 中執行</translation> <translation id="1448440926884431741">在書籤中整理所追蹤的產品</translation> <translation id="1450753235335490080">無法分享<ph name="CONTENT_TYPE" /></translation> <translation id="1466383950273130737">選擇 Chrome 的顯示語言</translation> @@ -222,7 +223,6 @@ <translation id="2172688499998841696">圖片說明功能已關閉</translation> <translation id="2172905120685242547">要關閉視窗嗎?</translation> <translation id="2175927920773552910">QR 圖碼</translation> -<translation id="2176767904800337188">虛擬卡片能偽裝成真正的卡片,協助防範潛在詐欺活動。<ph name="BEGIN_LINK1" />進一步瞭解虛擬卡片<ph name="END_LINK1" /></translation> <translation id="218608176142494674">共用</translation> <translation id="2189903024544168260">已移除感興趣的主題</translation> <translation id="2194856509914051091">注意事項</translation> @@ -271,7 +271,6 @@ <translation id="2496180316473517155">瀏覽記錄</translation> <translation id="2497852260688568942">你的管理員停用了同步功能</translation> <translation id="250020030759455918">你將可在 Chrome 中查看 <ph name="SITE_NAME" /> 登入狀態、瀏覽資料和網站資料</translation> -<translation id="2512164632052122970">內容語言</translation> <translation id="2513403576141822879">如需更多隱私權、安全性和資料收集的相關設定,請參閱<ph name="BEGIN_LINK" />同步處理和 Google 服務<ph name="END_LINK" /></translation> <translation id="2517472476991765520">掃描</translation> <translation id="2523184218357549926">將你造訪的網頁網址傳送給 Google</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 9d419491..b516950 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
@@ -223,7 +223,6 @@ <translation id="2172688499998841696">Izincazelo zesithombe zivaliwe</translation> <translation id="2172905120685242547">Vala iwindi?</translation> <translation id="2175927920773552910">Ikhodi ye-QR</translation> -<translation id="2176767904800337188">Ikhadi le-virtual lifihla ikhadi lakho langempela ukusiza ukukuvikela ekukhwabaniseni okungase kube khona. <ph name="BEGIN_LINK1" />Funda kabanzi ngamakhadi we-virtual<ph name="END_LINK1" /></translation> <translation id="218608176142494674">Ukwabelana</translation> <translation id="2189903024544168260">Inzalo isusiwe</translation> <translation id="2194856509914051091">Izinto okufanele uzicabangele</translation> @@ -272,7 +271,6 @@ <translation id="2496180316473517155">Umlando wokuphequlula</translation> <translation id="2497852260688568942">Ukuvumelanisa kukhutshazwe umlawuli wakho.</translation> <translation id="250020030759455918">Uzobona isimo sakho sokungena ngemvume se-<ph name="SITE_NAME" />, idatha yokuphequlula, nedatha yesayithi ku-Chrome</translation> -<translation id="2512164632052122970">Izilimi zokuqukethwe</translation> <translation id="2513403576141822879">Ukuze uthole ezinye izilungiselelo ezihambisana nobumfihlo, ukuvikelwa nokuqoqwa kwedatha, bona <ph name="BEGIN_LINK" />amasevisi okuvumelanisa nawe-Google<ph name="END_LINK" /></translation> <translation id="2517472476991765520">Skena</translation> <translation id="2523184218357549926">Ithumela ama-URL amakhasi owavakashelayo ku-Google</translation>
diff --git a/chrome/browser/ui/app_list/search/files/item_suggest_cache.cc b/chrome/browser/ui/app_list/search/files/item_suggest_cache.cc index 9b59e0f..2303e180 100644 --- a/chrome/browser/ui/app_list/search/files/item_suggest_cache.cc +++ b/chrome/browser/ui/app_list/search/files/item_suggest_cache.cc
@@ -352,7 +352,7 @@ data_decoder::DataDecoder::ValueOrError result) { DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_); - if (!result.value) { + if (!result.has_value()) { LogStatus(Status::kJsonParseFailure); return; } @@ -360,7 +360,7 @@ // Convert the JSON value into a Results object. If the conversion fails, or // if the conversion contains no results, we shouldn't update the stored // results. - const auto& results = ConvertResults(&result.value.value()); + const auto& results = ConvertResults(&*result); if (!results) { LogStatus(Status::kJsonConversionFailure); } else if (results->results.empty()) {
diff --git a/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_util.cc b/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_util.cc index 590baac..34e4292 100644 --- a/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_util.cc +++ b/chrome/browser/ui/app_list/search/search_result_ranker/recurrence_ranker_util.cc
@@ -254,7 +254,7 @@ const std::string& model_identifier, data_decoder::DataDecoder::ValueOrError result) { RecurrenceRankerConfigProto proto; - if (result.value && ConvertRecurrenceRanker(&result.value.value(), &proto)) { + if (result.has_value() && ConvertRecurrenceRanker(&*result, &proto)) { std::move(callback).Run(std::move(proto)); } else { std::move(callback).Run(absl::nullopt);
diff --git a/chrome/browser/ui/ash/arc_open_url_delegate_impl.cc b/chrome/browser/ui/ash/arc_open_url_delegate_impl.cc index 45de338..2976e7d 100644 --- a/chrome/browser/ui/ash/arc_open_url_delegate_impl.cc +++ b/chrome/browser/ui/ash/arc_open_url_delegate_impl.cc
@@ -66,50 +66,48 @@ ArcOpenUrlDelegateImpl* g_instance = nullptr; -constexpr auto kOSSettingsMap = - base::MakeFixedFlatMap<ChromePage, const char*>({ - {ChromePage::ACCOUNTS, - chromeos::settings::mojom::kManageOtherPeopleSubpagePathV2}, - {ChromePage::BLUETOOTH, - chromeos::settings::mojom::kBluetoothDevicesSubpagePath}, - {ChromePage::BLUETOOTHDEVICES, - chromeos::settings::mojom::kBluetoothDevicesSubpagePath}, - {ChromePage::CHANGEPICTURE, - chromeos::settings::mojom::kChangePictureSubpagePath}, - {ChromePage::CUPSPRINTERS, - chromeos::settings::mojom::kPrintingDetailsSubpagePath}, - {ChromePage::DATETIME, - chromeos::settings::mojom::kDateAndTimeSectionPath}, - {ChromePage::DISPLAY, chromeos::settings::mojom::kDisplaySubpagePath}, - {ChromePage::HELP, - chromeos::settings::mojom::kAboutChromeOsSectionPath}, - {ChromePage::KEYBOARDOVERLAY, - chromeos::settings::mojom::kKeyboardSubpagePath}, - {ChromePage::LOCKSCREEN, - chromeos::settings::mojom::kSecurityAndSignInSubpagePathV2}, - {ChromePage::MAIN, ""}, - {ChromePage::MANAGEACCESSIBILITY, - chromeos::settings::mojom::kManageAccessibilitySubpagePath}, - {ChromePage::MANAGEACCESSIBILITYTTS, - chromeos::settings::mojom::kTextToSpeechSubpagePath}, - {ChromePage::MULTIDEVICE, - chromeos::settings::mojom::kMultiDeviceSectionPath}, - {ChromePage::NETWORKSTYPEVPN, - chromeos::settings::mojom::kVpnDetailsSubpagePath}, - {ChromePage::OSLANGUAGESINPUT, - chromeos::settings::mojom::kInputSubpagePath}, - {ChromePage::OSLANGUAGESLANGUAGES, - chromeos::settings::mojom::kLanguagesSubpagePath}, - {ChromePage::POINTEROVERLAY, - chromeos::settings::mojom::kPointersSubpagePath}, - {ChromePage::POWER, chromeos::settings::mojom::kPowerSubpagePath}, - {ChromePage::PRIVACYHUB, - chromeos::settings::mojom::kPrivacyHubSubpagePath}, - {ChromePage::SMARTPRIVACY, - chromeos::settings::mojom::kSmartPrivacySubpagePath}, - {ChromePage::STORAGE, chromeos::settings::mojom::kStorageSubpagePath}, - {ChromePage::WIFI, chromeos::settings::mojom::kWifiNetworksSubpagePath}, - }); +constexpr auto kOSSettingsMap = base::MakeFixedFlatMap<ChromePage, + const char*>({ + {ChromePage::ACCOUNTS, + chromeos::settings::mojom::kManageOtherPeopleSubpagePathV2}, + {ChromePage::AUDIO, chromeos::settings::mojom::kAudioSubpagePath}, + {ChromePage::BLUETOOTH, + chromeos::settings::mojom::kBluetoothDevicesSubpagePath}, + {ChromePage::BLUETOOTHDEVICES, + chromeos::settings::mojom::kBluetoothDevicesSubpagePath}, + {ChromePage::CHANGEPICTURE, + chromeos::settings::mojom::kChangePictureSubpagePath}, + {ChromePage::CUPSPRINTERS, + chromeos::settings::mojom::kPrintingDetailsSubpagePath}, + {ChromePage::DATETIME, chromeos::settings::mojom::kDateAndTimeSectionPath}, + {ChromePage::DISPLAY, chromeos::settings::mojom::kDisplaySubpagePath}, + {ChromePage::HELP, chromeos::settings::mojom::kAboutChromeOsSectionPath}, + {ChromePage::KEYBOARDOVERLAY, + chromeos::settings::mojom::kKeyboardSubpagePath}, + {ChromePage::LOCKSCREEN, + chromeos::settings::mojom::kSecurityAndSignInSubpagePathV2}, + {ChromePage::MAIN, ""}, + {ChromePage::MANAGEACCESSIBILITY, + chromeos::settings::mojom::kManageAccessibilitySubpagePath}, + {ChromePage::MANAGEACCESSIBILITYTTS, + chromeos::settings::mojom::kTextToSpeechSubpagePath}, + {ChromePage::MULTIDEVICE, + chromeos::settings::mojom::kMultiDeviceSectionPath}, + {ChromePage::NETWORKSTYPEVPN, + chromeos::settings::mojom::kVpnDetailsSubpagePath}, + {ChromePage::OSLANGUAGESINPUT, + chromeos::settings::mojom::kInputSubpagePath}, + {ChromePage::OSLANGUAGESLANGUAGES, + chromeos::settings::mojom::kLanguagesSubpagePath}, + {ChromePage::POINTEROVERLAY, + chromeos::settings::mojom::kPointersSubpagePath}, + {ChromePage::POWER, chromeos::settings::mojom::kPowerSubpagePath}, + {ChromePage::PRIVACYHUB, chromeos::settings::mojom::kPrivacyHubSubpagePath}, + {ChromePage::SMARTPRIVACY, + chromeos::settings::mojom::kSmartPrivacySubpagePath}, + {ChromePage::STORAGE, chromeos::settings::mojom::kStorageSubpagePath}, + {ChromePage::WIFI, chromeos::settings::mojom::kWifiNetworksSubpagePath}, +}); constexpr auto kBrowserSettingsMap = base::MakeFixedFlatMap<ChromePage, const char*>({
diff --git a/chrome/browser/ui/ash/arc_open_url_delegate_impl_browsertest.cc b/chrome/browser/ui/ash/arc_open_url_delegate_impl_browsertest.cc index 87f09dd..ad31eceb 100644 --- a/chrome/browser/ui/ash/arc_open_url_delegate_impl_browsertest.cc +++ b/chrome/browser/ui/ash/arc_open_url_delegate_impl_browsertest.cc
@@ -292,6 +292,9 @@ ChromePage::DISPLAY, base_url.Resolve(chromeos::settings::mojom::kDisplaySubpagePath)); TestOpenOSSettingsChromePage( + ChromePage::AUDIO, + base_url.Resolve(chromeos::settings::mojom::kAudioSubpagePath)); + TestOpenOSSettingsChromePage( ChromePage::HELP, base_url.Resolve(chromeos::settings::mojom::kAboutChromeOsSectionPath)); TestOpenOSSettingsChromePage(
diff --git a/chrome/browser/ui/ash/assistant/search_and_assistant_enabled_checker.cc b/chrome/browser/ui/ash/assistant/search_and_assistant_enabled_checker.cc index a9bbf2a..59c92894 100644 --- a/chrome/browser/ui/ash/assistant/search_and_assistant_enabled_checker.cc +++ b/chrome/browser/ui/ash/assistant/search_and_assistant_enabled_checker.cc
@@ -83,14 +83,14 @@ void SearchAndAssistantEnabledChecker::OnJsonParsed( data_decoder::DataDecoder::ValueOrError response) { - if (!response.value) { - LOG(ERROR) << "JSON parsing failed: " << *response.error; + if (!response.has_value()) { + LOG(ERROR) << "JSON parsing failed: " << response.error(); delegate_->OnError(); return; } // |result| is true if the Search and Assistant bit is disabled. - auto is_disabled = response.value->FindBoolPath("result"); + auto is_disabled = response->FindBoolPath("result"); delegate_->OnSearchAndAssistantStateReceived(is_disabled.value()); }
diff --git a/chrome/browser/ui/ash/thumbnail_loader.cc b/chrome/browser/ui/ash/thumbnail_loader.cc index 732641f0..ed732aa5 100644 --- a/chrome/browser/ui/ash/thumbnail_loader.cc +++ b/chrome/browser/ui/ash/thumbnail_loader.cc
@@ -185,21 +185,21 @@ const std::string& request_id, ThumbnailDataCallback callback, data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { - VLOG(2) << "Failed to parse request response " << *result.error; + if (!result.has_value()) { + VLOG(2) << "Failed to parse request response " << result.error(); std::move(callback).Run(""); return; } - if (!result.value->is_dict()) { + if (!result->is_dict()) { VLOG(2) << "Invalid response format"; std::move(callback).Run(""); return; } const std::string* received_request_id = - result.value->GetDict().FindString("taskId"); - const std::string* data = result.value->GetDict().FindString("data"); + result->GetDict().FindString("taskId"); + const std::string* data = result->GetDict().FindString("data"); if (!data || !received_request_id || *received_request_id != request_id) { std::move(callback).Run("");
diff --git a/chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller.h b/chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller.h index b43ff9a9..c9c9635 100644 --- a/chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller.h +++ b/chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller.h
@@ -7,11 +7,9 @@ #include <memory> #include <string> -#include <vector> #include "base/callback.h" #include "base/memory/weak_ptr.h" -#include "third_party/abseil-cpp/absl/types/optional.h" #include "url/gurl.h" namespace content { @@ -54,10 +52,7 @@ public: // A callback that is called with `true` if consent was given and false // otherwise (either by denying explicitly or by closing the prompt). - // If consent was given, the resource ids of the confirmation button label - // and other text elements are passed as arguments. - using Callback = base::OnceCallback< - void(bool, absl::optional<int>, const std::vector<int>&)>; + using Callback = base::OnceCallback<void(bool)>; // Factory function to create controller that is defined in the file // `assistant_onboarding_controller_impl.cc`. @@ -73,8 +68,7 @@ Callback callback) = 0; // Registers that the consent was given. - virtual void OnAccept(int confirmation_grd_id, - const std::vector<int>& description_grd_ids) = 0; + virtual void OnAccept() = 0; // Registers that the consent dialog was cancelled, i.e. no consent was given. virtual void OnCancel() = 0;
diff --git a/chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller_impl.cc b/chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller_impl.cc index 86d2d46..c057803 100644 --- a/chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller_impl.cc +++ b/chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller_impl.cc
@@ -13,7 +13,6 @@ #include "chrome/browser/ui/browser_navigator.h" #include "chrome/browser/ui/browser_navigator_params.h" #include "content/public/browser/web_contents.h" -#include "third_party/abseil-cpp/absl/types/optional.h" #include "ui/base/page_transition_types.h" #include "ui/base/window_open_disposition.h" @@ -38,28 +37,24 @@ prompt_->Show(web_contents_); } -void AssistantOnboardingControllerImpl::OnAccept( - int confirmation_grd_id, - const std::vector<int>& description_grd_ids) { +void AssistantOnboardingControllerImpl::OnAccept() { if (prompt_) { prompt_ = nullptr; - std::move(callback_).Run(true, confirmation_grd_id, description_grd_ids); + std::move(callback_).Run(true); } } void AssistantOnboardingControllerImpl::OnCancel() { if (prompt_) { prompt_ = nullptr; - std::move(callback_).Run(false, /*confirmation_grd_id=*/absl::nullopt, - /*description_grd_ids=*/{}); + std::move(callback_).Run(false); } } void AssistantOnboardingControllerImpl::OnClose() { if (prompt_) { prompt_ = nullptr; - std::move(callback_).Run(false, /*confirmation_grd_id=*/absl::nullopt, - /*description_grd_ids=*/{}); + std::move(callback_).Run(false); } } @@ -85,8 +80,7 @@ void AssistantOnboardingControllerImpl::ClosePrompt() { if (prompt_) { std::exchange(prompt_, nullptr)->OnControllerGone(); - std::move(callback_).Run(false, /*confirmation_grd_id=*/absl::nullopt, - /*description_grd_ids=*/{}); + std::move(callback_).Run(false); } }
diff --git a/chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller_impl.h b/chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller_impl.h index ea2799f..0ca32de7 100644 --- a/chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller_impl.h +++ b/chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller_impl.h
@@ -7,8 +7,6 @@ #include "chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller.h" -#include <vector> - #include "base/callback.h" #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" @@ -33,8 +31,7 @@ Callback callback) override; // For the below `On*` methods, the controller does not take care of closing // the view - this is done by the view itself. - void OnAccept(int confirmation_grd_id, - const std::vector<int>& description_grd_ids) override; + void OnAccept() override; void OnCancel() override; void OnClose() override; void OnLearnMoreClicked() override;
diff --git a/chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller_impl_unittest.cc b/chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller_impl_unittest.cc index bca6af85..2678782a 100644 --- a/chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller_impl_unittest.cc +++ b/chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller_impl_unittest.cc
@@ -11,16 +11,9 @@ #include "chrome/browser/ui/autofill_assistant/password_change/mock_assistant_onboarding_prompt.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" -#include "third_party/abseil-cpp/absl/types/optional.h" using ::testing::StrictMock; -namespace { -constexpr int kConfirmationId = 123; -constexpr int kDescriptionId1 = 37; -constexpr int kDescriptionId2 = 43; -} // namespace - class AssistantOnboardingControllerImplTest : public ::testing::Test { public: AssistantOnboardingControllerImplTest() { @@ -44,10 +37,8 @@ controller_->Show(prompt.GetWeakPtr(), callback.Get()); // Simulate click on accept. - EXPECT_CALL(callback, - Run(true, absl::optional<int>(kConfirmationId), - std::vector<int>({kDescriptionId1, kDescriptionId2}))); - controller_->OnAccept(kConfirmationId, {kDescriptionId1, kDescriptionId2}); + EXPECT_CALL(callback, Run(true)); + controller_->OnAccept(); } TEST_F(AssistantOnboardingControllerImplTest, ShowPromptAndCancel) { @@ -58,7 +49,7 @@ controller_->Show(prompt.GetWeakPtr(), callback.Get()); // Simulate click on cancel. - EXPECT_CALL(callback, Run(false, absl::optional<int>(), std::vector<int>())); + EXPECT_CALL(callback, Run(false)); controller_->OnCancel(); } @@ -70,7 +61,7 @@ controller_->Show(prompt.GetWeakPtr(), callback.Get()); // Simulate click on cancel. - EXPECT_CALL(callback, Run(false, absl::optional<int>(), std::vector<int>())); + EXPECT_CALL(callback, Run(false)); controller_->OnClose(); // A second call does not do anything. @@ -89,15 +80,13 @@ // The second prompt closes the first. EXPECT_CALL(first_prompt, OnControllerGone); - EXPECT_CALL(first_callback, - Run(false, absl::optional<int>(), std::vector<int>())); + EXPECT_CALL(first_callback, Run(false)); EXPECT_CALL(second_prompt, Show); controller_->Show(second_prompt.GetWeakPtr(), second_callback.Get()); // Simulate click on accept. - EXPECT_CALL(second_callback, Run(true, absl::optional<int>(kConfirmationId), - std::vector<int>({kDescriptionId1}))); - controller_->OnAccept(kConfirmationId, {kDescriptionId1}); + EXPECT_CALL(second_callback, Run(true)); + controller_->OnAccept(); } TEST_F(AssistantOnboardingControllerImplTest, ShowPromptAndRemoveController) { @@ -109,6 +98,6 @@ // Destroying the controller should notify the prompt and run the callback. EXPECT_CALL(prompt, OnControllerGone); - EXPECT_CALL(callback, Run(false, absl::optional<int>(), std::vector<int>())); + EXPECT_CALL(callback, Run(false)); controller_.reset(); }
diff --git a/chrome/browser/ui/autofill_assistant/password_change/mock_assistant_onboarding_controller.h b/chrome/browser/ui/autofill_assistant/password_change/mock_assistant_onboarding_controller.h index aaecc98e..56d8f5e 100644 --- a/chrome/browser/ui/autofill_assistant/password_change/mock_assistant_onboarding_controller.h +++ b/chrome/browser/ui/autofill_assistant/password_change/mock_assistant_onboarding_controller.h
@@ -5,8 +5,6 @@ #ifndef CHROME_BROWSER_UI_AUTOFILL_ASSISTANT_PASSWORD_CHANGE_MOCK_ASSISTANT_ONBOARDING_CONTROLLER_H_ #define CHROME_BROWSER_UI_AUTOFILL_ASSISTANT_PASSWORD_CHANGE_MOCK_ASSISTANT_ONBOARDING_CONTROLLER_H_ -#include <vector> - #include "base/memory/weak_ptr.h" #include "chrome/browser/ui/autofill_assistant/password_change/assistant_onboarding_controller.h" #include "testing/gmock/include/gmock/gmock.h" @@ -21,7 +19,7 @@ Show, (base::WeakPtr<AssistantOnboardingPrompt>, Callback callback), (override)); - MOCK_METHOD(void, OnAccept, (int, const std::vector<int>&), (override)); + MOCK_METHOD(void, OnAccept, (), (override)); MOCK_METHOD(void, OnCancel, (), (override)); MOCK_METHOD(void, OnClose, (), (override)); MOCK_METHOD(void, OnLearnMoreClicked, (), (override));
diff --git a/chrome/browser/ui/views/autofill_assistant/password_change/assistant_onboarding_view.cc b/chrome/browser/ui/views/autofill_assistant/password_change/assistant_onboarding_view.cc index 45eb71e..23b2a73 100644 --- a/chrome/browser/ui/views/autofill_assistant/password_change/assistant_onboarding_view.cc +++ b/chrome/browser/ui/views/autofill_assistant/password_change/assistant_onboarding_view.cc
@@ -94,8 +94,8 @@ set_margins(views::LayoutProvider::Get()->GetDialogInsetsForContentType( views::DialogContentType::kControl, views::DialogContentType::kControl)); - SetAcceptCallback(base::BindOnce(&AssistantOnboardingView::OnAccept, - weak_ptr_factory_.GetWeakPtr())); + SetAcceptCallback( + base::BindOnce(&AssistantOnboardingController::OnAccept, controller_)); SetCancelCallback( base::BindOnce(&AssistantOnboardingController::OnCancel, controller_)); SetCloseCallback( @@ -103,9 +103,6 @@ } void AssistantOnboardingView::InitDialog() { - // IMPORTANT: If any additional text elements are added, the resource ids - // of the strings must be included in the data filled in `OnAccept()`. - // The dialog is not expected to be resized, so for our purposes, a // `BoxLayout` is sufficient. auto* layout = SetLayoutManager(std::make_unique<views::BoxLayout>( @@ -211,18 +208,6 @@ .Build()); } -void AssistantOnboardingView::OnAccept() { - // IMPORTANT: If any additional text elements are added, then these must be - // included here to ensure that the audit record is complete. - if (controller_) { - const AssistantOnboardingInformation& model = - controller_->GetOnboardingInformation(); - controller_->OnAccept(model.button_accept_text_id, - {model.title_id, model.description_id, - model.consent_text_id, model.learn_more_title_id}); - } -} - base::WeakPtr<AssistantOnboardingView> AssistantOnboardingView::GetWeakPtr() { return weak_ptr_factory_.GetWeakPtr(); }
diff --git a/chrome/browser/ui/views/autofill_assistant/password_change/assistant_onboarding_view.h b/chrome/browser/ui/views/autofill_assistant/password_change/assistant_onboarding_view.h index e4f26cf9..edb1f60 100644 --- a/chrome/browser/ui/views/autofill_assistant/password_change/assistant_onboarding_view.h +++ b/chrome/browser/ui/views/autofill_assistant/password_change/assistant_onboarding_view.h
@@ -26,9 +26,6 @@ // not be deleted manually. In addition, `Show()` should always be called after // constructing it. // The view and its controller notify each other when one is destroyed. -// -// IMPORTANT: If any additional text elements are added, then these must be -// included in `OnAccept` to ensure that the audit record is complete. class AssistantOnboardingView : public views::DialogDelegateView, public AssistantOnboardingPrompt { public: @@ -64,11 +61,6 @@ // Creates the content of the dialog by adding the relevant views. void InitDialog(); - // Informs the controller that consent was accepted and passes the resource - // ids of the strings on the accept button and the other text elements of - // the dialog. - void OnAccept(); - // The controller belonging to this view. base::WeakPtr<AssistantOnboardingController> controller_;
diff --git a/chrome/browser/ui/views/autofill_assistant/password_change/assistant_onboarding_view_interactive_ui_test.cc b/chrome/browser/ui/views/autofill_assistant/password_change/assistant_onboarding_view_interactive_ui_test.cc index 78a3695..595ede9 100644 --- a/chrome/browser/ui/views/autofill_assistant/password_change/assistant_onboarding_view_interactive_ui_test.cc +++ b/chrome/browser/ui/views/autofill_assistant/password_change/assistant_onboarding_view_interactive_ui_test.cc
@@ -2,11 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/ui/views/autofill_assistant/password_change/assistant_onboarding_view.h" - #include <memory> #include <string> -#include <vector> #include "base/memory/raw_ptr.h" #include "base/memory/weak_ptr.h" @@ -18,9 +15,9 @@ #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/test/test_browser_dialog.h" +#include "chrome/browser/ui/views/autofill_assistant/password_change/assistant_onboarding_view.h" #include "chrome/test/base/in_process_browser_test.h" #include "content/public/test/browser_test.h" -#include "third_party/abseil-cpp/absl/types/optional.h" #include "ui/base/l10n/l10n_util.h" #include "ui/views/controls/label.h" #include "ui/views/controls/styled_label.h" @@ -126,9 +123,7 @@ ShowUi("Apc"); // We expect the controller to signal back that the dialog was cancelled. - EXPECT_CALL(callback(), - Run(false, /*confirmation_grd_id=*/absl::optional<int>(), - /*description_grd_ids=*/std::vector<int>())); + EXPECT_CALL(callback(), Run(false)); view()->CancelDialog(); } @@ -136,12 +131,7 @@ ShowUi("Apc"); // We expect the controller to signal back that the dialog was accepted. - const std::vector<int> description_ids = { - model()->title_id, model()->description_id, model()->consent_text_id, - model()->learn_more_title_id}; - EXPECT_CALL(callback(), - Run(true, absl::optional<int>(model()->button_accept_text_id), - description_ids)); + EXPECT_CALL(callback(), Run(true)); view()->AcceptDialog(); }
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc index ea0cfac1..48cc930 100644 --- a/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc +++ b/chrome/browser/ui/views/bookmarks/bookmark_bar_view.cc
@@ -306,9 +306,17 @@ BookmarkFolderButton(const BookmarkFolderButton&) = delete; BookmarkFolderButton& operator=(const BookmarkFolderButton&) = delete; + // Returns an accessible name for the folder. If the folder is unnamed, it + // will use a default, otherwise it will use the user-supplied folder name. + std::u16string GetAccessibleName() const { + return GetText().empty() + ? l10n_util::GetStringUTF16(IDS_UNNAMED_BOOKMARK_FOLDER) + : GetText(); + } + std::u16string GetTooltipText(const gfx::Point& p) const override { return label()->GetPreferredSize().width() > label()->size().width() - ? GetText() + ? GetAccessibleName() : std::u16string(); } @@ -325,6 +333,7 @@ void GetAccessibleNodeData(ui::AXNodeData* node_data) override { BookmarkMenuButtonBase::GetAccessibleNodeData(node_data); + node_data->SetName(GetAccessibleName()); node_data->AddStringAttribute( ax::mojom::StringAttribute::kRoleDescription, l10n_util::GetStringUTF8(
diff --git a/chrome/browser/ui/views/javascript_tab_modal_dialog_view_views.cc b/chrome/browser/ui/views/javascript_tab_modal_dialog_view_views.cc index d2c4198..a0d619a 100644 --- a/chrome/browser/ui/views/javascript_tab_modal_dialog_view_views.cc +++ b/chrome/browser/ui/views/javascript_tab_modal_dialog_view_views.cc
@@ -9,7 +9,9 @@ #include "chrome/browser/ui/views/title_origin_label.h" #include "components/constrained_window/constrained_window_views.h" #include "content/public/browser/javascript_dialog_manager.h" +#include "ui/base/l10n/l10n_util.h" #include "ui/base/metadata/metadata_impl_macros.h" +#include "ui/strings/grit/ui_strings.h" #include "ui/views/accessibility/view_accessibility.h" #include "ui/views/bubble/bubble_frame_view.h" #include "ui/views/controls/label.h" @@ -55,7 +57,8 @@ // We override that calculation here so that we can present both the // title (e.g. "url.com says") and the message text on platforms where // the accessible description is ignored. - GetViewAccessibility().OverrideNativeWindowTitle(GetWindowTitle()); + GetViewAccessibility().OverrideNativeWindowTitle(l10n_util::GetStringFUTF16( + IDS_CONCAT_TWO_STRINGS_WITH_COMMA, GetWindowTitle(), message_text_)); } JavaScriptTabModalDialogViewViews::JavaScriptTabModalDialogViewViews(
diff --git a/chrome/browser/ui/views/javascript_tab_modal_dialog_view_views_browsertest_mac.mm b/chrome/browser/ui/views/javascript_tab_modal_dialog_view_views_browsertest_mac.mm index e3a6202..a09441f 100644 --- a/chrome/browser/ui/views/javascript_tab_modal_dialog_view_views_browsertest_mac.mm +++ b/chrome/browser/ui/views/javascript_tab_modal_dialog_view_views_browsertest_mac.mm
@@ -48,33 +48,11 @@ base::SysNSStringToUTF16([native_dialog accessibilityHelp])); // While some screen readers use the accessible description to know what to - // present to the user, VoiceOver currently does not. Therefore, we override - // the RootView's accessible name in ViewAXPlatformNodeDelegateMac. That name - // is then exposed as the accessibilityTitle (and not accessibilityLabel) on - // the Mac because in AXPlatformNodeCocoa, window roles (including dialog) do - // not expose an accessibilityLabel. - EXPECT_EQ(message, - base::SysNSStringToUTF16([native_dialog accessibilityTitle])); - EXPECT_EQ(u"", base::SysNSStringToUTF16([native_dialog accessibilityLabel])); - - // The parent of the native dialog should be a window. + // present to the user, VoiceOver currently does not. Therefore, we set the + // accessibilityLabel of the native window to contain both the title and + // the message so that both are presented to the user. gfx::NativeViewAccessible native_window = [native_dialog accessibilityParent]; EXPECT_EQ(NSAccessibilityWindowRole, [native_window accessibilityRole]); - - // On the Mac, the native window's accessible title comes from the "contents" - // of the window. In this case, that is the accessibilityTitle of the RootView - // which we overrode as described above. As a result, the native window's - // accessibilityTitle is now also the message text. It is not necessary to - // unset it. (See next comment.) - EXPECT_EQ(message, - base::SysNSStringToUTF16([native_window accessibilityTitle])); - - // When an object has both an accessibilityLabel and an accessibilityTitle, - // VoiceOver prefers the value of accessibilityLabel. Because the native - // window is not an AXPlatformNodeCocoa object, we can set the value of - // accessibilityLabel on the window to the original title ("url.com - // says") via OverrideNativeWindowTitle and VoiceOver presents that - // prior to speaking the RootView's message text. - EXPECT_EQ(title, + EXPECT_EQ(title + u", " + message, base::SysNSStringToUTF16([native_window accessibilityLabel])); }
diff --git a/chrome/browser/ui/views/profiles/profile_customization_bubble_view_browsertest.cc b/chrome/browser/ui/views/profiles/profile_customization_bubble_view_browsertest.cc index ab81f66c4..8475d5ba 100644 --- a/chrome/browser/ui/views/profiles/profile_customization_bubble_view_browsertest.cc +++ b/chrome/browser/ui/views/profiles/profile_customization_bubble_view_browsertest.cc
@@ -101,13 +101,7 @@ ShowAndVerifyUi(); } -// TODO(crbug.com/1343668): Flaky on Linux -#if BUILDFLAG(IS_LINUX) -#define MAYBE_IPH DISABLED_IPH -#else -#define MAYBE_IPH IPH -#endif -IN_PROC_BROWSER_TEST_F(ProfileCustomizationBubbleBrowserTest, MAYBE_IPH) { +IN_PROC_BROWSER_TEST_F(ProfileCustomizationBubbleBrowserTest, IPH) { AvatarToolbarButton::SetIPHMinDelayAfterCreationForTesting(base::Seconds(0)); auto lock = BrowserFeaturePromoController::BlockActiveWindowCheckForTesting(); // Create the customization bubble, owned by the view hierarchy.
diff --git a/chrome/browser/ui/views/side_panel/user_note/user_note_ui_coordinator.cc b/chrome/browser/ui/views/side_panel/user_note/user_note_ui_coordinator.cc index 11fae90..9ac08c6 100644 --- a/chrome/browser/ui/views/side_panel/user_note/user_note_ui_coordinator.cc +++ b/chrome/browser/ui/views/side_panel/user_note/user_note_ui_coordinator.cc
@@ -45,8 +45,35 @@ DEFINE_CLASS_ELEMENT_IDENTIFIER_VALUE(UserNoteUICoordinator, kScrollViewElementIdForTesting); +// static +void UserNoteUICoordinator::CreateForBrowser(Browser* browser) { + DCHECK(browser); + if (!FromBrowser(browser)) { + browser->SetUserData(user_notes::UserNotesUI::UserDataKey(), + base::WrapUnique(new UserNoteUICoordinator(browser))); + } +} + +// static +UserNoteUICoordinator* UserNoteUICoordinator::FromBrowser(Browser* browser) { + DCHECK(browser); + return static_cast<UserNoteUICoordinator*>( + browser->GetUserData(user_notes::UserNotesUI::UserDataKey())); +} + +// static +UserNoteUICoordinator* UserNoteUICoordinator::GetOrCreateForBrowser( + Browser* browser) { + if (auto* data = FromBrowser(browser)) { + return data; + } + + CreateForBrowser(browser); + return FromBrowser(browser); +} + UserNoteUICoordinator::UserNoteUICoordinator(Browser* browser) - : BrowserUserData<UserNoteUICoordinator>(*browser), browser_(browser) { + : browser_(browser) { browser_->tab_strip_model()->AddObserver(this); } @@ -302,5 +329,3 @@ Invalidate(); return root_view; } - -WEB_CONTENTS_USER_DATA_KEY_IMPL(UserNoteUICoordinator);
diff --git a/chrome/browser/ui/views/side_panel/user_note/user_note_ui_coordinator.h b/chrome/browser/ui/views/side_panel/user_note/user_note_ui_coordinator.h index 394f79b..d8e6114 100644 --- a/chrome/browser/ui/views/side_panel/user_note/user_note_ui_coordinator.h +++ b/chrome/browser/ui/views/side_panel/user_note/user_note_ui_coordinator.h
@@ -10,7 +10,6 @@ #include "base/scoped_observation.h" #include "base/unguessable_token.h" #include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/browser_user_data.h" #include "chrome/browser/ui/tabs/tab_strip_model_observer.h" #include "components/user_notes/interfaces/user_notes_ui.h" #include "ui/base/interaction/element_identifier.h" @@ -38,10 +37,19 @@ class UserNoteUICoordinator : public user_notes::UserNotesUI, public TabStripModelObserver, - public views::ViewObserver, - public BrowserUserData<UserNoteUICoordinator> { + public views::ViewObserver { public: - explicit UserNoteUICoordinator(Browser* browser); + // Creates a UserNoteUICoordinator and attaches it to the specified Browser + // using the user data key of UserNotesUI. If an instance is already attached, + // does nothing. + static void CreateForBrowser(Browser* browser); + + // Retrieves the UserNoteUICoordinator instance that was attached to the + // specified Browser (via CreateForBrowser above) and returns it. If no + // instance of the type was attached, returns nullptr. + static UserNoteUICoordinator* FromBrowser(Browser* browser); + + static UserNoteUICoordinator* GetOrCreateForBrowser(Browser* browser); UserNoteUICoordinator(const UserNoteUICoordinator&) = delete; UserNoteUICoordinator& operator=(const UserNoteUICoordinator&) = delete; @@ -75,7 +83,7 @@ void OnViewBoundsChanged(views::View* observed_view) override; private: - friend class BrowserUserData<UserNoteUICoordinator>; + explicit UserNoteUICoordinator(Browser* browser); void CreateSidePanelEntry(SidePanelRegistry* global_registry); void ScrollToNote(); @@ -86,8 +94,6 @@ base::ScopedObservation<views::View, views::ViewObserver> scoped_view_observer_{this}; base::UnguessableToken scroll_to_note_id_ = base::UnguessableToken::Null(); - - BROWSER_USER_DATA_KEY_DECL(); }; #endif // CHROME_BROWSER_UI_VIEWS_SIDE_PANEL_USER_NOTE_USER_NOTE_UI_COORDINATOR_H_
diff --git a/chrome/browser/ui/views/toolbar/home_button.cc b/chrome/browser/ui/views/toolbar/home_button.cc index 9d6d990..15ea93b2 100644 --- a/chrome/browser/ui/views/toolbar/home_button.cc +++ b/chrome/browser/ui/views/toolbar/home_button.cc
@@ -28,78 +28,47 @@ #include "ui/views/layout/fill_layout.h" #include "ui/views/widget/widget.h" -// HomePageUndoBubble -------------------------------------------------------- +// HomePageUndoBubble --------------------------------------------------------- namespace { class HomePageUndoBubble : public views::BubbleDialogDelegateView { public: METADATA_HEADER(HomePageUndoBubble); + HomePageUndoBubble(views::View* anchor_view, + PrefService* prefs, + const GURL& undo_url, + bool undo_value_is_ntp); HomePageUndoBubble(const HomePageUndoBubble&) = delete; HomePageUndoBubble& operator=(const HomePageUndoBubble&) = delete; - - static void ShowBubble(Browser* browser, - bool undo_value_is_ntp, - const GURL& undo_url, - views::View* anchor_view); - static void HideBubble(); + ~HomePageUndoBubble() override = default; private: - HomePageUndoBubble(Browser* browser, bool undo_value_is_ntp, - const GURL& undo_url, views::View* anchor_view); - ~HomePageUndoBubble() override; - // views::BubbleDialogDelegateView: void Init() override; - void WindowClosing() override; // Called when the "undo" link is clicked. void UndoClicked(); - static HomePageUndoBubble* home_page_undo_bubble_; - - raw_ptr<Browser> browser_; - bool undo_value_is_ntp_; + raw_ptr<PrefService> prefs_; GURL undo_url_; + bool undo_value_is_ntp_; }; -// static -HomePageUndoBubble* HomePageUndoBubble::home_page_undo_bubble_ = nullptr; - -void HomePageUndoBubble::ShowBubble(Browser* browser, - bool undo_value_is_ntp, - const GURL& undo_url, - views::View* anchor_view) { - HideBubble(); - home_page_undo_bubble_ = new HomePageUndoBubble(browser, - undo_value_is_ntp, - undo_url, - anchor_view); - views::BubbleDialogDelegateView::CreateBubble(home_page_undo_bubble_)->Show(); -} - -void HomePageUndoBubble::HideBubble() { - if (home_page_undo_bubble_) - home_page_undo_bubble_->GetWidget()->Close(); -} - -HomePageUndoBubble::HomePageUndoBubble( - Browser* browser, - bool undo_value_is_ntp, - const GURL& undo_url, - views::View* anchor_view) +HomePageUndoBubble::HomePageUndoBubble(views::View* anchor_view, + PrefService* prefs, + const GURL& undo_url, + bool undo_value_is_ntp) : BubbleDialogDelegateView(anchor_view, views::BubbleBorder::TOP_LEFT), - browser_(browser), - undo_value_is_ntp_(undo_value_is_ntp), - undo_url_(undo_url) { - DCHECK(browser_); + prefs_(prefs), + undo_url_(undo_url), + undo_value_is_ntp_(undo_value_is_ntp) { + DCHECK(prefs_); SetButtons(ui::DIALOG_BUTTON_NONE); set_margins( ChromeLayoutProvider::Get()->GetInsetsMetric(views::INSETS_DIALOG)); } -HomePageUndoBubble::~HomePageUndoBubble() = default; - void HomePageUndoBubble::Init() { SetLayoutManager(std::make_unique<views::FillLayout>()); @@ -123,21 +92,10 @@ } void HomePageUndoBubble::UndoClicked() { - PrefService* prefs = user_prefs::UserPrefs::Get(browser_->profile()); - prefs->SetBoolean(prefs::kHomePageIsNewTabPage, undo_value_is_ntp_); - prefs->SetString(prefs::kHomePage, undo_url_.spec()); + prefs_->SetString(prefs::kHomePage, undo_url_.spec()); + prefs_->SetBoolean(prefs::kHomePageIsNewTabPage, undo_value_is_ntp_); - HideBubble(); -} - -void HomePageUndoBubble::WindowClosing() { - // We have to reset |home_page_undo_bubble_| here, not in our destructor, - // because we'll be hidden first, then destroyed asynchronously. If we wait - // to reset this, and the user triggers a call to ShowBubble() while the - // window is hidden but not destroyed, GetWidget()->Close() would be - // called twice. - DCHECK_EQ(this, home_page_undo_bubble_); - home_page_undo_bubble_ = nullptr; + GetWidget()->Close(); } BEGIN_METADATA(HomePageUndoBubble, views::BubbleDialogDelegateView) @@ -145,11 +103,32 @@ } // namespace +// HomePageUndoBubbleCoordinator ---------------------------------------------- -// HomeButton ----------------------------------------------------------- +HomePageUndoBubbleCoordinator::HomePageUndoBubbleCoordinator( + views::View* anchor_view, + PrefService* prefs) + : anchor_view_(anchor_view), prefs_(prefs) {} -HomeButton::HomeButton(PressedCallback callback, Browser* browser) - : ToolbarButton(std::move(callback)), browser_(browser) { +HomePageUndoBubbleCoordinator::~HomePageUndoBubbleCoordinator() = default; + +void HomePageUndoBubbleCoordinator::Show(const GURL& undo_url, + bool undo_value_is_ntp) { + if (tracker_.view()) + tracker_.view()->GetWidget()->Close(); + + auto undo_bubble = std::make_unique<HomePageUndoBubble>( + anchor_view_, prefs_, undo_url, undo_value_is_ntp); + tracker_.SetView(undo_bubble.get()); + views::BubbleDialogDelegateView::CreateBubble(std::move(undo_bubble))->Show(); +} + +// HomeButton ----------------------------------------------------------------- + +HomeButton::HomeButton(PressedCallback callback, PrefService* prefs) + : ToolbarButton(std::move(callback)), + prefs_(prefs), + coordinator_(this, prefs) { SetTriggerableEventFlags(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_MIDDLE_MOUSE_BUTTON); SetVectorIcons(kNavigateHomeIcon, kNavigateHomeTouchIcon); @@ -159,8 +138,7 @@ SizeToPreferredSize(); } -HomeButton::~HomeButton() { -} +HomeButton::~HomeButton() = default; bool HomeButton::GetDropFormats( int* formats, @@ -189,15 +167,14 @@ std::u16string title; if (event.data().GetURLAndTitle(ui::FilenameToURLPolicy::CONVERT_FILENAMES, &new_homepage_url, &title) && - new_homepage_url.is_valid()) { - PrefService* prefs = browser_->profile()->GetPrefs(); - bool old_is_ntp = prefs->GetBoolean(prefs::kHomePageIsNewTabPage); - GURL old_homepage(prefs->GetString(prefs::kHomePage)); + new_homepage_url.is_valid() && prefs_) { + GURL old_homepage(prefs_->GetString(prefs::kHomePage)); + bool old_is_ntp = prefs_->GetBoolean(prefs::kHomePageIsNewTabPage); - prefs->SetBoolean(prefs::kHomePageIsNewTabPage, false); - prefs->SetString(prefs::kHomePage, new_homepage_url.spec()); + prefs_->SetString(prefs::kHomePage, new_homepage_url.spec()); + prefs_->SetBoolean(prefs::kHomePageIsNewTabPage, false); - HomePageUndoBubble::ShowBubble(browser_, old_is_ntp, old_homepage, this); + coordinator_.Show(old_homepage, old_is_ntp); } output_drag_op = ui::mojom::DragOperation::kNone; }
diff --git a/chrome/browser/ui/views/toolbar/home_button.h b/chrome/browser/ui/views/toolbar/home_button.h index 34f6647..b39e4198 100644 --- a/chrome/browser/ui/views/toolbar/home_button.h +++ b/chrome/browser/ui/views/toolbar/home_button.h
@@ -9,15 +9,32 @@ #include "chrome/browser/ui/views/toolbar/toolbar_button.h" #include "ui/base/metadata/metadata_header_macros.h" #include "ui/views/metadata/view_factory.h" +#include "ui/views/view_tracker.h" -class Browser; +class PrefService; + +class HomePageUndoBubbleCoordinator { + public: + HomePageUndoBubbleCoordinator(views::View* anchor_view, PrefService* prefs); + HomePageUndoBubbleCoordinator(const HomePageUndoBubbleCoordinator&) = delete; + HomePageUndoBubbleCoordinator& operator=( + const HomePageUndoBubbleCoordinator&) = delete; + ~HomePageUndoBubbleCoordinator(); + + void Show(const GURL& undo_url, bool undo_value_is_ntp); + + private: + const raw_ptr<views::View> anchor_view_; + const raw_ptr<PrefService> prefs_; + views::ViewTracker tracker_; +}; class HomeButton : public ToolbarButton { public: METADATA_HEADER(HomeButton); explicit HomeButton(PressedCallback callback = PressedCallback(), - Browser* browser = nullptr); + PrefService* prefs = nullptr); HomeButton(const HomeButton&) = delete; HomeButton& operator=(const HomeButton&) = delete; ~HomeButton() override; @@ -34,7 +51,8 @@ void UpdateHomePage(const ui::DropTargetEvent& event, ui::mojom::DragOperation& output_drag_op); - const raw_ptr<Browser> browser_; + const raw_ptr<PrefService> prefs_; + HomePageUndoBubbleCoordinator coordinator_; base::WeakPtrFactory<HomeButton> weak_ptr_factory_{this}; };
diff --git a/chrome/browser/ui/views/toolbar/home_button_browsertest.cc b/chrome/browser/ui/views/toolbar/home_button_browsertest.cc new file mode 100644 index 0000000..bbcf9e6e --- /dev/null +++ b/chrome/browser/ui/views/toolbar/home_button_browsertest.cc
@@ -0,0 +1,35 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/ui/views/toolbar/home_button.h" + +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/test/test_browser_dialog.h" +#include "chrome/browser/ui/views/frame/browser_view.h" +#include "chrome/browser/ui/views/toolbar/toolbar_view.h" +#include "chrome/common/pref_names.h" +#include "content/public/test/browser_test.h" + +class HomeButtonUiTest : public DialogBrowserTest { + public: + HomeButtonUiTest() = default; + HomeButtonUiTest(const HomeButtonUiTest&) = delete; + HomeButtonUiTest& operator=(const HomeButtonUiTest&) = delete; + ~HomeButtonUiTest() override = default; + + // DialogBrowserTest: + void ShowUi(const std::string& name) override { + auto* const prefs = browser()->profile()->GetPrefs(); + prefs->SetBoolean(prefs::kShowHomeButton, true); + auto* home_button = BrowserView::GetBrowserViewForBrowser(browser()) + ->toolbar() + ->home_button(); + HomePageUndoBubbleCoordinator coordinator(home_button, prefs); + coordinator.Show(GURL(), false); + } +}; + +IN_PROC_BROWSER_TEST_F(HomeButtonUiTest, InvokeUi_default) { + ShowAndVerifyUi(); +}
diff --git a/chrome/browser/ui/views/toolbar/toolbar_view.cc b/chrome/browser/ui/views/toolbar/toolbar_view.cc index 55fc13d5..ef34f04 100644 --- a/chrome/browser/ui/views/toolbar/toolbar_view.cc +++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc
@@ -244,8 +244,9 @@ std::unique_ptr<ReloadButton> reload = std::make_unique<ReloadButton>(browser_->command_controller()); + PrefService* const prefs = browser_->profile()->GetPrefs(); std::unique_ptr<HomeButton> home = std::make_unique<HomeButton>( - base::BindRepeating(callback, browser_, IDC_HOME), browser_); + base::BindRepeating(callback, browser_, IDC_HOME), prefs); std::unique_ptr<ExtensionsToolbarContainer> extensions_container; @@ -332,8 +333,7 @@ browser_view_, chrome_labs_model_.get())); show_chrome_labs_button_.Init( - chrome_labs_prefs::kBrowserLabsEnabled, - browser_->profile()->GetPrefs(), + chrome_labs_prefs::kBrowserLabsEnabled, prefs, base::BindRepeating(&ToolbarView::OnChromeLabsPrefChanged, base::Unretained(this))); // Set the visibility for the button based on initial enterprise policy @@ -394,7 +394,7 @@ location_bar_->Init(); show_home_button_.Init( - prefs::kShowHomeButton, browser_->profile()->GetPrefs(), + prefs::kShowHomeButton, prefs, base::BindRepeating(&ToolbarView::OnShowHomeButtonChanged, base::Unretained(this)));
diff --git a/chrome/browser/ui/webui/settings/ash/search/BUILD.gn b/chrome/browser/ui/webui/settings/ash/search/BUILD.gn index 58ce0fb..47af717 100644 --- a/chrome/browser/ui/webui/settings/ash/search/BUILD.gn +++ b/chrome/browser/ui/webui/settings/ash/search/BUILD.gn
@@ -18,4 +18,6 @@ "//chrome/browser/ui/webui/settings/chromeos/constants:mojom", "//mojo/public/mojom/base", ] + + webui_module_path = "/search" }
diff --git a/chrome/browser/ui/webui/settings/ash/search/search_result_icon.mojom b/chrome/browser/ui/webui/settings/ash/search/search_result_icon.mojom index 0afbaeb..2e14aea74 100644 --- a/chrome/browser/ui/webui/settings/ash/search/search_result_icon.mojom +++ b/chrome/browser/ui/webui/settings/ash/search/search_result_icon.mojom
@@ -10,6 +10,7 @@ kAndroid, kAppsGrid, kAssistant, + kAudio, kAuthKey, kAvatar, kBluetooth,
diff --git a/chrome/browser/ui/webui/settings/chromeos/constants/routes.mojom b/chrome/browser/ui/webui/settings/chromeos/constants/routes.mojom index 14d4edd2..71ae3a1 100644 --- a/chrome/browser/ui/webui/settings/chromeos/constants/routes.mojom +++ b/chrome/browser/ui/webui/settings/chromeos/constants/routes.mojom
@@ -76,6 +76,7 @@ // Note: Value 406 was for deprecated DLC Subpage - see // https://crbug.com/1108093. Do not reuse. kPower = 407, + kAudio = 408, // Personalization section. kChangePicture = 500, @@ -193,6 +194,7 @@ const string kKeyboardSubpagePath = "keyboard-overlay"; const string kStylusSubpagePath = "stylus"; const string kDisplaySubpagePath = "display"; +const string kAudioSubpagePath = "audio"; const string kStorageSubpagePath = "storage"; const string kExternalStorageSubpagePath = "storage/externalStoragePreferences"; const string kPowerSubpagePath = "power";
diff --git a/chrome/browser/ui/webui/settings/chromeos/constants/routes_util.cc b/chrome/browser/ui/webui/settings/chromeos/constants/routes_util.cc index 69460ae..ab4a6e9 100644 --- a/chrome/browser/ui/webui/settings/chromeos/constants/routes_util.cc +++ b/chrome/browser/ui/webui/settings/chromeos/constants/routes_util.cc
@@ -53,6 +53,7 @@ chromeos::settings::mojom::kKeyboardSubpagePath, chromeos::settings::mojom::kStylusSubpagePath, chromeos::settings::mojom::kDisplaySubpagePath, + chromeos::settings::mojom::kAudioSubpagePath, chromeos::settings::mojom::kStorageSubpagePath, chromeos::settings::mojom::kExternalStorageSubpagePath, chromeos::settings::mojom::kPowerSubpagePath,
diff --git a/chrome/browser/ui/webui/settings/chromeos/device_section.cc b/chrome/browser/ui/webui/settings/chromeos/device_section.cc index 9edb5d2..094a506 100644 --- a/chrome/browser/ui/webui/settings/chromeos/device_section.cc +++ b/chrome/browser/ui/webui/settings/chromeos/device_section.cc
@@ -755,6 +755,14 @@ base::ASCIIToUTF16(chrome::kArcExternalStorageLearnMoreURL))); } +void AddDeviceAudioStrings(content::WebUIDataSource* html_source) { + static constexpr webui::LocalizedString kAudioStrings[] = { + {"audioTitle", IDS_SETTINGS_AUDIO_TITLE}, + }; + + html_source->AddLocalizedStrings(kAudioStrings); +} + void AddDevicePowerStrings(content::WebUIDataSource* html_source) { static constexpr webui::LocalizedString kPowerStrings[] = { {"powerTitle", IDS_SETTINGS_POWER_TITLE}, @@ -890,6 +898,7 @@ AddDeviceKeyboardStrings(html_source); AddDeviceStylusStrings(html_source); AddDeviceDisplayStrings(html_source); + AddDeviceAudioStrings(html_source); AddDeviceStorageStrings( html_source, features::ShouldShowExternalStorageSettings(profile())); AddDevicePowerStrings(html_source); @@ -1033,6 +1042,12 @@ mojom::SearchResultDefaultRank::kMedium, mojom::kExternalStorageSubpagePath); + // Audio. + generator->RegisterTopLevelSubpage( + IDS_SETTINGS_AUDIO_TITLE, mojom::Subpage::kAudio, + mojom::SearchResultIcon::kAudio, mojom::SearchResultDefaultRank::kMedium, + mojom::kAudioSubpagePath); + // Power. generator->RegisterTopLevelSubpage( IDS_SETTINGS_POWER_TITLE, mojom::Subpage::kPower, @@ -1240,7 +1255,6 @@ void DeviceSection::AddDevicePointersStrings( content::WebUIDataSource* html_source) { static constexpr webui::LocalizedString kPointersStrings[] = { - {"audioTitle", IDS_SETTINGS_AUDIO_TITLE}, {"mouseTitle", IDS_SETTINGS_MOUSE_TITLE}, {"pointingStickTitle", IDS_SETTINGS_POINTING_STICK_TITLE}, {"touchpadTitle", IDS_SETTINGS_TOUCHPAD_TITLE},
diff --git a/chrome/browser/ui/webui/settings/site_settings_handler.cc b/chrome/browser/ui/webui/settings/site_settings_handler.cc index f33c49d..9d428fd 100644 --- a/chrome/browser/ui/webui/settings/site_settings_handler.cc +++ b/chrome/browser/ui/webui/settings/site_settings_handler.cc
@@ -265,15 +265,14 @@ etld_plus1 + "/"; } -// Converts a given |site_group_map| to a list of base::DictionaryValues, adding +// Converts a given |site_group_map| to a list of base::Value::Dicts, adding // the site engagement score for each origin. -void ConvertSiteGroupMapToListValue( +void ConvertSiteGroupMapToList( const std::map<std::string, std::set<std::pair<std::string, bool>>>& site_group_map, const std::set<std::string>& origin_permission_set, - base::Value* list_value, + base::Value::List* list_value, Profile* profile) { - DCHECK_EQ(base::Value::Type::LIST, list_value->type()); DCHECK(profile); base::flat_set<std::string> installed_origins = GetInstalledAppOrigins(profile); @@ -281,42 +280,41 @@ site_engagement::SiteEngagementService::Get(profile); for (const auto& entry : site_group_map) { // eTLD+1 is the effective top level domain + 1. - base::Value site_group(base::Value::Type::DICTIONARY); - site_group.SetKey(kEffectiveTopLevelDomainPlus1Name, - base::Value(entry.first)); + base::Value::Dict site_group; + site_group.Set(kEffectiveTopLevelDomainPlus1Name, base::Value(entry.first)); bool has_installed_pwa = false; - base::Value origin_list(base::Value::Type::LIST); + base::Value::List origin_list; for (const auto& origin_is_partitioned : entry.second) { const auto& origin = origin_is_partitioned.first; bool is_partitioned = origin_is_partitioned.second; - base::Value origin_object(base::Value::Type::DICTIONARY); + base::Value::Dict origin_object; // If origin is placeholder, create a http ETLD+1 origin for it. if (origin == kPlaceholder) { - origin_object.SetKey("origin", - base::Value(ConvertEtldToOrigin(entry.first))); + origin_object.Set("origin", + base::Value(ConvertEtldToOrigin(entry.first))); } else { - origin_object.SetKey("origin", base::Value(origin)); + origin_object.Set("origin", base::Value(origin)); } - origin_object.SetKey("isPartitioned", base::Value(is_partitioned)); - origin_object.SetKey( + origin_object.Set("isPartitioned", base::Value(is_partitioned)); + origin_object.Set( "engagement", base::Value(engagement_service->GetScore(GURL(origin)))); - origin_object.SetKey("usage", base::Value(0)); - origin_object.SetKey(kNumCookies, base::Value(0)); + origin_object.Set("usage", base::Value(0)); + origin_object.Set(kNumCookies, base::Value(0)); bool is_installed = installed_origins.contains(origin); if (is_installed) has_installed_pwa = true; - origin_object.SetKey(kIsInstalled, base::Value(is_installed)); + origin_object.Set(kIsInstalled, base::Value(is_installed)); - origin_object.SetKey( + origin_object.Set( kHasPermissionSettings, base::Value(base::Contains(origin_permission_set, origin))); origin_list.Append(std::move(origin_object)); } - site_group.SetKey(kHasInstalledPWA, base::Value(has_installed_pwa)); - site_group.SetKey(kNumCookies, base::Value(0)); - site_group.SetKey(kOriginList, std::move(origin_list)); + site_group.Set(kHasInstalledPWA, base::Value(has_installed_pwa)); + site_group.Set(kNumCookies, base::Value(0)); + site_group.Set(kOriginList, std::move(origin_list)); list_value->Append(std::move(site_group)); } } @@ -896,9 +894,9 @@ HostContentSettingsMap* map = HostContentSettingsMapFactory::GetForProfile(profile_); - base::DictionaryValue category; + base::Value::Dict category; site_settings::GetContentCategorySetting(map, content_type, &category); - ResolveJavascriptCallback(callback_id, category); + ResolveJavascriptCallback(callback_id, base::Value(std::move(category))); } void SiteSettingsHandler::HandleGetAllSites(const base::Value::List& args) { @@ -956,17 +954,18 @@ cookies_tree_model_.reset(); EnsureCookiesTreeModelCreated(); - base::Value result(base::Value::Type::LIST); + base::Value::List result; // Respond with currently available data. - ConvertSiteGroupMapToListValue(all_sites_map_, origin_permission_set_, - &result, profile); + ConvertSiteGroupMapToList(all_sites_map_, origin_permission_set_, &result, + profile); LogAllSitesAction(AllSitesAction2::kLoadPage); send_sites_list_ = true; - ResolveJavascriptCallback(base::Value(callback_id), result); + ResolveJavascriptCallback(base::Value(callback_id), + base::Value(std::move(result))); } void SiteSettingsHandler::HandleGetCategoryList(const base::Value::List& args) { @@ -976,13 +975,14 @@ std::string callback_id = args[0].GetString(); GURL origin(args[1].GetString()); - base::Value result(base::Value::Type::LIST); + base::Value::List result; for (ContentSettingsType content_type : site_settings::GetVisiblePermissionCategories()) { result.Append(site_settings::ContentSettingsTypeToGroupName(content_type)); } - ResolveJavascriptCallback(base::Value(callback_id), result); + ResolveJavascriptCallback(base::Value(callback_id), + base::Value(std::move(result))); } void SiteSettingsHandler::HandleGetCookieSettingDescription( @@ -1008,52 +1008,54 @@ profile_, content_types, max_sources); // Convert groups of TimestampedPermissions for consumption by JS - base::Value result(base::Value::Type::LIST); + base::Value::List result; for (const auto& site_permissions : recent_site_permissions) { DCHECK(!site_permissions.settings.empty()); - base::Value recent_site(base::Value::Type::DICTIONARY); - recent_site.SetKey(site_settings::kOrigin, - base::Value(site_permissions.origin.spec())); - recent_site.SetKey(site_settings::kIncognito, - base::Value(site_permissions.incognito)); + base::Value::Dict recent_site; + recent_site.Set(site_settings::kOrigin, + base::Value(site_permissions.origin.spec())); + recent_site.Set(site_settings::kIncognito, + base::Value(site_permissions.incognito)); - base::Value permissions_list(base::Value::Type::LIST); + base::Value::List permissions_list; for (const auto& p : site_permissions.settings) { - base::Value recent_permission(base::Value::Type::DICTIONARY); - recent_permission.SetKey( + base::Value::Dict recent_permission; + recent_permission.Set( site_settings::kType, base::Value( site_settings::ContentSettingsTypeToGroupName(p.content_type))); - recent_permission.SetKey( + recent_permission.Set( site_settings::kSetting, base::Value( content_settings::ContentSettingToString(p.content_setting))); - recent_permission.SetKey( + recent_permission.Set( site_settings::kSource, base::Value( site_settings::SiteSettingSourceToString(p.setting_source))); permissions_list.Append(std::move(recent_permission)); } - recent_site.SetKey(site_settings::kRecentPermissions, - std::move(permissions_list)); + recent_site.Set(site_settings::kRecentPermissions, + std::move(permissions_list)); result.Append(std::move(recent_site)); } - ResolveJavascriptCallback(base::Value(callback_id), result); + ResolveJavascriptCallback(base::Value(callback_id), + base::Value(std::move(result))); } -base::Value SiteSettingsHandler::PopulateCookiesAndUsageData(Profile* profile) { +base::Value::List SiteSettingsHandler::PopulateCookiesAndUsageData( + Profile* profile) { std::map<std::string, int64_t> origin_size_map; std::map<std::pair<std::string, absl::optional<std::string>>, int> origin_cookie_map; - base::Value list_value(base::Value::Type::LIST); + base::Value::List list_value; GetOriginStorage(&all_sites_map_, &origin_size_map); GetOriginCookies(&all_sites_map_, &origin_cookie_map); - ConvertSiteGroupMapToListValue(all_sites_map_, origin_permission_set_, - &list_value, profile); + ConvertSiteGroupMapToList(all_sites_map_, origin_permission_set_, &list_value, + profile); // Merge the origin usage and cookies number into |list_value|. - for (base::Value& site_group : list_value.GetListDeprecated()) { + for (base::Value& site_group : list_value) { base::Value* origin_list = site_group.FindKey(kOriginList); int cookie_num = 0; const std::string& etld_plus1 = @@ -1096,7 +1098,7 @@ void SiteSettingsHandler::OnStorageFetched() { AllowJavascript(); FireWebUIListener("onStorageListFetched", - PopulateCookiesAndUsageData(profile_)); + base::Value(PopulateCookiesAndUsageData(profile_))); } void SiteSettingsHandler::HandleGetFormattedBytes( @@ -1154,9 +1156,10 @@ site_settings::ChooserTypeFromGroupName(type); CHECK(chooser_type); - base::Value exceptions = site_settings::GetChooserExceptionListFromProfile( - profile_, *chooser_type); - ResolveJavascriptCallback(callback_id, std::move(exceptions)); + base::Value::List exceptions = + site_settings::GetChooserExceptionListFromProfile(profile_, + *chooser_type); + ResolveJavascriptCallback(callback_id, base::Value(std::move(exceptions))); } void SiteSettingsHandler::HandleGetOriginPermissions( @@ -1170,7 +1173,7 @@ // Note: Invalid URLs will just result in default settings being shown. const GURL origin_url(origin); - base::Value exceptions(base::Value::Type::LIST); + base::Value::List exceptions; for (const auto& type_val : types) { std::string type; DCHECK(type_val.is_string()); @@ -1191,20 +1194,19 @@ std::string content_setting_string = content_settings::ContentSettingToString(content_setting); - base::Value raw_site_exception(base::Value::Type::DICTIONARY); - raw_site_exception.SetStringKey(site_settings::kEmbeddingOrigin, origin); - raw_site_exception.SetBoolKey(site_settings::kIncognito, - profile_->IsOffTheRecord()); - raw_site_exception.SetStringKey(site_settings::kOrigin, origin); - raw_site_exception.SetStringKey(site_settings::kDisplayName, display_name); - raw_site_exception.SetStringKey(site_settings::kSetting, - content_setting_string); - raw_site_exception.SetStringKey(site_settings::kSource, source_string); + base::Value::Dict raw_site_exception; + raw_site_exception.Set(site_settings::kEmbeddingOrigin, origin); + raw_site_exception.Set(site_settings::kIncognito, + profile_->IsOffTheRecord()); + raw_site_exception.Set(site_settings::kOrigin, origin); + raw_site_exception.Set(site_settings::kDisplayName, display_name); + raw_site_exception.Set(site_settings::kSetting, content_setting_string); + raw_site_exception.Set(site_settings::kSource, source_string); exceptions.Append(std::move(raw_site_exception)); } - ResolveJavascriptCallback(callback_id, exceptions); + ResolveJavascriptCallback(callback_id, base::Value(std::move(exceptions))); } void SiteSettingsHandler::HandleSetOriginPermissions( @@ -1442,10 +1444,10 @@ bool is_valid = IsPatternValidForType(pattern_string, type, profile_, &reason); - base::Value return_value(base::Value::Type::DICTIONARY); - return_value.SetKey(kIsValidKey, base::Value(is_valid)); - return_value.SetKey(kReasonKey, base::Value(std::move(reason))); - ResolveJavascriptCallback(callback_id, return_value); + base::Value::Dict return_value; + return_value.Set(kIsValidKey, base::Value(is_valid)); + return_value.Set(kReasonKey, base::Value(std::move(reason))); + ResolveJavascriptCallback(callback_id, base::Value(std::move(return_value))); } void SiteSettingsHandler::HandleUpdateIncognitoStatus( @@ -1564,24 +1566,23 @@ if (!IsJavascriptAllowed()) return; - base::DictionaryValue status; + base::Value::Dict status; // Whether the block autoplay toggle should be checked. - base::DictionaryValue pref; - pref.SetKey( - "value", - base::Value( - UnifiedAutoplayConfig::ShouldBlockAutoplay(profile_) && - UnifiedAutoplayConfig::IsBlockAutoplayUserModifiable(profile_))); - status.SetKey("pref", std::move(pref)); + base::Value::Dict pref; + pref.Set("value", + base::Value( + UnifiedAutoplayConfig::ShouldBlockAutoplay(profile_) && + UnifiedAutoplayConfig::IsBlockAutoplayUserModifiable(profile_))); + status.Set("pref", std::move(pref)); // Whether the block autoplay toggle should be enabled. - status.SetKey( - "enabled", - base::Value( - UnifiedAutoplayConfig::IsBlockAutoplayUserModifiable(profile_))); + status.Set("enabled", + base::Value(UnifiedAutoplayConfig::IsBlockAutoplayUserModifiable( + profile_))); - FireWebUIListener("onBlockAutoplayStatusChanged", status); + FireWebUIListener("onBlockAutoplayStatusChanged", + base::Value(std::move(status))); } void SiteSettingsHandler::HandleSetBlockAutoplayEnabled(
diff --git a/chrome/browser/ui/webui/settings/site_settings_handler.h b/chrome/browser/ui/webui/settings/site_settings_handler.h index c9fc1a8..28f8cb7 100644 --- a/chrome/browser/ui/webui/settings/site_settings_handler.h +++ b/chrome/browser/ui/webui/settings/site_settings_handler.h
@@ -204,7 +204,7 @@ // Returns a list of sites, grouped by their effective top level domain plus // 1, with their cookies number and data usage information. This method will // only be called after HandleGetAllSites is called. - base::Value PopulateCookiesAndUsageData(Profile* profile); + base::Value::List PopulateCookiesAndUsageData(Profile* profile); // Converts a given number of bytes into a human-readable format, with data // units.
diff --git a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc index de618fa..f1b6bc6 100644 --- a/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc +++ b/chrome/browser/ui/webui/settings/site_settings_handler_unittest.cc
@@ -1562,27 +1562,26 @@ TEST_F(SiteSettingsHandlerTest, ExceptionHelpers) { ContentSettingsPattern pattern = ContentSettingsPattern::FromString("[*.]google.com"); - std::unique_ptr<base::DictionaryValue> exception = - site_settings::GetExceptionForPage( - ContentSettingsType::NOTIFICATIONS, /*profile=*/nullptr, pattern, - ContentSettingsPattern::Wildcard(), pattern.ToString(), - CONTENT_SETTING_BLOCK, - site_settings::SiteSettingSourceToString( - site_settings::SiteSettingSource::kPreference), - false); + base::Value::Dict exception = site_settings::GetExceptionForPage( + ContentSettingsType::NOTIFICATIONS, /*profile=*/nullptr, pattern, + ContentSettingsPattern::Wildcard(), pattern.ToString(), + CONTENT_SETTING_BLOCK, + site_settings::SiteSettingSourceToString( + site_settings::SiteSettingSource::kPreference), + false); - CHECK(exception->FindStringKey(site_settings::kOrigin)); - CHECK(exception->FindStringKey(site_settings::kDisplayName)); - CHECK(exception->FindStringKey(site_settings::kEmbeddingOrigin)); - CHECK(exception->FindStringKey(site_settings::kSetting)); - CHECK(exception->FindBoolKey(site_settings::kIncognito).has_value()); + CHECK(exception.FindString(site_settings::kOrigin)); + CHECK(exception.FindString(site_settings::kDisplayName)); + CHECK(exception.FindString(site_settings::kEmbeddingOrigin)); + CHECK(exception.FindString(site_settings::kSetting)); + CHECK(exception.FindBool(site_settings::kIncognito).has_value()); base::Value::List args; - args.Append(*exception->FindStringKey(site_settings::kOrigin)); - args.Append(*exception->FindStringKey(site_settings::kEmbeddingOrigin)); + args.Append(*exception.FindString(site_settings::kOrigin)); + args.Append(*exception.FindString(site_settings::kEmbeddingOrigin)); args.Append(kNotifications); // Chosen arbitrarily. - args.Append(*exception->FindStringKey(site_settings::kSetting)); - args.Append(*exception->FindBoolKey(site_settings::kIncognito)); + args.Append(*exception.FindString(site_settings::kSetting)); + args.Append(*exception.FindBool(site_settings::kIncognito)); // We don't need to check the results. This is just to make sure it doesn't // crash on the input.
diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.cc b/chrome/browser/ui/webui/settings/site_settings_helper.cc index 4fc1307e..95b5df7e 100644 --- a/chrome/browser/ui/webui/settings/site_settings_helper.cc +++ b/chrome/browser/ui/webui/settings/site_settings_helper.cc
@@ -63,17 +63,6 @@ namespace { -// Maps from the UI string to the object it represents (for sorting purposes). -typedef std::multimap<std::string, const base::DictionaryValue*> SortedObjects; - -// Maps from a secondary URL to the set of objects it has permission to access. -typedef std::map<GURL, SortedObjects> OneOriginObjects; - -// Maps from a primary URL/source pair to a OneOriginObjects. All the mappings -// in OneOriginObjects share the given primary URL and source. -typedef std::map<std::pair<GURL, std::string>, OneOriginObjects> - AllOriginObjects; - // Chooser data group names. const char kUsbChooserDataGroupType[] = "usb-devices-data"; const char kSerialChooserDataGroupType[] = "serial-ports-data"; @@ -487,15 +476,6 @@ return kSiteSettingSourceStringMapping[static_cast<int>(source)].source_str; } -base::Value GetValueForManagedState(const site_settings::ManagedState& state) { - base::Value value(base::Value::Type::DICTIONARY); - value.SetKey(site_settings::kDisabled, base::Value(state.disabled)); - value.SetKey( - site_settings::kPolicyIndicator, - base::Value(site_settings::PolicyIndicatorTypeToString(state.indicator))); - return value; -} - // Add an "Allow"-entry to the list of |exceptions| for a |url_pattern| from // the web extent of a hosted |app|. void AddExceptionForHostedApp(const std::string& url_pattern, @@ -519,9 +499,9 @@ exceptions->Append(std::move(exception)); } -// Create a DictionaryValue* that will act as a data source for a single row +// Create a base::Value::Dict that will act as a data source for a single row // in a HostContentSettingsMap-controlled exceptions table (e.g., cookies). -std::unique_ptr<base::DictionaryValue> GetExceptionForPage( +base::Value::Dict GetExceptionForPage( ContentSettingsType content_type, Profile* profile, const ContentSettingsPattern& pattern, @@ -531,22 +511,22 @@ const std::string& provider_name, bool incognito, bool is_embargoed) { - auto exception = std::make_unique<base::DictionaryValue>(); - exception->SetStringKey(kOrigin, pattern.ToString()); - exception->SetStringKey(kDisplayName, display_name); - exception->SetStringKey( - kEmbeddingOrigin, secondary_pattern == ContentSettingsPattern::Wildcard() - ? std::string() - : secondary_pattern.ToString()); + base::Value::Dict exception; + exception.Set(kOrigin, pattern.ToString()); + exception.Set(kDisplayName, display_name); + exception.Set(kEmbeddingOrigin, + secondary_pattern == ContentSettingsPattern::Wildcard() + ? std::string() + : secondary_pattern.ToString()); std::string setting_string = content_settings::ContentSettingToString(setting); DCHECK(!setting_string.empty()); - exception->SetStringKey(kSetting, setting_string); + exception.Set(kSetting, setting_string); - exception->SetStringKey(kSource, provider_name); - exception->SetBoolKey(kIncognito, incognito); - exception->SetBoolKey(kIsEmbargoed, is_embargoed); + exception.Set(kSource, provider_name); + exception.Set(kIncognito, incognito); + exception.Set(kIsEmbargoed, is_embargoed); return exception; } @@ -675,7 +655,7 @@ // Keep the exceptions sorted by provider so they will be displayed in // precedence order. - std::vector<std::unique_ptr<base::DictionaryValue>> + std::vector<base::Value::Dict> all_provider_exceptions[HostContentSettingsMap::NUM_PROVIDER_TYPES]; // |all_patterns_settings| is sorted from the lowest precedence pattern to @@ -736,21 +716,21 @@ for (auto& one_provider_exceptions : all_provider_exceptions) { for (auto& exception : one_provider_exceptions) - exceptions->Append(base::Value::FromUniquePtrValue(std::move(exception))); + exceptions->Append(std::move(exception)); } } void GetContentCategorySetting(const HostContentSettingsMap* map, ContentSettingsType content_type, - base::DictionaryValue* object) { + base::Value::Dict* object) { std::string provider; std::string setting = content_settings::ContentSettingToString( map->GetDefaultContentSetting(content_type, &provider)); DCHECK(!setting.empty()); - object->SetStringKey(kSetting, setting); + object->Set(kSetting, setting); if (provider != SiteSettingSourceToString(SiteSettingSource::kDefault)) - object->SetStringKey(kSource, provider); + object->Set(kSource, provider); } ContentSetting GetContentSettingForOrigin( @@ -818,7 +798,7 @@ void GetPolicyAllowedUrls( ContentSettingsType type, - std::vector<std::unique_ptr<base::DictionaryValue>>* exceptions, + std::vector<base::Value::Dict>* exceptions, const extensions::ExtensionRegistry* extension_registry, content::WebUI* web_ui, bool incognito) { @@ -869,26 +849,26 @@ return nullptr; } -// Create a DictionaryValue* that will act as a data source for a single row +// Create a base::Value::Dict that will act as a data source for a single row // in a chooser permission exceptions table. The chooser permission will contain // a list of site exceptions that correspond to the exception. -base::Value CreateChooserExceptionObject( +base::Value::Dict CreateChooserExceptionObject( const std::u16string& display_name, const base::Value& object, const std::string& chooser_type, const ChooserExceptionDetails& chooser_exception_details) { - base::Value exception(base::Value::Type::DICTIONARY); + base::Value::Dict exception; std::string setting_string = content_settings::ContentSettingToString(CONTENT_SETTING_DEFAULT); DCHECK(!setting_string.empty()); - exception.SetStringKey(kDisplayName, display_name); - exception.SetKey(kObject, object.Clone()); - exception.SetStringKey(kChooserType, chooser_type); + exception.Set(kDisplayName, display_name); + exception.Set(kObject, object.Clone()); + exception.Set(kChooserType, chooser_type); // Order the sites by the provider precedence order. - std::vector<base::Value> + std::vector<base::Value::Dict> all_provider_sites[HostContentSettingsMap::NUM_PROVIDER_TYPES]; for (const auto& details : chooser_exception_details) { const GURL& requesting_origin = details.first.first; @@ -901,35 +881,35 @@ for (const auto& embedding_origin_incognito_pair : details.second) { const GURL& embedding_origin = embedding_origin_incognito_pair.first; const bool incognito = embedding_origin_incognito_pair.second; - base::Value site(base::Value::Type::DICTIONARY); + base::Value::Dict site; - site.SetStringKey(kOrigin, requesting_origin.spec()); - site.SetStringKey(kDisplayName, requesting_origin.spec()); - site.SetStringKey(kEmbeddingOrigin, embedding_origin.is_empty() - ? std::string() - : embedding_origin.spec()); - site.SetStringKey(kSetting, setting_string); - site.SetStringKey(kSource, source); - site.SetBoolKey(kIncognito, incognito); + site.Set(kOrigin, requesting_origin.spec()); + site.Set(kDisplayName, requesting_origin.spec()); + site.Set(kEmbeddingOrigin, embedding_origin.is_empty() + ? std::string() + : embedding_origin.spec()); + site.Set(kSetting, setting_string); + site.Set(kSource, source); + site.Set(kIncognito, incognito); this_provider_sites.push_back(std::move(site)); } } - base::Value sites(base::Value::Type::LIST); + base::Value::List sites; for (auto& one_provider_sites : all_provider_sites) { for (auto& site : one_provider_sites) { sites.Append(std::move(site)); } } - exception.SetKey(kSites, std::move(sites)); + exception.Set(kSites, std::move(sites)); return exception; } -base::Value GetChooserExceptionListFromProfile( +base::Value::List GetChooserExceptionListFromProfile( Profile* profile, const ChooserTypeNameEntry& chooser_type) { - base::Value exceptions(base::Value::Type::LIST); + base::Value::List exceptions; ContentSettingsType content_type = ContentSettingsTypeFromGroupName(std::string(chooser_type.name));
diff --git a/chrome/browser/ui/webui/settings/site_settings_helper.h b/chrome/browser/ui/webui/settings/site_settings_helper.h index 87a8b13..1039981 100644 --- a/chrome/browser/ui/webui/settings/site_settings_helper.h +++ b/chrome/browser/ui/webui/settings/site_settings_helper.h
@@ -120,11 +120,8 @@ // Converts a SiteSettingSource to its string identifier. std::string SiteSettingSourceToString(const SiteSettingSource source); -// Converts a ManagedState to a base::Value suitable for sending to JavaScript. -base::Value GetValueForManagedState(const ManagedState& state); - // Helper function to construct a dictionary for an exception. -std::unique_ptr<base::DictionaryValue> GetExceptionForPage( +base::Value::Dict GetExceptionForPage( ContentSettingsType content_type, Profile* profile, const ContentSettingsPattern& pattern, @@ -154,7 +151,7 @@ // or extension). void GetContentCategorySetting(const HostContentSettingsMap* map, ContentSettingsType content_type, - base::DictionaryValue* object); + base::Value::Dict* object); // Retrieves the current setting for a given origin, category pair, the source // of that setting, and its display name, which will be different if it's an @@ -173,7 +170,7 @@ // for the content settings |type| mic or camera. void GetPolicyAllowedUrls( ContentSettingsType type, - std::vector<std::unique_ptr<base::DictionaryValue>>* exceptions, + std::vector<base::Value::Dict>* exceptions, const extensions::ExtensionRegistry* extension_registry, content::WebUI* web_ui, bool incognito); @@ -206,14 +203,14 @@ // * sites: Array<SiteException> // The structure of the SiteException objects is the same as the objects // returned by GetExceptionForPage(). -base::Value CreateChooserExceptionObject( +base::Value::Dict CreateChooserExceptionObject( const std::u16string& display_name, const base::Value& object, const std::string& chooser_type, const ChooserExceptionDetails& chooser_exception_details); // Returns an array of chooser exception objects. -base::Value GetChooserExceptionListFromProfile( +base::Value::List GetChooserExceptionListFromProfile( Profile* profile, const ChooserTypeNameEntry& chooser_type);
diff --git a/chrome/browser/ui/webui/settings/site_settings_helper_unittest.cc b/chrome/browser/ui/webui/settings/site_settings_helper_unittest.cc index 7d48b36..68f6e5f 100644 --- a/chrome/browser/ui/webui/settings/site_settings_helper_unittest.cc +++ b/chrome/browser/ui/webui/settings/site_settings_helper_unittest.cc
@@ -53,14 +53,14 @@ const ContentSetting setting) { const base::Value& value = exceptions[index]; EXPECT_TRUE(value.is_dict()); - const base::DictionaryValue& dict = base::Value::AsDictionaryValue(value); - const std::string* actual_pattern = dict.FindStringKey("origin"); + const base::Value::Dict& dict = value.GetDict(); + const std::string* actual_pattern = dict.FindString("origin"); ASSERT_TRUE(actual_pattern); EXPECT_EQ(pattern, *actual_pattern); - const std::string* actual_display_name = dict.FindStringKey(kDisplayName); + const std::string* actual_display_name = dict.FindString(kDisplayName); ASSERT_TRUE(actual_display_name); EXPECT_EQ(pattern_display_name, *actual_display_name); - const std::string* actual_setting = dict.FindStringKey(kSetting); + const std::string* actual_setting = dict.FindString(kSetting); ASSERT_TRUE(actual_setting); EXPECT_EQ(content_settings::ContentSettingToString(setting), *actual_setting); @@ -269,15 +269,14 @@ ASSERT_EQ(2U, exceptions.size()); // Fetch and check the first origin. - const base::DictionaryValue* dictionary; const base::Value* value = &exceptions[0]; ASSERT_TRUE(value->is_dict()); - dictionary = &base::Value::AsDictionaryValue(*value); + const base::Value::Dict* dictionary = &value->GetDict(); const std::string* primary_pattern = - dictionary->FindStringKey(site_settings::kOrigin); + dictionary->FindString(site_settings::kOrigin); ASSERT_TRUE(primary_pattern); const std::string* display_name = - dictionary->FindStringKey(site_settings::kDisplayName); + dictionary->FindString(site_settings::kDisplayName); ASSERT_TRUE(display_name); EXPECT_EQ(kOriginToBlock, *primary_pattern); @@ -286,11 +285,11 @@ // Fetch and check the second origin. value = &exceptions[1]; ASSERT_TRUE(value->is_dict()); - dictionary = &base::Value::AsDictionaryValue(*value); + dictionary = &value->GetDict(); - primary_pattern = dictionary->FindStringKey(site_settings::kOrigin); + primary_pattern = dictionary->FindString(site_settings::kOrigin); ASSERT_TRUE(primary_pattern); - display_name = dictionary->FindStringKey(site_settings::kDisplayName); + display_name = dictionary->FindString(site_settings::kDisplayName); ASSERT_TRUE(display_name); EXPECT_EQ(kOriginToEmbargo, *primary_pattern); @@ -501,28 +500,28 @@ namespace { void ExpectValidChooserExceptionObject( - const base::Value& actual_exception_object, - const std::string& chooser_type, - const std::u16string& display_name, - const base::Value& chooser_object) { - const base::Value* chooser_type_value = actual_exception_object.FindKeyOfType( - kChooserType, base::Value::Type::STRING); - ASSERT_TRUE(chooser_type_value); - EXPECT_EQ(chooser_type_value->GetString(), chooser_type); + const base::Value::Dict& actual_exception_object, + const std::string& expected_chooser_type, + const std::u16string& expected_display_name, + const base::Value::Dict& expected_chooser_object) { + const std::string* actual_chooser_type = + actual_exception_object.FindString(kChooserType); + ASSERT_TRUE(actual_chooser_type); + EXPECT_EQ(*actual_chooser_type, expected_chooser_type); - const base::Value* display_name_value = actual_exception_object.FindKeyOfType( - kDisplayName, base::Value::Type::STRING); - ASSERT_TRUE(display_name_value); - EXPECT_EQ(base::UTF8ToUTF16(display_name_value->GetString()), display_name); + const std::string* actual_display_name = + actual_exception_object.FindString(kDisplayName); + ASSERT_TRUE(actual_display_name); + EXPECT_EQ(base::UTF8ToUTF16(*actual_display_name), expected_display_name); - const base::Value* object_value = actual_exception_object.FindKeyOfType( - kObject, base::Value::Type::DICTIONARY); - ASSERT_TRUE(object_value); - EXPECT_EQ(*object_value, chooser_object); + const base::Value::Dict* actual_chooser_object = + actual_exception_object.FindDict(kObject); + ASSERT_TRUE(actual_chooser_object); + EXPECT_EQ(*actual_chooser_object, expected_chooser_object); - const base::Value* sites_value = - actual_exception_object.FindKeyOfType(kSites, base::Value::Type::LIST); - ASSERT_TRUE(sites_value); + const base::Value::List* sites_list = + actual_exception_object.FindList(kSites); + ASSERT_TRUE(sites_list); } void ExpectValidSiteExceptionObject(const base::Value& actual_site_object, @@ -573,8 +572,8 @@ ChooserExceptionDetails exception_details; // Create a chooser object for testing. - auto chooser_object = std::make_unique<base::DictionaryValue>(); - chooser_object->SetKey("name", base::Value(kObjectName)); + base::Value::Dict chooser_object; + chooser_object.Set("name", base::Value(kObjectName)); // Add a user permission for a requesting origin of |kGoogleUrl| and an // embedding origin of chromium.org. @@ -588,14 +587,14 @@ { auto exception = CreateChooserExceptionObject( /*display_name=*/kObjectName, - /*object=*/*chooser_object, + /*object=*/base::Value(chooser_object.Clone()), /*chooser_type=*/kUsbChooserGroupName, /*chooser_exception_details=*/exception_details); ExpectValidChooserExceptionObject( exception, /*chooser_type=*/kUsbChooserGroupName, - /*display_name=*/kObjectName, *chooser_object); + /*display_name=*/kObjectName, chooser_object); - const auto& sites_list = exception.FindKey(kSites)->GetList(); + const auto& sites_list = exception.Find(kSites)->GetList(); ExpectValidSiteExceptionObject(/*actual_site_object=*/sites_list[0], /*origin=*/kGoogleUrl, /*source=*/kPreferenceSource, @@ -613,17 +612,17 @@ { auto exception = CreateChooserExceptionObject( /*display_name=*/kObjectName, - /*object=*/*chooser_object, + /*object=*/base::Value(chooser_object.Clone()), /*chooser_type=*/kUsbChooserGroupName, /*chooser_exception_details=*/exception_details); ExpectValidChooserExceptionObject(exception, /*chooser_type=*/kUsbChooserGroupName, /*display_name=*/kObjectName, - *chooser_object); + chooser_object); // The map sorts the sites by requesting origin, so |kAndroidUrl| should // be first, followed by the origin pair (kGoogleOrigin, kChromiumOrigin). - const auto& sites_list = exception.FindKey(kSites)->GetList(); + const auto& sites_list = exception.Find(kSites)->GetList(); ExpectValidSiteExceptionObject(/*actual_site_object=*/sites_list[0], /*origin=*/kAndroidUrl, /*source=*/kPreferenceSource, @@ -642,19 +641,19 @@ { auto exception = CreateChooserExceptionObject( /*display_name=*/kObjectName, - /*object=*/*chooser_object, + /*object=*/base::Value(chooser_object.Clone()), /*chooser_type=*/kUsbChooserGroupName, /*chooser_exception_details=*/exception_details); ExpectValidChooserExceptionObject(exception, /*chooser_type=*/kUsbChooserGroupName, /*display_name=*/kObjectName, - *chooser_object); + chooser_object); // The map sorts the sites by requesting origin, but the // CreateChooserExceptionObject method sorts the sites further by the // source. Therefore, policy granted sites are listed before user granted // sites. - const auto& sites_list = exception.FindKey(kSites)->GetList(); + const auto& sites_list = exception.Find(kSites)->GetList(); ExpectValidSiteExceptionObject(/*actual_site_object=*/sites_list[0], /*origin=*/kGoogleUrl, /*source=*/kPolicySource, @@ -773,9 +772,8 @@ // origin and the embedding origin. User granted permissions that are also // granted by policy are combined with the policy so that duplicate // permissions are not displayed. - base::Value exceptions = + base::Value::List exceptions_list = GetChooserExceptionListFromProfile(profile(), *chooser_type); - const base::Value::List& exceptions_list = exceptions.GetList(); ASSERT_EQ(exceptions_list.size(), 4u); // This exception should describe the permissions for any device with the
diff --git a/chrome/browser/ui/webui/signin/login_ui_test_utils.cc b/chrome/browser/ui/webui/signin/login_ui_test_utils.cc index f9e3f3d..e5c4f64 100644 --- a/chrome/browser/ui/webui/signin/login_ui_test_utils.cc +++ b/chrome/browser/ui/webui/signin/login_ui_test_utils.cc
@@ -396,7 +396,11 @@ if (!IsElementReady(dialog_web_contents, button_selector)) return false; - return content::ExecJs(dialog_web_contents, button_selector + ".click();"); + // content::ExecJs() might return false because this JavaScript execution + // terminates the renderer as a side effect. + std::ignore = + content::ExecJs(dialog_web_contents, button_selector + ".click();"); + return true; #endif }
diff --git a/chrome/browser/user_notes/DEPS b/chrome/browser/user_notes/DEPS deleted file mode 100644 index cdaed7a..0000000 --- a/chrome/browser/user_notes/DEPS +++ /dev/null
@@ -1,8 +0,0 @@ -include_rules = [ - # Required to get the interface implementation from BrowserUserData. No other - # assumptions about chrome/browser/ui/views are made; consumers use the base - # interface to interact with the UI implementation. - # TODO(crbug.com/1341055): Find a way to return the coordinator without - # needing this dependency. - "+chrome/browser/ui/views/side_panel/user_note/user_note_ui_coordinator.h", -]
diff --git a/chrome/browser/user_notes/user_note_service_delegate_impl.cc b/chrome/browser/user_notes/user_note_service_delegate_impl.cc index 920822e..5dc26e6 100644 --- a/chrome/browser/user_notes/user_note_service_delegate_impl.cc +++ b/chrome/browser/user_notes/user_note_service_delegate_impl.cc
@@ -5,11 +5,12 @@ #include "chrome/browser/user_notes/user_note_service_delegate_impl.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/tabs/tab_strip_model.h" -#include "chrome/browser/ui/views/side_panel/user_note/user_note_ui_coordinator.h" #include "components/user_notes/interfaces/user_notes_ui.h" #include "content/public/browser/render_frame_host.h" +#include "content/public/browser/web_contents.h" namespace user_notes { @@ -64,7 +65,8 @@ return nullptr; } - return UserNoteUICoordinator::FromBrowser(browser); + return static_cast<UserNotesUI*>( + browser->GetUserData(UserNotesUI::UserDataKey())); } bool UserNoteServiceDelegateImpl::IsFrameInActiveTab(
diff --git a/chrome/browser/user_notes/user_note_service_delegate_impl_unittest.cc b/chrome/browser/user_notes/user_note_service_delegate_impl_unittest.cc index 249570a..ee919fe 100644 --- a/chrome/browser/user_notes/user_note_service_delegate_impl_unittest.cc +++ b/chrome/browser/user_notes/user_note_service_delegate_impl_unittest.cc
@@ -8,10 +8,15 @@ #include <string> #include <vector> +#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/test/base/browser_with_test_window_test.h" #include "chrome/test/base/testing_profile.h" +#include "components/user_notes/interfaces/user_notes_ui.h" #include "content/public/browser/render_frame_host.h" +#include "content/public/browser/web_contents.h" +#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" #include "url/gurl.h" @@ -23,8 +28,67 @@ } // namespace +class MockUserNotesUI : public UserNotesUI { + public: + MOCK_METHOD(void, Invalidate, (), (override)); + MOCK_METHOD(void, + FocusNote, + (const base::UnguessableToken& guid), + (override)); + MOCK_METHOD(void, + StartNoteCreation, + (UserNoteInstance * instance), + (override)); + MOCK_METHOD(void, Show, (), (override)); +}; + class UserNoteServiceDelegateImplTest : public BrowserWithTestWindowTest {}; +TEST_F(UserNoteServiceDelegateImplTest, GetUICoordinatorForFrame) { + // Prepare two browsers. + Browser* browser1 = browser(); + std::unique_ptr<BrowserWindow> window2 = CreateBrowserWindow(); + std::unique_ptr<Browser> browser2 = + CreateBrowser(profile(), Browser::TYPE_NORMAL, false, window2.get()); + + GURL url = GURL(kBaseUrl); + AddTab(browser1, url); + AddTab(browser2.get(), url); + + // Attach a mock UserNotesUI implementation to the browsers. + auto mock_ui1 = std::make_unique<MockUserNotesUI>(); + MockUserNotesUI* mock1 = mock_ui1.get(); + EXPECT_CALL(*mock_ui1, Invalidate).Times(0); + EXPECT_CALL(*mock_ui1, FocusNote).Times(0); + EXPECT_CALL(*mock_ui1, StartNoteCreation).Times(0); + EXPECT_CALL(*mock_ui1, Show).Times(0); + + auto mock_ui2 = std::make_unique<MockUserNotesUI>(); + MockUserNotesUI* mock2 = mock_ui2.get(); + EXPECT_CALL(*mock_ui2, Invalidate).Times(0); + EXPECT_CALL(*mock_ui2, FocusNote).Times(0); + EXPECT_CALL(*mock_ui2, StartNoteCreation).Times(0); + EXPECT_CALL(*mock_ui2, Show).Times(0); + + browser1->SetUserData(UserNotesUI::UserDataKey(), std::move(mock_ui1)); + browser2->SetUserData(UserNotesUI::UserDataKey(), std::move(mock_ui2)); + + // Ensure the attached UI implementations can be retrieved by the delegate. + auto delegate = std::make_unique<UserNoteServiceDelegateImpl>(profile()); + UserNotesUI* impl1 = delegate->GetUICoordinatorForFrame( + browser1->tab_strip_model()->GetWebContentsAt(0)->GetPrimaryMainFrame()); + UserNotesUI* impl2 = delegate->GetUICoordinatorForFrame( + browser2->tab_strip_model()->GetWebContentsAt(0)->GetPrimaryMainFrame()); + + EXPECT_EQ(mock1, impl1); + EXPECT_EQ(mock2, impl2); + + // Cleanup. + browser2->tab_strip_model()->CloseAllTabs(); + browser2.reset(); + window2.reset(); +} + TEST_F(UserNoteServiceDelegateImplTest, GetAllFramesForUserNotes) { const BrowserList* browser_list = BrowserList::GetInstance(); EXPECT_EQ(browser_list->size(), 1u);
diff --git a/chrome/browser/web_applications/preinstalled_web_app_utils.cc b/chrome/browser/web_applications/preinstalled_web_app_utils.cc index a145236..5d77b95e 100644 --- a/chrome/browser/web_applications/preinstalled_web_app_utils.cc +++ b/chrome/browser/web_applications/preinstalled_web_app_utils.cc
@@ -15,6 +15,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/web_applications/file_utils_wrapper.h" #include "chrome/browser/web_applications/user_display_mode.h" +#include "chrome/browser/web_applications/web_app_install_info.h" #include "chrome/common/pref_names.h" #include "components/prefs/scoped_user_pref_update.h" #include "components/webapps/common/constants.h" @@ -159,6 +160,10 @@ // icons for offline install. Will be installed with purpose "any". constexpr char kOfflineManifestIconAnyPngs[] = "icon_any_pngs"; +// List of PNG files in the default web app config directory to use as the +// icons for offline install. Will be installed with purpose "maskable". +constexpr char kOfflineManifestIconMaskablePngs[] = "icon_maskable_pngs"; + // Optional 8 value ARGB hex code to use as the "theme_color" manifest value. // Example: // "theme_color_argb_hex": "FFFF0000" @@ -446,6 +451,48 @@ return options; } +IconBitmapsOrError ParseOfflineManifestIconBitmaps( + FileUtilsWrapper& file_utils, + const base::FilePath& dir, + const base::FilePath& manifest_file, + const char* icon_key, + const base::Value* icon_files) { + std::map<SquareSizePx, SkBitmap> icon_bitmaps; + + for (const base::Value& icon_file : icon_files->GetList()) { + if (!icon_file.is_string()) { + return base::unexpected(base::StrCat( + {manifest_file.AsUTF8Unsafe(), " ", kOfflineManifest, " ", icon_key, + " ", icon_file.DebugString(), " invalid."})); + } + base::FilePath icon_path = dir.AppendASCII(icon_file.GetString()); + std::string icon_data; + if (!file_utils.ReadFileToString(icon_path, &icon_data)) { + return base::unexpected(base::StrCat( + {manifest_file.AsUTF8Unsafe(), " ", kOfflineManifest, " ", icon_key, + " ", icon_file.DebugString(), " failed to read."})); + } + SkBitmap bitmap; + if (!gfx::PNGCodec::Decode( + reinterpret_cast<const unsigned char*>(icon_data.c_str()), + icon_data.size(), &bitmap)) { + return base::unexpected(base::StrCat( + {manifest_file.AsUTF8Unsafe(), " ", kOfflineManifest, " ", icon_key, + " ", icon_file.DebugString(), " failed to decode."})); + } + if (bitmap.width() != bitmap.height()) { + return base::unexpected(base::StrCat( + {manifest_file.AsUTF8Unsafe(), " ", kOfflineManifest, " ", icon_key, + " ", icon_file.DebugString(), + " must be square: ", base::NumberToString(bitmap.width()), "x", + base::NumberToString(bitmap.height())})); + } + icon_bitmaps[bitmap.width()] = std::move(bitmap); + } + + return icon_bitmaps; +} + WebAppInstallInfoFactoryOrError ParseOfflineManifest( FileUtilsWrapper& file_utils, const base::FilePath& dir, @@ -516,49 +563,49 @@ } app_info.display_mode = display; - // icon_any_pngs - const base::Value* icon_files = + // icon_any_pngs || icon_maskable_pngs + const base::Value* icon_any_files = offline_manifest.FindListKey(kOfflineManifestIconAnyPngs); - if (!icon_files || icon_files->GetListDeprecated().empty()) { + const base::Value* icon_maskable_files = + offline_manifest.FindListKey(kOfflineManifestIconMaskablePngs); + + if (!icon_any_files && !icon_maskable_files) { return base::StrCat({file.AsUTF8Unsafe(), " ", kOfflineManifest, " ", - kOfflineManifestIconAnyPngs, - " missing, empty or invalid."}); + kOfflineManifestIconAnyPngs, " and ", + kOfflineManifestIconMaskablePngs, + " missing or invalid."}); } - for (const base::Value& icon_file : icon_files->GetListDeprecated()) { - if (!icon_file.is_string()) { + + if (icon_any_files) { + if (icon_any_files->GetList().empty()) { return base::StrCat({file.AsUTF8Unsafe(), " ", kOfflineManifest, " ", - kOfflineManifestIconAnyPngs, " ", - icon_file.DebugString(), " invalid."}); + kOfflineManifestIconAnyPngs, " empty."}); } - base::FilePath icon_path = dir.AppendASCII(icon_file.GetString()); - std::string icon_data; - if (!file_utils.ReadFileToString(icon_path, &icon_data)) { - return base::StrCat({file.AsUTF8Unsafe(), " ", kOfflineManifest, " ", - kOfflineManifestIconAnyPngs, " ", - icon_file.DebugString(), " failed to read."}); + auto any_bitmaps = ParseOfflineManifestIconBitmaps( + file_utils, dir, file, kOfflineManifestIconAnyPngs, icon_any_files); + if (!any_bitmaps.has_value()) { + return std::move(any_bitmaps.error()); } - SkBitmap bitmap; - if (!gfx::PNGCodec::Decode( - reinterpret_cast<const unsigned char*>(icon_data.c_str()), - icon_data.size(), &bitmap)) { - return base::StrCat({file.AsUTF8Unsafe(), " ", kOfflineManifest, " ", - kOfflineManifestIconAnyPngs, " ", - icon_file.DebugString(), " failed to decode."}); - } - - if (bitmap.width() != bitmap.height()) { - return base::StrCat( - {file.AsUTF8Unsafe(), " ", kOfflineManifest, " ", - kOfflineManifestIconAnyPngs, " ", icon_file.DebugString(), - " must be square: ", base::NumberToString(bitmap.width()), "x", - base::NumberToString(bitmap.height())}); - } - - app_info.icon_bitmaps.any[bitmap.width()] = std::move(bitmap); + app_info.icon_bitmaps.any = std::move(any_bitmaps.value()); } - DCHECK(!app_info.icon_bitmaps.any.empty()); + + if (icon_maskable_files) { + if (icon_maskable_files->GetList().empty()) { + return base::StrCat({file.AsUTF8Unsafe(), " ", kOfflineManifest, " ", + kOfflineManifestIconMaskablePngs, " empty."}); + } + + auto maskable_bitmaps = ParseOfflineManifestIconBitmaps( + file_utils, dir, file, kOfflineManifestIconMaskablePngs, + icon_maskable_files); + if (!maskable_bitmaps.has_value()) { + return std::move(maskable_bitmaps.error()); + } + + app_info.icon_bitmaps.maskable = maskable_bitmaps.value(); + } // theme_color_argb_hex (optional) const base::Value* theme_color_value =
diff --git a/chrome/browser/web_applications/preinstalled_web_app_utils.h b/chrome/browser/web_applications/preinstalled_web_app_utils.h index 236372f..0664413 100644 --- a/chrome/browser/web_applications/preinstalled_web_app_utils.h +++ b/chrome/browser/web_applications/preinstalled_web_app_utils.h
@@ -8,6 +8,7 @@ #include <string> #include "base/strings/string_piece.h" +#include "base/types/expected.h" #include "chrome/browser/web_applications/external_install_options.h" #include "third_party/abseil-cpp/absl/types/variant.h" @@ -29,6 +30,16 @@ const base::FilePath& file, const base::Value& app_config); +using IconBitmapsOrError = + base::expected<std::map<SquareSizePx, SkBitmap>, std::string>; + +IconBitmapsOrError ParseOfflineManifestIconBitmaps( + FileUtilsWrapper& file_utils, + const base::FilePath& dir, + const base::FilePath& manifest_file, + const char* icon_key, + const base::Value* icon_files); + using WebAppInstallInfoFactoryOrError = absl::variant<WebAppInstallInfoFactory, std::string>;
diff --git a/chrome/browser/web_applications/preinstalled_web_app_utils_unittest.cc b/chrome/browser/web_applications/preinstalled_web_app_utils_unittest.cc index 2326a98..de4bfe90 100644 --- a/chrome/browser/web_applications/preinstalled_web_app_utils_unittest.cc +++ b/chrome/browser/web_applications/preinstalled_web_app_utils_unittest.cc
@@ -214,6 +214,7 @@ "scope": "https://test.org/", "display": "standalone", "icon_any_pngs": ["icon.png"], + "icon_maskable_pngs": ["icon.png"], "theme_color_argb_hex": "AABBCCDD" } )") @@ -226,6 +227,9 @@ EXPECT_EQ(app_info->display_mode, DisplayMode::kStandalone); EXPECT_EQ(app_info->icon_bitmaps.any.size(), 1u); EXPECT_EQ(app_info->icon_bitmaps.any.at(192).getColor(0, 0), SK_ColorBLUE); + EXPECT_EQ(app_info->icon_bitmaps.maskable.size(), 1u); + EXPECT_EQ(app_info->icon_bitmaps.maskable.at(192).getColor(0, 0), + SK_ColorBLUE); EXPECT_EQ(app_info->theme_color, SkColorSetARGB(0xFF, 0xBB, 0xCC, 0xDD)); } @@ -431,6 +435,47 @@ )")) << "icon_any_pngs is a PNG"; } +TEST_F(PreinstalledWebAppUtilsTest, OfflineManifestIconMaskablePngs) { + EXPECT_FALSE(ParseOfflineManifest(R"( + { + "name": "Test App", + "start_url": "https://test.org/start.html", + "scope": "https://test.org/", + "display": "standalone" + } + )")) << "icon_any_pngs or icon_maskable_pngs is required"; + + EXPECT_FALSE(ParseOfflineManifest(R"( + { + "name": "Test App", + "start_url": "https://test.org/start.html", + "scope": "https://test.org/", + "display": "standalone", + "icon_maskable_pngs": "icon.png" + } + )")) << "icon_maskable_pngs is valid"; + + EXPECT_FALSE(ParseOfflineManifest(R"( + { + "name": "Test App", + "start_url": "https://test.org/start.html", + "scope": "https://test.org/", + "display": "standalone", + "icon_maskable_pngs": ["does-not-exist.png"] + } + )")) << "icon_maskable_pngs exists"; + + EXPECT_FALSE(ParseOfflineManifest(R"( + { + "name": "Test App", + "start_url": "https://test.org/start.html", + "scope": "https://test.org/", + "display": "standalone", + "icon_maskable_pngs": ["basic.html"] + } + )")) << "icon_maskable_pngs is a PNG"; +} + TEST_F(PreinstalledWebAppUtilsTest, OfflineManifestThemeColorArgbHex) { EXPECT_FALSE(ParseOfflineManifest(R"( {
diff --git a/chrome/build/linux.pgo.txt b/chrome/build/linux.pgo.txt index c85e12d..613b5fd 100644 --- a/chrome/build/linux.pgo.txt +++ b/chrome/build/linux.pgo.txt
@@ -1 +1 @@ -chrome-linux-main-1657691434-f74a767c206bb56afd966c90152c902650d76589.profdata +chrome-linux-main-1657713163-aa3d57577b5eeb5ddf572849893ea7aaf8cdd026.profdata
diff --git a/chrome/build/mac.pgo.txt b/chrome/build/mac.pgo.txt index d7f2ef7..c00643d 100644 --- a/chrome/build/mac.pgo.txt +++ b/chrome/build/mac.pgo.txt
@@ -1 +1 @@ -chrome-mac-main-1657691434-90ae24fe42f5617e63b34f39d0e60995a9944a43.profdata +chrome-mac-main-1657713163-5e0885118a90021ce3f66c756e589307abbe5e36.profdata
diff --git a/chrome/build/win32.pgo.txt b/chrome/build/win32.pgo.txt index cb75ba50..56107dec 100644 --- a/chrome/build/win32.pgo.txt +++ b/chrome/build/win32.pgo.txt
@@ -1 +1 @@ -chrome-win32-main-1657702773-6b95fe0395dbbe33286723a515c51b5b8e36c452.profdata +chrome-win32-main-1657713163-c94debed123988015ff59644030156f01250f329.profdata
diff --git a/chrome/build/win64.pgo.txt b/chrome/build/win64.pgo.txt index 38f5e0ff..0423e31 100644 --- a/chrome/build/win64.pgo.txt +++ b/chrome/build/win64.pgo.txt
@@ -1 +1 @@ -chrome-win64-main-1657702773-b603e438762ea1628639c5cfa2f6bda07c2ccfda.profdata +chrome-win64-main-1657713163-00d3f38380d538700042cb1ee28587b5a2e62f7e.profdata
diff --git a/chrome/common/chrome_constants.cc b/chrome/common/chrome_constants.cc index 6fec2c1..47f9bf73 100644 --- a/chrome/common/chrome_constants.cc +++ b/chrome/common/chrome_constants.cc
@@ -176,9 +176,6 @@ const float kMaxShareOfExtensionProcesses = 0.30f; #if BUILDFLAG(IS_CHROMEOS_ASH) -const char kProfileDirPrefix[] = "u-"; -const char kLegacyProfileDir[] = "user"; -const char kTestUserProfileDir[] = "test-user"; const char kLockScreenAppProfile[] = "LockScreenAppsProfile"; const char kLockScreenProfile[] = "LockScreenProfile"; #endif
diff --git a/chrome/common/chrome_constants.h b/chrome/common/chrome_constants.h index 0dc3a0a..30afb928 100644 --- a/chrome/common/chrome_constants.h +++ b/chrome/common/chrome_constants.h
@@ -101,17 +101,6 @@ extern const float kMaxShareOfExtensionProcesses; #if BUILDFLAG(IS_CHROMEOS_ASH) -// Chrome OS profile directories have custom prefix. -// Profile path format: [user_data_dir]/u-[$hash] -// Ex.: /home/chronos/u-0123456789 -extern const char kProfileDirPrefix[]; - -// Legacy profile dir that was used when only one cryptohome has been mounted. -extern const char kLegacyProfileDir[]; - -// This must be kept in sync with TestingProfile::kTestUserProfileDir. -extern const char kTestUserProfileDir[]; - // An anonymous profile that is used for lock screen apps. extern const char kLockScreenAppProfile[];
diff --git a/chrome/test/BUILD.gn b/chrome/test/BUILD.gn index b9a3c99a..9195a128 100644 --- a/chrome/test/BUILD.gn +++ b/chrome/test/BUILD.gn
@@ -234,6 +234,7 @@ "//components/captive_portal/core:test_support", "//components/consent_auditor:test_support", "//components/content_settings/core/browser", + "//components/contextual_search/core/browser", "//components/custom_handlers/", "//components/domain_reliability", "//components/find_in_page", @@ -2216,6 +2217,7 @@ "../browser/ui/views/toolbar/app_menu_browsertest.cc", "../browser/ui/views/toolbar/avatar_toolbar_button_browsertest.cc", "../browser/ui/views/toolbar/chrome_labs_browsertest.cc", + "../browser/ui/views/toolbar/home_button_browsertest.cc", "../browser/ui/views/web_apps/frame_toolbar/web_app_frame_toolbar_browsertest.cc", "../browser/ui/views/web_apps/frame_toolbar/web_app_minimal_ui_test.cc", "../browser/ui/views/web_apps/protocol_handler_launch_dialog_browsertest.cc", @@ -5251,11 +5253,8 @@ "../browser/plugins/pdf_iframe_navigation_throttle_unittest.cc", "../browser/policy/boolean_disabling_policy_handler_unittest.cc", "../browser/policy/chrome_browser_policy_connector_unittest.cc", - "../browser/policy/cloud/cloud_policy_invalidator_unittest.cc", "../browser/policy/cloud/remote_commands_invalidator_unittest.cc", "../browser/policy/cloud/user_policy_signin_service_unittest.cc", - "../browser/policy/developer_tools_policy_handler_unittest.cc", - "../browser/policy/file_selection_dialogs_policy_handler_unittest.cc", "../browser/policy/homepage_location_policy_handler_unittest.cc", "../browser/policy/javascript_policy_handler_unittest.cc", "../browser/policy/messaging_layer/public/report_client_test_util.cc", @@ -5315,7 +5314,6 @@ "../browser/privacy_sandbox/privacy_sandbox_service_unittest.cc", "../browser/privacy_sandbox/privacy_sandbox_settings_delegate_unittest.cc", "../browser/profiles/gaia_info_update_service_unittest.cc", - "../browser/profiles/guest_mode_policy_handler_unittest.cc", "../browser/profiles/incognito_mode_policy_handler_unittest.cc", "../browser/profiles/profile_attributes_storage_unittest.cc", "../browser/profiles/profile_downloader_unittest.cc", @@ -6468,7 +6466,6 @@ "../browser/performance_manager/test_support/site_data_utils.cc", "../browser/performance_manager/test_support/site_data_utils.h", "../browser/platform_util_unittest.cc", - "../browser/policy/local_sync_policy_handler_unittest.cc", "../browser/policy/policy_path_parser_unittest.cc", "../browser/policy/serial_allow_usb_devices_for_urls_policy_handler_unittest.cc", "../browser/policy/webhid_device_policy_handler_unittest.cc", @@ -6545,7 +6542,6 @@ "../browser/task_manager/test_task_manager.cc", "../browser/task_manager/test_task_manager.h", "../browser/themes/browser_theme_pack_unittest.cc", - "../browser/themes/theme_color_policy_handler_unittest.cc", "../browser/themes/theme_properties_unittest.cc", "../browser/themes/theme_service_test_utils.cc", "../browser/themes/theme_service_test_utils.h", @@ -7819,7 +7815,10 @@ ] if (is_linux || is_mac || is_win) { - sources += [ "../common/extensions/api/system_indicator/system_indicator_handler_unittest.cc" ] + sources += [ + "../browser/policy/local_sync_policy_handler_unittest.cc", + "../common/extensions/api/system_indicator/system_indicator_handler_unittest.cc", + ] } allow_circular_includes_from = [ @@ -8016,6 +8015,14 @@ ] } + if (!is_android && !is_ios) { + sources += [ + "../browser/policy/cloud/cloud_policy_invalidator_unittest.cc", + "../browser/policy/developer_tools_policy_handler_unittest.cc", + "../browser/profiles/guest_mode_policy_handler_unittest.cc", + ] + } + if (use_gio) { configs += [ "//build/linux:gio_config" ] } @@ -8351,6 +8358,12 @@ sources += [ "../browser/rlz/chrome_rlz_tracker_delegate_unittest.cc" ] deps += [ "//rlz:test_support" ] } + if (!is_android && !is_chromeos) { + sources += [ + "../browser/policy/file_selection_dialogs_policy_handler_unittest.cc", + "../browser/themes/theme_color_policy_handler_unittest.cc", + ] + } if (!is_android && !is_chromeos_ash) { sources += [ "../browser/device_identity/device_oauth2_token_store_desktop_unittest.cc", @@ -8932,6 +8945,7 @@ "//ash/services/device_sync:test_support", "//chrome/browser/ash", "//chrome/browser/ash/system_web_apps/test_support", + "//chromeos/ash/components/browser_context_helper", ] } else { sources += [ @@ -9743,6 +9757,8 @@ "../browser/sync/test/integration/quiesce_status_change_checker.h", "../browser/sync/test/integration/secondary_account_helper.cc", "../browser/sync/test/integration/secondary_account_helper.h", + "../browser/sync/test/integration/session_hierarchy_match_checker.cc", + "../browser/sync/test/integration/session_hierarchy_match_checker.h", "../browser/sync/test/integration/single_client_status_change_checker.cc", "../browser/sync/test/integration/single_client_status_change_checker.h", "../browser/sync/test/integration/status_change_checker.cc", @@ -9792,8 +9808,6 @@ "../browser/sync/test/integration/search_engines_helper.h", "../browser/sync/test/integration/send_tab_to_self_helper.cc", "../browser/sync/test/integration/send_tab_to_self_helper.h", - "../browser/sync/test/integration/session_hierarchy_match_checker.cc", - "../browser/sync/test/integration/session_hierarchy_match_checker.h", "../browser/sync/test/integration/sessions_helper.cc", "../browser/sync/test/integration/sessions_helper.h", "../browser/sync/test/integration/sync_app_helper.cc", @@ -9997,6 +10011,7 @@ "../browser/sync/test/integration/two_client_printers_sync_test.cc", ] deps += [ + "//chromeos/ash/components/browser_context_helper", "//chromeos/components/sync_wifi", "//chromeos/components/sync_wifi:test_support", "//chromeos/dbus/shill",
diff --git a/chrome/test/DEPS b/chrome/test/DEPS index a4e60c1..c318374 100644 --- a/chrome/test/DEPS +++ b/chrome/test/DEPS
@@ -16,6 +16,7 @@ "+components/component_updater", "+components/constrained_window", "+components/content_settings/core/browser", + "+components/contextual_search/core/browser", "+components/crash/core/app", "+components/domain_reliability", "+components/download/public/common",
diff --git a/chrome/test/base/in_process_browser_test.cc b/chrome/test/base/in_process_browser_test.cc index 905bfc44e..adfa4e24 100644 --- a/chrome/test/base/in_process_browser_test.cc +++ b/chrome/test/base/in_process_browser_test.cc
@@ -114,6 +114,7 @@ #include "base/system/sys_info.h" #include "chrome/browser/ash/app_restore/full_restore_app_launch_handler.h" #include "chrome/browser/ash/input_method/input_method_configuration.h" +#include "chromeos/ash/components/browser_context_helper/browser_context_helper.h" #include "components/user_manager/user_names.h" #include "ui/display/display_switches.h" #include "ui/events/test/event_generator.h" @@ -404,8 +405,9 @@ ash::switches::kLoginUser, cryptohome::Identification(user_manager::StubAccountId()).id()); if (!command_line->HasSwitch(ash::switches::kLoginProfile)) { - command_line->AppendSwitchASCII(ash::switches::kLoginProfile, - chrome::kTestUserProfileDir); + command_line->AppendSwitchASCII( + ash::switches::kLoginProfile, + ash::BrowserContextHelper::kTestUserBrowserContextDirName); } } #endif
diff --git a/chrome/test/data/android/url_overriding/navigation_from_xhr_callback_and_long_timeout.html b/chrome/test/data/android/url_overriding/navigation_from_xhr_callback_and_long_timeout.html deleted file mode 100644 index d566c7c..0000000 --- a/chrome/test/data/android/url_overriding/navigation_from_xhr_callback_and_long_timeout.html +++ /dev/null
@@ -1,29 +0,0 @@ -<!DOCTYPE html> -<html> -<head> - <meta name="viewport" - content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> - <script> - var xmlhttp = new XMLHttpRequest(); - - function openApp() { - window.location = 'intent://test/#Intent;scheme=externalappscheme;end'; - }; - - function xhrOnReadyStateChange() { - if (xmlhttp.readyState==4 && xmlhttp.status==200) { - setTimeout(openApp, 11000); - } - }; - - function xhrAndOpenApp() { - xmlhttp.onreadystatechange = xhrOnReadyStateChange; - xmlhttp.open("GET", 'hello.html' , true); - xmlhttp.send(); - }; - </script> -</head> -<body style='height:10000px;' onclick='xhrAndOpenApp();'> - Click page to open App!! -</body> -</html>
diff --git a/chrome/test/data/webui/settings/chromeos/device_page_tests.js b/chrome/test/data/webui/settings/chromeos/device_page_tests.js index 628b9fa..56a4a31 100644 --- a/chrome/test/data/webui/settings/chromeos/device_page_tests.js +++ b/chrome/test/data/webui/settings/chromeos/device_page_tests.js
@@ -19,6 +19,7 @@ /** @enum {string} */ const TestNames = { DevicePage: 'device page', + Audio: 'audio', Display: 'display', Keyboard: 'keyboard', NightLight: 'night light', @@ -659,8 +660,8 @@ assertTrue(isVisible(devicePage.shadowRoot.querySelector('#keyboardRow'))); assertTrue(isVisible(devicePage.shadowRoot.querySelector('#displayRow'))); - // enableAudioSettingsPage feature flag by default is turned off. - assertFalse(isVisible(devicePage.shadowRoot.querySelector('#audioRow'))); + // enableAudioSettingsPage feature flag by default is turned on in tests. + assertTrue(isVisible(devicePage.shadowRoot.querySelector('#audioRow'))); webUIListenerCallback('has-mouse-changed', false); assertTrue(isVisible(devicePage.shadowRoot.querySelector('#pointersRow'))); @@ -677,26 +678,31 @@ test('audio row visibility', async function() { loadTimeData.overrideValues({ - enableAudioSettingsPage: true, + enableAudioSettingsPage: false, + }); + await init(); + assertFalse(isVisible(devicePage.shadowRoot.querySelector('#audioRow'))); + }); + + suite(assert(TestNames.Audio), function() { + let audioPage; + + setup(async function() { + loadTimeData.overrideValues({ + enableAudioSettingsPage: true, + }); + await init(); + return showAndGetDeviceSubpage('audio', routes.AUDIO) + .then(function(page) { + audioPage = page; + }); }); - await init(); - assertTrue(isVisible(devicePage.shadowRoot.querySelector('#pointersRow'))); - assertTrue(isVisible(devicePage.shadowRoot.querySelector('#keyboardRow'))); - assertTrue(isVisible(devicePage.shadowRoot.querySelector('#displayRow'))); - assertTrue(isVisible(devicePage.shadowRoot.querySelector('#audioRow'))); - - webUIListenerCallback('has-mouse-changed', false); - assertTrue(isVisible(devicePage.shadowRoot.querySelector('#pointersRow'))); - - webUIListenerCallback('has-pointing-stick-changed', false); - assertTrue(isVisible(devicePage.shadowRoot.querySelector('#pointersRow'))); - - webUIListenerCallback('has-touchpad-changed', false); - assertFalse(isVisible(devicePage.shadowRoot.querySelector('#pointersRow'))); - - webUIListenerCallback('has-mouse-changed', true); - assertTrue(isVisible(devicePage.shadowRoot.querySelector('#pointersRow'))); + test('subpage visibility', function() { + assertEquals(routes.AUDIO, Router.getInstance().getCurrentRoute()); + assertTrue( + isVisible(audioPage.shadowRoot.querySelector('#audioSubpageTitle'))); + }); }); suite(assert(TestNames.Pointers), function() {
diff --git a/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js b/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js index 51c6a9e..6882fc9 100644 --- a/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js +++ b/chrome/test/data/webui/settings/chromeos/os_settings_v3_browsertest.js
@@ -44,6 +44,7 @@ get featureList() { return { enabled: [ + 'chromeos::features::kAudioSettingsPage', 'features::kAllowDisableTouchpadHapticFeedback', 'features::kAllowTouchpadHapticClickSettings', ],
diff --git a/chromecast/BUILD.gn b/chromecast/BUILD.gn index 50c9adc..f9083bd8 100644 --- a/chromecast/BUILD.gn +++ b/chromecast/BUILD.gn
@@ -130,16 +130,16 @@ if (is_linux) { tests += [ "//chromecast/crash:cast_crash_unittests", - "//sandbox:sandbox_unittests", + "//sandbox/linux:sandbox_linux_unittests", ] - sandbox_unittests_filter = { - test_name = "sandbox_unittests" + sandbox_linux_unittests_filter = { + test_name = "sandbox_linux_unittests" # TODO(b/148974697): re-enable this. gtest_excludes = [ "BaselinePolicy.SystemEperm" ] } - filters += [ sandbox_unittests_filter ] + filters += [ sandbox_linux_unittests_filter ] } # TODO(crbug/1319009): `media_use_ffmpeg` should not largely affect top-level
diff --git a/chromecast/base/static_sequence/static_sequence_unittest.nc b/chromecast/base/static_sequence/static_sequence_unittest.nc index f5b2881b9..b9a68ef 100644 --- a/chromecast/base/static_sequence/static_sequence_unittest.nc +++ b/chromecast/base/static_sequence/static_sequence_unittest.nc
@@ -23,13 +23,13 @@ void StaticSequenceNoCompileTests() { Sequenced<Bar, SequenceB> bar; -#if defined(NCTEST_POST_FUNCTION_TO_WRONG_SEQUENCE) // [r"fatal error: static_assert failed due to requirement 'invalid<util::SequenceB, util::SequenceA>':? \"?Attempting to post a statically-sequenced task to the wrong static sequence!\"?"] +#if defined(NCTEST_POST_FUNCTION_TO_WRONG_SEQUENCE) // [r"fatal error: static_assert failed due to requirement 'invalid<util::SequenceB, util::SequenceA>': Attempting to post a statically-sequenced task to the wrong static sequence!"] SequenceB::PostTask(base::BindOnce(&Foo)); -#elif defined(NCTEST_POST_FUNCTION_WITH_NON_CONST_KEY_REF) // [r".*\"?Did you forget to add `const` to the Key parameter of the bound functor\?\"?"] +#elif defined(NCTEST_POST_FUNCTION_WITH_NON_CONST_KEY_REF) // [r".*Did you forget to add `const` to the Key parameter of the bound functor\?"] SequenceA::PostTask(base::BindOnce(&Fred)); -#elif defined(NCTEST_POST_METHOD_WITH_NON_CONST_KEY_REF) // [r".*\"?Did you forget to add `const` to the Key parameter of the bound functor\?\"?"] +#elif defined(NCTEST_POST_METHOD_WITH_NON_CONST_KEY_REF) // [r".*Did you forget to add `const` to the Key parameter of the bound functor\?"] bar.Post(FROM_HERE, &Bar::Baz); -#elif defined(NCTEST_POST_METHOD_TO_WRONG_SEQUENCE) // [r"fatal error: static_assert failed due to requirement 'invalid<util::SequenceB, util::SequenceA>':? \"?Attempting to post a statically-sequenced task to the wrong static sequence!\"?"] +#elif defined(NCTEST_POST_METHOD_TO_WRONG_SEQUENCE) // [r"fatal error: static_assert failed due to requirement 'invalid<util::SequenceB, util::SequenceA>': Attempting to post a statically-sequenced task to the wrong static sequence!"] bar.Post(FROM_HERE, &Bar::Qux); #endif }
diff --git a/chromeos/ash/components/BUILD.gn b/chromeos/ash/components/BUILD.gn index b8e18883..b6b45c2d 100644 --- a/chromeos/ash/components/BUILD.gn +++ b/chromeos/ash/components/BUILD.gn
@@ -11,6 +11,7 @@ source_set("unit_tests") { testonly = true deps = [ + "//chromeos/ash/components/browser_context_helper:unit_tests", "//chromeos/ash/components/dbus:unit_tests", "//chromeos/ash/components/human_presence:unit_tests", "//chromeos/ash/components/local_search_service:unit_tests",
diff --git a/chromeos/ash/components/browser_context_helper/BUILD.gn b/chromeos/ash/components/browser_context_helper/BUILD.gn new file mode 100644 index 0000000..0f84d07 --- /dev/null +++ b/chromeos/ash/components/browser_context_helper/BUILD.gn
@@ -0,0 +1,29 @@ +# Copyright 2022 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/chromeos/ui_mode.gni") + +assert(is_chromeos_ash, "Non ChromeOS builds must not depend on //chromeos/ash") + +component("browser_context_helper") { + defines = [ "IS_ASH_BROWSER_CONTEXT_HELPER_IMPL" ] + deps = [ + "//base", + "//content/public/browser", + ] + sources = [ + "browser_context_helper.cc", + "browser_context_helper.h", + ] +} + +source_set("unit_tests") { + testonly = true + deps = [ + ":browser_context_helper", + "//base/test:test_support", + "//content/test:test_support", + ] + sources = [ "browser_context_helper_unittest.cc" ] +}
diff --git a/chromeos/ash/components/browser_context_helper/DEPS b/chromeos/ash/components/browser_context_helper/DEPS new file mode 100644 index 0000000..5b60c97 --- /dev/null +++ b/chromeos/ash/components/browser_context_helper/DEPS
@@ -0,0 +1,8 @@ +# These deps should be only the required deps for +# //chromeos/ash/components/browser_context_helper. +include_rules = [ + "+content/public/browser/browser_context.h", + + # For testing. + "+content/public/test", +]
diff --git a/chromeos/ash/components/browser_context_helper/OWNERS b/chromeos/ash/components/browser_context_helper/OWNERS new file mode 100644 index 0000000..84f5c17 --- /dev/null +++ b/chromeos/ash/components/browser_context_helper/OWNERS
@@ -0,0 +1,2 @@ +hidehiko@chromium.org +oshima@chromium.org
diff --git a/chromeos/ash/components/browser_context_helper/browser_context_helper.cc b/chromeos/ash/components/browser_context_helper/browser_context_helper.cc new file mode 100644 index 0000000..f0597c7 --- /dev/null +++ b/chromeos/ash/components/browser_context_helper/browser_context_helper.cc
@@ -0,0 +1,69 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chromeos/ash/components/browser_context_helper/browser_context_helper.h" + +#include "base/check.h" +#include "base/strings/strcat.h" +#include "base/strings/string_util.h" +#include "content/public/browser/browser_context.h" + +namespace ash { +namespace { + +// Chrome OS profile directories have custom prefix. +// Profile path format: [user_data_dir]/u-[$hash] +// Ex.: /home/chronos/u-0123456789 +constexpr char kBrowserContextDirPrefix[] = "u-"; + +bool ShouldAddBrowserContextDirPrefix(base::StringPiece user_id_hash) { + // Do not add profile dir prefix for legacy profile dir and test + // user profile. The reason of not adding prefix for test user profile + // is to keep the promise that TestingProfile::kTestUserProfileDir and + // chrome::kTestUserProfileDir are always in sync. Otherwise, + // TestingProfile::kTestUserProfileDir needs to be dynamically calculated + // based on whether multi profile is enabled or not. + return user_id_hash != BrowserContextHelper::kLegacyBrowserContextDirName && + user_id_hash != BrowserContextHelper::kTestUserBrowserContextDirName; +} + +} // namespace + +// static +std::string BrowserContextHelper::GetUserIdHashFromBrowserContext( + content::BrowserContext* browser_context) { + if (!browser_context) + return std::string(); + + const std::string dir = browser_context->GetPath().BaseName().value(); + + // Don't strip prefix if the dir is not supposed to be prefixed. + if (!ShouldAddBrowserContextDirPrefix(dir)) + return dir; + + if (!base::StartsWith(dir, kBrowserContextDirPrefix, + base::CompareCase::SENSITIVE)) { + // This happens when creating a TestingProfile in browser_tests. + return std::string(); + } + + return dir.substr(base::StringPiece(kBrowserContextDirPrefix).length()); +} + +// static +const char BrowserContextHelper::kLegacyBrowserContextDirName[] = "user"; + +// static +const char BrowserContextHelper::kTestUserBrowserContextDirName[] = "test-user"; + +// static +std::string BrowserContextHelper::GetUserBrowserContextDirName( + base::StringPiece user_id_hash) { + CHECK(!user_id_hash.empty()); + return ShouldAddBrowserContextDirPrefix(user_id_hash) + ? base::StrCat({kBrowserContextDirPrefix, user_id_hash}) + : std::string(user_id_hash); +} + +} // namespace ash
diff --git a/chromeos/ash/components/browser_context_helper/browser_context_helper.h b/chromeos/ash/components/browser_context_helper/browser_context_helper.h new file mode 100644 index 0000000..6dd19a6 --- /dev/null +++ b/chromeos/ash/components/browser_context_helper/browser_context_helper.h
@@ -0,0 +1,45 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef CHROMEOS_ASH_COMPONENTS_BROWSER_CONTEXT_HELPER_BROWSER_CONTEXT_HELPER_H_ +#define CHROMEOS_ASH_COMPONENTS_BROWSER_CONTEXT_HELPER_BROWSER_CONTEXT_HELPER_H_ + +#include <string> + +#include "base/component_export.h" +#include "base/files/file_path.h" +#include "base/strings/string_piece.h" + +namespace content { +class BrowserContext; +} // namespace content + +namespace ash { + +// This helper class is used to keep tracking the relationship between User +// and BrowserContext (a.k.a. Profile). +class COMPONENT_EXPORT(ASH_BROWSER_CONTEXT_HELPER) BrowserContextHelper { + public: + // TODO(crbug.com/1325210): Currently, static methods only. + // Support ctor/dtor when instance of this class is needed. + + // Returns user id hash for |browser_context|, or empty string if the hash + // could not be extracted from the |browser_context|. + static std::string GetUserIdHashFromBrowserContext( + content::BrowserContext* browser_context); + + // Legacy profile dir that was used when only one cryptohome has been mounted. + static const char kLegacyBrowserContextDirName[]; + + // This must be kept in sync with TestingProfile::kTestUserProfileDir. + static const char kTestUserBrowserContextDirName[]; + + // Returns user browser context dir in a format of "u-${user_id_hash}". + static std::string GetUserBrowserContextDirName( + base::StringPiece user_id_hash); +}; + +} // namespace ash + +#endif // CHROMEOS_ASH_COMPONENTS_BROWSER_CONTEXT_HELPER_BROWSER_CONTEXT_HELPER_H_
diff --git a/chromeos/ash/components/browser_context_helper/browser_context_helper_unittest.cc b/chromeos/ash/components/browser_context_helper/browser_context_helper_unittest.cc new file mode 100644 index 0000000..76d14f2 --- /dev/null +++ b/chromeos/ash/components/browser_context_helper/browser_context_helper_unittest.cc
@@ -0,0 +1,73 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chromeos/ash/components/browser_context_helper/browser_context_helper.h" + +#include "base/files/file_path.h" +#include "content/public/test/browser_task_environment.h" +#include "content/public/test/test_browser_context.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace ash { + +class BrowserContextHelperTest : public testing::Test { + public: + BrowserContextHelperTest() = default; + ~BrowserContextHelperTest() override = default; + + private: + // Sets up fake UI thread, required by TestBrowserContext. + content::BrowserTaskEnvironment env_; +}; + +TEST_F(BrowserContextHelperTest, GetUserIdHashFromBrowserContext) { + // If nullptr is passed, returns an error. + EXPECT_EQ("", BrowserContextHelper::GetUserIdHashFromBrowserContext(nullptr)); + + constexpr struct { + const char* expect; + const char* path; + } kTestData[] = { + // Regular case. Use relative path, as temporary directory is created + // there. + {"abcde123456", "home/chronos/u-abcde123456"}, + + // Special case for legacy path. + {"user", "home/chronos/user"}, + + // Special case for testing profile. + {"test-user", "home/chronos/test-user"}, + + // Error case. Data directory must start with "u-". + {"", "abcde123456"}, + }; + for (const auto& test_case : kTestData) { + content::TestBrowserContext context(base::FilePath(test_case.path)); + EXPECT_EQ(test_case.expect, + BrowserContextHelper::GetUserIdHashFromBrowserContext(&context)); + } +} + +TEST_F(BrowserContextHelperTest, GetUserBrowserContextDirName) { + constexpr struct { + const char* expect; + const char* user_id_hash; + } kTestData[] = { + // Regular case. + {"u-abcde123456", "abcde123456"}, + + // Special case for the legacy path. + {"user", "user"}, + + // Special case for testing. + {"test-user", "test-user"}, + }; + for (const auto& test_case : kTestData) { + EXPECT_EQ(test_case.expect, + BrowserContextHelper::GetUserBrowserContextDirName( + test_case.user_id_hash)); + } +} + +} // namespace ash
diff --git a/chromeos/components/quick_answers/search_result_parsers/search_response_parser.cc b/chromeos/components/quick_answers/search_result_parsers/search_response_parser.cc index 3cb104d..560b5aa9 100644 --- a/chromeos/components/quick_answers/search_result_parsers/search_response_parser.cc +++ b/chromeos/components/quick_answers/search_result_parsers/search_response_parser.cc
@@ -49,14 +49,14 @@ data_decoder::DataDecoder::ValueOrError result) { DCHECK(complete_callback_); - if (!result.value) { - LOG(ERROR) << "JSON parsing failed: " << *result.error; + if (!result.has_value()) { + LOG(ERROR) << "JSON parsing failed: " << result.error(); std::move(complete_callback_).Run(nullptr); return; } // Get the first result. - const Value* entries = result.value->FindListPath("results"); + const Value* entries = result->FindListPath("results"); if (!entries) { std::move(complete_callback_).Run(nullptr); return;
diff --git a/chromeos/components/quick_answers/translation_response_parser.cc b/chromeos/components/quick_answers/translation_response_parser.cc index 48215bf..52c497b2 100644 --- a/chromeos/components/quick_answers/translation_response_parser.cc +++ b/chromeos/components/quick_answers/translation_response_parser.cc
@@ -36,13 +36,13 @@ data_decoder::DataDecoder::ValueOrError result) { DCHECK(complete_callback_); - if (!result.value) { - LOG(ERROR) << "JSON parsing failed: " << *result.error; + if (!result.has_value()) { + LOG(ERROR) << "JSON parsing failed: " << result.error(); std::move(complete_callback_).Run(nullptr); return; } - auto* translations = result.value->FindListPath("data.translations"); + auto* translations = result->FindListPath("data.translations"); if (!translations) { LOG(ERROR) << "Can't find translations result list."; std::move(complete_callback_).Run(nullptr);
diff --git a/chromeos/crosapi/mojom/crosapi.mojom b/chromeos/crosapi/mojom/crosapi.mojom index db10eec..3570e5f8 100644 --- a/chromeos/crosapi/mojom/crosapi.mojom +++ b/chromeos/crosapi/mojom/crosapi.mojom
@@ -670,7 +670,7 @@ // mounted. For example, /media/fuse/crostini_<hash>_termina_penguin. [MinVersion=31] mojo_base.mojom.FilePath? linux_files@6; - // The (non-coniggurable) directory for ash resources. For example, + // The (non-configurable) directory for ash resources. For example, // /opt/google/chrome. [MinVersion=32] mojo_base.mojom.FilePath? ash_resources@7;
diff --git a/chromeos/strings/chromeos_strings_as.xtb b/chromeos/strings/chromeos_strings_as.xtb index f6f508f4..cf9d9bb 100644 --- a/chromeos/strings/chromeos_strings_as.xtb +++ b/chromeos/strings/chromeos_strings_as.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">আৰম্ভ কৰা হোৱা নাই</translation> <translation id="8620617069779373398">ৰ’মিঙৰ স্থিতি</translation> <translation id="8655295600908251630">চেনেল</translation> +<translation id="8655828773034788261">URL শ্বেয়াৰ কৰক:</translation> <translation id="8660881923941176839">পাউণ্ড</translation> <translation id="8662671328352114214"><ph name="TYPE" /> নেটৱর্কত যোগদান কৰক</translation> <translation id="8671972493856476349"><ph name="VERSION_NUMBER" />লৈ আপডে’ট কৰক আৰু ৰিষ্টাৰ্ট কৰক</translation>
diff --git a/chromeos/strings/chromeos_strings_ca.xtb b/chromeos/strings/chromeos_strings_ca.xtb index a0007e7..684ba5f 100644 --- a/chromeos/strings/chromeos_strings_ca.xtb +++ b/chromeos/strings/chromeos_strings_ca.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">No s'ha inicialitzat</translation> <translation id="8620617069779373398">Estat d'itinerància</translation> <translation id="8655295600908251630">Canal</translation> +<translation id="8655828773034788261">Comparteix l'URL:</translation> <translation id="8660881923941176839">lliures</translation> <translation id="8662671328352114214">Connecta't a una xarxa <ph name="TYPE" /></translation> <translation id="8671972493856476349">Actualitza a <ph name="VERSION_NUMBER" /> i reinicia</translation>
diff --git a/chromeos/strings/chromeos_strings_cs.xtb b/chromeos/strings/chromeos_strings_cs.xtb index df3dde9..19abeb6 100644 --- a/chromeos/strings/chromeos_strings_cs.xtb +++ b/chromeos/strings/chromeos_strings_cs.xtb
@@ -769,7 +769,7 @@ <translation id="7701040980221191251">Žádné</translation> <translation id="7705524343798198388">VPN</translation> <translation id="773153675489693198">Počet cyklů</translation> -<translation id="7747039790905080783">Předsdílený klíč</translation> +<translation id="7747039790905080783">Předem sdílený klíč</translation> <translation id="7762130827864645708">Změna hesla byla úspěšná. Odteď používejte nové heslo.</translation> <translation id="7762839321248874531">Odesílat <ph name="BEGIN_LINK1" />informace o systému a aplikacích<ph name="END_LINK1" /> a <ph name="BEGIN_LINK2" />metriky<ph name="END_LINK2" /></translation> <translation id="7763470514545477072">Shoda přípon domén</translation> @@ -865,10 +865,11 @@ <translation id="8576249514688522074">Neinicializováno</translation> <translation id="8620617069779373398">Stav roamingu</translation> <translation id="8655295600908251630">Kanál</translation> +<translation id="8655828773034788261">Sdílet adresu URL:</translation> <translation id="8660881923941176839">libry</translation> <translation id="8662671328352114214">Připojení k síti <ph name="TYPE" /></translation> <translation id="8671972493856476349">Aktualizovat na verzi <ph name="VERSION_NUMBER" /> a restartovat</translation> -<translation id="8675354002693747642">Předsdílený klíč</translation> +<translation id="8675354002693747642">Předem sdílený klíč</translation> <translation id="8677859815076891398">Žádná alba. Vytvořte album ve <ph name="LINK_BEGIN" />Fotkách Google<ph name="LINK_END" />.</translation> <translation id="8680431479333800907">Zařízení zůstane stejnému uživateli</translation> <translation id="8709616837707653427"><ph name="DESC_TEXT" /> Tuto funkci můžete spravovat šipkami doleva nebo doprava.</translation>
diff --git a/chromeos/strings/chromeos_strings_cy.xtb b/chromeos/strings/chromeos_strings_cy.xtb index d2b30a7..3dea247 100644 --- a/chromeos/strings/chromeos_strings_cy.xtb +++ b/chromeos/strings/chromeos_strings_cy.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">Heb ei gychwyn</translation> <translation id="8620617069779373398">Statws crwydro</translation> <translation id="8655295600908251630">Sianel</translation> +<translation id="8655828773034788261">Rhannu URL:</translation> <translation id="8660881923941176839">pwysau</translation> <translation id="8662671328352114214">Ymuno â rhwydwaith <ph name="TYPE" /></translation> <translation id="8671972493856476349">Diweddaru i <ph name="VERSION_NUMBER" /> ac ailgychwyn</translation>
diff --git a/chromeos/strings/chromeos_strings_da.xtb b/chromeos/strings/chromeos_strings_da.xtb index 07fff97..82151b4 100644 --- a/chromeos/strings/chromeos_strings_da.xtb +++ b/chromeos/strings/chromeos_strings_da.xtb
@@ -864,6 +864,7 @@ <translation id="8576249514688522074">Ikke startet</translation> <translation id="8620617069779373398">Roamingstatus</translation> <translation id="8655295600908251630">Kanal</translation> +<translation id="8655828773034788261">Del webadresse:</translation> <translation id="8660881923941176839">pund</translation> <translation id="8662671328352114214">Opret forbindelse til <ph name="TYPE" />-netværk</translation> <translation id="8671972493856476349">Opdater til <ph name="VERSION_NUMBER" />, og genstart</translation>
diff --git a/chromeos/strings/chromeos_strings_es.xtb b/chromeos/strings/chromeos_strings_es.xtb index e25499bb..9603b0a8 100644 --- a/chromeos/strings/chromeos_strings_es.xtb +++ b/chromeos/strings/chromeos_strings_es.xtb
@@ -864,6 +864,7 @@ <translation id="8576249514688522074">No inicializado</translation> <translation id="8620617069779373398">Estado de roaming</translation> <translation id="8655295600908251630">Canal</translation> +<translation id="8655828773034788261">Compartir URL:</translation> <translation id="8660881923941176839">libras</translation> <translation id="8662671328352114214">Unirse a la red <ph name="TYPE" /></translation> <translation id="8671972493856476349">Actualizar a <ph name="VERSION_NUMBER" /> y reiniciar</translation>
diff --git a/chromeos/strings/chromeos_strings_et.xtb b/chromeos/strings/chromeos_strings_et.xtb index 17232f6..d7bc3c1 100644 --- a/chromeos/strings/chromeos_strings_et.xtb +++ b/chromeos/strings/chromeos_strings_et.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">Lähtestamata</translation> <translation id="8620617069779373398">Rändluse olek</translation> <translation id="8655295600908251630">Kanal</translation> +<translation id="8655828773034788261">Jaga URL:</translation> <translation id="8660881923941176839">naela</translation> <translation id="8662671328352114214"><ph name="TYPE" />-võrguga liitumine</translation> <translation id="8671972493856476349">Värskenda versioonile <ph name="VERSION_NUMBER" /> ja taaskäivita</translation>
diff --git a/chromeos/strings/chromeos_strings_eu.xtb b/chromeos/strings/chromeos_strings_eu.xtb index 5327482..47ffbc35 100644 --- a/chromeos/strings/chromeos_strings_eu.xtb +++ b/chromeos/strings/chromeos_strings_eu.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">Hasieratu gabe</translation> <translation id="8620617069779373398">Ibiltaritza-egoera</translation> <translation id="8655295600908251630">Kanala</translation> +<translation id="8655828773034788261">Partekatzeko URLa:</translation> <translation id="8660881923941176839">libra</translation> <translation id="8662671328352114214">Sartu <ph name="TYPE" /> sarean</translation> <translation id="8671972493856476349">Eguneratu <ph name="VERSION_NUMBER" /> bertsiora eta berrabiarazi gailua</translation>
diff --git a/chromeos/strings/chromeos_strings_fi.xtb b/chromeos/strings/chromeos_strings_fi.xtb index a1839a9..9934e547 100644 --- a/chromeos/strings/chromeos_strings_fi.xtb +++ b/chromeos/strings/chromeos_strings_fi.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">Ei ole alustettu</translation> <translation id="8620617069779373398">Roaming-tila</translation> <translation id="8655295600908251630">Kanava</translation> +<translation id="8655828773034788261">Jaa URL-osoite:</translation> <translation id="8660881923941176839">paunaa</translation> <translation id="8662671328352114214">Liity <ph name="TYPE" />-verkkoon</translation> <translation id="8671972493856476349">Päivitä versioon <ph name="VERSION_NUMBER" /> ja käynnistä uudelleen</translation>
diff --git a/chromeos/strings/chromeos_strings_fil.xtb b/chromeos/strings/chromeos_strings_fil.xtb index 727df7d..94e977f 100644 --- a/chromeos/strings/chromeos_strings_fil.xtb +++ b/chromeos/strings/chromeos_strings_fil.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">Hindi Nasimulan</translation> <translation id="8620617069779373398">Status ng roaming</translation> <translation id="8655295600908251630">Channel</translation> +<translation id="8655828773034788261">Ibahagi ang URL:</translation> <translation id="8660881923941176839">pounds</translation> <translation id="8662671328352114214">Sumali sa <ph name="TYPE" /> network</translation> <translation id="8671972493856476349">Mag-update sa <ph name="VERSION_NUMBER" /> at mag-restart</translation>
diff --git a/chromeos/strings/chromeos_strings_gu.xtb b/chromeos/strings/chromeos_strings_gu.xtb index a7902ce..298751d 100644 --- a/chromeos/strings/chromeos_strings_gu.xtb +++ b/chromeos/strings/chromeos_strings_gu.xtb
@@ -864,6 +864,7 @@ <translation id="8576249514688522074">શરૂ કરી નથી</translation> <translation id="8620617069779373398">રોમિંગ સ્થિતિ</translation> <translation id="8655295600908251630">ચેનલ</translation> +<translation id="8655828773034788261">URL શેર કરો:</translation> <translation id="8660881923941176839">પાઉન્ડ</translation> <translation id="8662671328352114214"><ph name="TYPE" /> નેટવર્કમાં જોડાઓ</translation> <translation id="8671972493856476349"><ph name="VERSION_NUMBER" /> પર અપડેટ કરીને ફરી શરૂ કરો</translation>
diff --git a/chromeos/strings/chromeos_strings_hu.xtb b/chromeos/strings/chromeos_strings_hu.xtb index be50a5b..13509b5 100644 --- a/chromeos/strings/chromeos_strings_hu.xtb +++ b/chromeos/strings/chromeos_strings_hu.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">Nincs inicializálva</translation> <translation id="8620617069779373398">Roaming állapota</translation> <translation id="8655295600908251630">Csatorna</translation> +<translation id="8655828773034788261">URL megosztása:</translation> <translation id="8660881923941176839">font</translation> <translation id="8662671328352114214">Csatlakozás <ph name="TYPE" />-hálózatra</translation> <translation id="8671972493856476349">Frissítés a következő verzióra, és újraindítás: <ph name="VERSION_NUMBER" /></translation>
diff --git a/chromeos/strings/chromeos_strings_hy.xtb b/chromeos/strings/chromeos_strings_hy.xtb index a843fc8..8d7b284a 100644 --- a/chromeos/strings/chromeos_strings_hy.xtb +++ b/chromeos/strings/chromeos_strings_hy.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">Սկզբնավորված չէ</translation> <translation id="8620617069779373398">Ռոումինգի կարգավիճակը</translation> <translation id="8655295600908251630">Վարկած</translation> +<translation id="8655828773034788261">Կիսվել URL-ով՝</translation> <translation id="8660881923941176839">ֆունտ</translation> <translation id="8662671328352114214">Նոր <ph name="TYPE" /> ցանց</translation> <translation id="8671972493856476349">Տեղադրել <ph name="VERSION_NUMBER" /> տարբերակը և վերագործարկել</translation>
diff --git a/chromeos/strings/chromeos_strings_id.xtb b/chromeos/strings/chromeos_strings_id.xtb index 771dfd2..41b05c6 100644 --- a/chromeos/strings/chromeos_strings_id.xtb +++ b/chromeos/strings/chromeos_strings_id.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">Tidak diinisialisasi</translation> <translation id="8620617069779373398">Status roaming</translation> <translation id="8655295600908251630">Saluran</translation> +<translation id="8655828773034788261">Bagikan URL:</translation> <translation id="8660881923941176839">pound</translation> <translation id="8662671328352114214">Bergabung dengan jaringan <ph name="TYPE" /></translation> <translation id="8671972493856476349">Update ke <ph name="VERSION_NUMBER" /> & mulai ulang</translation>
diff --git a/chromeos/strings/chromeos_strings_ja.xtb b/chromeos/strings/chromeos_strings_ja.xtb index 6f665b8..af19118 100644 --- a/chromeos/strings/chromeos_strings_ja.xtb +++ b/chromeos/strings/chromeos_strings_ja.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">初期化が未完了</translation> <translation id="8620617069779373398">ローミング状態</translation> <translation id="8655295600908251630">チャンネル</translation> +<translation id="8655828773034788261">URL を共有:</translation> <translation id="8660881923941176839">ポンド</translation> <translation id="8662671328352114214"><ph name="TYPE" /> ネットワークへの接続</translation> <translation id="8671972493856476349"><ph name="VERSION_NUMBER" /> に更新して再起動</translation>
diff --git a/chromeos/strings/chromeos_strings_kk.xtb b/chromeos/strings/chromeos_strings_kk.xtb index a5834ae..5be7971 100644 --- a/chromeos/strings/chromeos_strings_kk.xtb +++ b/chromeos/strings/chromeos_strings_kk.xtb
@@ -864,6 +864,7 @@ <translation id="8576249514688522074">Бастаудан бас тартылды</translation> <translation id="8620617069779373398">Роуминг күйі</translation> <translation id="8655295600908251630">Арна</translation> +<translation id="8655828773034788261">URL мекенжайын бөлісу:</translation> <translation id="8660881923941176839">фунт</translation> <translation id="8662671328352114214"><ph name="TYPE" /> желісіне қосылу</translation> <translation id="8671972493856476349"><ph name="VERSION_NUMBER" /> нұсқасына жаңарту және өшіріп қосу</translation>
diff --git a/chromeos/strings/chromeos_strings_ko.xtb b/chromeos/strings/chromeos_strings_ko.xtb index 9e791a5..d1135b6 100644 --- a/chromeos/strings/chromeos_strings_ko.xtb +++ b/chromeos/strings/chromeos_strings_ko.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">초기화되지 않음</translation> <translation id="8620617069779373398">로밍 상태</translation> <translation id="8655295600908251630">채널</translation> +<translation id="8655828773034788261">공유 URL:</translation> <translation id="8660881923941176839">파운드</translation> <translation id="8662671328352114214"><ph name="TYPE" /> 네트워크에 연결</translation> <translation id="8671972493856476349"><ph name="VERSION_NUMBER" />로 업데이트 및 다시 시작</translation>
diff --git a/chromeos/strings/chromeos_strings_ms.xtb b/chromeos/strings/chromeos_strings_ms.xtb index d6a56ff49..4b4ec06 100644 --- a/chromeos/strings/chromeos_strings_ms.xtb +++ b/chromeos/strings/chromeos_strings_ms.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">Tidak diasalkan</translation> <translation id="8620617069779373398">Status perayauan</translation> <translation id="8655295600908251630">Saluran</translation> +<translation id="8655828773034788261">Kongsi URL:</translation> <translation id="8660881923941176839">paun</translation> <translation id="8662671328352114214">Sertai rangkaian <ph name="TYPE" /></translation> <translation id="8671972493856476349">Kemas kini <ph name="VERSION_NUMBER" /> & mulakan semula</translation>
diff --git a/chromeos/strings/chromeos_strings_ne.xtb b/chromeos/strings/chromeos_strings_ne.xtb index 98999b7..7004802 100644 --- a/chromeos/strings/chromeos_strings_ne.xtb +++ b/chromeos/strings/chromeos_strings_ne.xtb
@@ -864,6 +864,7 @@ <translation id="8576249514688522074">सुरु गरिएको छैन</translation> <translation id="8620617069779373398">रोमिङको स्थिति</translation> <translation id="8655295600908251630">च्यानल</translation> +<translation id="8655828773034788261">URL सेयर गर्नुहोस्:</translation> <translation id="8660881923941176839">पाउन्ड</translation> <translation id="8662671328352114214"><ph name="TYPE" /> नेटवर्कमा सामेल हुनुहोस्</translation> <translation id="8671972493856476349">अपडेट गरी <ph name="VERSION_NUMBER" /> बनाउनुहोस् र रिस्टार्ट गर्नुहोस्</translation>
diff --git a/chromeos/strings/chromeos_strings_no.xtb b/chromeos/strings/chromeos_strings_no.xtb index 64a6029..8a30be4 100644 --- a/chromeos/strings/chromeos_strings_no.xtb +++ b/chromeos/strings/chromeos_strings_no.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">Ikke initialisert</translation> <translation id="8620617069779373398">Status for roaming</translation> <translation id="8655295600908251630">Kanal</translation> +<translation id="8655828773034788261">Del nettadressen:</translation> <translation id="8660881923941176839">pund</translation> <translation id="8662671328352114214">Koble til <ph name="TYPE" />-nettverket</translation> <translation id="8671972493856476349">Oppdater til <ph name="VERSION_NUMBER" /> og start på nytt</translation>
diff --git a/chromeos/strings/chromeos_strings_or.xtb b/chromeos/strings/chromeos_strings_or.xtb index 57c4357..8783f19 100644 --- a/chromeos/strings/chromeos_strings_or.xtb +++ b/chromeos/strings/chromeos_strings_or.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">ଆରମ୍ଭ କରାଯାଇନାହିଁ</translation> <translation id="8620617069779373398">ରୋମିଂ ସ୍ଥିତି</translation> <translation id="8655295600908251630">ଚ୍ୟାନେଲ୍</translation> +<translation id="8655828773034788261">URL ସେୟାର କରନ୍ତୁ:</translation> <translation id="8660881923941176839">ପାଉଣ୍ଡ</translation> <translation id="8662671328352114214"><ph name="TYPE" />ନେଟ୍ୱର୍କରେ ଯୋଗ ଦିଅନ୍ତୁ</translation> <translation id="8671972493856476349"><ph name="VERSION_NUMBER" />ରେ ଅପଡେଟ କରି ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ</translation>
diff --git a/chromeos/strings/chromeos_strings_pa.xtb b/chromeos/strings/chromeos_strings_pa.xtb index 067fa32..2e84e9e 100644 --- a/chromeos/strings/chromeos_strings_pa.xtb +++ b/chromeos/strings/chromeos_strings_pa.xtb
@@ -864,6 +864,7 @@ <translation id="8576249514688522074">ਸ਼ੁਰੂ ਨਹੀਂ ਕੀਤਾ ਗਿਆ</translation> <translation id="8620617069779373398">ਰੋਮਿੰਗ ਅਵਸਥਾ</translation> <translation id="8655295600908251630">ਚੈਨਲ</translation> +<translation id="8655828773034788261">URL ਸਾਂਝਾ ਕਰੋ:</translation> <translation id="8660881923941176839">ਪੌਂਡ</translation> <translation id="8662671328352114214"><ph name="TYPE" /> ਨੈੱਟਵਰਕ ਵਿੱਚ ਸ਼ਾਮਲ ਹੋਵੋ</translation> <translation id="8671972493856476349"><ph name="VERSION_NUMBER" /> ਵਿੱਚ ਅੱਪਡੇਟ ਕਰ ਕੇ ਮੁੜ-ਸ਼ੁਰੂ ਕਰੋ</translation>
diff --git a/chromeos/strings/chromeos_strings_pl.xtb b/chromeos/strings/chromeos_strings_pl.xtb index a531b5a..35aa7c199 100644 --- a/chromeos/strings/chromeos_strings_pl.xtb +++ b/chromeos/strings/chromeos_strings_pl.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">Nie zainicjowano</translation> <translation id="8620617069779373398">Stan roamingu</translation> <translation id="8655295600908251630">Kanał</translation> +<translation id="8655828773034788261">Udostępnij adres URL:</translation> <translation id="8660881923941176839">funty</translation> <translation id="8662671328352114214">Połącz z siecią <ph name="TYPE" /></translation> <translation id="8671972493856476349">Zaktualizuj do wersji <ph name="VERSION_NUMBER" /> i uruchom ponownie urządzenie</translation>
diff --git a/chromeos/strings/chromeos_strings_pt-BR.xtb b/chromeos/strings/chromeos_strings_pt-BR.xtb index 8c4677a..ed4717f 100644 --- a/chromeos/strings/chromeos_strings_pt-BR.xtb +++ b/chromeos/strings/chromeos_strings_pt-BR.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">Não inicializado</translation> <translation id="8620617069779373398">Status do roaming</translation> <translation id="8655295600908251630">Canal</translation> +<translation id="8655828773034788261">Compartilhar URL:</translation> <translation id="8660881923941176839">libras</translation> <translation id="8662671328352114214">Entrar na rede <ph name="TYPE" /></translation> <translation id="8671972493856476349">Atualizar para a versão <ph name="VERSION_NUMBER" /> e reiniciar</translation>
diff --git a/chromeos/strings/chromeos_strings_sk.xtb b/chromeos/strings/chromeos_strings_sk.xtb index 366141d..fbb0683f 100644 --- a/chromeos/strings/chromeos_strings_sk.xtb +++ b/chromeos/strings/chromeos_strings_sk.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">Nespustené</translation> <translation id="8620617069779373398">Stav roamingu</translation> <translation id="8655295600908251630">Kanál</translation> +<translation id="8655828773034788261">Webová adresa zdieľania:</translation> <translation id="8660881923941176839">libry</translation> <translation id="8662671328352114214">Pridanie sa k sieti <ph name="TYPE" /></translation> <translation id="8671972493856476349">Aktualizovať na verziu <ph name="VERSION_NUMBER" /> a reštartovať</translation>
diff --git a/chromeos/strings/chromeos_strings_sl.xtb b/chromeos/strings/chromeos_strings_sl.xtb index e7f057c7..59a1c0a 100644 --- a/chromeos/strings/chromeos_strings_sl.xtb +++ b/chromeos/strings/chromeos_strings_sl.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">Neinicializirano</translation> <translation id="8620617069779373398">Stanje gostovanja</translation> <translation id="8655295600908251630">Kanal</translation> +<translation id="8655828773034788261">Deljenje URL-ja:</translation> <translation id="8660881923941176839">funti</translation> <translation id="8662671328352114214">Pridružitev omrežju <ph name="TYPE" /></translation> <translation id="8671972493856476349">Posodobi na različico <ph name="VERSION_NUMBER" /> in zaženi znova</translation>
diff --git a/chromeos/strings/chromeos_strings_ta.xtb b/chromeos/strings/chromeos_strings_ta.xtb index 6ffa519..d00d952 100644 --- a/chromeos/strings/chromeos_strings_ta.xtb +++ b/chromeos/strings/chromeos_strings_ta.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">ஆரம்பிக்கப்படவில்லை</translation> <translation id="8620617069779373398">ரோமிங் நிலை</translation> <translation id="8655295600908251630">சேனல்</translation> +<translation id="8655828773034788261">இந்த URLலைப் பகிர்:</translation> <translation id="8660881923941176839">பவுண்டுகள்</translation> <translation id="8662671328352114214"><ph name="TYPE" /> நெட்வொர்க்கில் சேர்தல்</translation> <translation id="8671972493856476349"><ph name="VERSION_NUMBER" /> பதிப்பிற்குப் புதுப்பித்து மீண்டும் தொடங்கு</translation>
diff --git a/chromeos/strings/chromeos_strings_te.xtb b/chromeos/strings/chromeos_strings_te.xtb index e796ccfd..950e437 100644 --- a/chromeos/strings/chromeos_strings_te.xtb +++ b/chromeos/strings/chromeos_strings_te.xtb
@@ -864,6 +864,7 @@ <translation id="8576249514688522074">ప్రారంభం కాలేదు</translation> <translation id="8620617069779373398">రోమింగ్ స్థితి</translation> <translation id="8655295600908251630">ఛానల్</translation> +<translation id="8655828773034788261">URLను షేర్ చేయండి:</translation> <translation id="8660881923941176839">పౌండ్లు</translation> <translation id="8662671328352114214"><ph name="TYPE" /> నెట్వర్క్లో చేరండి</translation> <translation id="8671972493856476349"><ph name="VERSION_NUMBER" />కు అప్డేట్ చేసి & రీస్టార్ట్ చేయండి</translation>
diff --git a/chromeos/strings/chromeos_strings_ur.xtb b/chromeos/strings/chromeos_strings_ur.xtb index 163d4cb2..2712fd7d 100644 --- a/chromeos/strings/chromeos_strings_ur.xtb +++ b/chromeos/strings/chromeos_strings_ur.xtb
@@ -864,6 +864,7 @@ <translation id="8576249514688522074">شروع نہیں کیا گیا</translation> <translation id="8620617069779373398">رومنگ کی صورتحال</translation> <translation id="8655295600908251630">چینل</translation> +<translation id="8655828773034788261">URL کا اشتراک کریں:</translation> <translation id="8660881923941176839">پاؤنڈز</translation> <translation id="8662671328352114214"><ph name="TYPE" /> نیٹ ورک میں شامل ہوں</translation> <translation id="8671972493856476349"><ph name="VERSION_NUMBER" /> میں اپ ڈیٹ کریں اور ری سٹارٹ کریں</translation>
diff --git a/chromeos/strings/chromeos_strings_vi.xtb b/chromeos/strings/chromeos_strings_vi.xtb index 83fad4e..b62fb6c 100644 --- a/chromeos/strings/chromeos_strings_vi.xtb +++ b/chromeos/strings/chromeos_strings_vi.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">Chưa khởi chạy</translation> <translation id="8620617069779373398">Trạng thái chuyển vùng</translation> <translation id="8655295600908251630">Kênh</translation> +<translation id="8655828773034788261">Chia sẻ URL:</translation> <translation id="8660881923941176839">pao</translation> <translation id="8662671328352114214">Kết nối mạng <ph name="TYPE" /></translation> <translation id="8671972493856476349">Cập nhật lên <ph name="VERSION_NUMBER" /> rồi khởi động lại</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-CN.xtb b/chromeos/strings/chromeos_strings_zh-CN.xtb index 2c8976a..47b6ed6 100644 --- a/chromeos/strings/chromeos_strings_zh-CN.xtb +++ b/chromeos/strings/chromeos_strings_zh-CN.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">未初始化</translation> <translation id="8620617069779373398">漫游状态</translation> <translation id="8655295600908251630">版本</translation> +<translation id="8655828773034788261">分享网址:</translation> <translation id="8660881923941176839">磅</translation> <translation id="8662671328352114214">加入<ph name="TYPE" />网络</translation> <translation id="8671972493856476349">更新至 <ph name="VERSION_NUMBER" /> 并重启</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-HK.xtb b/chromeos/strings/chromeos_strings_zh-HK.xtb index 5e9a3514..6f7ddca 100644 --- a/chromeos/strings/chromeos_strings_zh-HK.xtb +++ b/chromeos/strings/chromeos_strings_zh-HK.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">未初始化</translation> <translation id="8620617069779373398">漫遊狀態</translation> <translation id="8655295600908251630">版本</translation> +<translation id="8655828773034788261">分享網址:</translation> <translation id="8660881923941176839">磅</translation> <translation id="8662671328352114214">加入 <ph name="TYPE" /> 網絡</translation> <translation id="8671972493856476349">請更新至 <ph name="VERSION_NUMBER" /> 並重新啟動</translation>
diff --git a/chromeos/strings/chromeos_strings_zh-TW.xtb b/chromeos/strings/chromeos_strings_zh-TW.xtb index a275493..868c0858 100644 --- a/chromeos/strings/chromeos_strings_zh-TW.xtb +++ b/chromeos/strings/chromeos_strings_zh-TW.xtb
@@ -865,6 +865,7 @@ <translation id="8576249514688522074">未初始化</translation> <translation id="8620617069779373398">漫遊狀態</translation> <translation id="8655295600908251630">版本</translation> +<translation id="8655828773034788261">分享網址:</translation> <translation id="8660881923941176839">磅</translation> <translation id="8662671328352114214">加入 <ph name="TYPE" /> 網路</translation> <translation id="8671972493856476349">更新至 <ph name="VERSION_NUMBER" /> 並重新啟動</translation>
diff --git a/components/BUILD.gn b/components/BUILD.gn index 32c29cd97..414645f2 100644 --- a/components/BUILD.gn +++ b/components/BUILD.gn
@@ -562,6 +562,7 @@ deps += [ "//components/account_manager_core:unit_tests", "//components/arc/common:unit_tests", + "//components/reporting/health:unit_tests", ] }
diff --git a/components/account_manager_core/account_manager_facade_impl.cc b/components/account_manager_core/account_manager_facade_impl.cc index 91a21d2b..90ce3ff 100644 --- a/components/account_manager_core/account_manager_facade_impl.cc +++ b/components/account_manager_core/account_manager_facade_impl.cc
@@ -44,6 +44,8 @@ "AccountManager.MojoDisconnections.AccountManagerRemote"; const char kMojoDisconnectionsAccountManagerObserverReceiver[] = "AccountManager.MojoDisconnections.AccountManagerObserverReceiver"; +const char kMojoDisconnectionsAccountManagerAccessTokenFetcherRemote[] = + "AccountManager.MojoDisconnections.AccessTokenFetcherRemote"; void UnmarshalAccounts( base::OnceCallback<void(const std::vector<Account>&)> callback, @@ -149,7 +151,11 @@ AccessTokenFetcher(const AccessTokenFetcher&) = delete; AccessTokenFetcher& operator=(const AccessTokenFetcher&) = delete; - ~AccessTokenFetcher() override = default; + ~AccessTokenFetcher() override { + base::UmaHistogramCounts100( + kMojoDisconnectionsAccountManagerAccessTokenFetcherRemote, + num_remote_disconnections_); + } // Returns a closure, which marks `this` instance as ready for use. This // happens when `AccountManagerFacadeImpl`'s initialization sequence is @@ -160,10 +166,11 @@ } // Returns a closure which handles Mojo connection errors tied to Account - // Manager. - base::OnceClosure MojoDisconnectionClosure() { - return base::BindOnce(&AccessTokenFetcher::OnMojoError, - weak_factory_.GetWeakPtr()); + // Manager remote. + base::OnceClosure AccountManagerRemoteDisconnectionClosure() { + return base::BindOnce( + &AccessTokenFetcher::OnAccountManagerRemoteDisconnection, + weak_factory_.GetWeakPtr()); } // OAuth2AccessTokenFetcher override: @@ -206,13 +213,16 @@ weak_factory_.GetWeakPtr())); if (!is_remote_connected) { - OnMojoError(); + OnAccountManagerRemoteDisconnection(); } } void FetchAccessToken( mojo::PendingRemote<crosapi::mojom::AccessTokenFetcher> pending_remote) { access_token_fetcher_.Bind(std::move(pending_remote)); + access_token_fetcher_.set_disconnect_handler(base::BindOnce( + &AccessTokenFetcher::OnAccessTokenFetcherRemoteDisconnection, + weak_factory_.GetWeakPtr())); access_token_fetcher_->Start( scopes_, base::BindOnce(&AccessTokenFetcher::OnAccessTokenFetchComplete, weak_factory_.GetWeakPtr())); @@ -246,13 +256,22 @@ .build()); } - void OnMojoError() { + void OnAccountManagerRemoteDisconnection() { + FailPendingRequestWithServiceError("Mojo pipe disconnected"); + } + + void OnAccessTokenFetcherRemoteDisconnection() { + num_remote_disconnections_++; + LOG(ERROR) << "Access token fetcher remote disconnected"; + FailPendingRequestWithServiceError("Access token Mojo pipe disconnected"); + } + + void FailPendingRequestWithServiceError(const std::string& message) { if (!is_request_pending_) return; CancelRequest(); - FireOnGetTokenFailure( - GoogleServiceAuthError::FromServiceError("Mojo pipe disconnected")); + FireOnGetTokenFailure(GoogleServiceAuthError::FromServiceError(message)); } const raw_ptr<AccountManagerFacadeImpl> account_manager_facade_impl_; @@ -261,6 +280,8 @@ bool are_token_requests_allowed_ = false; bool is_request_pending_ = false; + // Number of Mojo pipe disconnections seen by `access_token_fetcher_`. + int num_remote_disconnections_ = 0; std::vector<std::string> scopes_; mojo::Remote<crosapi::mojom::AccessTokenFetcher> access_token_fetcher_; @@ -437,7 +458,8 @@ /*account_manager_facade_impl=*/this, account, oauth_consumer_name, consumer); RunAfterInitializationSequence(access_token_fetcher->UnblockTokenRequest()); - RunOnMojoDisconnection(access_token_fetcher->MojoDisconnectionClosure()); + RunOnAccountManagerRemoteDisconnection( + access_token_fetcher->AccountManagerRemoteDisconnectionClosure()); return std::move(access_token_fetcher); } @@ -577,13 +599,14 @@ } } -void AccountManagerFacadeImpl::RunOnMojoDisconnection( +void AccountManagerFacadeImpl::RunOnAccountManagerRemoteDisconnection( base::OnceClosure closure) { if (!account_manager_remote_) { std::move(closure).Run(); return; } - mojo_disconnection_handlers_.emplace_back(std::move(closure)); + account_manager_remote_disconnection_handlers_.emplace_back( + std::move(closure)); } void AccountManagerFacadeImpl::OnAccountManagerRemoteDisconnected() { @@ -591,10 +614,10 @@ LogMojoConnectionStats("Account Manager disconnected", num_remote_disconnections_, num_receiver_disconnections_); - for (auto& cb : mojo_disconnection_handlers_) { + for (auto& cb : account_manager_remote_disconnection_handlers_) { std::move(cb).Run(); } - mojo_disconnection_handlers_.clear(); + account_manager_remote_disconnection_handlers_.clear(); account_manager_remote_.reset(); }
diff --git a/components/account_manager_core/account_manager_facade_impl.h b/components/account_manager_core/account_manager_facade_impl.h index c5c3762..6bc5907c 100644 --- a/components/account_manager_core/account_manager_facade_impl.h +++ b/components/account_manager_core/account_manager_facade_impl.h
@@ -177,7 +177,7 @@ void RunAfterInitializationSequence(base::OnceClosure closure); // Runs `closure` if/when `account_manager_remote_` gets disconnected. - void RunOnMojoDisconnection(base::OnceClosure closure); + void RunOnAccountManagerRemoteDisconnection(base::OnceClosure closure); // Mojo disconnect handler for `account_manager_remote_`. void OnAccountManagerRemoteDisconnected(); @@ -200,7 +200,7 @@ bool is_initialized_ = false; std::vector<base::OnceClosure> initialization_callbacks_; - std::vector<base::OnceClosure> mojo_disconnection_handlers_; + std::vector<base::OnceClosure> account_manager_remote_disconnection_handlers_; mojo::Remote<crosapi::mojom::AccountManager> account_manager_remote_; std::unique_ptr<mojo::Receiver<crosapi::mojom::AccountManagerObserver>>
diff --git a/components/account_manager_core/account_manager_facade_impl_unittest.cc b/components/account_manager_core/account_manager_facade_impl_unittest.cc index dea7520..0167fed0c 100644 --- a/components/account_manager_core/account_manager_facade_impl_unittest.cc +++ b/components/account_manager_core/account_manager_facade_impl_unittest.cc
@@ -56,6 +56,8 @@ "AccountManager.MojoDisconnections.AccountManagerRemote"; constexpr char kMojoDisconnectionsAccountManagerObserverReceiver[] = "AccountManager.MojoDisconnections.AccountManagerObserverReceiver"; +constexpr char kMojoDisconnectionsAccountManagerAccessTokenFetcherRemote[] = + "AccountManager.MojoDisconnections.AccessTokenFetcherRemote"; void AccessTokenFetchSuccess( base::OnceCallback<void(crosapi::mojom::AccessTokenResultPtr)> callback) { @@ -89,6 +91,8 @@ receiver_.Bind(std::move(receiver)); } + void ResetReceiver() { receiver_.reset(); } + // crosapi::mojom::AccessTokenFetcher override. MOCK_METHOD(void, Start, @@ -797,4 +801,83 @@ kMojoDisconnectionsAccountManagerObserverReceiver)); } +TEST_F(AccountManagerFacadeImplTest, + HistogramsForZeroAccountManagerAccessTokenFetcherRemoteDisconnections) { + account_manager().SetIsInitialized(true); + std::unique_ptr<AccountManagerFacadeImpl> account_manager_facade = + CreateFacade(); + const Account account = CreateTestGaiaAccount(kTestAccountEmail); + + auto mock_access_token_fetcher = std::make_unique<MockAccessTokenFetcher>(); + EXPECT_CALL(*mock_access_token_fetcher.get(), Start(_, _)) + .WillOnce(WithArgs<1>(Invoke(&AccessTokenFetchSuccess))); + account_manager().SetMockAccessTokenFetcher( + std::move(mock_access_token_fetcher)); + + MockOAuthConsumer consumer; + EXPECT_CALL(consumer, + OnGetTokenSuccess( + Field(&OAuth2AccessTokenConsumer::TokenResponse::access_token, + Eq(kFakeAccessToken)))); + std::unique_ptr<OAuth2AccessTokenFetcher> access_token_fetcher = + account_manager_facade->CreateAccessTokenFetcher( + account.key, kFakeOAuthConsumerName, &consumer); + // Expect 0 disconnections in the default state. + EXPECT_EQ(0, histogram_tester().GetTotalSum( + kMojoDisconnectionsAccountManagerAccessTokenFetcherRemote)); + + access_token_fetcher->Start(kFakeClientId, kFakeClientSecret, /*scopes=*/{}); + // Flush all pending Mojo messages. + base::RunLoop().RunUntilIdle(); + // Reset the fetcher so that histograms get logged. + access_token_fetcher.reset(); + + // Expect 1 log - at the end of `account_manager_facade` destruction. + histogram_tester().ExpectTotalCount( + kMojoDisconnectionsAccountManagerAccessTokenFetcherRemote, 1); + // Expect 0 disconnections. + EXPECT_EQ(0, histogram_tester().GetTotalSum( + kMojoDisconnectionsAccountManagerAccessTokenFetcherRemote)); +} + +TEST_F(AccountManagerFacadeImplTest, + HistogramsForAccountManagerAccessTokenFetcherRemoteDisconnections) { + account_manager().SetIsInitialized(true); + std::unique_ptr<AccountManagerFacadeImpl> account_manager_facade = + CreateFacade(); + const Account account = CreateTestGaiaAccount(kTestAccountEmail); + + // Create a mock access token fetcher that closes its receiver end of the Mojo + // pipe as soon as its `Start()` method is called with any parameters. + auto mock_access_token_fetcher = std::make_unique<MockAccessTokenFetcher>(); + EXPECT_CALL(*mock_access_token_fetcher.get(), Start(_, _)) + .WillOnce(Invoke(mock_access_token_fetcher.get(), + &MockAccessTokenFetcher::ResetReceiver)); + account_manager().SetMockAccessTokenFetcher( + std::move(mock_access_token_fetcher)); + + MockOAuthConsumer consumer; + std::unique_ptr<OAuth2AccessTokenFetcher> access_token_fetcher = + account_manager_facade->CreateAccessTokenFetcher( + account.key, kFakeOAuthConsumerName, &consumer); + // Expect 0 disconnections in the default state. + EXPECT_EQ(0, histogram_tester().GetTotalSum( + kMojoDisconnectionsAccountManagerAccessTokenFetcherRemote)); + + // Calling `Start` will reset the Mojo connection from the receiver side. This + // should notify the remote side, and result in a histogram log. + access_token_fetcher->Start(kFakeClientId, kFakeClientSecret, /*scopes=*/{}); + // Flush all pending Mojo messages. + base::RunLoop().RunUntilIdle(); + // Reset the fetcher so that histograms get logged. + access_token_fetcher.reset(); + + // Expect 1 log - at the end of `account_manager_facade` destruction. + histogram_tester().ExpectTotalCount( + kMojoDisconnectionsAccountManagerAccessTokenFetcherRemote, 1); + // Expect 1 disconnection. + EXPECT_EQ(1, histogram_tester().GetTotalSum( + kMojoDisconnectionsAccountManagerAccessTokenFetcherRemote)); +} + } // namespace account_manager
diff --git a/components/app_restore/app_restore_utils.cc b/components/app_restore/app_restore_utils.cc index 7a7fa511..ff0b0e99 100644 --- a/components/app_restore/app_restore_utils.cc +++ b/components/app_restore/app_restore_utils.cc
@@ -23,13 +23,6 @@ static int32_t session_id_counter = kArcSessionIdOffsetForRestoredLaunching; -// Always use the full restore ARC data if ARC apps for desks templates is not -// enabled. -bool ShouldUseFullRestoreArcData() { - return full_restore::FullRestoreReadHandler::GetInstance() - ->IsFullRestoreRunning(); -} - } // namespace bool IsArcWindow(aura::Window* window) { @@ -92,11 +85,14 @@ full_restore::FullRestoreReadHandler::GetInstance(); auto* desk_template_read_handler = DeskTemplateReadHandler::Get(); if (is_arc_app) { + // This will return nullptr if `restore_window_id` doesn't belong to a desk + // template launch. In that case, we fall back on full restore. ArcReadHandler* arc_read_handler = - ShouldUseFullRestoreArcData() - ? full_restore_read_handler->arc_read_handler() - : DeskTemplateReadHandler::Get()->GetArcReadHandlerForWindow( - restore_window_id); + desk_template_read_handler->GetArcReadHandlerForWindow( + restore_window_id); + if (!arc_read_handler) + arc_read_handler = full_restore_read_handler->arc_read_handler(); + window_info = arc_read_handler ? arc_read_handler->GetWindowInfo(restore_window_id) : nullptr; @@ -167,12 +163,14 @@ } void SetArcSessionIdForWindowId(int32_t arc_session_id, int32_t window_id) { - if (ShouldUseFullRestoreArcData()) { - return full_restore::FullRestoreReadHandler::GetInstance() + auto* desk_template_read_handler = DeskTemplateReadHandler::Get(); + if (desk_template_read_handler->IsKnownArcSessionId(arc_session_id)) { + desk_template_read_handler->SetArcSessionIdForWindowId(arc_session_id, + window_id); + } else { + full_restore::FullRestoreReadHandler::GetInstance() ->SetArcSessionIdForWindowId(arc_session_id, window_id); } - return DeskTemplateReadHandler::Get()->SetArcSessionIdForWindowId( - arc_session_id, window_id); } void SetDeskTemplateLaunchIdForArcSessionId(int32_t arc_session_id, @@ -182,21 +180,23 @@ } int32_t GetArcRestoreWindowIdForTaskId(int32_t task_id) { - if (ShouldUseFullRestoreArcData()) { - return full_restore::FullRestoreReadHandler::GetInstance() - ->GetArcRestoreWindowIdForTaskId(task_id); + if (int32_t restore_window_id = + DeskTemplateReadHandler::Get()->GetArcRestoreWindowIdForTaskId( + task_id)) { + return restore_window_id; } - return DeskTemplateReadHandler::Get()->GetArcRestoreWindowIdForTaskId( - task_id); + return full_restore::FullRestoreReadHandler::GetInstance() + ->GetArcRestoreWindowIdForTaskId(task_id); } int32_t GetArcRestoreWindowIdForSessionId(int32_t session_id) { - if (ShouldUseFullRestoreArcData()) { - return full_restore::FullRestoreReadHandler::GetInstance() - ->GetArcRestoreWindowIdForSessionId(session_id); + if (int32_t restore_window_id = + DeskTemplateReadHandler::Get()->GetArcRestoreWindowIdForSessionId( + session_id)) { + return restore_window_id; } - return DeskTemplateReadHandler::Get()->GetArcRestoreWindowIdForSessionId( - session_id); + return full_restore::FullRestoreReadHandler::GetInstance() + ->GetArcRestoreWindowIdForSessionId(session_id); } std::string GetAppIdFromAppName(const std::string& app_name) {
diff --git a/components/app_restore/arc_read_handler.cc b/components/app_restore/arc_read_handler.cc index 8c30337..3bdfb75 100644 --- a/components/app_restore/arc_read_handler.cc +++ b/components/app_restore/arc_read_handler.cc
@@ -15,6 +15,14 @@ #include "ui/aura/window.h" namespace app_restore { +namespace { + +bool IsValidRestoreWindowId(int32_t restore_window_id) { + return restore_window_id != 0 && + restore_window_id != kParentToHiddenContainer; +} + +} // namespace ArcReadHandler::ArcReadHandler(const base::FilePath& profile_path, Delegate* delegate) @@ -105,7 +113,7 @@ std::unique_ptr<WindowInfo> ArcReadHandler::GetWindowInfo( int32_t restore_window_id) { - if (restore_window_id == 0 || restore_window_id == kParentToHiddenContainer) + if (!IsValidRestoreWindowId(restore_window_id)) return nullptr; auto it = window_id_to_app_id_.find(restore_window_id); @@ -167,7 +175,7 @@ } void ArcReadHandler::RemoveAppRestoreData(int32_t window_id) { - if (window_id == 0 || window_id == kParentToHiddenContainer) + if (!IsValidRestoreWindowId(window_id)) return; auto it = window_id_to_app_id_.find(window_id); @@ -192,7 +200,7 @@ // If `restore_window_id` is valid, sets the window property // `kRestoreWindowIdKey` and `kWindowInfoKey`. - if (restore_window_id > 0) { + if (IsValidRestoreWindowId(restore_window_id)) { (*window_it)->SetProperty(kRestoreWindowIdKey, restore_window_id); // When the window was created, there was not any window info due to there
diff --git a/components/app_restore/desk_template_read_handler.cc b/components/app_restore/desk_template_read_handler.cc index 6bc1be1..bee4970 100644 --- a/components/app_restore/desk_template_read_handler.cc +++ b/components/app_restore/desk_template_read_handler.cc
@@ -166,6 +166,10 @@ return handler ? handler->GetArcRestoreWindowIdForSessionId(session_id) : 0; } +bool DeskTemplateReadHandler::IsKnownArcSessionId(int32_t session_id) const { + return session_id_to_launch_id_.contains(session_id); +} + void DeskTemplateReadHandler::OnWindowInitialized(aura::Window* window) { // If there isn't restore data for ARC apps, we don't need to handle ARC app // windows restoration. @@ -221,6 +225,9 @@ int32_t task_id, int32_t session_id) { int32_t launch_id = GetLaunchIdForArcSessionId(session_id); + // If the task's `session_id` isn't one we are tracking, then this task has + // not been created from a desk template launch. When this is the case, we + // don't track the task id. if (launch_id == 0) return;
diff --git a/components/app_restore/desk_template_read_handler.h b/components/app_restore/desk_template_read_handler.h index 740ae93d..b3a49708 100644 --- a/components/app_restore/desk_template_read_handler.h +++ b/components/app_restore/desk_template_read_handler.h
@@ -75,12 +75,17 @@ // Same as above, but for `launch_id`. void SetLaunchIdForArcSessionId(int32_t arc_session_id, int32_t launch_id); - // Returns the restore window id for the ARC app's `task_id`. + // Returns the restore window id for the ARC app's `task_id`. Returns 0 if the + // task does not belong to a desk template launch. int32_t GetArcRestoreWindowIdForTaskId(int32_t task_id); - // Returns the restore window id for the ARC app's `session_id`. + // Returns the restore window id for the ARC app's `session_id`. Returns 0 if + // the session does not belong to a desk template launch. int32_t GetArcRestoreWindowIdForSessionId(int32_t session_id); + // Returns true if `session_id` is known to desk templates. + bool IsKnownArcSessionId(int32_t session_id) const; + // aura::EnvObserver: void OnWindowInitialized(aura::Window* window) override;
diff --git a/components/autofill/core/browser/BUILD.gn b/components/autofill/core/browser/BUILD.gn index 7e00dbe..a490579 100644 --- a/components/autofill/core/browser/BUILD.gn +++ b/components/autofill/core/browser/BUILD.gn
@@ -823,6 +823,7 @@ "form_parsing/price_field_unittest.cc", "form_parsing/regex_patterns_unittest.cc", "form_parsing/search_field_unittest.cc", + "form_processing/autocomplete_attribute_processing_util_unittest.cc", "form_processing/label_processing_util_unittest.cc", "form_processing/name_processing_util_unittest.cc", "form_structure_unittest.cc",
diff --git a/components/autofill/core/browser/autofill_profile_sync_util.cc b/components/autofill/core/browser/autofill_profile_sync_util.cc index dedac96..e369789 100644 --- a/components/autofill/core/browser/autofill_profile_sync_util.cc +++ b/components/autofill/core/browser/autofill_profile_sync_util.cc
@@ -242,7 +242,7 @@ specifics->set_birthdate_day(entry.GetRawInfoAsInt(BIRTHDATE_DAY)); specifics->set_birthdate_month(entry.GetRawInfoAsInt(BIRTHDATE_MONTH)); specifics->set_birthdate_year( - entry.GetRawInfoAsInt(BIRTHDATE_YEAR_4_DIGITS)); + entry.GetRawInfoAsInt(BIRTHDATE_4_DIGIT_YEAR)); } return entity_data; @@ -472,7 +472,7 @@ features::kAutofillEnableCompatibilitySupportForBirthdates)) { profile->SetRawInfoAsInt(BIRTHDATE_DAY, specifics.birthdate_day()); profile->SetRawInfoAsInt(BIRTHDATE_MONTH, specifics.birthdate_month()); - profile->SetRawInfoAsInt(BIRTHDATE_YEAR_4_DIGITS, + profile->SetRawInfoAsInt(BIRTHDATE_4_DIGIT_YEAR, specifics.birthdate_year()); }
diff --git a/components/autofill/core/browser/autofill_profile_sync_util_unittest.cc b/components/autofill/core/browser/autofill_profile_sync_util_unittest.cc index c9f74d7..1de7097 100644 --- a/components/autofill/core/browser/autofill_profile_sync_util_unittest.cc +++ b/components/autofill/core/browser/autofill_profile_sync_util_unittest.cc
@@ -126,7 +126,7 @@ // Set testing values for the birthdate. profile.SetRawInfoAsInt(BIRTHDATE_DAY, 14); profile.SetRawInfoAsInt(BIRTHDATE_MONTH, 3); - profile.SetRawInfoAsInt(BIRTHDATE_YEAR_4_DIGITS, 1997); + profile.SetRawInfoAsInt(BIRTHDATE_4_DIGIT_YEAR, 1997); return profile; }
diff --git a/components/autofill/core/browser/autofill_type.cc b/components/autofill/core/browser/autofill_type.cc index 9dcb6fc..3d87988 100644 --- a/components/autofill/core/browser/autofill_type.cc +++ b/components/autofill/core/browser/autofill_type.cc
@@ -110,7 +110,7 @@ case BIRTHDATE_DAY: case BIRTHDATE_MONTH: - case BIRTHDATE_YEAR_4_DIGITS: + case BIRTHDATE_4_DIGIT_YEAR: return FieldTypeGroup::kBirthdateField; case PRICE:
diff --git a/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc b/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc index 2101569..129254b 100644 --- a/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc +++ b/components/autofill/core/browser/data_model/autofill_profile_comparator_unittest.cc
@@ -32,9 +32,9 @@ using autofill::ADDRESS_HOME_STATE; using autofill::ADDRESS_HOME_STREET_ADDRESS; using autofill::ADDRESS_HOME_ZIP; +using autofill::BIRTHDATE_4_DIGIT_YEAR; using autofill::BIRTHDATE_DAY; using autofill::BIRTHDATE_MONTH; -using autofill::BIRTHDATE_YEAR_4_DIGITS; using autofill::COMPANY_NAME; using autofill::EMAIL_ADDRESS; using autofill::NAME_FIRST; @@ -193,7 +193,7 @@ AutofillProfile profile(base::GenerateGUID(), "http://www.example.com/"); profile.SetRawInfo(BIRTHDATE_DAY, base::UTF8ToUTF16(day)); profile.SetRawInfo(BIRTHDATE_MONTH, base::UTF8ToUTF16(month)); - profile.SetRawInfo(BIRTHDATE_YEAR_4_DIGITS, base::UTF8ToUTF16(year)); + profile.SetRawInfo(BIRTHDATE_4_DIGIT_YEAR, base::UTF8ToUTF16(year)); return profile; } @@ -1374,7 +1374,7 @@ Birthdate expected; expected.SetRawInfo(BIRTHDATE_DAY, u"14"); expected.SetRawInfo(BIRTHDATE_MONTH, u"3"); - expected.SetRawInfo(BIRTHDATE_YEAR_4_DIGITS, u"1997"); + expected.SetRawInfo(BIRTHDATE_4_DIGIT_YEAR, u"1997"); Birthdate actual; EXPECT_TRUE(comparator_.MergeBirthdates(profile1, profile2, actual));
diff --git a/components/autofill/core/browser/data_model/birthdate.cc b/components/autofill/core/browser/data_model/birthdate.cc index ce34cf24..09bf0d9 100644 --- a/components/autofill/core/browser/data_model/birthdate.cc +++ b/components/autofill/core/browser/data_model/birthdate.cc
@@ -22,7 +22,7 @@ switch (type) { case BIRTHDATE_DAY: case BIRTHDATE_MONTH: - case BIRTHDATE_YEAR_4_DIGITS: { + case BIRTHDATE_4_DIGIT_YEAR: { int value = GetRawInfoAsInt(type); return value != 0 ? base::NumberToString16(value) : std::u16string(); } @@ -38,7 +38,7 @@ return day_; case BIRTHDATE_MONTH: return month_; - case BIRTHDATE_YEAR_4_DIGITS: + case BIRTHDATE_4_DIGIT_YEAR: return year_; default: NOTREACHED(); @@ -54,7 +54,7 @@ switch (type) { case BIRTHDATE_DAY: case BIRTHDATE_MONTH: - case BIRTHDATE_YEAR_4_DIGITS: { + case BIRTHDATE_4_DIGIT_YEAR: { // If |value| is not a number, |StringToInt()| sets it to 0, which will // clear the field. int int_value; @@ -83,7 +83,7 @@ case BIRTHDATE_MONTH: month_ = ValueIfInRangeOrZero(1, 12); break; - case BIRTHDATE_YEAR_4_DIGITS: + case BIRTHDATE_4_DIGIT_YEAR: year_ = ValueIfInRangeOrZero(1900, 9999); break; default: @@ -94,7 +94,7 @@ void Birthdate::GetSupportedTypes(ServerFieldTypeSet* supported_types) const { supported_types->insert(BIRTHDATE_DAY); supported_types->insert(BIRTHDATE_MONTH); - supported_types->insert(BIRTHDATE_YEAR_4_DIGITS); + supported_types->insert(BIRTHDATE_4_DIGIT_YEAR); } } // namespace autofill
diff --git a/components/autofill/core/browser/data_model/birthdate.h b/components/autofill/core/browser/data_model/birthdate.h index ec07d06..a18555a 100644 --- a/components/autofill/core/browser/data_model/birthdate.h +++ b/components/autofill/core/browser/data_model/birthdate.h
@@ -25,7 +25,7 @@ // Convenience accessor to the day, month and 4 digit year components. static ServerFieldTypeSet GetRawComponents() { - return {BIRTHDATE_DAY, BIRTHDATE_MONTH, BIRTHDATE_YEAR_4_DIGITS}; + return {BIRTHDATE_DAY, BIRTHDATE_MONTH, BIRTHDATE_4_DIGIT_YEAR}; } // FormGroup:
diff --git a/components/autofill/core/browser/data_model/birthdate_unittest.cc b/components/autofill/core/browser/data_model/birthdate_unittest.cc index 819e63f..1755422 100644 --- a/components/autofill/core/browser/data_model/birthdate_unittest.cc +++ b/components/autofill/core/browser/data_model/birthdate_unittest.cc
@@ -16,7 +16,7 @@ Birthdate birthdate; birthdate.SetRawInfo(BIRTHDATE_DAY, day); birthdate.SetRawInfo(BIRTHDATE_MONTH, month); - birthdate.SetRawInfo(BIRTHDATE_YEAR_4_DIGITS, year); + birthdate.SetRawInfo(BIRTHDATE_4_DIGIT_YEAR, year); return birthdate; } @@ -26,7 +26,7 @@ const std::u16string& year) { EXPECT_EQ(birthdate.GetRawInfo(BIRTHDATE_DAY), day); EXPECT_EQ(birthdate.GetRawInfo(BIRTHDATE_MONTH), month); - EXPECT_EQ(birthdate.GetRawInfo(BIRTHDATE_YEAR_4_DIGITS), year); + EXPECT_EQ(birthdate.GetRawInfo(BIRTHDATE_4_DIGIT_YEAR), year); } // Expect that setting |field| to |value| clears the |field|. This is used to @@ -61,8 +61,8 @@ SetFieldAndExpectEmpty(BIRTHDATE_DAY, u"NaN"); SetFieldAndExpectEmpty(BIRTHDATE_MONTH, u"13"); SetFieldAndExpectEmpty(BIRTHDATE_MONTH, u"a"); - SetFieldAndExpectEmpty(BIRTHDATE_YEAR_4_DIGITS, u"12345"); - SetFieldAndExpectEmpty(BIRTHDATE_YEAR_4_DIGITS, u"1234"); + SetFieldAndExpectEmpty(BIRTHDATE_4_DIGIT_YEAR, u"12345"); + SetFieldAndExpectEmpty(BIRTHDATE_4_DIGIT_YEAR, u"1234"); } // Tests that empty values clear the corresponding fields.
diff --git a/components/autofill/core/browser/field_types.cc b/components/autofill/core/browser/field_types.cc index 99cbd8b..978a6f9 100644 --- a/components/autofill/core/browser/field_types.cc +++ b/components/autofill/core/browser/field_types.cc
@@ -142,7 +142,7 @@ case SEARCH_TERM: case BIRTHDATE_DAY: case BIRTHDATE_MONTH: - case BIRTHDATE_YEAR_4_DIGITS: + case BIRTHDATE_4_DIGIT_YEAR: case UNKNOWN_TYPE: case MAX_VALID_FIELD_TYPE: return false; @@ -231,7 +231,7 @@ return "BIRTHDATE_DAY"; case BIRTHDATE_MONTH: return "BIRTHDATE_MONTH"; - case BIRTHDATE_YEAR_4_DIGITS: + case BIRTHDATE_4_DIGIT_YEAR: return "BIRTHDATE_YEAR_4_DIGITS"; case CREDIT_CARD_NAME_FULL: return "CREDIT_CARD_NAME_FULL";
diff --git a/components/autofill/core/browser/field_types.h b/components/autofill/core/browser/field_types.h index 1b74dd4..6d73adc 100644 --- a/components/autofill/core/browser/field_types.h +++ b/components/autofill/core/browser/field_types.h
@@ -222,7 +222,7 @@ // Types to represent a birthdate. BIRTHDATE_DAY = 118, BIRTHDATE_MONTH = 119, - BIRTHDATE_YEAR_4_DIGITS = 120, + BIRTHDATE_4_DIGIT_YEAR = 120, // Types for better trunk prefix support for phone numbers. // Like PHONE_HOME_CITY_CODE, but with a trunk prefix, if applicable in the
diff --git a/components/autofill/core/browser/field_types_unittest.cc b/components/autofill/core/browser/field_types_unittest.cc index 82c22c99..203faedd 100644 --- a/components/autofill/core/browser/field_types_unittest.cc +++ b/components/autofill/core/browser/field_types_unittest.cc
@@ -90,7 +90,7 @@ NAME_FULL_WITH_HONORIFIC_PREFIX, BIRTHDATE_DAY, BIRTHDATE_MONTH, - BIRTHDATE_YEAR_4_DIGITS, + BIRTHDATE_4_DIGIT_YEAR, }; ServerFieldType kInvalidValue = static_cast<ServerFieldType>(123456); ASSERT_FALSE(kValidFieldTypes.count(kInvalidValue));
diff --git a/components/autofill/core/browser/form_parsing/birthdate_field.cc b/components/autofill/core/browser/form_parsing/birthdate_field.cc index 10013870..3712178 100644 --- a/components/autofill/core/browser/form_parsing/birthdate_field.cc +++ b/components/autofill/core/browser/form_parsing/birthdate_field.cc
@@ -111,7 +111,7 @@ field_candidates); AddClassification(month_, BIRTHDATE_MONTH, kBaseBirthdateParserScore, field_candidates); - AddClassification(year_, BIRTHDATE_YEAR_4_DIGITS, kBaseBirthdateParserScore, + AddClassification(year_, BIRTHDATE_4_DIGIT_YEAR, kBaseBirthdateParserScore, field_candidates); }
diff --git a/components/autofill/core/browser/form_parsing/birthdate_field_unittest.cc b/components/autofill/core/browser/form_parsing/birthdate_field_unittest.cc index d96c6eba..56abba77 100644 --- a/components/autofill/core/browser/form_parsing/birthdate_field_unittest.cc +++ b/components/autofill/core/browser/form_parsing/birthdate_field_unittest.cc
@@ -65,12 +65,12 @@ TEST_P(BirthdateFieldTest, ParseDMY) { AddSelectOneFormFieldData("", "", GetDays(), BIRTHDATE_DAY); AddSelectOneFormFieldData("", "", GetMonths(), BIRTHDATE_MONTH); - AddSelectOneFormFieldData("", "", GetYears(), BIRTHDATE_YEAR_4_DIGITS); + AddSelectOneFormFieldData("", "", GetYears(), BIRTHDATE_4_DIGIT_YEAR); ClassifyAndVerify(ParseResult::PARSED); } TEST_P(BirthdateFieldTest, ParseYMD) { - AddSelectOneFormFieldData("", "", GetYears(), BIRTHDATE_YEAR_4_DIGITS); + AddSelectOneFormFieldData("", "", GetYears(), BIRTHDATE_4_DIGIT_YEAR); AddSelectOneFormFieldData("", "", GetMonths(), BIRTHDATE_MONTH); AddSelectOneFormFieldData("", "", GetDays(), BIRTHDATE_DAY); ClassifyAndVerify(ParseResult::PARSED); @@ -85,7 +85,7 @@ years.insert(years.begin(), {u"", u"Year"}); AddSelectOneFormFieldData("", "", days, BIRTHDATE_DAY); AddSelectOneFormFieldData("", "", months, BIRTHDATE_MONTH); - AddSelectOneFormFieldData("", "", years, BIRTHDATE_YEAR_4_DIGITS); + AddSelectOneFormFieldData("", "", years, BIRTHDATE_4_DIGIT_YEAR); ClassifyAndVerify(ParseResult::PARSED); } @@ -99,7 +99,7 @@ } AddSelectOneFormFieldData("", "", days, BIRTHDATE_DAY); AddSelectOneFormFieldData("", "", GetMonths(), BIRTHDATE_MONTH); - AddSelectOneFormFieldData("", "", GetYears(), BIRTHDATE_YEAR_4_DIGITS); + AddSelectOneFormFieldData("", "", GetYears(), BIRTHDATE_4_DIGIT_YEAR); ClassifyAndVerify(ParseResult::PARSED); } @@ -110,7 +110,7 @@ EXPECT_GT(days.size(), 13u); // Too many options for a day selector. AddSelectOneFormFieldData("", "", days, BIRTHDATE_DAY); AddSelectOneFormFieldData("", "", GetMonths(), BIRTHDATE_MONTH); - AddSelectOneFormFieldData("", "", GetYears(), BIRTHDATE_YEAR_4_DIGITS); + AddSelectOneFormFieldData("", "", GetYears(), BIRTHDATE_4_DIGIT_YEAR); ClassifyAndVerify(ParseResult::NOT_PARSED); } @@ -125,7 +125,7 @@ months.resize(5); AddSelectOneFormFieldData("", "", GetDays(), BIRTHDATE_DAY); AddSelectOneFormFieldData("", "", months, BIRTHDATE_MONTH); - AddSelectOneFormFieldData("", "", GetYears(), BIRTHDATE_YEAR_4_DIGITS); + AddSelectOneFormFieldData("", "", GetYears(), BIRTHDATE_4_DIGIT_YEAR); ClassifyAndVerify(ParseResult::NOT_PARSED); }
diff --git a/components/autofill/core/browser/form_processing/autocomplete_attribute_processing_util.h b/components/autofill/core/browser/form_processing/autocomplete_attribute_processing_util.h index 7b18b98..9b34430 100644 --- a/components/autofill/core/browser/form_processing/autocomplete_attribute_processing_util.h +++ b/components/autofill/core/browser/form_processing/autocomplete_attribute_processing_util.h
@@ -31,6 +31,7 @@ HtmlFieldMode mode; // Type hints are parsed and validated, but otherwise unused. HtmlFieldType field_type; + // webauthn is parsed, but otherwise unused. }; absl::optional<AutocompleteParsingResult> ParseAutocompleteAttribute( const AutofillField& field);
diff --git a/components/autofill/core/browser/form_processing/autocomplete_attribute_processing_util_unittest.cc b/components/autofill/core/browser/form_processing/autocomplete_attribute_processing_util_unittest.cc new file mode 100644 index 0000000..4d98641 --- /dev/null +++ b/components/autofill/core/browser/form_processing/autocomplete_attribute_processing_util_unittest.cc
@@ -0,0 +1,103 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/autofill/core/browser/form_processing/autocomplete_attribute_processing_util.h" + +#include <string> + +#include "base/strings/string_piece.h" +#include "components/autofill/core/browser/field_types.h" +#include "components/autofill/core/common/form_field_data.h" +#include "testing/gtest/include/gtest/gtest.h" +#include "third_party/abseil-cpp/absl/types/optional.h" + +namespace autofill { + +// Tests that parsing a field with autocomplete=`autocomplete` and +// maxlength=`max_length` results in `expected_result`. +struct AutocompleteAttributeTestcase { + base::StringPiece autocomplete; + absl::optional<AutocompleteParsingResult> expected_result; + int max_length = 0; +}; + +class AutocompleteAttributeProcessingUtilTest + : public testing::TestWithParam<AutocompleteAttributeTestcase> {}; + +// In general, `ParseAutocompleteAttribute()` returns absl::nullopt if one of +// the tokens cannot be parsed. The exception is the field type, which defaults +// to HTML_TYPE_UNRECOGNIZED. +const AutocompleteAttributeTestcase kAutocompleteTestcases[]{ + // Only the field type: + {"name", {{"", HTML_MODE_NONE, HTML_TYPE_NAME}}}, + {"autofill", {{"", HTML_MODE_NONE, HTML_TYPE_UNRECOGNIZED}}}, + // autocomplete=off is ignored completely. + {"off", absl::nullopt}, + + // Rationalization based on the field's max_length is done. + {"cc-exp-year", {{"", HTML_MODE_NONE, HTML_TYPE_CREDIT_CARD_EXP_YEAR}}}, + {"cc-exp-year", + {{"", HTML_MODE_NONE, HTML_TYPE_CREDIT_CARD_EXP_2_DIGIT_YEAR}}, + /*max_length=*/2}, + + // Type hints: + // They are parsed and validated, but otherwise unused. Type hints are only + // valid before tel* and email. + {"home email", {{"", HTML_MODE_NONE, HTML_TYPE_EMAIL}}}, + {"work email", {{"", HTML_MODE_NONE, HTML_TYPE_EMAIL}}}, + {"work cc-number", absl::nullopt}, + {"unrecognized_type_hint email", absl::nullopt}, + + // Billing and shipping modes: + {"billing country", {{"", HTML_MODE_BILLING, HTML_TYPE_COUNTRY_CODE}}}, + {"shipping country", {{"", HTML_MODE_SHIPPING, HTML_TYPE_COUNTRY_CODE}}}, + {"billing unrecognized", {{"", HTML_MODE_BILLING, HTML_TYPE_UNRECOGNIZED}}}, + {"shipping work tel-local", + {{"", HTML_MODE_SHIPPING, HTML_TYPE_TEL_LOCAL}}}, + {"unrecognized_mode country", absl::nullopt}, + {"unrecognized_mode unrecognized", absl::nullopt}, + + // Sections: + {"section-one tel", {{"one", HTML_MODE_NONE, HTML_TYPE_TEL}}}, + {"section-one shipping tel", {{"one", HTML_MODE_SHIPPING, HTML_TYPE_TEL}}}, + {"section-one shipping home tel", + {{"one", HTML_MODE_SHIPPING, HTML_TYPE_TEL}}}, + {"section- tel", {{"", HTML_MODE_NONE, HTML_TYPE_TEL}}}, + {"section tel", absl::nullopt}, + {"no_section tel", absl::nullopt}, + {"no_section work tel", absl::nullopt}, + + // "webauthn" shouldn't prevent parsing, but is otherwise ignored. + {"name webauthn", {{"", HTML_MODE_NONE, HTML_TYPE_NAME}}}, + {"section-one shipping home tel webauthn", + {{"one", HTML_MODE_SHIPPING, HTML_TYPE_TEL}}}, + {"webauthn", absl::nullopt}, + + // Too many tokens. + {"hello section-one shipping home tel webauthn", absl::nullopt}}; + +INSTANTIATE_TEST_SUITE_P(, + AutocompleteAttributeProcessingUtilTest, + testing::ValuesIn(kAutocompleteTestcases)); + +TEST_P(AutocompleteAttributeProcessingUtilTest, ParseAutocompleteAttribute) { + auto test = GetParam(); + SCOPED_TRACE(testing::Message() + << "autocomplete=\"" << test.autocomplete << "\""); + + FormFieldData field; + field.autocomplete_attribute = std::string(test.autocomplete); + if (test.max_length) + field.max_length = test.max_length; + + auto result = ParseAutocompleteAttribute(AutofillField(field)); + ASSERT_EQ(result.has_value(), test.expected_result.has_value()); + if (result.has_value()) { + EXPECT_EQ(result->section, test.expected_result->section); + EXPECT_EQ(result->mode, test.expected_result->mode); + EXPECT_EQ(result->field_type, test.expected_result->field_type); + } +} + +} // namespace autofill
diff --git a/components/autofill/core/browser/form_structure_unittest.cc b/components/autofill/core/browser/form_structure_unittest.cc index fa38f47..ca346993 100644 --- a/components/autofill/core/browser/form_structure_unittest.cc +++ b/components/autofill/core/browser/form_structure_unittest.cc
@@ -8584,47 +8584,6 @@ EXPECT_EQ("-shipping-default", form_structure.field(2)->section); } -// Tests if the autocomplete section name other than 'shipping' and 'billing' -// are ignored. -TEST_F(FormStructureTestImpl, IgnoreAribtraryAutocompleteSectionName) { - base::test::ScopedFeatureList enabled; - enabled.InitAndEnableFeature(features::kAutofillUseNewSectioningMethod); - - FormData form; - form.url = GURL("http://foo.com"); - FormFieldData field; - field.form_control_type = "text"; - field.max_length = 10000; - - field.label = u"Full Name"; - field.name = u"fullName"; - field.autocomplete_attribute = "section-red ship name"; - field.unique_renderer_id = MakeFieldRendererId(); - form.fields.push_back(field); - - field.label = u"Country"; - field.name = u"country"; - field.autocomplete_attribute = "section-blue shipping country"; - field.unique_renderer_id = MakeFieldRendererId(); - form.fields.push_back(field); - - FormStructure form_structure(form); - - form_structure.set_overall_field_type_for_testing(0, NAME_FULL); - form_structure.set_overall_field_type_for_testing(1, ADDRESS_HOME_COUNTRY); - - std::vector<FormStructure*> forms; - forms.push_back(&form_structure); - - form_structure.identify_sections_for_testing(); - - // Assert the correct number of fields. - ASSERT_EQ(2U, form_structure.field_count()); - - EXPECT_EQ("blue-shipping-default", form_structure.field(0)->section); - EXPECT_EQ("blue-shipping-default", form_structure.field(1)->section); -} - TEST_F(FormStructureTestImpl, FindFieldsEligibleForManualFilling) { FormData form; form.url = GURL("http://foo.com");
diff --git a/components/autofill/core/browser/metrics/autofill_metrics.cc b/components/autofill/core/browser/metrics/autofill_metrics.cc index 1f74cb5..7c413d5d 100644 --- a/components/autofill/core/browser/metrics/autofill_metrics.cc +++ b/components/autofill/core/browser/metrics/autofill_metrics.cc
@@ -374,7 +374,7 @@ case NAME_FULL_WITH_HONORIFIC_PREFIX: case BIRTHDATE_DAY: case BIRTHDATE_MONTH: - case BIRTHDATE_YEAR_4_DIGITS: + case BIRTHDATE_4_DIGIT_YEAR: case IBAN_VALUE: case MAX_VALID_FIELD_TYPE: NOTREACHED() << field_type << " type is not in that group.";
diff --git a/components/autofill/core/browser/webdata/autofill_table.cc b/components/autofill/core/browser/webdata/autofill_table.cc index 11d868d..642a1118 100644 --- a/components/autofill/core/browser/webdata/autofill_table.cc +++ b/components/autofill/core/browser/webdata/autofill_table.cc
@@ -881,7 +881,7 @@ DCHECK_EQ(profile->guid(), s.ColumnString(0)); profile->SetRawInfoAsInt(BIRTHDATE_DAY, s.ColumnInt(1)); profile->SetRawInfoAsInt(BIRTHDATE_MONTH, s.ColumnInt(2)); - profile->SetRawInfoAsInt(BIRTHDATE_YEAR_4_DIGITS, s.ColumnInt(3)); + profile->SetRawInfoAsInt(BIRTHDATE_4_DIGIT_YEAR, s.ColumnInt(3)); } return s.Succeeded(); } @@ -922,7 +922,7 @@ s.BindString(0, profile.guid()); s.BindInt(1, profile.GetRawInfoAsInt(BIRTHDATE_DAY)); s.BindInt(2, profile.GetRawInfoAsInt(BIRTHDATE_MONTH)); - s.BindInt(3, profile.GetRawInfoAsInt(BIRTHDATE_YEAR_4_DIGITS)); + s.BindInt(3, profile.GetRawInfoAsInt(BIRTHDATE_4_DIGIT_YEAR)); return s.Run(); }
diff --git a/components/autofill/core/browser/webdata/autofill_table_unittest.cc b/components/autofill/core/browser/webdata/autofill_table_unittest.cc index 48029c5..703cf5b 100644 --- a/components/autofill/core/browser/webdata/autofill_table_unittest.cc +++ b/components/autofill/core/browser/webdata/autofill_table_unittest.cc
@@ -1283,7 +1283,7 @@ home_profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, u"18181234567"); home_profile.SetRawInfoAsInt(BIRTHDATE_DAY, 14); home_profile.SetRawInfoAsInt(BIRTHDATE_MONTH, 3); - home_profile.SetRawInfoAsInt(BIRTHDATE_YEAR_4_DIGITS, 1997); + home_profile.SetRawInfoAsInt(BIRTHDATE_4_DIGIT_YEAR, 1997); home_profile.set_disallow_settings_visible_updates(true); home_profile.set_language_code("en"); Time pre_creation_time = AutofillClock::Now(); @@ -1380,7 +1380,7 @@ billing_profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, u"18181230000"); billing_profile.SetRawInfoAsInt(BIRTHDATE_DAY, 4); billing_profile.SetRawInfoAsInt(BIRTHDATE_MONTH, 5); - billing_profile.SetRawInfoAsInt(BIRTHDATE_YEAR_4_DIGITS, 1977); + billing_profile.SetRawInfoAsInt(BIRTHDATE_4_DIGIT_YEAR, 1977); Time pre_modification_time_2 = AutofillClock::Now(); EXPECT_TRUE(table_->UpdateAutofillProfile(billing_profile)); @@ -1436,7 +1436,7 @@ home_profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, u"18181234567"); home_profile.SetRawInfoAsInt(BIRTHDATE_DAY, 14); home_profile.SetRawInfoAsInt(BIRTHDATE_MONTH, 3); - home_profile.SetRawInfoAsInt(BIRTHDATE_YEAR_4_DIGITS, 1997); + home_profile.SetRawInfoAsInt(BIRTHDATE_4_DIGIT_YEAR, 1997); home_profile.set_language_code("en"); Time pre_creation_time = AutofillClock::Now(); @@ -1518,7 +1518,7 @@ billing_profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, u"18181230000"); billing_profile.SetRawInfoAsInt(BIRTHDATE_DAY, 4); billing_profile.SetRawInfoAsInt(BIRTHDATE_MONTH, 5); - billing_profile.SetRawInfoAsInt(BIRTHDATE_YEAR_4_DIGITS, 1977); + billing_profile.SetRawInfoAsInt(BIRTHDATE_4_DIGIT_YEAR, 1977); Time pre_modification_time_2 = AutofillClock::Now(); EXPECT_TRUE(table_->UpdateAutofillProfile(billing_profile)); @@ -1665,7 +1665,7 @@ profile.SetRawInfo(PHONE_HOME_WHOLE_NUMBER, u"18181234567"); profile.SetRawInfoAsInt(BIRTHDATE_DAY, 14); profile.SetRawInfoAsInt(BIRTHDATE_MONTH, 3); - profile.SetRawInfoAsInt(BIRTHDATE_YEAR_4_DIGITS, 1997); + profile.SetRawInfoAsInt(BIRTHDATE_4_DIGIT_YEAR, 1997); profile.set_language_code("en"); profile.FinalizeAfterImport(); table_->AddAutofillProfile(profile);
diff --git a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb index 57963ad..6487152b 100644 --- a/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb +++ b/components/browser_ui/strings/android/translations/browser_ui_strings_zh-TW.xtb
@@ -147,7 +147,7 @@ <translation id="4428065317363009941">廣告個人化</translation> <translation id="4434045419905280838">彈出式視窗與重新導向</translation> <translation id="445467742685312942">允許網站播放受保護的內容</translation> -<translation id="4468959413250150279">將特定網站設為靜音。</translation> +<translation id="4468959413250150279">關閉特定網站的音訊。</translation> <translation id="4479647676395637221">允許網站使用你的攝影機前,必須先詢問你 (建議)</translation> <translation id="4505788138578415521">已展開網址</translation> <translation id="4534723447064627427">如要允許 <ph name="APP_NAME" /> 存取裝置的麥克風,請一併在 <ph name="BEGIN_LINK" />Android 設定<ph name="END_LINK" />中開啟麥克風。</translation>
diff --git a/components/cast_channel/cast_message_handler.cc b/components/cast_channel/cast_message_handler.cc index 32515fcd..29324d4 100644 --- a/components/cast_channel/cast_message_handler.cc +++ b/components/cast_channel/cast_message_handler.cc
@@ -391,12 +391,12 @@ const std::string& destination_id, const std::string& namespace_, data_decoder::DataDecoder::ValueOrError parse_result) { - if (!parse_result.value) { - ReportParseError(*parse_result.error); + if (!parse_result.has_value()) { + ReportParseError(parse_result.error()); return; } - base::Value& payload = *parse_result.value; + base::Value& payload = *parse_result; if (!payload.is_dict()) { ReportParseError("Parsed message not a dictionary"); return;
diff --git a/components/cast_channel/cast_message_handler_unittest.cc b/components/cast_channel/cast_message_handler_unittest.cc index c5e2abd..976b493 100644 --- a/components/cast_channel/cast_message_handler_unittest.cc +++ b/components/cast_channel/cast_message_handler_unittest.cc
@@ -60,7 +60,7 @@ data_decoder::DataDecoder::ValueOrError ParseJsonLikeDataDecoder( base::StringPiece json) { - return data_decoder::DataDecoder::ValueOrError::Value(ParseJson(json)); + return ParseJson(json); } absl::optional<base::Value::Dict> GetDictionaryFromCastMessage(
diff --git a/components/certificate_transparency/data/log_list.json b/components/certificate_transparency/data/log_list.json index 66690b8..d77766c 100644 --- a/components/certificate_transparency/data/log_list.json +++ b/components/certificate_transparency/data/log_list.json
@@ -1,6 +1,6 @@ { - "version": "10.40", - "log_list_timestamp": "2022-07-12T12:55:22Z", + "version": "10.41", + "log_list_timestamp": "2022-07-13T12:54:17Z", "operators": [ { "name": "Google",
diff --git a/components/consent_auditor/consent_auditor_impl.cc b/components/consent_auditor/consent_auditor_impl.cc index d688a310..d917897dd 100644 --- a/components/consent_auditor/consent_auditor_impl.cc +++ b/components/consent_auditor/consent_auditor_impl.cc
@@ -13,8 +13,6 @@ #include "components/prefs/pref_service.h" #include "components/prefs/scoped_user_pref_update.h" #include "components/sync/model/model_type_sync_bridge.h" -#include "components/sync/protocol/user_consent_specifics.pb.h" -#include "components/sync/protocol/user_consent_types.pb.h" using ArcPlayTermsOfServiceConsent = sync_pb::UserConsentTypes::ArcPlayTermsOfServiceConsent;
diff --git a/components/consent_auditor/fake_consent_auditor.cc b/components/consent_auditor/fake_consent_auditor.cc index 3301dc6d..3655896 100644 --- a/components/consent_auditor/fake_consent_auditor.cc +++ b/components/consent_auditor/fake_consent_auditor.cc
@@ -7,8 +7,6 @@ #include "components/consent_auditor/consent_auditor.h" #include "components/consent_auditor/fake_consent_auditor.h" -#include "components/sync/protocol/user_consent_specifics.pb.h" -#include "components/sync/protocol/user_consent_types.pb.h" namespace { @@ -48,28 +46,19 @@ void FakeConsentAuditor::RecordAssistantActivityControlConsent( const CoreAccountId& account_id, const sync_pb::UserConsentTypes::AssistantActivityControlConsent& consent) { - account_id_ = account_id; - sync_pb::UserConsentSpecifics consent_specifics; - *consent_specifics.mutable_assistant_activity_control_consent() = consent; - recorded_consents_.push_back(std::move(consent_specifics)); + NOTIMPLEMENTED(); } void FakeConsentAuditor::RecordAccountPasswordsConsent( const CoreAccountId& account_id, const sync_pb::UserConsentTypes::AccountPasswordsConsent& consent) { - account_id_ = account_id; - sync_pb::UserConsentSpecifics consent_specifics; - *consent_specifics.mutable_account_passwords_consent() = consent; - recorded_consents_.push_back(std::move(consent_specifics)); + NOTIMPLEMENTED(); } void FakeConsentAuditor::RecordAutofillAssistantConsent( const CoreAccountId& account_id, const sync_pb::UserConsentTypes::AutofillAssistantConsent& consent) { - account_id_ = account_id; - sync_pb::UserConsentSpecifics consent_specifics; - *consent_specifics.mutable_autofill_assistant_consent() = consent; - recorded_consents_.push_back(std::move(consent_specifics)); + NOTIMPLEMENTED(); } void FakeConsentAuditor::RecordGaiaConsent(
diff --git a/components/consent_auditor/fake_consent_auditor.h b/components/consent_auditor/fake_consent_auditor.h index cad823fa..28938f7 100644 --- a/components/consent_auditor/fake_consent_auditor.h +++ b/components/consent_auditor/fake_consent_auditor.h
@@ -9,8 +9,6 @@ #include <vector> #include "components/consent_auditor/consent_auditor.h" -#include "components/sync/protocol/user_consent_specifics.pb.h" -#include "components/sync/protocol/user_consent_types.pb.h" #include "testing/gmock/include/gmock/gmock.h" using ::testing::Matcher; @@ -71,8 +69,13 @@ const CoreAccountId& account_id() const { return account_id_; } - const std::vector<sync_pb::UserConsentSpecifics>& recorded_consents() const { - return recorded_consents_; + const sync_pb::UserConsentTypes::SyncConsent& recorded_sync_consent() const { + return recorded_sync_consent_; + } + + const sync_pb::UserConsentTypes::ArcPlayTermsOfServiceConsent& + recorded_play_consent() const { + return recorded_play_consent_; } const std::vector<std::vector<int>>& recorded_id_vectors() { @@ -92,10 +95,8 @@ private: CoreAccountId account_id_; - // Holds specific consent information for assistant activity control consent, - // account password consent and autofill assistant consent. Does not (yet) - // contain recorded sync consent. - std::vector<sync_pb::UserConsentSpecifics> recorded_consents_; + sync_pb::UserConsentTypes::SyncConsent recorded_sync_consent_; + sync_pb::UserConsentTypes_ArcPlayTermsOfServiceConsent recorded_play_consent_; std::vector<std::vector<int>> recorded_id_vectors_; std::vector<int> recorded_confirmation_ids_;
diff --git a/components/contextual_search/core/BUILD.gn b/components/contextual_search/core/BUILD.gn deleted file mode 100644 index 6a97b013..0000000 --- a/components/contextual_search/core/BUILD.gn +++ /dev/null
@@ -1,15 +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. - -static_library("browser") { - sources = [ - "browser/public.cc", - "browser/public.h", - ] - deps = [ - "//base", - "//components/contextual_search:buildflags", - "//components/prefs:prefs", - ] -}
diff --git a/components/contextual_search/core/DEPS b/components/contextual_search/core/DEPS new file mode 100644 index 0000000..e454fe5 --- /dev/null +++ b/components/contextual_search/core/DEPS
@@ -0,0 +1,5 @@ +include_rules = [ + "+components/translate/core/common", + "+components/translate/core/language_detection", + "+url", +]
diff --git a/components/contextual_search/core/browser/BUILD.gn b/components/contextual_search/core/browser/BUILD.gn new file mode 100644 index 0000000..d8021ac --- /dev/null +++ b/components/contextual_search/core/browser/BUILD.gn
@@ -0,0 +1,32 @@ +# 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. + +if (is_android) { + import("//build/config/android/rules.gni") +} + +static_library("browser") { + sources = [ + "contextual_search_context.cc", + "contextual_search_context.h", + "public.cc", + "public.h", + "resolved_search_term.cc", + "resolved_search_term.h", + ] + deps = [ + "//base", + "//components/contextual_search:buildflags", + "//components/prefs:prefs", + "//components/translate/core/common", + "//components/translate/core/language_detection", + "//url:url", + ] +} + +if (is_android) { + java_cpp_enum("quick_action_category_enum_javagen") { + sources = [ "resolved_search_term.h" ] + } +}
diff --git a/components/contextual_search/core/browser/contextual_search_context.cc b/components/contextual_search/core/browser/contextual_search_context.cc new file mode 100644 index 0000000..44cc55f --- /dev/null +++ b/components/contextual_search/core/browser/contextual_search_context.cc
@@ -0,0 +1,84 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/contextual_search/core/browser/contextual_search_context.h" + +#include "components/translate/core/common/translate_constants.h" +#include "components/translate/core/language_detection/language_detection_util.h" + +ContextualSearchContext::ContextualSearchContext() = default; + +ContextualSearchContext::ContextualSearchContext( + const std::string& home_country, + const GURL& page_url, + const std::string& encoding) + : can_resolve_(true), + can_send_base_page_url_(true), + home_country_(home_country), + base_page_url_(page_url), + base_page_encoding_(encoding) {} + +ContextualSearchContext::~ContextualSearchContext() = default; + +void ContextualSearchContext::SetResolveProperties( + const std::string& home_country, + bool may_send_base_page_url) { + can_resolve_ = true; + home_country_ = home_country; + can_send_base_page_url_ = may_send_base_page_url; +} + +void ContextualSearchContext::AdjustSelection(int start_adjust, + int end_adjust) { + // TODO(crbug.com/1343955): These values should be sanitized and should be + // sanitized closer to where they are received from the renderer process. + DCHECK(start_offset_ + start_adjust >= 0); + DCHECK(start_offset_ + start_adjust <= + static_cast<int>(surrounding_text_.length())); + DCHECK(end_offset_ + end_adjust >= 0); + DCHECK(end_offset_ + end_adjust <= + static_cast<int>(surrounding_text_.length())); + start_offset_ += start_adjust; + end_offset_ += end_adjust; +} + +void ContextualSearchContext::PrepareToResolve( + bool is_exact_resolve, + const std::string& related_searches_stamp) { + is_exact_resolve_ = is_exact_resolve; + related_searches_stamp_ = related_searches_stamp; + do_related_searches_ = !related_searches_stamp_.empty(); +} + +std::string ContextualSearchContext::DetectLanguage() const { + std::string language = GetReliableLanguage(GetSelection()); + if (language.empty()) + language = GetReliableLanguage(surrounding_text_); + return language; +} + +std::string ContextualSearchContext::GetReliableLanguage( + const std::u16string& contents) const { + std::string model_detected_language; + bool is_model_reliable; + float model_reliability_score; + std::string language = translate::DeterminePageLanguage( + /*code=*/std::string(), + /*html_lang=*/std::string(), contents, &model_detected_language, + &is_model_reliable, model_reliability_score); + // Make sure we return an empty string when unreliable or an unknown result. + if (!is_model_reliable || language == translate::kUnknownLanguageCode) + language = ""; + return language; +} + +std::u16string ContextualSearchContext::GetSelection() const { + int start = start_offset_; + int end = end_offset_; + DCHECK(start >= 0); + DCHECK(end >= 0); + DCHECK(end <= static_cast<int>(surrounding_text_.length())); + DCHECK(start <= end); + return surrounding_text_.substr(start, end - start); +}
diff --git a/components/contextual_search/core/browser/contextual_search_context.h b/components/contextual_search/core/browser/contextual_search_context.h new file mode 100644 index 0000000..97ab21f --- /dev/null +++ b/components/contextual_search/core/browser/contextual_search_context.h
@@ -0,0 +1,161 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_CONTEXTUAL_SEARCH_CORE_BROWSER_CONTEXTUAL_SEARCH_CONTEXT_H_ +#define COMPONENTS_CONTEXTUAL_SEARCH_CORE_BROWSER_CONTEXTUAL_SEARCH_CONTEXT_H_ + +#include <string> + +#include "url/gurl.h" + +// Encapsulates key parts of a Contextual Search Context, including surrounding +// text. +struct ContextualSearchContext { + public: + // Languages used for translation. + struct TranslationLanguages { + std::string detected_language; + std::string target_language; + std::string fluent_languages; + }; + + ContextualSearchContext(); + // Constructor for tests. + ContextualSearchContext(const std::string& home_country, + const GURL& page_url, + const std::string& encoding); + + ContextualSearchContext(const ContextualSearchContext&) = delete; + ContextualSearchContext& operator=(const ContextualSearchContext&) = delete; + + ~ContextualSearchContext(); + + // Returns whether this context can be resolved. + // The context can be resolved only after calling SetResolveProperties. + bool CanResolve() const { return can_resolve_; } + + // Returns whether the base page URL may be sent (according to policy). + bool CanSendBasePageUrl() const { return can_send_base_page_url_; } + + // Sets the properties needed to resolve a context. + void SetResolveProperties(const std::string& home_country, + bool may_send_base_page_url); + + // Sets the surrounding text to the given string and the selection to the + // given start/end range. + void SetSurroundingsAndSelection(const std::string& surrounding_text, + int selection_start, + int selection_end); + + // Adjust the current selection offsets by the given signed amounts. + void AdjustSelection(int start_adjust, int end_adjust); + + // Gets the URL of the base page. + const GURL& GetBasePageUrl() const { return base_page_url_; } + // Sets the URL of the base page. + void SetBasePageUrl(const GURL& base_page_url) { + base_page_url_ = base_page_url; + } + + // Gets the encoding of the base page. This is not very important, since + // the surrounding text stored here in a std::u16string is implicitly encoded + // in UTF-16 (see http://www.chromium.org/developers/chromium-string-usage). + const std::string& GetBasePageEncoding() const { return base_page_encoding_; } + void SetBasePageEncoding(const std::string& base_page_encoding) { + base_page_encoding_ = base_page_encoding; + } + + // Gets the country code of the home country of the user, or an empty string. + const std::string& GetHomeCountry() const { return home_country_; } + + // Sets the selection and surroundings. + void SetSelectionSurroundings(int start_offset, + int end_offset, + const std::u16string& surrounding_text) { + start_offset_ = start_offset; + end_offset_ = end_offset; + surrounding_text_ = surrounding_text; + } + + // Gets the text surrounding the selection (including the selection). + const std::u16string& GetSurroundingText() const { return surrounding_text_; } + + // Gets the start offset of the selection within the surrounding text (in + // characters). + int GetStartOffset() const { return start_offset_; } + // Gets the end offset of the selection within the surrounding text (in + // characters). + int GetEndOffset() const { return end_offset_; } + + int64_t GetPreviousEventId() const { return previous_event_id_; } + int GetPreviousEventResults() const { return previous_event_results_; } + + // Prepares the context to be used in a resolve request by supplying last + // minute parameters. + // |is_exact_resolve| indicates if the resolved term should be an exact match + // for the selection range instead of an expandable selection. + // |related_searches_stamp| is a value to stamp onto search URLs to identify + // related searches. If the string is empty then Related Searches are not + // being requested. + void PrepareToResolve(bool is_exact_resolve, + const std::string& related_searches_stamp); + + // Returns whether the resolve request is for an exact match instead of an + // expandable term. + bool GetExactResolve() const { return is_exact_resolve_; } + + // Detects the language of the context using CLD from the translate utility. + std::string DetectLanguage() const; + + // Sets the languages to remember for use in translation. + // See |GetTranslationLanguages|. + void SetTranslationLanguages(const std::string& detected_language, + const std::string& target_language, + const std::string& fluent_languages) { + translation_languages_.detected_language = detected_language; + translation_languages_.target_language = target_language; + translation_languages_.fluent_languages = fluent_languages; + } + + // Returns the languages to use for translation, as set by + // |SetTranslationLanguages|. + const TranslationLanguages& GetTranslationLanguages() const { + return translation_languages_; + } + + // Returns whether this request should include Related Searches in the + // response. + bool GetRelatedSearches() const { return do_related_searches_; } + + // Get the logging information stamp for Related Searches requests or the + // empty string if the feature is not enabled. + const std::string& GetRelatedSearchesStamp() const { + return related_searches_stamp_; + } + + private: + // Gets the reliable language of the given |contents| using CLD, or an empty + // string if none can reliably be determined. + std::string GetReliableLanguage(const std::u16string& contents) const; + + // Gets the selection, or an empty string if none. + std::u16string GetSelection() const; + + bool can_resolve_ = false; + bool can_send_base_page_url_ = false; + std::string home_country_; + GURL base_page_url_; + std::string base_page_encoding_; + std::u16string surrounding_text_; + int start_offset_ = 0; + int end_offset_ = 0; + int64_t previous_event_id_ = 0L; + int previous_event_results_ = 0; + bool is_exact_resolve_ = false; + TranslationLanguages translation_languages_; + bool do_related_searches_ = false; + std::string related_searches_stamp_; +}; + +#endif // COMPONENTS_CONTEXTUAL_SEARCH_CORE_BROWSER_CONTEXTUAL_SEARCH_CONTEXT_H_
diff --git a/chrome/browser/android/contextualsearch/resolved_search_term.cc b/components/contextual_search/core/browser/resolved_search_term.cc similarity index 96% rename from chrome/browser/android/contextualsearch/resolved_search_term.cc rename to components/contextual_search/core/browser/resolved_search_term.cc index 249df6d..9978f0a8 100644 --- a/chrome/browser/android/contextualsearch/resolved_search_term.cc +++ b/components/contextual_search/core/browser/resolved_search_term.cc
@@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "chrome/browser/android/contextualsearch/resolved_search_term.h" +#include "components/contextual_search/core/browser/resolved_search_term.h" ResolvedSearchTerm::ResolvedSearchTerm(int response_code) : is_invalid(response_code == kResponseCodeUninitialized),
diff --git a/chrome/browser/android/contextualsearch/resolved_search_term.h b/components/contextual_search/core/browser/resolved_search_term.h similarity index 82% rename from chrome/browser/android/contextualsearch/resolved_search_term.h rename to components/contextual_search/core/browser/resolved_search_term.h index 1cd3085..db969b3 100644 --- a/chrome/browser/android/contextualsearch/resolved_search_term.h +++ b/components/contextual_search/core/browser/resolved_search_term.h
@@ -2,24 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef CHROME_BROWSER_ANDROID_CONTEXTUALSEARCH_RESOLVED_SEARCH_TERM_H_ -#define CHROME_BROWSER_ANDROID_CONTEXTUALSEARCH_RESOLVED_SEARCH_TERM_H_ +#ifndef COMPONENTS_CONTEXTUAL_SEARCH_CORE_BROWSER_RESOLVED_SEARCH_TERM_H_ +#define COMPONENTS_CONTEXTUAL_SEARCH_CORE_BROWSER_RESOLVED_SEARCH_TERM_H_ -#include <string.h> - -#include <algorithm> -#include <cmath> -#include <new> -#include <ostream> -#include <utility> - -#include "base/containers/checked_iterators.h" -#include "base/json/json_writer.h" -#include "base/logging.h" -#include "base/memory/ptr_util.h" -#include "base/strings/string_util.h" -#include "base/strings/utf_string_conversions.h" -#include "base/trace_event/memory_usage_estimator.h" +#include <string> // Provides the native support needed for the Java class by the same name, // which encapsulates a server response for Contextual Search. @@ -91,4 +77,4 @@ const std::string related_searches_json; }; -#endif // CHROME_BROWSER_ANDROID_CONTEXTUALSEARCH_RESOLVED_SEARCH_TERM_H_ +#endif // COMPONENTS_CONTEXTUAL_SEARCH_CORE_BROWSER_RESOLVED_SEARCH_TERM_H_
diff --git a/components/cronet/android/api.txt b/components/cronet/android/api.txt index 730e515..76479bb 100644 --- a/components/cronet/android/api.txt +++ b/components/cronet/android/api.txt
@@ -100,7 +100,7 @@ public org.chromium.net.ExperimentalBidirectionalStream$Builder addRequestAnnotation(java.lang.Object); public org.chromium.net.ExperimentalBidirectionalStream$Builder setTrafficStatsTag(int); public org.chromium.net.ExperimentalBidirectionalStream$Builder setTrafficStatsUid(int); - public org.chromium.net.ExperimentalBidirectionalStream$Builder bindToNetwork(android.net.Network); + public org.chromium.net.ExperimentalBidirectionalStream$Builder bindToNetwork(long); public abstract org.chromium.net.ExperimentalBidirectionalStream$Builder setHttpMethod(java.lang.String); public abstract org.chromium.net.ExperimentalBidirectionalStream$Builder addHeader(java.lang.String, java.lang.String); public abstract org.chromium.net.ExperimentalBidirectionalStream$Builder setPriority(int); @@ -153,6 +153,7 @@ public static final int EFFECTIVE_CONNECTION_TYPE_2G; public static final int EFFECTIVE_CONNECTION_TYPE_3G; public static final int EFFECTIVE_CONNECTION_TYPE_4G; + public static final long UNBIND_NETWORK_HANDLE; public org.chromium.net.ExperimentalCronetEngine(); public abstract org.chromium.net.ExperimentalBidirectionalStream$Builder newBidirectionalStreamBuilder(java.lang.String, org.chromium.net.BidirectionalStream$Callback, java.util.concurrent.Executor); public abstract org.chromium.net.ExperimentalUrlRequest$Builder newUrlRequestBuilder(java.lang.String, org.chromium.net.UrlRequest$Callback, java.util.concurrent.Executor); @@ -169,7 +170,7 @@ public int getHttpRttMs(); public int getTransportRttMs(); public int getDownstreamThroughputKbps(); - public void bindToNetwork(android.net.Network); + public void bindToNetwork(long); public org.chromium.net.UrlRequest$Builder newUrlRequestBuilder(java.lang.String, org.chromium.net.UrlRequest$Callback, java.util.concurrent.Executor); } public abstract class org.chromium.net.ExperimentalUrlRequest$Builder extends org.chromium.net.UrlRequest$Builder { @@ -182,7 +183,7 @@ public org.chromium.net.ExperimentalUrlRequest$Builder setTrafficStatsTag(int); public org.chromium.net.ExperimentalUrlRequest$Builder setTrafficStatsUid(int); public org.chromium.net.ExperimentalUrlRequest$Builder setRequestFinishedListener(org.chromium.net.RequestFinishedInfo$Listener); - public org.chromium.net.ExperimentalUrlRequest$Builder bindToNetwork(android.net.Network); + public org.chromium.net.ExperimentalUrlRequest$Builder bindToNetwork(long); public org.chromium.net.ExperimentalUrlRequest$Builder setIdempotency(int); public abstract org.chromium.net.ExperimentalUrlRequest$Builder setHttpMethod(java.lang.String); public abstract org.chromium.net.ExperimentalUrlRequest$Builder addHeader(java.lang.String, java.lang.String); @@ -401,4 +402,4 @@ public abstract java.lang.String getProxyServer(); public abstract long getReceivedByteCount(); } -Stamp: c760ed0e85d0a71dd2dfa3a34bfbbd08 +Stamp: bfdd219e38031474ec7a93b265352d94
diff --git a/components/cronet/android/api/src/org/chromium/net/ExperimentalBidirectionalStream.java b/components/cronet/android/api/src/org/chromium/net/ExperimentalBidirectionalStream.java index cb6303dd..524357b 100644 --- a/components/cronet/android/api/src/org/chromium/net/ExperimentalBidirectionalStream.java +++ b/components/cronet/android/api/src/org/chromium/net/ExperimentalBidirectionalStream.java
@@ -4,10 +4,6 @@ package org.chromium.net; -import android.net.Network; - -import androidx.annotation.Nullable; - /** * {@link BidirectionalStream} that exposes experimental features. To obtain an * instance of this class, cast a {@code BidirectionalStream} to this type. Every @@ -84,15 +80,17 @@ } /** - * Binds the request to the specified network. Cronet will send this request only using - * this network. If this network disconnects the request will fail, the exact error will - * depend on the stage of request processing when the network disconnects. + * Binds the request to the specified network handle. Cronet will send this request only + * using the network associated to this handle. If this network disconnects the request will + * fail, the exact error will depend on the stage of request processing when the network + * disconnects. Network handles can be obtained through {@code Network#getNetworkHandle}. * Only available starting from Android Marshmallow. * - * @param network the network to bind the request to. Specify {@code null} to unbind. + * @param networkHandle the network handle to bind the request to. Specify + * {@link ExperimentalCronetEngine#UNBIND_NETWORK_HANDLE} to unbind. * @return the builder to facilitate chaining. */ - public Builder bindToNetwork(@Nullable Network network) { + public Builder bindToNetwork(long networkHandle) { return this; }
diff --git a/components/cronet/android/api/src/org/chromium/net/ExperimentalCronetEngine.java b/components/cronet/android/api/src/org/chromium/net/ExperimentalCronetEngine.java index 4e98c3a..2b5f396 100644 --- a/components/cronet/android/api/src/org/chromium/net/ExperimentalCronetEngine.java +++ b/components/cronet/android/api/src/org/chromium/net/ExperimentalCronetEngine.java
@@ -4,9 +4,7 @@ package org.chromium.net; import android.content.Context; -import android.net.Network; -import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import java.io.IOException; @@ -77,6 +75,11 @@ public static final int EFFECTIVE_CONNECTION_TYPE_4G = 5; /** + * The value to be used to undo any previous network binding. + */ + public static final long UNBIND_NETWORK_HANDLE = -1; + + /** * A version of {@link CronetEngine.Builder} that exposes experimental * features. Instances of this class are not meant for general use, but * instead only to access experimental features. Experimental features @@ -414,12 +417,14 @@ } /** - * Binds the engine to the specified network. All requests created through this engine will use - * this network. If this network disconnects all requests will fail, the exact error will - * depend on the stage of request processing when the network disconnects. + * Binds the engine to the specified network handle. All requests created through this engine + * will use the network associated to this handle. If this network disconnects all requests will + * fail, the exact error will depend on the stage of request processing when the network + * disconnects. Network handles can be obtained through {@code Network#getNetworkHandle}. * Only available starting from Android Marshmallow. * - * @param network the network to bind the engine to. Specify {@code null} to unbind. + * @param networkHandle the network handle to bind the engine to. Specify + * {@link #UNBIND_NETWORK_HANDLE} to unbind. */ - public void bindToNetwork(@Nullable Network network) {} + public void bindToNetwork(long networkHandle) {} }
diff --git a/components/cronet/android/api/src/org/chromium/net/ExperimentalUrlRequest.java b/components/cronet/android/api/src/org/chromium/net/ExperimentalUrlRequest.java index 4f08a29..c297c89 100644 --- a/components/cronet/android/api/src/org/chromium/net/ExperimentalUrlRequest.java +++ b/components/cronet/android/api/src/org/chromium/net/ExperimentalUrlRequest.java
@@ -3,10 +3,6 @@ // found in the LICENSE file. package org.chromium.net; -import android.net.Network; - -import androidx.annotation.Nullable; - import java.util.concurrent.Executor; /** @@ -110,15 +106,17 @@ } /** - * Binds the request to the specified network. Cronet will send this request only using - * this network. If this network disconnects the request will fail, the exact error will - * depend on the stage of request processing when the network disconnects. + * Binds the request to the specified network handle. Cronet will send this request only + * using the network associated to this handle. If this network disconnects the request will + * fail, the exact error will depend on the stage of request processing when the network + * disconnects. Network handles can be obtained through {@code Network#getNetworkHandle}. * Only available starting from Android Marshmallow. * - * @param network the network to bind the request to. Specify {@code null} to unbind. + * @param networkHandle the network handle to bind the request to. Specify + * {@link ExperimentalCronetEngine#UNBIND_NETWORK_HANDLE} to unbind. * @return the builder to facilitate chaining. */ - public Builder bindToNetwork(@Nullable Network network) { + public Builder bindToNetwork(long networkHandle) { return this; }
diff --git a/components/cronet/android/fake/java/org/chromium/net/test/FakeCronetEngine.java b/components/cronet/android/fake/java/org/chromium/net/test/FakeCronetEngine.java index 1bab399..ff0ef5b 100644 --- a/components/cronet/android/fake/java/org/chromium/net/test/FakeCronetEngine.java +++ b/components/cronet/android/fake/java/org/chromium/net/test/FakeCronetEngine.java
@@ -5,10 +5,8 @@ package org.chromium.net.test; import android.content.Context; -import android.net.Network; import androidx.annotation.GuardedBy; -import androidx.annotation.Nullable; import org.chromium.net.BidirectionalStream; import org.chromium.net.CronetEngine; @@ -188,7 +186,7 @@ } @Override - public void bindToNetwork(@Nullable Network network) { + public void bindToNetwork(long networkHandle) { throw new UnsupportedOperationException( "The multi-network API is not supported by the Fake implementation " + "of Cronet Engine"); @@ -245,8 +243,8 @@ boolean disableCache, boolean disableConnectionMigration, boolean allowDirectExecutor, boolean trafficStatsTagSet, int trafficStatsTag, boolean trafficStatsUidSet, int trafficStatsUid, RequestFinishedInfo.Listener requestFinishedListener, - int idempotency, @Nullable Network network) { - if (network != null) { + int idempotency, long networkHandle) { + if (networkHandle != DEFAULT_NETWORK_HANDLE) { throw new UnsupportedOperationException( "The multi-network API is not supported by the Fake implementation " + "of Cronet Engine"); @@ -270,8 +268,8 @@ List<Map.Entry<String, String>> requestHeaders, @StreamPriority int priority, boolean delayRequestHeadersUntilFirstFlush, Collection<Object> connectionAnnotations, boolean trafficStatsTagSet, int trafficStatsTag, boolean trafficStatsUidSet, - int trafficStatsUid, @Nullable Network network) { - if (network != null) { + int trafficStatsUid, long networkHandle) { + if (networkHandle != DEFAULT_NETWORK_HANDLE) { throw new UnsupportedOperationException( "The multi-network API is not supported by the Fake implementation " + "of Cronet Engine");
diff --git a/components/cronet/android/implementation_api_version.txt b/components/cronet/android/implementation_api_version.txt index 60d3b2f4..b6a7d89c 100644 --- a/components/cronet/android/implementation_api_version.txt +++ b/components/cronet/android/implementation_api_version.txt
@@ -1 +1 @@ -15 +16
diff --git a/components/cronet/android/interface_api_version.txt b/components/cronet/android/interface_api_version.txt index 60d3b2f4..b6a7d89c 100644 --- a/components/cronet/android/interface_api_version.txt +++ b/components/cronet/android/interface_api_version.txt
@@ -1 +1 @@ -15 +16
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/BidirectionalStreamBuilderImpl.java b/components/cronet/android/java/src/org/chromium/net/impl/BidirectionalStreamBuilderImpl.java index a1174cd..9a1d8c5 100644 --- a/components/cronet/android/java/src/org/chromium/net/impl/BidirectionalStreamBuilderImpl.java +++ b/components/cronet/android/java/src/org/chromium/net/impl/BidirectionalStreamBuilderImpl.java
@@ -4,11 +4,8 @@ package org.chromium.net.impl; import android.annotation.SuppressLint; -import android.net.Network; import android.os.Build; -import androidx.annotation.Nullable; - import org.chromium.net.BidirectionalStream; import org.chromium.net.CronetEngine; import org.chromium.net.ExperimentalBidirectionalStream; @@ -52,7 +49,7 @@ private int mTrafficStatsTag; private boolean mTrafficStatsUidSet; private int mTrafficStatsUid; - private @Nullable Network mNetwork; + private long mNetworkHandle = CronetEngineBase.DEFAULT_NETWORK_HANDLE; /** * Creates a builder for {@link BidirectionalStream} objects. All callbacks for @@ -151,12 +148,12 @@ } @Override - public ExperimentalBidirectionalStream.Builder bindToNetwork(@Nullable Network network) { + public ExperimentalBidirectionalStream.Builder bindToNetwork(long networkHandle) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { throw new UnsupportedOperationException( "The multi-network API is available starting from Android Marshmallow"); } - mNetwork = network; + mNetworkHandle = networkHandle; return this; } @@ -166,6 +163,6 @@ return mCronetEngine.createBidirectionalStream(mUrl, mCallback, mExecutor, mHttpMethod, mRequestHeaders, mPriority, mDelayRequestHeadersUntilFirstFlush, mRequestAnnotations, mTrafficStatsTagSet, mTrafficStatsTag, mTrafficStatsUidSet, - mTrafficStatsUid, mNetwork); + mTrafficStatsUid, mNetworkHandle); } }
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/CronetBidirectionalStream.java b/components/cronet/android/java/src/org/chromium/net/impl/CronetBidirectionalStream.java index 8af6b26..8bf9f39e 100644 --- a/components/cronet/android/java/src/org/chromium/net/impl/CronetBidirectionalStream.java +++ b/components/cronet/android/java/src/org/chromium/net/impl/CronetBidirectionalStream.java
@@ -4,10 +4,7 @@ package org.chromium.net.impl; -import android.net.Network; - import androidx.annotation.IntDef; -import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import org.chromium.base.Log; @@ -48,12 +45,6 @@ @JNINamespace("cronet") @VisibleForTesting public class CronetBidirectionalStream extends ExperimentalBidirectionalStream { - /* - * Network handle representing the default network. To be used when a network has not been - * explicitly set. - */ - private static final long DEFAULT_NETWORK_HANDLE = -1; - /** * States of BidirectionalStream are tracked in mReadState and mWriteState. * The write state is separated out as it changes independently of the read state. @@ -251,7 +242,7 @@ String httpMethod, List<Map.Entry<String, String>> requestHeaders, boolean delayRequestHeadersUntilNextFlush, Collection<Object> requestAnnotations, boolean trafficStatsTagSet, int trafficStatsTag, boolean trafficStatsUidSet, - int trafficStatsUid, @Nullable Network network) { + int trafficStatsUid, long networkHandle) { mRequestContext = requestContext; mInitialUrl = url; mInitialPriority = convertStreamPriority(priority); @@ -267,7 +258,7 @@ mTrafficStatsTag = trafficStatsTag; mTrafficStatsUidSet = trafficStatsUidSet; mTrafficStatsUid = trafficStatsUid; - mNetworkHandle = network != null ? network.getNetworkHandle() : DEFAULT_NETWORK_HANDLE; + mNetworkHandle = networkHandle; } @Override
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/CronetEngineBase.java b/components/cronet/android/java/src/org/chromium/net/impl/CronetEngineBase.java index ffe2673c..732df9c 100644 --- a/components/cronet/android/java/src/org/chromium/net/impl/CronetEngineBase.java +++ b/components/cronet/android/java/src/org/chromium/net/impl/CronetEngineBase.java
@@ -3,8 +3,6 @@ // found in the LICENSE file. package org.chromium.net.impl; -import android.net.Network; - import androidx.annotation.IntDef; import androidx.annotation.Nullable; @@ -28,6 +26,12 @@ * shared logic. */ public abstract class CronetEngineBase extends ExperimentalCronetEngine { + /* + * Network handle representing the default network. To be used when a network has not been + * explicitly set. + */ + protected static final long DEFAULT_NETWORK_HANDLE = -1; + /** * Creates a {@link UrlRequest} object. All callbacks will * be called on {@code executor}'s thread. {@code executor} must not run @@ -67,7 +71,7 @@ boolean disableCache, boolean disableConnectionMigration, boolean allowDirectExecutor, boolean trafficStatsTagSet, int trafficStatsTag, boolean trafficStatsUidSet, int trafficStatsUid, @Nullable RequestFinishedInfo.Listener requestFinishedListener, - @Idempotency int idempotency, @Nullable Network network); + @Idempotency int idempotency, long networkHandle); /** * Creates a {@link BidirectionalStream} object. {@code callback} methods will @@ -102,7 +106,7 @@ List<Map.Entry<String, String>> requestHeaders, @StreamPriority int priority, boolean delayRequestHeadersUntilFirstFlush, Collection<Object> requestAnnotations, boolean trafficStatsTagSet, int trafficStatsTag, boolean trafficStatsUidSet, - int trafficStatsUid, @Nullable Network network); + int trafficStatsUid, long networkHandle); @Override public ExperimentalUrlRequest.Builder newUrlRequestBuilder(
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java b/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java index be7c329..06b8c3c 100644 --- a/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java +++ b/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java
@@ -4,10 +4,8 @@ package org.chromium.net.impl; -import android.net.Network; import android.os.Build; -import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; import androidx.annotation.VisibleForTesting; @@ -55,12 +53,6 @@ @JNIAdditionalImport(VersionSafeCallbacks.class) @VisibleForTesting public final class CronetUrlRequest extends UrlRequestBase { - /* - * Network handle representing the default network. To be used when a network has not been - * explicitly set. - */ - private static final long DEFAULT_NETWORK_HANDLE = -1; - private final boolean mAllowDirectExecutor; /* Native adapter object, owned by UrlRequest. */ @@ -160,7 +152,7 @@ boolean disableCache, boolean disableConnectionMigration, boolean allowDirectExecutor, boolean trafficStatsTagSet, int trafficStatsTag, boolean trafficStatsUidSet, int trafficStatsUid, RequestFinishedInfo.Listener requestFinishedListener, - int idempotency, @Nullable Network network) { + int idempotency, long networkHandle) { if (url == null) { throw new NullPointerException("URL is required"); } @@ -191,7 +183,7 @@ ? new VersionSafeCallbacks.RequestFinishedInfoListener(requestFinishedListener) : null; mIdempotency = convertIdempotency(idempotency); - mNetworkHandle = network != null ? network.getNetworkHandle() : DEFAULT_NETWORK_HANDLE; + mNetworkHandle = networkHandle; } @Override
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java b/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java index f475bb5..d7c45ae2 100644 --- a/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java +++ b/components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java
@@ -4,12 +4,10 @@ package org.chromium.net.impl; -import android.net.Network; import android.os.Build; import android.os.ConditionVariable; import android.os.Process; -import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; import org.chromium.base.Log; @@ -161,8 +159,8 @@ @GuardedBy("mLock") private boolean mIsStoppingNetLog; - /** If not null, the network to be used for requests that do not explicitly specify one. **/ - private @Nullable Network mNetwork; + /** The network handle to be used for requests that do not explicitly specify one. **/ + private long mNetworkHandle = DEFAULT_NETWORK_HANDLE; private final int mCronetEngineId; private final CronetLogger mLogger; @@ -275,16 +273,16 @@ boolean disableConnectionMigration, boolean allowDirectExecutor, boolean trafficStatsTagSet, int trafficStatsTag, boolean trafficStatsUidSet, int trafficStatsUid, RequestFinishedInfo.Listener requestFinishedListener, - int idempotency, @Nullable Network network) { - if (network == null) { - network = mNetwork; + int idempotency, long networkHandle) { + if (networkHandle == DEFAULT_NETWORK_HANDLE) { + networkHandle = mNetworkHandle; } synchronized (mLock) { checkHaveAdapter(); return new CronetUrlRequest(this, url, priority, callback, executor, requestAnnotations, disableCache, disableConnectionMigration, allowDirectExecutor, trafficStatsTagSet, trafficStatsTag, trafficStatsUidSet, trafficStatsUid, - requestFinishedListener, idempotency, network); + requestFinishedListener, idempotency, networkHandle); } } @@ -294,16 +292,16 @@ List<Map.Entry<String, String>> requestHeaders, @StreamPriority int priority, boolean delayRequestHeadersUntilFirstFlush, Collection<Object> requestAnnotations, boolean trafficStatsTagSet, int trafficStatsTag, boolean trafficStatsUidSet, - int trafficStatsUid, @Nullable Network network) { - if (network == null) { - network = mNetwork; + int trafficStatsUid, long networkHandle) { + if (networkHandle == DEFAULT_NETWORK_HANDLE) { + networkHandle = mNetworkHandle; } synchronized (mLock) { checkHaveAdapter(); return new CronetBidirectionalStream(this, url, priority, callback, executor, httpMethod, requestHeaders, delayRequestHeadersUntilFirstFlush, requestAnnotations, trafficStatsTagSet, trafficStatsTag, trafficStatsUidSet, - trafficStatsUid, network); + trafficStatsUid, networkHandle); } } @@ -454,12 +452,12 @@ } @Override - public void bindToNetwork(@Nullable Network network) { + public void bindToNetwork(long networkHandle) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { throw new UnsupportedOperationException( "The multi-network API is available starting from Android Marshmallow"); } - mNetwork = network; + mNetworkHandle = networkHandle; } @VisibleForTesting
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/JavaCronetEngine.java b/components/cronet/android/java/src/org/chromium/net/impl/JavaCronetEngine.java index 8a1d5aa..892eeaf6 100644 --- a/components/cronet/android/java/src/org/chromium/net/impl/JavaCronetEngine.java +++ b/components/cronet/android/java/src/org/chromium/net/impl/JavaCronetEngine.java
@@ -7,10 +7,6 @@ import static android.os.Process.THREAD_PRIORITY_BACKGROUND; import static android.os.Process.THREAD_PRIORITY_MORE_FAVORABLE; -import android.net.Network; - -import androidx.annotation.Nullable; - import org.chromium.net.BidirectionalStream; import org.chromium.net.ExperimentalBidirectionalStream; import org.chromium.net.NetworkQualityRttListener; @@ -98,8 +94,8 @@ boolean disableConnectionMigration, boolean allowDirectExecutor, boolean trafficStatsTagSet, int trafficStatsTag, boolean trafficStatsUidSet, int trafficStatsUid, RequestFinishedInfo.Listener requestFinishedListener, - int idempotency, @Nullable Network network) { - if (network != null) { + int idempotency, long networkHandle) { + if (networkHandle != DEFAULT_NETWORK_HANDLE) { throw new UnsupportedOperationException( "The multi-network API is not supported by the Java implementation " + "of Cronet Engine"); @@ -115,7 +111,7 @@ List<Map.Entry<String, String>> requestHeaders, @StreamPriority int priority, boolean delayRequestHeadersUntilFirstFlush, Collection<Object> connectionAnnotations, boolean trafficStatsTagSet, int trafficStatsTag, boolean trafficStatsUidSet, - int trafficStatsUid, @Nullable Network network) { + int trafficStatsUid, long networkHandle) { throw new UnsupportedOperationException( "Can't create a bidi stream - httpurlconnection doesn't have those APIs"); } @@ -173,7 +169,7 @@ } @Override - public void bindToNetwork(@Nullable Network network) { + public void bindToNetwork(long networkHandle) { throw new UnsupportedOperationException( "The multi-network API is not supported by the Java implementation " + "of Cronet Engine");
diff --git a/components/cronet/android/java/src/org/chromium/net/impl/UrlRequestBuilderImpl.java b/components/cronet/android/java/src/org/chromium/net/impl/UrlRequestBuilderImpl.java index c4c3dacc..1ce8f07bc 100644 --- a/components/cronet/android/java/src/org/chromium/net/impl/UrlRequestBuilderImpl.java +++ b/components/cronet/android/java/src/org/chromium/net/impl/UrlRequestBuilderImpl.java
@@ -4,13 +4,10 @@ package org.chromium.net.impl; import android.annotation.SuppressLint; -import android.net.Network; import android.os.Build; import android.util.Log; import android.util.Pair; -import androidx.annotation.Nullable; - import org.chromium.net.CronetEngine; import org.chromium.net.ExperimentalUrlRequest; import org.chromium.net.RequestFinishedInfo; @@ -63,7 +60,7 @@ private boolean mTrafficStatsUidSet; private int mTrafficStatsUid; private RequestFinishedInfo.Listener mRequestFinishedListener; - private Network mNetwork; + private long mNetworkHandle = CronetEngineBase.DEFAULT_NETWORK_HANDLE; // Idempotency of the request. @CronetEngineBase.Idempotency private int mIdempotency = DEFAULT_IDEMPOTENCY; @@ -209,12 +206,12 @@ } @Override - public UrlRequestBuilderImpl bindToNetwork(@Nullable Network network) { + public UrlRequestBuilderImpl bindToNetwork(long networkHandle) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { throw new UnsupportedOperationException( "The multi-network API is available starting from Android Marshmallow"); } - mNetwork = network; + mNetworkHandle = networkHandle; return this; } @@ -224,7 +221,7 @@ final UrlRequestBase request = mCronetEngine.createRequest(mUrl, mCallback, mExecutor, mPriority, mRequestAnnotations, mDisableCache, mDisableConnectionMigration, mAllowDirectExecutor, mTrafficStatsTagSet, mTrafficStatsTag, mTrafficStatsUidSet, - mTrafficStatsUid, mRequestFinishedListener, mIdempotency, mNetwork); + mTrafficStatsUid, mRequestFinishedListener, mIdempotency, mNetworkHandle); if (mMethod != null) { request.setHttpMethod(mMethod); }
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java index aadcc5ba..dab3861f 100644 --- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java +++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestContextTest.java
@@ -390,7 +390,7 @@ ExperimentalUrlRequest.Builder urlRequestBuilder = (ExperimentalUrlRequest.Builder) testFramework.mCronetEngine.newUrlRequestBuilder( mUrl, callback, callback.getExecutor()); - urlRequestBuilder.bindToNetwork(defaultNetwork); + urlRequestBuilder.bindToNetwork(defaultNetwork.getNetworkHandle()); UrlRequest urlRequest = urlRequestBuilder.build(); assertFalse( @@ -457,7 +457,7 @@ return; } - urlRequestBuilder.bindToNetwork(defaultNetwork); + urlRequestBuilder.bindToNetwork(defaultNetwork.getNetworkHandle()); UrlRequest urlRequest = urlRequestBuilder.build(); assertFalse(
diff --git a/components/device_signals/core/browser/base_signals_collector.h b/components/device_signals/core/browser/base_signals_collector.h index d9b764d5..82b9696 100644 --- a/components/device_signals/core/browser/base_signals_collector.h +++ b/components/device_signals/core/browser/base_signals_collector.h
@@ -7,6 +7,7 @@ #include <unordered_map> +#include "base/callback.h" #include "components/device_signals/core/browser/signals_collector.h" namespace device_signals {
diff --git a/components/digital_asset_links/digital_asset_links_handler.cc b/components/digital_asset_links/digital_asset_links_handler.cc index 34ba3a9a..c0a683b 100644 --- a/components/digital_asset_links/digital_asset_links_handler.cc +++ b/components/digital_asset_links/digital_asset_links_handler.cc
@@ -175,16 +175,16 @@ absl::optional<std::string> fingerprint, std::map<std::string, std::set<std::string>> target_values, data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { + if (!result.has_value()) { AddMessageToConsole( web_contents_.get(), "Digital Asset Links response parsing failed with message: " + - *result.error); + result.error()); std::move(callback_).Run(RelationshipCheckResult::kFailure); return; } - auto& statement_list = *result.value; + auto& statement_list = *result; if (!statement_list.is_list()) { std::move(callback_).Run(RelationshipCheckResult::kFailure); AddMessageToConsole(web_contents_.get(), "Statement List is not a list.");
diff --git a/components/endpoint_fetcher/endpoint_fetcher.cc b/components/endpoint_fetcher/endpoint_fetcher.cc index 5dd418e8..24a751a64 100644 --- a/components/endpoint_fetcher/endpoint_fetcher.cc +++ b/components/endpoint_fetcher/endpoint_fetcher.cc
@@ -246,6 +246,11 @@ void EndpointFetcher::OnResponseFetched( EndpointFetcherCallback endpoint_fetcher_callback, std::unique_ptr<std::string> response_body) { + int net_error_code = simple_url_loader_->NetError(); + // The EndpointFetcher and its members will be destroyed after + // any of the below callbacks. Do not access The EndpointFetcher + // or its members after the callbacks. + simple_url_loader_.reset(); if (response_body) { if (sanitize_response_) { data_decoder::JsonSanitizer::Sanitize( @@ -261,12 +266,11 @@ } else { auto response = std::make_unique<EndpointResponse>(); // TODO(crbug.com/993393) Add more detailed error messaging - std::string net_error = net::ErrorToString(simple_url_loader_->NetError()); + std::string net_error = net::ErrorToString(net_error_code); VLOG(1) << __func__ << " with response error: " << net_error; response->response = "There was a response error"; std::move(endpoint_fetcher_callback).Run(std::move(response)); } - simple_url_loader_.reset(); } void EndpointFetcher::OnSanitizationResult( @@ -280,6 +284,9 @@ "There was a sanitization error: " + result.error.value(); else response->response = "There was an unknown sanitization error"; + // The EndpointFetcher and its members will be destroyed after + // any the below callback. Do not access The EndpointFetcher + // or its members after the callback. std::move(endpoint_fetcher_callback).Run(std::move(response)); }
diff --git a/components/enterprise/BUILD.gn b/components/enterprise/BUILD.gn index eda7994f..0701ef6 100644 --- a/components/enterprise/BUILD.gn +++ b/components/enterprise/BUILD.gn
@@ -10,8 +10,6 @@ "browser/reporting/browser_report_generator.h", "browser/reporting/chrome_profile_request_generator.cc", "browser/reporting/chrome_profile_request_generator.h", - "browser/reporting/cloud_profile_reporting_policy_handler.cc", - "browser/reporting/cloud_profile_reporting_policy_handler.h", "browser/reporting/cloud_reporting_frequency_policy_handler.cc", "browser/reporting/cloud_reporting_frequency_policy_handler.h", "browser/reporting/cloud_reporting_policy_handler.cc", @@ -55,6 +53,13 @@ ] } + if (!is_ios) { + sources += [ + "browser/reporting/cloud_profile_reporting_policy_handler.cc", + "browser/reporting/cloud_profile_reporting_policy_handler.h", + ] + } + deps = [ "//base", "//build:chromeos_buildflags",
diff --git a/components/exo/BUILD.gn b/components/exo/BUILD.gn index 1b109ec1..d51dde7 100644 --- a/components/exo/BUILD.gn +++ b/components/exo/BUILD.gn
@@ -353,6 +353,7 @@ "//ui/base/cursor/mojom:cursor_type", "//ui/base/dragdrop:types", "//ui/base/dragdrop/mojom", + "//ui/base/ime/ash", "//ui/gfx:test_support", "//ui/gfx/geometry", ]
diff --git a/components/exo/text_input.cc b/components/exo/text_input.cc index 1bebfe0..dc3358c2 100644 --- a/components/exo/text_input.cc +++ b/components/exo/text_input.cc
@@ -319,11 +319,10 @@ if (input_method == input_method_) return; input_method_->DetachTextInputClient(this); - if (auto* controller = input_method_->GetVirtualKeyboardController()) - controller->RemoveObserver(this); + virtual_keyboard_observation_.Reset(); input_method_ = input_method; if (auto* controller = input_method_->GetVirtualKeyboardController()) - controller->AddObserver(this); + virtual_keyboard_observation_.Observe(controller); input_method_->SetFocusedTextInputClient(this); } @@ -464,7 +463,7 @@ input_mode_ = ui::TEXT_INPUT_MODE_TEXT; input_type_ = ui::TEXT_INPUT_TYPE_TEXT; if (auto* controller = input_method_->GetVirtualKeyboardController()) - controller->AddObserver(this); + virtual_keyboard_observation_.Observe(controller); input_method_->SetFocusedTextInputClient(this); delegate_->Activated(); @@ -480,8 +479,7 @@ input_mode_ = ui::TEXT_INPUT_MODE_DEFAULT; input_type_ = ui::TEXT_INPUT_TYPE_NONE; input_method_->DetachTextInputClient(this); - if (auto* controller = input_method_->GetVirtualKeyboardController()) - controller->RemoveObserver(this); + virtual_keyboard_observation_.Reset(); input_method_ = nullptr; delegate_->Deactivated(); }
diff --git a/components/exo/text_input.h b/components/exo/text_input.h index aa1f105..31e2ab8 100644 --- a/components/exo/text_input.h +++ b/components/exo/text_input.h
@@ -8,6 +8,7 @@ #include <string> #include "base/i18n/rtl.h" +#include "base/scoped_observation.h" #include "base/strings/string_piece.h" #include "components/exo/seat_observer.h" #include "third_party/abseil-cpp/absl/types/optional.h" @@ -16,13 +17,14 @@ #include "ui/base/ime/text_input_flags.h" #include "ui/base/ime/text_input_mode.h" #include "ui/base/ime/text_input_type.h" +#include "ui/base/ime/virtual_keyboard_controller.h" #include "ui/base/ime/virtual_keyboard_controller_observer.h" #include "ui/gfx/geometry/rect.h" #include "ui/gfx/range/range.h" namespace ui { class InputMethod; -} +} // namespace ui namespace exo { class Surface; @@ -243,6 +245,10 @@ // to any InputMethod, so the TextInputClient overrides will not be called. ui::InputMethod* input_method_ = nullptr; + base::ScopedObservation<ui::VirtualKeyboardController, + ui::VirtualKeyboardControllerObserver> + virtual_keyboard_observation_{this}; + // Cache of the current caret bounding box, sent from the client. gfx::Rect caret_bounds_;
diff --git a/components/exo/text_input_unittest.cc b/components/exo/text_input_unittest.cc index 2e650bc..958ac6a 100644 --- a/components/exo/text_input_unittest.cc +++ b/components/exo/text_input_unittest.cc
@@ -7,6 +7,7 @@ #include <memory> #include <string> +#include "ash/keyboard/ui/keyboard_ui_controller.h" #include "base/strings/utf_string_conversions.h" #include "components/exo/buffer.h" #include "components/exo/seat.h" @@ -17,6 +18,8 @@ #include "testing/gmock/include/gmock/gmock.h" #include "ui/aura/client/focus_client.h" #include "ui/aura/window_tree_host.h" +#include "ui/base/ime/ash/input_method_manager.h" +#include "ui/base/ime/ash/mock_input_method_manager.h" #include "ui/base/ime/composition_text.h" #include "ui/base/ime/input_method_observer.h" #include "ui/events/keycodes/dom/dom_code.h" @@ -146,6 +149,7 @@ protected: TextInput* text_input() { return text_input_.get(); } + void DestroyTextInput() { text_input_.reset(); } MockTextInputDelegate* delegate() { return static_cast<MockTextInputDelegate*>(text_input_->delegate()); } @@ -338,6 +342,40 @@ EXPECT_CALL(*delegate(), Deactivated).Times(1); } +TEST_F(TextInputTest, VirtualKeyboardObserver) { + EXPECT_EQ(ui::TEXT_INPUT_TYPE_NONE, text_input()->GetTextInputType()); + EXPECT_EQ(ui::TEXT_INPUT_MODE_DEFAULT, text_input()->GetTextInputMode()); + + EXPECT_CALL(*delegate(), Activated).Times(1); + text_input()->Activate(seat(), surface()); + testing::Mock::VerifyAndClearExpectations(delegate()); + + // Disable virtual keyboard so that GetVirtualKeyboardController() starts + // to return nullptr. + auto* input_method_manager = + static_cast<ash::input_method::MockInputMethodManager*>( + ash::input_method::InputMethodManager::Get()); + input_method_manager->SetVirtualKeyboardEnabled(false); + + EXPECT_EQ(ui::TEXT_INPUT_TYPE_TEXT, text_input()->GetTextInputType()); + EXPECT_EQ(ui::TEXT_INPUT_MODE_TEXT, text_input()->GetTextInputMode()); + EXPECT_EQ(0, text_input()->GetTextInputFlags()); + + EXPECT_CALL(*delegate(), Deactivated).Times(1); + text_input()->Deactivate(); + testing::Mock::VerifyAndClearExpectations(delegate()); + + EXPECT_EQ(ui::TEXT_INPUT_TYPE_NONE, text_input()->GetTextInputType()); + EXPECT_EQ(ui::TEXT_INPUT_MODE_DEFAULT, text_input()->GetTextInputMode()); + + // Destroy the text_input. + // Because text_input used not to be removed from VirtualKeyboardController + // as its observer, this used to cause a dangling pointer problem, so + // caused the crash in the following DismissVirtualKeyboard. + DestroyTextInput(); + input_method_manager->DismissVirtualKeyboard(); +} + TEST_F(TextInputTest, SetTypeModeFlag) { TestingInputMethodObserver observer(GetInputMethod());
diff --git a/components/exo/wayland/clients/client_base.cc b/components/exo/wayland/clients/client_base.cc index 430f0b8..37e04abe 100644 --- a/components/exo/wayland/clients/client_base.cc +++ b/components/exo/wayland/clients/client_base.cc
@@ -952,7 +952,8 @@ if (use_memfd_) { // udmabuf_create requires a page aligned buffer. - length = base::bits::AlignUp(length, getpagesize()); + length = base::bits::AlignUp(length, + base::checked_cast<size_t>(getpagesize())); int memfd = memfd_create("memfd", MFD_ALLOW_SEALING); if (memfd < 0) { PLOG(ERROR) << "memfd_create failed";
diff --git a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java index 72d7fd3f..33ef01b0 100644 --- a/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java +++ b/components/external_intents/android/java/src/org/chromium/components/external_intents/ExternalNavigationHandler.java
@@ -931,6 +931,24 @@ } /** + * See RedirectHandler#NAVIGATION_CHAIN_TIMEOUT_MILLIS for details. We don't want an unattended + * page to redirect to an app. + */ + private boolean isNavigationChainExpired(ExternalNavigationParams params) { + if (params.getRedirectHandler() != null + && params.getRedirectHandler().isNavigationChainExpired()) { + if (DEBUG) { + Log.i(TAG, + "Navigation chain expired " + + "(a page waited more than %d seconds to redirect).", + RedirectHandler.NAVIGATION_CHAIN_TIMEOUT_MILLIS); + } + return true; + } + return false; + } + + /** * If the intent can't be resolved, we should fall back to the browserFallbackUrl, or try to * find the app on the market if no fallback is provided. */ @@ -1471,18 +1489,13 @@ QueryIntentActivitiesSupplier resolvingInfos = new QueryIntentActivitiesSupplier(targetIntent); - boolean requiresPromptForExternalIntent = false; - - if (redirectShouldStayInApp(params, isExternalProtocol, targetIntent, resolvingInfos)) { - requiresPromptForExternalIntent = true; - } - boolean intentMatchesNonDefaultWebApk = intentMatchesNonDefaultWebApk(params, resolvingInfos); - if (!preferToShowIntentPicker(params, isExternalProtocol, incomingIntentRedirect, - intentMatchesNonDefaultWebApk)) { - requiresPromptForExternalIntent = true; - } + + boolean requiresPromptForExternalIntent = isNavigationChainExpired(params) + || redirectShouldStayInApp(params, isExternalProtocol, targetIntent, resolvingInfos) + || !preferToShowIntentPicker(params, isExternalProtocol, incomingIntentRedirect, + intentMatchesNonDefaultWebApk); // Short-circuit expensive quertyIntentActivities calls below since we won't prompt anyways // for protocols the browser can handle.
diff --git a/components/external_intents/android/java/src/org/chromium/components/external_intents/InterceptNavigationDelegateImpl.java b/components/external_intents/android/java/src/org/chromium/components/external_intents/InterceptNavigationDelegateImpl.java index bd5a8b7..536d0a0 100644 --- a/components/external_intents/android/java/src/org/chromium/components/external_intents/InterceptNavigationDelegateImpl.java +++ b/components/external_intents/android/java/src/org/chromium/components/external_intents/InterceptNavigationDelegateImpl.java
@@ -24,6 +24,7 @@ import org.chromium.content_public.browser.UiThreadTaskTraits; import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.common.ConsoleMessageLevel; +import org.chromium.ui.base.PageTransition; import org.chromium.url.GURL; import org.chromium.url.Origin; @@ -103,8 +104,7 @@ } @Override - public boolean shouldIgnoreNavigation( - NavigationHandle navigationHandle, GURL escapedUrl, boolean applyUserGestureCarryover) { + public boolean shouldIgnoreNavigation(NavigationHandle navigationHandle, GURL escapedUrl) { mClient.onNavigationStarted(navigationHandle); GURL url = escapedUrl; @@ -135,12 +135,6 @@ return false; } - // Temporarily apply User Gesture Carryover exception for resource requests to the - // NavigationHandle. - if (applyUserGestureCarryover) { - assert !navigationHandle.hasUserGesture(); - navigationHandle.setUserGestureForCarryover(true); - } redirectHandler.updateNewUrlLoading(navigationHandle.pageTransition(), navigationHandle.isRedirect(), navigationHandle.hasUserGesture(), lastUserInteractionTime, getLastCommittedEntryIndex(), isInitialNavigation()); @@ -155,10 +149,6 @@ mClient.onDecisionReachedForNavigation(navigationHandle, result); - if (applyUserGestureCarryover) { - navigationHandle.setUserGestureForCarryover(false); - } - boolean isExternalProtocol = !UrlUtilities.isAcceptedScheme(params.getUrl()); String protocolType = isExternalProtocol ? "ExternalProtocol" : "InternalProtocol"; RecordHistogram.recordEnumeratedHistogram( @@ -186,6 +176,16 @@ } } + @Override + public void onResourceRequestWithGesture() { + // LINK is the default transition type, and is generally used for everything coming from a + // renderer that isn't a form submission (or subframe). + @PageTransition + int transition = PageTransition.LINK; + mClient.getOrCreateRedirectHandler().updateNewUrlLoading(transition, false, true, + mClient.getLastUserInteractionTime(), getLastCommittedEntryIndex(), false); + } + /** * Returns ExternalNavigationParams.Builder to generate ExternalNavigationParams for * ExternalNavigationHandler#shouldOverrideUrlLoading().
diff --git a/components/external_intents/android/java/src/org/chromium/components/external_intents/RedirectHandler.java b/components/external_intents/android/java/src/org/chromium/components/external_intents/RedirectHandler.java index 5dfcd23..80b526af 100644 --- a/components/external_intents/android/java/src/org/chromium/components/external_intents/RedirectHandler.java +++ b/components/external_intents/android/java/src/org/chromium/components/external_intents/RedirectHandler.java
@@ -11,6 +11,8 @@ import android.provider.Browser; import android.text.TextUtils; +import androidx.annotation.VisibleForTesting; + import org.chromium.base.ContextUtils; import org.chromium.base.Function; import org.chromium.base.IntentUtils; @@ -39,6 +41,14 @@ private static final int NAVIGATION_TYPE_FROM_RELOAD = 4; private static final int NAVIGATION_TYPE_OTHER = 5; + // Analogous to Transient User Activation in blink (See + // https://html.spec.whatwg.org/multipage/interaction.html#tracking-user-activation). We don't + // want an "unattended" page to redirect to an app as the user is likely not expecting that. + // However, historically there was no timeout like this for external navigation (and instead + // touching the screen reset the navigation chain), so this timeout is very generous and should + // allow for redirect chains. + public static final long NAVIGATION_CHAIN_TIMEOUT_MILLIS = 15000; + private static class IntentState { final Intent mInitialIntent; final boolean mIsCustomTabIntent; @@ -57,12 +67,14 @@ } } - private static class NavigationState { + private class NavigationState { final int mInitialNavigationType; final boolean mHasUserStartedNonInitialNavigation; boolean mIsOnEffectiveRedirectChain; boolean mShouldNotOverrideUrlLoadingOnCurrentRedirectChain; boolean mShouldNotBlockOverrideUrlLoadingOnCurrentRedirectionChain; + // TODO(https://crbug.com/1286053): Plumb through the user activation time from blink. + final long mNavigationChainStartTime = currentRealtime(); NavigationState(int initialNavigationType, boolean hasUserStartedNonInitialNavigation) { mInitialNavigationType = initialNavigationType; @@ -350,6 +362,16 @@ return mIntentState != null ? mIntentState.mInitialIntent : null; } + /** + * @return whether the navigation chain has expired, meaning + * {@link #NAVIGATION_CHAIN_TIMEOUT_MILLIS} milliseconds passed since a navigation initiated by + * the user was started. + */ + public boolean isNavigationChainExpired() { + return currentRealtime() - mNavigationState.mNavigationChainStartTime + > NAVIGATION_CHAIN_TIMEOUT_MILLIS; + } + public void maybeLogExternalRedirectBlockedWithMissingGesture() { if (mNavigationState.mInitialNavigationType == NAVIGATION_TYPE_FROM_LINK_WITHOUT_USER_GESTURE) { @@ -362,4 +384,10 @@ "Android.Intent.BlockedExternalNavLastGestureTime", millisSinceLastGesture); } } + + // Facilitates simulated waiting in tests. + @VisibleForTesting + public long currentRealtime() { + return SystemClock.elapsedRealtime(); + } }
diff --git a/components/external_intents/android/javatests/src/org/chromium/components/external_intents/ExternalNavigationHandlerTest.java b/components/external_intents/android/javatests/src/org/chromium/components/external_intents/ExternalNavigationHandlerTest.java index 327332c..cafdf33 100644 --- a/components/external_intents/android/javatests/src/org/chromium/components/external_intents/ExternalNavigationHandlerTest.java +++ b/components/external_intents/android/javatests/src/org/chromium/components/external_intents/ExternalNavigationHandlerTest.java
@@ -67,6 +67,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.regex.Pattern; /** @@ -2543,6 +2544,36 @@ START_OTHER_ACTIVITY); } + @Test + @SmallTest + public void testExpiredNavigationChain() { + mDelegate.add(new IntentActivity(YOUTUBE_MOBILE_URL, YOUTUBE_PACKAGE_NAME)); + + AtomicBoolean isExpired = new AtomicBoolean(false); + RedirectHandler redirectHandler = new RedirectHandler() { + @Override + public boolean isNavigationChainExpired() { + return isExpired.get(); + } + }; + + // User clicks a link. + redirectHandler.updateNewUrlLoading(PageTransition.LINK, false, true, 0, 0, false); + + // Redirects to youtube with javascript simulated link click. + redirectHandler.updateNewUrlLoading(PageTransition.LINK, false, false, 0, 1, false); + checkUrl(YOUTUBE_MOBILE_URL) + .withRedirectHandler(redirectHandler) + .expecting(OverrideUrlLoadingResultType.OVERRIDE_WITH_EXTERNAL_INTENT, + START_OTHER_ACTIVITY); + + // Page takes > 15 seconds to redirect. + isExpired.set(true); + checkUrl(YOUTUBE_MOBILE_URL) + .withRedirectHandler(redirectHandler) + .expecting(OverrideUrlLoadingResultType.NO_OVERRIDE, IGNORE); + } + private static List<ResolveInfo> makeResolveInfos(ResolveInfo... infos) { return Arrays.asList(infos); }
diff --git a/components/invalidation/impl/per_user_topic_subscription_request.cc b/components/invalidation/impl/per_user_topic_subscription_request.cc index 1539bfc..5bf8e5d 100644 --- a/components/invalidation/impl/per_user_topic_subscription_request.cc +++ b/components/invalidation/impl/per_user_topic_subscription_request.cc
@@ -189,7 +189,7 @@ void PerUserTopicSubscriptionRequest::OnJsonParse( data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { + if (!result.has_value()) { RecordRequestStatus(SubscriptionStatus::kParsingFailure, type_, topic_); RunCompletedCallbackAndMaybeDie( Status(StatusCode::FAILED, base::StringPrintf("Body parse error")), @@ -198,7 +198,7 @@ return; } - const std::string* topic_name = GetTopicName(*result.value); + const std::string* topic_name = GetTopicName(*result); if (topic_name) { RecordRequestStatus(SubscriptionStatus::kSuccess, type_, topic_); RunCompletedCallbackAndMaybeDie(Status(StatusCode::SUCCESS, std::string()),
diff --git a/components/navigation_interception/android/java/src/org/chromium/components/navigation_interception/InterceptNavigationDelegate.java b/components/navigation_interception/android/java/src/org/chromium/components/navigation_interception/InterceptNavigationDelegate.java index 682095a..5e24c4c 100644 --- a/components/navigation_interception/android/java/src/org/chromium/components/navigation_interception/InterceptNavigationDelegate.java +++ b/components/navigation_interception/android/java/src/org/chromium/components/navigation_interception/InterceptNavigationDelegate.java
@@ -23,7 +23,7 @@ */ @CalledByNative public abstract boolean shouldIgnoreNavigation( - NavigationHandle navigationHandle, GURL escapedUrl, boolean applyUserGestureCarryover); + NavigationHandle navigationHandle, GURL escapedUrl); /** * This method is called for navigations to external protocols, which on Android are handled in @@ -50,6 +50,14 @@ true /* isExternalProtocol */, 0 /* navigationId - doesn't correspond to a native NavigationHandle*/, false /* isPageActivation */, false /* isReload */); - shouldIgnoreNavigation(navigationHandle, escapedUrl, false); + shouldIgnoreNavigation(navigationHandle, escapedUrl); } + + /** + * This method is called when a main frame requests a resource with a user gesture (eg. xhr, + * fetch, etc.). The page may wish to redirect to an app after the resource requests completes, + * which may be after blink user activation has expired. + */ + @CalledByNative + protected void onResourceRequestWithGesture() {} }
diff --git a/components/navigation_interception/intercept_navigation_delegate.cc b/components/navigation_interception/intercept_navigation_delegate.cc index 15c4b5166..a155dc2 100644 --- a/components/navigation_interception/intercept_navigation_delegate.cc +++ b/components/navigation_interception/intercept_navigation_delegate.cc
@@ -32,8 +32,6 @@ namespace { -const int kMaxValidityOfUserGestureCarryoverInSeconds = 10; - const void* const kInterceptNavigationDelegateUserDataKey = &kInterceptNavigationDelegateUserDataKey; @@ -119,16 +117,9 @@ if (jdelegate.is_null()) return false; - bool has_user_gesture = navigation_handle->HasUserGesture(); - bool apply_user_gesture_carryover = - !has_user_gesture && - base::TimeTicks::Now() - last_user_gesture_carryover_timestamp_ <= - base::Seconds(kMaxValidityOfUserGestureCarryoverInSeconds); - return Java_InterceptNavigationDelegate_shouldIgnoreNavigation( env, jdelegate, navigation_handle->GetJavaNavigationHandle(), - url::GURLAndroid::FromNativeGURL(env, escaped_url), - apply_user_gesture_carryover); + url::GURLAndroid::FromNativeGURL(env, escaped_url)); } void InterceptNavigationDelegate::HandleExternalProtocolDialog( @@ -153,8 +144,12 @@ initiating_origin ? initiating_origin->CreateJavaObject() : nullptr); } -void InterceptNavigationDelegate::UpdateLastUserGestureCarryoverTimestamp() { - last_user_gesture_carryover_timestamp_ = base::TimeTicks::Now(); +void InterceptNavigationDelegate::OnResourceRequestWithGesture() { + JNIEnv* env = base::android::AttachCurrentThread(); + ScopedJavaLocalRef<jobject> jdelegate = weak_jdelegate_.get(env); + if (jdelegate.is_null()) + return; + Java_InterceptNavigationDelegate_onResourceRequestWithGesture(env, jdelegate); } } // namespace navigation_interception
diff --git a/components/navigation_interception/intercept_navigation_delegate.h b/components/navigation_interception/intercept_navigation_delegate.h index 6ae9ab57a..b773898 100644 --- a/components/navigation_interception/intercept_navigation_delegate.h +++ b/components/navigation_interception/intercept_navigation_delegate.h
@@ -76,13 +76,12 @@ bool has_user_gesture, const absl::optional<url::Origin>& initiating_origin); - // Updates |last_user_gesture_carryover_timestamp_| when user gesture is - // carried over. - void UpdateLastUserGestureCarryoverTimestamp(); + // To be called when a main frame requests a resource with a user gesture (eg. + // xrh, fetch, etc.) + void OnResourceRequestWithGesture(); private: JavaObjectWeakGlobalRef weak_jdelegate_; - base::TimeTicks last_user_gesture_carryover_timestamp_; bool escape_external_handler_value_ = false; };
diff --git a/components/ntp_tiles/popular_sites_impl.cc b/components/ntp_tiles/popular_sites_impl.cc index 5b5b9d67..b2b100a 100644 --- a/components/ntp_tiles/popular_sites_impl.cc +++ b/components/ntp_tiles/popular_sites_impl.cc
@@ -475,13 +475,13 @@ void PopularSitesImpl::OnJsonParsed( data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { - DLOG(WARNING) << "JSON parsing failed: " << *result.error; + if (!result.has_value()) { + DLOG(WARNING) << "JSON parsing failed: " << result.error(); OnDownloadFailed(); return; } - base::Value list = std::move(*result.value); + base::Value list = std::move(*result); if (!list.is_list()) { DLOG(WARNING) << "JSON is not a list"; OnDownloadFailed();
diff --git a/components/omnibox/browser/autocomplete_match.cc b/components/omnibox/browser/autocomplete_match.cc index 7384a31..52e29f6 100644 --- a/components/omnibox/browser/autocomplete_match.cc +++ b/components/omnibox/browser/autocomplete_match.cc
@@ -637,12 +637,14 @@ ACMatchClassifications output; for (auto i = classifications1.begin(), j = classifications2.begin(); i != classifications1.end();) { - AutocompleteMatch::AddLastClassificationIfNecessary(&output, - std::max(i->offset, j->offset), i->style | j->style); - const size_t next_i_offset = (i + 1) == classifications1.end() ? - static_cast<size_t>(-1) : (i + 1)->offset; - const size_t next_j_offset = (j + 1) == classifications2.end() ? - static_cast<size_t>(-1) : (j + 1)->offset; + AutocompleteMatch::AddLastClassificationIfNecessary( + &output, std::max(i->offset, j->offset), i->style | j->style); + const size_t next_i_offset = (i + 1) == classifications1.end() + ? static_cast<size_t>(-1) + : (i + 1)->offset; + const size_t next_j_offset = (j + 1) == classifications2.end() + ? static_cast<size_t>(-1) + : (j + 1)->offset; if (next_i_offset >= next_j_offset) ++j; if (next_j_offset >= next_i_offset) @@ -790,8 +792,9 @@ const TemplateURL* template_url = keyword.empty() ? nullptr : template_url_service->GetTemplateURLForKeyword(keyword); - return (template_url || host.empty()) ? - template_url : template_url_service->GetTemplateURLForHost(host); + return (template_url || host.empty()) + ? template_url + : template_url_service->GetTemplateURLForHost(host); } // static @@ -800,6 +803,20 @@ const AutocompleteInput& input, const TemplateURLService* template_url_service, const std::u16string& keyword) { + static const bool optimize = + base::FeatureList::IsEnabled(omnibox::kStrippedGurlOptimization); + return optimize ? GURLToStrippedGURLOptimized(url, input, + template_url_service, keyword) + : GURLToStrippedGURLControl(url, input, template_url_service, + keyword); +} + +// static +GURL AutocompleteMatch::GURLToStrippedGURLControl( + const GURL& url, + const AutocompleteInput& input, + const TemplateURLService* template_url_service, + const std::u16string& keyword) { if (!url.is_valid()) return url; @@ -869,6 +886,89 @@ } // static +GURL AutocompleteMatch::GURLToStrippedGURLOptimized( + const GURL& url, + const AutocompleteInput& input, + const TemplateURLService* template_url_service, + const std::u16string& keyword) { + if (!url.is_valid()) + return url; + + // Special-case canonicalizing Docs URLs. This logic is self-contained and + // will not participate in the TemplateURL canonicalization. + GURL docs_url = DocumentProvider::GetURLForDeduping(url); + if (docs_url.is_valid()) + return docs_url; + + GURL stripped_destination_url = url; + + // If the destination URL looks like it was generated from a TemplateURL, + // remove all substitutions other than the search terms. This allows us + // to eliminate cases like past search URLs from history that differ only + // by some obscure query param from each other or from the search/keyword + // provider matches. + const TemplateURL* template_url = GetTemplateURLWithKeyword( + template_url_service, keyword, stripped_destination_url.host()); + if (template_url != nullptr && + template_url->SupportsReplacement( + template_url_service->search_terms_data())) { + static base::LRUCache<std::pair<const TemplateURL*, GURL>, GURL> + template_cache(30); + const std::pair<const TemplateURL*, GURL> cache_key = {template_url, url}; + const auto& cached = template_cache.Get(cache_key); + if (cached != template_cache.end()) { + stripped_destination_url = cached->second; + } else { + std::u16string search_terms; + if (template_url->ExtractSearchTermsFromURL( + stripped_destination_url, + template_url_service->search_terms_data(), &search_terms)) { + stripped_destination_url = + GURL(template_url->url_ref().ReplaceSearchTerms( + TemplateURLRef::SearchTermsArgs(search_terms), + template_url_service->search_terms_data())); + template_cache.Put(cache_key, stripped_destination_url); + } + } + } + + // |replacements| keeps all the substitutions we're going to make to + // from {destination_url} to {stripped_destination_url}. |need_replacement| + // is a helper variable that helps us keep track of whether we need + // to apply the replacement. + bool needs_replacement = false; + GURL::Replacements replacements; + + // Remove the www. prefix from the host. + static const char prefix[] = "www."; + static const size_t prefix_len = std::size(prefix) - 1; + std::string host = stripped_destination_url.host(); + if (host.compare(0, prefix_len, prefix) == 0 && host.length() > prefix_len) { + replacements.SetHostStr(base::StringPiece(host).substr(prefix_len)); + needs_replacement = true; + } + + // Replace https protocol with http, as long as the user didn't explicitly + // specify one of the two. + if (stripped_destination_url.SchemeIs(url::kHttpsScheme) && + (input.terms_prefixed_by_http_or_https().empty() || + !WordMatchesURLContent(input.terms_prefixed_by_http_or_https(), url))) { + replacements.SetSchemeStr(url::kHttpScheme); + needs_replacement = true; + } + + if (!input.parts().ref.is_nonempty() && url.has_ref()) { + replacements.ClearRef(); + needs_replacement = true; + } + + if (needs_replacement) + stripped_destination_url = + stripped_destination_url.ReplaceComponents(replacements); + return stripped_destination_url; +} + +// static void AutocompleteMatch::GetMatchComponents( const GURL& url, const std::vector<MatchPosition>& match_positions, @@ -996,8 +1096,9 @@ TemplateURLService* template_url_service, bool allow_fallback_to_destination_host) const { return GetTemplateURLWithKeyword(template_url_service, keyword, - allow_fallback_to_destination_host ? - destination_url.host() : std::string()); + allow_fallback_to_destination_host + ? destination_url.host() + : std::string()); } GURL AutocompleteMatch::ImageUrl() const { @@ -1485,8 +1586,8 @@ << ". Provider: " << provider_name << "."; DCHECK_LT(i->offset, text.length()) << " Classification of [" << i->offset << "," << text.length() - << "] is out of bounds for \"" << text << "\". Provider: " - << provider_name << "."; + << "] is out of bounds for \"" << text + << "\". Provider: " << provider_name << "."; last_offset = i->offset; } }
diff --git a/components/omnibox/browser/autocomplete_match.h b/components/omnibox/browser/autocomplete_match.h index e97d51d1..eccbb93 100644 --- a/components/omnibox/browser/autocomplete_match.h +++ b/components/omnibox/browser/autocomplete_match.h
@@ -382,6 +382,20 @@ const TemplateURLService* template_url_service, const std::u16string& keyword); + // One of these 2 helpers are called by `GURLToStrippedGURL()` depending on + // whether optimizations (i.e., caching search term replacements) are enabled. + // They will be removed after experiments end. + static GURL GURLToStrippedGURLControl( + const GURL& url, + const AutocompleteInput& input, + const TemplateURLService* template_url_service, + const std::u16string& keyword); + static GURL GURLToStrippedGURLOptimized( + const GURL& url, + const AutocompleteInput& input, + const TemplateURLService* template_url_service, + const std::u16string& keyword); + // Sets the |match_in_scheme| and |match_in_subdomain| flags based on the // provided |url| and list of substring |match_positions|. |match_positions| // is the [begin, end) positions of a match within the unstripped URL spec.
diff --git a/components/omnibox/browser/history_quick_provider.h b/components/omnibox/browser/history_quick_provider.h index 47faaa66..659b825 100644 --- a/components/omnibox/browser/history_quick_provider.h +++ b/components/omnibox/browser/history_quick_provider.h
@@ -43,20 +43,6 @@ private: friend class HistoryQuickProviderTest; - FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, Spans); - FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, Relevance); - FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, DoTrimHttpScheme); - FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, - DontTrimHttpSchemeIfInputHasScheme); - FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, - DontTrimHttpSchemeIfInputMatches); - FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, - DontTrimHttpsSchemeIfInputHasScheme); - FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, DoTrimHttpsScheme); - FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, - CorrectAutocompleteWithTrailingSlash); - FRIEND_TEST_ALL_PREFIXES(HistoryQuickProviderTest, - QuickMatchToACMatch_HideUrlForDocumentSuggestion); ~HistoryQuickProvider() override;
diff --git a/components/omnibox/browser/history_quick_provider_unittest.cc b/components/omnibox/browser/history_quick_provider_unittest.cc index 3c1f79ea..94ec5c4c 100644 --- a/components/omnibox/browser/history_quick_provider_unittest.cc +++ b/components/omnibox/browser/history_quick_provider_unittest.cc
@@ -64,11 +64,9 @@ }; WaitForURLsDeletedObserver::WaitForURLsDeletedObserver(base::RunLoop* runner) - : runner_(runner) { -} + : runner_(runner) {} -WaitForURLsDeletedObserver::~WaitForURLsDeletedObserver() { -} +WaitForURLsDeletedObserver::~WaitForURLsDeletedObserver() = default; void WaitForURLsDeletedObserver::OnURLsDeleted( history::HistoryService* service, @@ -91,9 +89,7 @@ class GetURLTask : public history::HistoryDBTask { public: GetURLTask(const GURL& url, bool* result_storage) - : result_storage_(result_storage), - url_(url) { - } + : result_storage_(result_storage), url_(url) {} GetURLTask(const GetURLTask&) = delete; GetURLTask& operator=(const GetURLTask&) = delete; @@ -108,7 +104,7 @@ } private: - ~GetURLTask() override {} + ~GetURLTask() override = default; raw_ptr<bool> result_storage_; const GURL url_; @@ -188,6 +184,11 @@ ACMatches& ac_matches() { return ac_matches_; } HistoryQuickProvider& provider() { return *provider_; } + AutocompleteMatch QuickMatchToACMatch(const ScoredHistoryMatch& history_match, + int score) { + return provider_->QuickMatchToACMatch(history_match, score); + } + private: base::test::TaskEnvironment task_environment_; base::ScopedTempDir history_dir_; @@ -314,8 +315,8 @@ HistoryQuickProviderTest::SetShouldContain::SetShouldContain( const ACMatches& matched_urls) { - for (auto iter = matched_urls.begin(); iter != matched_urls.end(); ++iter) - matches_.insert(iter->destination_url.spec()); + for (const auto& matched_url : matched_urls) + matches_.insert(matched_url.destination_url.spec()); } void HistoryQuickProviderTest::SetShouldContain::operator()( @@ -383,8 +384,8 @@ .LeftOvers(); } EXPECT_EQ(0U, leftovers.size()) << "There were " << leftovers.size() - << " unexpected results, one of which was: '" - << *(leftovers.begin()) << "'."; + << " unexpected results, one of which was: '" + << *(leftovers.begin()) << "'."; if (expected_urls.empty()) return; @@ -401,8 +402,8 @@ << "For result #" << i << " we got '" << actual->destination_url.spec() << "' but expected '" << *expected << "'."; EXPECT_LT(actual->relevance, best_score) - << "At result #" << i << " (url=" << actual->destination_url.spec() - << "), we noticed scores are not monotonically decreasing."; + << "At result #" << i << " (url=" << actual->destination_url.spec() + << "), we noticed scores are not monotonically decreasing."; best_score = actual->relevance; } @@ -585,8 +586,8 @@ // Verify that contents_class divides the string in the right places. // [22, 24) is the "第二". All the other pairs are the "e3". ACMatchClassifications contents_class(ac_matches()[0].contents_class); - size_t expected_offsets[] = { 0, 22, 24, 31, 33, 40, 42, 49, 51, 58, 60, 67, - 69, 76, 78 }; + size_t expected_offsets[] = {0, 22, 24, 31, 33, 40, 42, 49, + 51, 58, 60, 67, 69, 76, 78}; // ScoredHistoryMatch may not highlight all the occurrences of these terms // because it only highlights terms at word breaks, and it only stores word // breaks up to some specified number of characters (50 at the time of this @@ -844,7 +845,7 @@ ScoredHistoryMatch history_match = BuildScoredHistoryMatch("http://www.facebook.com", u"face"); - AutocompleteMatch match = provider().QuickMatchToACMatch(history_match, 100); + AutocompleteMatch match = QuickMatchToACMatch(history_match, 100); EXPECT_EQ(u"facebook.com", match.contents); } @@ -857,7 +858,7 @@ ScoredHistoryMatch history_match = BuildScoredHistoryMatch("http://www.facebook.com", u"http://face"); - AutocompleteMatch match = provider().QuickMatchToACMatch(history_match, 100); + AutocompleteMatch match = QuickMatchToACMatch(history_match, 100); EXPECT_EQ(u"http://facebook.com", match.contents); } @@ -871,7 +872,7 @@ BuildScoredHistoryMatch("http://www.facebook.com", u"ht"); history_match.match_in_scheme = true; - AutocompleteMatch match = provider().QuickMatchToACMatch(history_match, 100); + AutocompleteMatch match = QuickMatchToACMatch(history_match, 100); EXPECT_EQ(u"http://facebook.com", match.contents); } @@ -884,7 +885,7 @@ ScoredHistoryMatch history_match = BuildScoredHistoryMatch("https://www.facebook.com", u"https://face"); - AutocompleteMatch match = provider().QuickMatchToACMatch(history_match, 100); + AutocompleteMatch match = QuickMatchToACMatch(history_match, 100); EXPECT_EQ(u"https://facebook.com", match.contents); } @@ -896,19 +897,20 @@ ScoredHistoryMatch history_match = BuildScoredHistoryMatch("https://www.facebook.com", u"face"); - AutocompleteMatch match = provider().QuickMatchToACMatch(history_match, 100); + AutocompleteMatch match = QuickMatchToACMatch(history_match, 100); EXPECT_EQ(u"facebook.com", match.contents); } TEST_F(HistoryQuickProviderTest, CorrectAutocompleteWithTrailingSlash) { - provider().autocomplete_input_ = AutocompleteInput( - u"cr/", metrics::OmniboxEventProto::OTHER, TestSchemeClassifier()); + AutocompleteInput input(u"cr/", metrics::OmniboxEventProto::OTHER, + TestSchemeClassifier()); + provider().Start(input, false); RowWordStarts word_starts; word_starts.url_word_starts_ = {0}; ScoredHistoryMatch sh_match(history::URLRow(GURL("http://cr/")), VisitInfoVector(), u"cr/", {u"cr"}, {0}, word_starts, false, 0, base::Time()); - AutocompleteMatch ac_match(provider().QuickMatchToACMatch(sh_match, 0)); + AutocompleteMatch ac_match(QuickMatchToACMatch(sh_match, 0)); EXPECT_EQ(u"cr/", ac_match.fill_into_edit); EXPECT_EQ(u"", ac_match.inline_autocompletion); EXPECT_TRUE(ac_match.allowed_to_be_default_match); @@ -970,7 +972,7 @@ "https://docs.google.com/a/google.com/document/d/tH3_d0C-1d/edit", u"doc"); - AutocompleteMatch match = provider().QuickMatchToACMatch(history_match, 100); + AutocompleteMatch match = QuickMatchToACMatch(history_match, 100); EXPECT_TRUE(match.contents.empty()); }
diff --git a/components/omnibox/common/omnibox_features.cc b/components/omnibox/common/omnibox_features.cc index a9db50a..d87cdbea 100644 --- a/components/omnibox/common/omnibox_features.cc +++ b/components/omnibox/common/omnibox_features.cc
@@ -269,6 +269,11 @@ const base::Feature kOmniboxFuzzyUrlSuggestions{ "OmniboxFuzzyUrlSuggestions", base::FEATURE_DISABLED_BY_DEFAULT}; +// Feature to enable memoizing URLs when replacing search terms in +// `AutocompleteMatch::GURLToStrippedGURL()`. +const base::Feature kStrippedGurlOptimization{ + "OmniboxStrippedGurlOptimization", base::FEATURE_DISABLED_BY_DEFAULT}; + // When enabled, use Assistant for omnibox voice query recognition instead of // Android's built-in voice recognition service. Only works on Android. const base::Feature kOmniboxAssistantVoiceSearch{
diff --git a/components/omnibox/common/omnibox_features.h b/components/omnibox/common/omnibox_features.h index 18412bc8..5f89b0f 100644 --- a/components/omnibox/common/omnibox_features.h +++ b/components/omnibox/common/omnibox_features.h
@@ -78,6 +78,7 @@ extern const base::Feature kNtpRealboxSuggestionAnswers; extern const base::Feature kNtpRealboxTailSuggest; extern const base::Feature kOmniboxFuzzyUrlSuggestions; +extern const base::Feature kStrippedGurlOptimization; // Omnibox UI - these affect the UI or function of the location bar (not the // popup).
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/BUILD.gn b/components/page_load_metrics/browser/observers/ad_metrics/BUILD.gn index 274a5f3..80f8b66 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/BUILD.gn +++ b/components/page_load_metrics/browser/observers/ad_metrics/BUILD.gn
@@ -14,6 +14,8 @@ "frame_tree_data.h", "page_ad_density_tracker.cc", "page_ad_density_tracker.h", + "univariate_stats.cc", + "univariate_stats.h", ] deps = [ "//components/blocklist/opt_out_blocklist", @@ -50,6 +52,7 @@ sources = [ "ads_page_load_metrics_observer_unittest.cc", "page_ad_density_tracker_unittest.cc", + "univariate_stats_unittest.cc", ] deps = [ ":ad_metrics",
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc index d68306d1..a8f9dac 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc +++ b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer.cc
@@ -148,6 +148,16 @@ } } +int64_t GetExponentialBucketForDistributionMoment(double sample) { + constexpr static double kBucketSpacing = 1.3; + + base::ClampedNumeric<int64_t> rounded = base::ClampRound<int64_t>(sample); + + // If sample is negative, we need to first bucket it as a positive value. + return (sample >= 0 ? 1 : -1) * + ukm::GetExponentialBucketMin(rounded.Abs(), kBucketSpacing); +} + } // namespace // static @@ -236,7 +246,8 @@ heavy_ad_intervention::features::kHeavyAdPrivacyMitigations)), heavy_ad_threshold_noise_provider_( std::make_unique<HeavyAdThresholdNoiseProvider>( - heavy_ad_privacy_mitigations_enabled_ /* use_noise */)) { + heavy_ad_privacy_mitigations_enabled_ /* use_noise */)), + page_ad_density_tracker_(clock) { // Manual setting of the heavy ad blocklist should be used only as a // convenience for tests that don't create HeavyAdService. DCHECK(!heavy_ad_service_ || !heavy_ad_blocklist_); @@ -878,10 +889,22 @@ aggregate_frame_data_->total_ad_cpu_usage().InMilliseconds()); builder.Record(ukm_recorder->Get()); - // Record custom sampling metrics + // Record custom sampling metrics. ukm::builders::AdPageLoadCustomSampling custom_sampling_builder(source_id); + + page_ad_density_tracker_.Finalize(); + + UnivariateStats::DistributionMoments moments = + page_ad_density_tracker_.GetAdDensityByAreaStats(); + custom_sampling_builder.SetAverageViewportAdDensity( - page_ad_density_tracker_.AverageViewportAdDensityByArea()); + std::llround(moments.mean)); + custom_sampling_builder.SetVarianceViewportAdDensity( + GetExponentialBucketForDistributionMoment(moments.variance)); + custom_sampling_builder.SetSkewnessViewportAdDensity( + GetExponentialBucketForDistributionMoment(moments.skewness)); + custom_sampling_builder.SetKurtosisViewportAdDensity( + GetExponentialBucketForDistributionMoment(moments.excess_kurtosis)); custom_sampling_builder.Record(ukm_recorder->Get()); }
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc index 9c32568..eec35cc9b 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc +++ b/components/page_load_metrics/browser/observers/ad_metrics/ads_page_load_metrics_observer_unittest.cc
@@ -764,7 +764,7 @@ return frame_remote_tester_.PopLastInterventionReportMessage(); } - void OverrideVisibilityTrackerWithMockClock() { + void OverrideWithMockClock() { clock_ = std::make_unique<base::SimpleTestTickClock>(); clock_->SetNowTicks(base::TimeTicks::Now()); } @@ -828,6 +828,7 @@ bool WithFencedFrames() { return GetParam(); } base::test::ScopedFeatureList scoped_feature_list_; + std::unique_ptr<PageLoadMetricsObserverTester> tester_; private: // SubresourceFilterTestHarness:: @@ -870,11 +871,11 @@ std::unique_ptr<heavy_ad_intervention::HeavyAdBlocklist> test_blocklist_; base::HistogramTester histogram_tester_; ukm::TestAutoSetUkmRecorder test_ukm_recorder_; - std::unique_ptr<PageLoadMetricsObserverTester> tester_; FrameRemoteTester frame_remote_tester_; mojom::PageLoadTiming timing_; - // The clock used by the ui::ScopedVisibilityTracker, assigned if non-null. + // The clock used by the ui::ScopedVisibilityTracker and PageAdDensityTracker, + // assigned if non-null. std::unique_ptr<base::SimpleTestTickClock> clock_; // A pointer to the AdsPageLoadMetricsObserver used by the tests. @@ -1624,7 +1625,7 @@ } TEST_P(AdsPageLoadMetricsObserverTest, TestCpuTimingMetricsWindowUnactivated) { - OverrideVisibilityTrackerWithMockClock(); + OverrideWithMockClock(); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); @@ -1674,8 +1675,60 @@ 1); } +TEST_P(AdsPageLoadMetricsObserverTest, AdDensityDistributionMoments) { + ukm::TestAutoSetUkmRecorder ukm_recorder; + + OverrideWithMockClock(); + + RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); + RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); + + page_load_metrics::mojom::FrameMetadata metadata1; + metadata1.main_frame_intersection_rect = gfx::Rect(0, 0, 1, 100); + metadata1.main_frame_viewport_rect = gfx::Rect(0, 0, 1, 100); + tester_->SimulateMetadataUpdate(metadata1, main_frame); + + // Add some ad resource so that ad density metrics are recorded in the end. + ResourceDataUpdate(ad_frame, ResourceCached::kNotCached, + /*resource_size_in_kbyte=*/10, + /*mime_type=*/"", + /*is_ad_resource=*/true); + + page_load_metrics::mojom::FrameMetadata metadata2; + metadata2.main_frame_intersection_rect = gfx::Rect(0, 0, 1, 10); + tester_->SimulateMetadataUpdate(metadata2, ad_frame); + AdvancePageDuration(base::Seconds(3)); + + metadata2.main_frame_intersection_rect = gfx::Rect(0, 0, 1, 50); + tester_->SimulateMetadataUpdate(metadata2, ad_frame); + AdvancePageDuration(base::Seconds(1)); + + NavigateFrame(kNonAdUrl, main_frame); + + auto entries = ukm_recorder.GetEntriesByName( + ukm::builders::AdPageLoadCustomSampling::kEntryName); + EXPECT_EQ(1u, entries.size()); + + ukm_recorder.ExpectEntryMetric( + entries.front(), + ukm::builders::AdPageLoadCustomSampling::kAverageViewportAdDensityName, + 20); + ukm_recorder.ExpectEntryMetric( + entries.front(), + ukm::builders::AdPageLoadCustomSampling::kVarianceViewportAdDensityName, + /*ukm::GetExponentialBucketMin(300, 1.3)=*/248); + ukm_recorder.ExpectEntryMetric( + entries.front(), + ukm::builders::AdPageLoadCustomSampling::kSkewnessViewportAdDensityName, + /*ukm::GetExponentialBucketMin(std::llround(1.1547), 1.3)=*/1); + ukm_recorder.ExpectEntryMetric( + entries.front(), + ukm::builders::AdPageLoadCustomSampling::kKurtosisViewportAdDensityName, + /*-ukm::GetExponentialBucketMin(-std::llround(-0.666667), 1.3)=*/-1); +} + TEST_P(AdsPageLoadMetricsObserverTest, TestCpuTimingMetricsWindowedActivated) { - OverrideVisibilityTrackerWithMockClock(); + OverrideWithMockClock(); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); @@ -1724,7 +1777,7 @@ } TEST_P(AdsPageLoadMetricsObserverTest, TestCpuTimingMetricsNoActivation) { - OverrideVisibilityTrackerWithMockClock(); + OverrideWithMockClock(); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* non_ad_frame = CreateAndNavigateSubFrame(kNonAdUrl, main_frame); @@ -1775,7 +1828,7 @@ } TEST_P(AdsPageLoadMetricsObserverTest, TestCpuTimingMetricsOnActivation) { - OverrideVisibilityTrackerWithMockClock(); + OverrideWithMockClock(); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* non_ad_frame = CreateAndNavigateSubFrame(kNonAdUrl, main_frame); @@ -2017,7 +2070,7 @@ feature_list.InitWithFeatures( {}, {heavy_ad_intervention::features::kHeavyAdIntervention, heavy_ad_intervention::features::kHeavyAdInterventionWarning}); - OverrideVisibilityTrackerWithMockClock(); + OverrideWithMockClock(); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* ad_frame_none = @@ -2154,7 +2207,7 @@ base::test::ScopedFeatureList feature_list; feature_list.InitAndEnableFeature( heavy_ad_intervention::features::kHeavyAdIntervention); - OverrideVisibilityTrackerWithMockClock(); + OverrideWithMockClock(); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); @@ -2332,7 +2385,7 @@ base::test::ScopedFeatureList feature_list; feature_list.InitAndEnableFeature( heavy_ad_intervention::features::kHeavyAdIntervention); - OverrideVisibilityTrackerWithMockClock(); + OverrideWithMockClock(); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); @@ -2387,7 +2440,7 @@ base::test::ScopedFeatureList feature_list; feature_list.InitAndEnableFeature( heavy_ad_intervention::features::kHeavyAdIntervention); - OverrideVisibilityTrackerWithMockClock(); + OverrideWithMockClock(); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame); @@ -2429,7 +2482,7 @@ base::test::ScopedFeatureList feature_list; feature_list.InitAndEnableFeature( heavy_ad_intervention::features::kHeavyAdIntervention); - OverrideVisibilityTrackerWithMockClock(); + OverrideWithMockClock(); RenderFrameHost* main_frame = NavigateMainFrame(kNonAdUrl); RenderFrameHost* ad_frame = CreateAndNavigateSubFrame(kAdUrl, main_frame);
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/page_ad_density_tracker.cc b/components/page_load_metrics/browser/observers/ad_metrics/page_ad_density_tracker.cc index 83766aa..58eaa6f 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/page_ad_density_tracker.cc +++ b/components/page_load_metrics/browser/observers/ad_metrics/page_ad_density_tracker.cc
@@ -3,8 +3,10 @@ // found in the LICENSE file. #include "components/page_load_metrics/browser/observers/ad_metrics/page_ad_density_tracker.h" + #include "base/metrics/histogram_macros.h" #include "base/numerics/checked_math.h" +#include "base/time/default_tick_clock.h" #include "third_party/abseil-cpp/absl/types/optional.h" namespace page_load_metrics { @@ -172,9 +174,9 @@ PageAdDensityTracker::RectEventSetIterators::RectEventSetIterators( const RectEventSetIterators& other) = default; -PageAdDensityTracker::PageAdDensityTracker() { - start_time_ = base::TimeTicks::Now(); - last_viewport_density_recording_time_ = start_time_; +PageAdDensityTracker::PageAdDensityTracker(base::TickClock* clock) + : clock_(clock ? clock : base::DefaultTickClock::GetInstance()) { + last_viewport_density_accumulate_time_ = clock_->NowTicks(); } PageAdDensityTracker::~PageAdDensityTracker() = default; @@ -187,22 +189,10 @@ return max_page_ad_density_by_area_; } -int PageAdDensityTracker::AverageViewportAdDensityByArea() const { - base::TimeTicks now = base::TimeTicks::Now(); - - base::TimeDelta total_elapsed_time = now - start_time_; - if (total_elapsed_time == base::TimeDelta()) - return -1; - - base::TimeDelta last_elapsed_time = - now - last_viewport_density_recording_time_; - - double total_viewport_ad_density_by_area = - cumulative_viewport_ad_density_by_area_ + - (last_viewport_ad_density_by_area_ * last_elapsed_time.InMicrosecondsF()); - - return std::lround(total_viewport_ad_density_by_area / - total_elapsed_time.InMicrosecondsF()); +UnivariateStats::DistributionMoments +PageAdDensityTracker::GetAdDensityByAreaStats() const { + DCHECK(finalize_called_); + return viewport_ad_density_by_area_stats_.CalculateStats(); } int PageAdDensityTracker::ViewportAdDensityByArea() const { @@ -266,6 +256,27 @@ CalculateViewportAdDensity(); } +void PageAdDensityTracker::Finalize() { + DCHECK(!finalize_called_); + + AccumulateOutstandingViewportAdDensity(); + + finalize_called_ = true; +} + +void PageAdDensityTracker::AccumulateOutstandingViewportAdDensity() { + base::TimeTicks now = clock_->NowTicks(); + base::TimeDelta elapsed_time = now - last_viewport_density_accumulate_time_; + + if (elapsed_time.is_zero()) + return; + + viewport_ad_density_by_area_stats_.Accumulate( + last_viewport_ad_density_by_area_, elapsed_time.InMicrosecondsF()); + + last_viewport_density_accumulate_time_ = now; +} + void PageAdDensityTracker::CalculatePageAdDensity() { AdDensityCalculationResult result = CalculateDensityWithin(last_main_frame_rect_); @@ -285,14 +296,7 @@ if (!result.ad_density_by_area) return; - base::TimeTicks now = base::TimeTicks::Now(); - base::TimeDelta elapsed_time = now - last_viewport_density_recording_time_; - - cumulative_viewport_ad_density_by_area_ += - last_viewport_ad_density_by_area_ * elapsed_time.InMicrosecondsF(); - - last_viewport_density_recording_time_ = now; - + AccumulateOutstandingViewportAdDensity(); last_viewport_ad_density_by_area_ = result.ad_density_by_area.value(); }
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/page_ad_density_tracker.h b/components/page_load_metrics/browser/observers/ad_metrics/page_ad_density_tracker.h index 2a6ff473..dd3b4ba 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/page_ad_density_tracker.h +++ b/components/page_load_metrics/browser/observers/ad_metrics/page_ad_density_tracker.h
@@ -8,7 +8,11 @@ #include <set> #include <unordered_map> +#include "base/memory/raw_ptr.h" +#include "base/time/tick_clock.h" #include "base/time/time.h" +#include "components/page_load_metrics/browser/observers/ad_metrics/page_ad_density_tracker.h" +#include "components/page_load_metrics/browser/observers/ad_metrics/univariate_stats.h" #include "third_party/abseil-cpp/absl/types/optional.h" #include "ui/gfx/geometry/rect.h" @@ -29,7 +33,7 @@ absl::optional<int> ad_density_by_area; }; - PageAdDensityTracker(); + explicit PageAdDensityTracker(base::TickClock* clock = nullptr); ~PageAdDensityTracker(); PageAdDensityTracker(const PageAdDensityTracker&) = delete; @@ -60,17 +64,19 @@ // calculation fails (i.e. no main frame size), this returns -1. int MaxPageAdDensityByArea() const; - // Returns the moving average of viewport ad density by area, as a value from - // 0-100. If the density calculation fails (i.e. elapsed time is 0), this - // returns -1. If the density calculation didn't happen (i.e. no main frame - // viewport), this returns 0. - int AverageViewportAdDensityByArea() const; + // Returns the distribution moments of the viewport ad density by area. + // Returns default value (i.e. 0s) if the density calculation didn't happen + // (i.e. no main frame viewport) or if the elapsed time is 0. + UnivariateStats::DistributionMoments GetAdDensityByAreaStats() const; // Returns the last calculated viewport ad density by area, as a value from // 0-100. If the density calculation didn't happen (i.e. no main frame // viewport), this returns 0. int ViewportAdDensityByArea() const; + // Called at the end of the page load to finalize metrics measurement. + void Finalize(); + private: // An event to process corresponding to the top or bottom of each rect. struct RectEvent { @@ -99,6 +105,12 @@ std::set<RectEvent>::const_iterator bottom_it; }; + // Accumulate `last_viewport_ad_density_by_area_` and its weight (i.e. the + // elapsed time since `last_viewport_density_accumulate_time_`) into + // `viewport_ad_density_by_area_stats_`. This can be invoked either when a + // new density is calculated, or during `Finalize()`. + void AccumulateOutstandingViewportAdDensity(); + void CalculatePageAdDensity(); void CalculateViewportAdDensity(); @@ -126,18 +138,22 @@ // coordinate system. gfx::Rect last_main_frame_viewport_rect_; - // The time when this `PageAdDensityTracker` is created. - base::TimeTicks start_time_; - - // The last time when `last_viewport_ad_density_by_area_` is recorded/checked - // and `cumulative_viewport_ad_density_by_area_` is updated. - base::TimeTicks last_viewport_density_recording_time_; + // The last time when `last_viewport_ad_density_by_area_` is accumulated into + // `viewport_ad_density_by_area_stats_`. Set to the current time at the start + // of the page. + base::TimeTicks last_viewport_density_accumulate_time_; // The last calculated ad density within the main frame viewport. int last_viewport_ad_density_by_area_ = 0; - // The time cumulative ad density within the main frame viewport. - double cumulative_viewport_ad_density_by_area_ = 0; + // Keep observing `last_viewport_ad_density_by_area_` before each time it gets + // an update, to derive the distribution statistics in the end. + UnivariateStats viewport_ad_density_by_area_stats_; + + bool finalize_called_ = false; + + // The tick clock used to get the current time. Can be replaced by tests. + raw_ptr<const base::TickClock> clock_; }; } // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/page_ad_density_tracker_unittest.cc b/components/page_load_metrics/browser/observers/ad_metrics/page_ad_density_tracker_unittest.cc index 463e3e9b..a7cec21 100644 --- a/components/page_load_metrics/browser/observers/ad_metrics/page_ad_density_tracker_unittest.cc +++ b/components/page_load_metrics/browser/observers/ad_metrics/page_ad_density_tracker_unittest.cc
@@ -183,7 +183,8 @@ tracker.UpdateMainFrameViewportRect(gfx::Rect(0, 0, 100, 100)); tracker.AddRect(1 /* rect_id */, gfx::Rect(0, 0, 50, 50)); - EXPECT_EQ(tracker.AverageViewportAdDensityByArea(), -1); + tracker.Finalize(); + EXPECT_DOUBLE_EQ(tracker.GetAdDensityByAreaStats().mean, 0); } TEST(PageAdDensityTrackerTest, AverageViewportAdDensity_NoViewportRectUpdate) { @@ -194,7 +195,8 @@ tracker.AddRect(1 /* rect_id */, gfx::Rect(0, 0, 50, 50)); task_environment.FastForwardBy(base::Seconds(1)); - EXPECT_EQ(tracker.AverageViewportAdDensityByArea(), 0); + tracker.Finalize(); + EXPECT_DOUBLE_EQ(tracker.GetAdDensityByAreaStats().mean, 0); } TEST(PageAdDensityTrackerTest, AverageViewportAdDensity_NoAdRectUpdate) { @@ -205,7 +207,8 @@ tracker.UpdateMainFrameViewportRect(gfx::Rect(0, 0, 100, 100)); task_environment.FastForwardBy(base::Seconds(1)); - EXPECT_EQ(tracker.AverageViewportAdDensityByArea(), 0); + tracker.Finalize(); + EXPECT_DOUBLE_EQ(tracker.GetAdDensityByAreaStats().mean, 0); } TEST(PageAdDensityTrackerTest, @@ -220,7 +223,9 @@ tracker.AddRect(1 /* rect_id */, gfx::Rect(0, 0, 50, 50)); EXPECT_EQ(tracker.ViewportAdDensityByArea(), 100); - EXPECT_EQ(tracker.AverageViewportAdDensityByArea(), 0); + + tracker.Finalize(); + EXPECT_DOUBLE_EQ(tracker.GetAdDensityByAreaStats().mean, 0); } TEST(PageAdDensityTrackerTest, @@ -237,7 +242,9 @@ task_environment.FastForwardBy(base::Seconds(1)); EXPECT_EQ(tracker.ViewportAdDensityByArea(), 100); - EXPECT_EQ(tracker.AverageViewportAdDensityByArea(), 50); + + tracker.Finalize(); + EXPECT_DOUBLE_EQ(tracker.GetAdDensityByAreaStats().mean, 50); } TEST(PageAdDensityTrackerTest, @@ -250,12 +257,12 @@ tracker.AddRect(1 /* rect_id */, gfx::Rect(0, 0, 50, 50)); task_environment.FastForwardBy(base::Seconds(1)); - EXPECT_EQ(tracker.AverageViewportAdDensityByArea(), 50); tracker.UpdateMainFrameViewportRect(gfx::Rect(0, 0, 50, 50)); task_environment.FastForwardBy(base::Seconds(1)); - EXPECT_EQ(tracker.AverageViewportAdDensityByArea(), 75); + tracker.Finalize(); + EXPECT_DOUBLE_EQ(tracker.GetAdDensityByAreaStats().mean, 75); } TEST(PageAdDensityTrackerTest, @@ -268,12 +275,12 @@ tracker.UpdateMainFrameViewportRect(gfx::Rect(0, 0, 50, 50)); task_environment.FastForwardBy(base::Seconds(1)); - EXPECT_EQ(tracker.AverageViewportAdDensityByArea(), 100); tracker.UpdateMainFrameViewportRect(gfx::Rect(50, 50, 50, 50)); task_environment.FastForwardBy(base::Seconds(1)); - EXPECT_EQ(tracker.AverageViewportAdDensityByArea(), 50); + tracker.Finalize(); + EXPECT_DOUBLE_EQ(tracker.GetAdDensityByAreaStats().mean, 50); } TEST(PageAdDensityTrackerTest, AverageViewportAdDensity_AdRectUpdate) { @@ -285,13 +292,13 @@ tracker.UpdateMainFrameViewportRect(gfx::Rect(0, 0, 50, 100)); task_environment.FastForwardBy(base::Seconds(1)); - EXPECT_EQ(tracker.AverageViewportAdDensityByArea(), 50); tracker.RemoveRect(1 /* rect_id */); tracker.AddRect(1 /* rect_id */, gfx::Rect(0, 0, 50, 100)); task_environment.FastForwardBy(base::Seconds(1)); - EXPECT_EQ(tracker.AverageViewportAdDensityByArea(), 75); + tracker.Finalize(); + EXPECT_DOUBLE_EQ(tracker.GetAdDensityByAreaStats().mean, 75); } TEST(PageAdDensityTrackerTest, @@ -304,20 +311,17 @@ tracker.UpdateMainFrameViewportRect(gfx::Rect(0, 0, 50, 100)); task_environment.FastForwardBy(base::Seconds(1)); - EXPECT_EQ(tracker.AverageViewportAdDensityByArea(), 50); tracker.UpdateMainFrameViewportRect(gfx::Rect(25, 0, 50, 100)); task_environment.FastForwardBy(base::Seconds(2)); - EXPECT_EQ(tracker.AverageViewportAdDensityByArea(), - std::lround((50 * 1 + 25 * 2) / 3.0)); - tracker.UpdateMainFrameViewportRect(gfx::Rect(50, 0, 50, 100)); task_environment.FastForwardBy(base::Seconds(3)); - EXPECT_EQ(tracker.AverageViewportAdDensityByArea(), - std::lround((50 * 1 + 25 * 2) / 6.0)); + tracker.Finalize(); + EXPECT_DOUBLE_EQ(tracker.GetAdDensityByAreaStats().mean, + (50 * 1 + 25 * 2) / 6.0); } TEST(PageAdDensityTrackerTest, @@ -339,7 +343,8 @@ tracker.AddRect(3 /* rect_id */, gfx::Rect(25, 25, 50, 50)); task_environment.FastForwardBy(base::Seconds(1)); - EXPECT_EQ(tracker.AverageViewportAdDensityByArea(), int(3 * 100 / 8)); + tracker.Finalize(); + EXPECT_DOUBLE_EQ(tracker.GetAdDensityByAreaStats().mean, int(3 * 100 / 8)); } } // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/univariate_stats.cc b/components/page_load_metrics/browser/observers/ad_metrics/univariate_stats.cc new file mode 100644 index 0000000..49fdf6c --- /dev/null +++ b/components/page_load_metrics/browser/observers/ad_metrics/univariate_stats.cc
@@ -0,0 +1,62 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/page_load_metrics/browser/observers/ad_metrics/univariate_stats.h" + +#include "base/check_op.h" + +namespace page_load_metrics { + +void UnivariateStats::Accumulate(double value, double weight) { + DCHECK_GE(weight, 0); + + double x[4] = {}; + + double prev = 1; + for (size_t i = 0; i < 4; ++i) { + x[i] = prev * value; + sum_x_[i] += x[i] * weight; + prev = x[i]; + } + + total_weight_ += weight; +} + +UnivariateStats::DistributionMoments UnivariateStats::CalculateStats() const { + DistributionMoments result; + + if (std::abs(total_weight_) < 1E-7) + return result; + + double ex[4] = {}; + double mu[4] = {}; + + double prev = 1; + for (size_t i = 0; i < 4; ++i) { + ex[i] = sum_x_[i] / total_weight_; + mu[i] = prev * ex[0]; + prev = mu[i]; + } + + double sigma[4] = {}; + + sigma[1] = ex[1] - mu[1]; + sigma[0] = std::sqrt(sigma[1]); + sigma[2] = sigma[1] * sigma[0]; + sigma[3] = sigma[2] * sigma[0]; + + result.mean = mu[0]; + result.variance = sigma[1]; + + if (std::abs(sigma[3]) < 1E-7) + return result; + + result.skewness = (ex[2] - 3 * mu[0] * sigma[1] - mu[2]) / sigma[2]; + result.excess_kurtosis = + (ex[3] - 4 * mu[0] * ex[2] + 6 * mu[1] * ex[1] - 3 * mu[3]) / sigma[3] - + 3; + return result; +} + +} // namespace page_load_metrics
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/univariate_stats.h b/components/page_load_metrics/browser/observers/ad_metrics/univariate_stats.h new file mode 100644 index 0000000..55bd86ad --- /dev/null +++ b/components/page_load_metrics/browser/observers/ad_metrics/univariate_stats.h
@@ -0,0 +1,41 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef COMPONENTS_PAGE_LOAD_METRICS_BROWSER_OBSERVERS_AD_METRICS_UNIVARIATE_STATS_H_ +#define COMPONENTS_PAGE_LOAD_METRICS_BROWSER_OBSERVERS_AD_METRICS_UNIVARIATE_STATS_H_ + +namespace page_load_metrics { + +// Tracks a variable to be able to calculate its first four moments of +// distribution (i.e. mean, variance, skewness, and kurtosis). +// http://www.itl.nist.gov/div898/handbook/eda/section3/eda35b.htm +class UnivariateStats { + public: + struct DistributionMoments { + double mean = 0; + double variance = 0; + double skewness = 0; + + // Default to -3 as we are measuring "excess kurtosis". + double excess_kurtosis = -3; + }; + + // Update the derived statistics given the new data point. + void Accumulate(double value, double weight); + + // Calculate the population distribution mean, variance, skewness, and + // kurtosis of the data observed by `Accumulate()`. If `total_weight_` is too + // small, return the default `DistributionMoments`; if the variance is too + // small, only `mean` and `variance` will be set, and `skewness` and + // `kurtosis` will be their default values. + DistributionMoments CalculateStats() const; + + private: + double sum_x_[4] = {}; + double total_weight_ = 0; +}; + +} // namespace page_load_metrics + +#endif // COMPONENTS_PAGE_LOAD_METRICS_BROWSER_OBSERVERS_AD_METRICS_UNIVARIATE_STATS_H_
diff --git a/components/page_load_metrics/browser/observers/ad_metrics/univariate_stats_unittest.cc b/components/page_load_metrics/browser/observers/ad_metrics/univariate_stats_unittest.cc new file mode 100644 index 0000000..3ff2f03 --- /dev/null +++ b/components/page_load_metrics/browser/observers/ad_metrics/univariate_stats_unittest.cc
@@ -0,0 +1,58 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/page_load_metrics/browser/observers/ad_metrics/univariate_stats.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace page_load_metrics { + +TEST(UnivariateStatsTest, NoData) { + UnivariateStats stats; + UnivariateStats::DistributionMoments moments = stats.CalculateStats(); + + EXPECT_DOUBLE_EQ(moments.mean, 0); + EXPECT_DOUBLE_EQ(moments.variance, 0); + EXPECT_DOUBLE_EQ(moments.skewness, 0); + EXPECT_DOUBLE_EQ(moments.excess_kurtosis, -3); +} + +TEST(UnivariateStatsTest, OneDataPoint) { + UnivariateStats stats; + stats.Accumulate(/*value=*/1, /*weight=*/1); + + UnivariateStats::DistributionMoments moments = stats.CalculateStats(); + + EXPECT_DOUBLE_EQ(moments.mean, 1); + EXPECT_DOUBLE_EQ(moments.variance, 0); + EXPECT_DOUBLE_EQ(moments.skewness, 0); + EXPECT_DOUBLE_EQ(moments.excess_kurtosis, -3); +} + +TEST(UnivariateStatsTest, TwoDataPoints_EqualWeight) { + UnivariateStats stats; + stats.Accumulate(/*value=*/1, /*weight=*/1); + stats.Accumulate(/*value=*/2, /*weight=*/1); + + UnivariateStats::DistributionMoments moments = stats.CalculateStats(); + + EXPECT_DOUBLE_EQ(moments.mean, 1.5); + EXPECT_DOUBLE_EQ(moments.variance, 0.25); + EXPECT_DOUBLE_EQ(moments.skewness, 0); + EXPECT_DOUBLE_EQ(moments.excess_kurtosis, -2); +} + +TEST(UnivariateStatsTest, TwoDataPoints_UnequalWeight) { + UnivariateStats stats; + stats.Accumulate(/*value=*/1, /*weight=*/3); + stats.Accumulate(/*value=*/2, /*weight=*/1); + + UnivariateStats::DistributionMoments moments = stats.CalculateStats(); + + EXPECT_DOUBLE_EQ(moments.mean, 5.0 / 4); + EXPECT_DOUBLE_EQ(moments.variance, 3.0 / 16); + EXPECT_DOUBLE_EQ(moments.skewness, 2.0 / std::sqrt(3)); + EXPECT_DOUBLE_EQ(moments.excess_kurtosis, -2.0 / 3); +} + +} // namespace page_load_metrics
diff --git a/components/password_manager/core/browser/hash_password_manager.cc b/components/password_manager/core/browser/hash_password_manager.cc index 8a0016e..e81b0ed 100644 --- a/components/password_manager/core/browser/hash_password_manager.cc +++ b/components/password_manager/core/browser/hash_password_manager.cc
@@ -60,10 +60,10 @@ std::string GetAndDecryptField(const base::Value& dict, const std::string& field_key) { - const base::Value* encrypted_field_value = dict.FindKey(field_key); - return encrypted_field_value - ? DecryptBase64String(encrypted_field_value->GetString()) - : std::string(); + const std::string* encrypted_field_value = + dict.GetDict().FindString(field_key); + return encrypted_field_value ? DecryptBase64String(*encrypted_field_value) + : std::string(); } bool IsGaiaPassword(const base::Value& dict) { @@ -136,7 +136,7 @@ // unchanged, no need to save password hash again. Instead we update the last // sign in timestamp. ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList); - for (base::Value& password_hash_data : update.Get()->GetListDeprecated()) { + for (base::Value& password_hash_data : update.Get()->GetList()) { if (AreUsernamesSame( GetAndDecryptField(password_hash_data, kUsernameFieldKey), IsGaiaPassword(password_hash_data), username, is_gaia_password)) { @@ -144,8 +144,8 @@ ConvertToPasswordHashData(password_hash_data); if (existing_password_hash && existing_password_hash->MatchesPassword( username, password, is_gaia_password)) { - password_hash_data.SetKey(kLastSignInTimeFieldKey, - base::Value(base::Time::Now().ToDoubleT())); + password_hash_data.GetDict().Set(kLastSignInTimeFieldKey, + base::Time::Now().ToDoubleT()); return true; } } @@ -243,7 +243,7 @@ } for (const base::Value& entry : - prefs_->GetList(prefs::kPasswordHashDataList)->GetListDeprecated()) { + prefs_->GetValueList(prefs::kPasswordHashDataList)) { if (AreUsernamesSame(GetAndDecryptField(entry, kUsernameFieldKey), IsGaiaPassword(entry), username, is_gaia_password)) { return ConvertToPasswordHashData(entry); @@ -261,7 +261,7 @@ } for (const base::Value& entry : - prefs_->GetList(prefs::kPasswordHashDataList)->GetListDeprecated()) { + prefs_->GetValueList(prefs::kPasswordHashDataList)) { if (AreUsernamesSame(GetAndDecryptField(entry, kUsernameFieldKey), IsGaiaPassword(entry), username, is_gaia_password)) { return true; @@ -303,36 +303,33 @@ if (encrypted_is_gaia_value.empty()) return false; - base::DictionaryValue encrypted_password_hash_entry; - encrypted_password_hash_entry.SetKey(kUsernameFieldKey, - base::Value(encrypted_username)); - encrypted_password_hash_entry.SetKey(kHashFieldKey, - base::Value(encrypted_hash)); - encrypted_password_hash_entry.SetKey(kLengthAndSaltFieldKey, - base::Value(encrypted_length_and_salt)); - encrypted_password_hash_entry.SetKey(kIsGaiaFieldKey, - base::Value(encrypted_is_gaia_value)); - encrypted_password_hash_entry.SetKey( - kLastSignInTimeFieldKey, base::Value(base::Time::Now().ToDoubleT())); + base::Value::Dict encrypted_password_hash_entry; + encrypted_password_hash_entry.Set(kUsernameFieldKey, encrypted_username); + encrypted_password_hash_entry.Set(kHashFieldKey, encrypted_hash); + encrypted_password_hash_entry.Set(kLengthAndSaltFieldKey, + encrypted_length_and_salt); + encrypted_password_hash_entry.Set(kIsGaiaFieldKey, encrypted_is_gaia_value); + encrypted_password_hash_entry.Set(kLastSignInTimeFieldKey, + base::Time::Now().ToDoubleT()); ListPrefUpdate update(prefs_, prefs::kPasswordHashDataList); - size_t num_erased = update->EraseListValueIf([&](const auto& dict) { + base::Value::List& update_list = update->GetList(); + size_t num_erased = update_list.EraseIf([&](const auto& dict) { return AreUsernamesSame(GetAndDecryptField(dict, kUsernameFieldKey), IsGaiaPassword(dict), password_hash_data.username, password_hash_data.is_gaia_password); }); - if (num_erased == 0 && - update->GetListDeprecated().size() >= kMaxPasswordHashDataDictSize) { + if (num_erased == 0 && update_list.size() >= kMaxPasswordHashDataDictSize) { // Erase the oldest sign-in password hash data. update->EraseListIter(std::min_element( - update->GetListDeprecated().begin(), update->GetListDeprecated().end(), + update_list.begin(), update_list.end(), [](const auto& lhs, const auto& rhs) { - return lhs.FindKey(kLastSignInTimeFieldKey)->GetDouble() < - rhs.FindKey(kLastSignInTimeFieldKey)->GetDouble(); + return *lhs.GetDict().FindDouble(kLastSignInTimeFieldKey) < + *rhs.GetDict().FindDouble(kLastSignInTimeFieldKey); })); } - update->Append(std::move(encrypted_password_hash_entry)); + update_list.Append(std::move(encrypted_password_hash_entry)); return true; }
diff --git a/components/password_manager/core/browser/hash_password_manager_unittest.cc b/components/password_manager/core/browser/hash_password_manager_unittest.cc index ee468c6..4f0a01e 100644 --- a/components/password_manager/core/browser/hash_password_manager_unittest.cc +++ b/components/password_manager/core/browser/hash_password_manager_unittest.cc
@@ -90,9 +90,7 @@ hash_password_manager.SavePasswordHash(canonical_username, password, /*is_gaia_password=*/true); ASSERT_TRUE(prefs_.HasPrefPath(prefs::kPasswordHashDataList)); - EXPECT_EQ( - 1u, - prefs_.GetList(prefs::kPasswordHashDataList)->GetListDeprecated().size()); + EXPECT_EQ(1u, prefs_.GetValueList(prefs::kPasswordHashDataList).size()); EXPECT_EQ( canonical_username, hash_password_manager @@ -110,9 +108,7 @@ hash_password_manager.RetrievePasswordHash(username, /*is_gaia_password=*/true); EXPECT_EQ(current_password_hash_data->hash, existing_password_data->hash); - EXPECT_EQ( - 1u, - prefs_.GetList(prefs::kPasswordHashDataList)->GetListDeprecated().size()); + EXPECT_EQ(1u, prefs_.GetValueList(prefs::kPasswordHashDataList).size()); EXPECT_EQ(canonical_username, hash_password_manager .RetrievePasswordHash(username, /*is_gaia_password=*/true) @@ -124,9 +120,7 @@ .RetrievePasswordHash(gmail_prefix, /*is_gaia_password=*/true) ->hash); - EXPECT_EQ( - 1u, - prefs_.GetList(prefs::kPasswordHashDataList)->GetListDeprecated().size()); + EXPECT_EQ(1u, prefs_.GetValueList(prefs::kPasswordHashDataList).size()); EXPECT_EQ(canonical_username, hash_password_manager .RetrievePasswordHash(gmail_prefix, /*is_gaia_password=*/true) @@ -136,9 +130,7 @@ // full gmail user name. hash_password_manager.SavePasswordHash("user.name", password, /*is_gaia_password=*/true); - EXPECT_EQ( - 2u, - prefs_.GetList(prefs::kPasswordHashDataList)->GetListDeprecated().size()); + EXPECT_EQ(2u, prefs_.GetValueList(prefs::kPasswordHashDataList).size()); EXPECT_EQ("username@gmail.com", hash_password_manager .RetrievePasswordHash("user.name", /*is_gaia_password=*/true)
diff --git a/components/password_manager/core/browser/password_form.cc b/components/password_manager/core/browser/password_form.cc index bb8fbd6..663360b7 100644 --- a/components/password_manager/core/browser/password_form.cc +++ b/components/password_manager/core/browser/password_form.cc
@@ -11,6 +11,7 @@ #include "base/json/json_writer.h" #include "base/json/values_util.h" +#include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/strings/utf_string_conversions.h" #include "base/values.h" @@ -110,61 +111,60 @@ } // Serializes a PasswordForm to a JSON object. Used only for logging in tests. -void PasswordFormToJSON(const PasswordForm& form, base::Value* target) { - target->SetStringKey("scheme", ToString(form.scheme)); - target->SetStringKey("signon_realm", form.signon_realm); - target->SetBoolKey("is_public_suffix_match", form.is_public_suffix_match); - target->SetBoolKey("is_affiliation_based_match", - form.is_affiliation_based_match); - target->SetStringKey("url", form.url.possibly_invalid_spec()); - target->SetStringKey("action", form.action.possibly_invalid_spec()); - target->SetStringKey("submit_element", form.submit_element); - target->SetStringKey("username_element", form.username_element); - target->SetIntKey("username_element_renderer_id", - form.username_element_renderer_id.value()); - target->SetStringKey("username_value", form.username_value); - target->SetStringKey("password_element", form.password_element); - target->SetStringKey("password_value", form.password_value); - target->SetIntKey("password_element_renderer_id", - form.password_element_renderer_id.value()); - target->SetStringKey("new_password_element", form.new_password_element); - target->SetIntKey("password_element_renderer_id", - form.password_element_renderer_id.value()); - target->SetStringKey("new_password_value", form.new_password_value); - target->SetStringKey("confirmation_password_element", - form.confirmation_password_element); - target->SetIntKey("confirmation_password_element_renderer_id", - form.confirmation_password_element_renderer_id.value()); - target->SetStringKey("all_possible_usernames", - ValueElementVectorToString(form.all_possible_usernames)); - target->SetStringKey("all_possible_passwords", - ValueElementVectorToString(form.all_possible_passwords)); - target->SetBoolKey("blocked_by_user", form.blocked_by_user); - target->SetDoubleKey("date_last_used", form.date_last_used.ToDoubleT()); - target->SetDoubleKey("date_password_modified", - form.date_password_modified.ToDoubleT()); - target->SetDoubleKey("date_created", form.date_created.ToDoubleT()); - target->SetStringKey("type", ToString(form.type)); - target->SetIntKey("times_used", form.times_used); - target->SetStringKey("form_data", ToString(form.form_data)); - target->SetStringKey("generation_upload_status", - ToString(form.generation_upload_status)); - target->SetStringKey("display_name", form.display_name); - target->SetStringKey("icon_url", form.icon_url.possibly_invalid_spec()); - target->SetStringKey("federation_origin", form.federation_origin.Serialize()); - target->SetBoolKey("skip_next_zero_click", form.skip_zero_click); - target->SetBoolKey("was_parsed_using_autofill_predictions", - form.was_parsed_using_autofill_predictions); - target->SetStringKey("affiliated_web_realm", form.affiliated_web_realm); - target->SetStringKey("app_display_name", form.app_display_name); - target->SetStringKey("app_icon_url", - form.app_icon_url.possibly_invalid_spec()); - target->SetStringKey("submission_event", ToString(form.submission_event)); - target->SetBoolKey("only_for_fallback", form.only_for_fallback); - target->SetBoolKey("is_gaia_with_skip_save_password_form", - form.form_data.is_gaia_with_skip_save_password_form); - target->SetBoolKey("is_new_password_reliable", form.is_new_password_reliable); - target->SetStringKey("in_store", ToString(form.in_store)); +void PasswordFormToJSON(const PasswordForm& form, base::Value::Dict& target) { + target.Set("scheme", ToString(form.scheme)); + target.Set("signon_realm", form.signon_realm); + target.Set("is_public_suffix_match", form.is_public_suffix_match); + target.Set("is_affiliation_based_match", form.is_affiliation_based_match); + target.Set("url", form.url.possibly_invalid_spec()); + target.Set("action", form.action.possibly_invalid_spec()); + target.Set("submit_element", form.submit_element); + target.Set("username_element", form.username_element); + target.Set("username_element_renderer_id", + base::NumberToString(form.username_element_renderer_id.value())); + target.Set("username_value", form.username_value); + target.Set("password_element", form.password_element); + target.Set("password_value", form.password_value); + target.Set("password_element_renderer_id", + base::NumberToString(form.password_element_renderer_id.value())); + target.Set("new_password_element", form.new_password_element); + target.Set( + "new_password_element_renderer_id", + base::NumberToString(form.new_password_element_renderer_id.value())); + target.Set("new_password_value", form.new_password_value); + target.Set("confirmation_password_element", + form.confirmation_password_element); + target.Set("confirmation_password_element_renderer_id", + base::NumberToString( + form.confirmation_password_element_renderer_id.value())); + target.Set("all_possible_usernames", + ValueElementVectorToString(form.all_possible_usernames)); + target.Set("all_possible_passwords", + ValueElementVectorToString(form.all_possible_passwords)); + target.Set("blocked_by_user", form.blocked_by_user); + target.Set("date_last_used", form.date_last_used.ToDoubleT()); + target.Set("date_password_modified", form.date_password_modified.ToDoubleT()); + target.Set("date_created", form.date_created.ToDoubleT()); + target.Set("type", ToString(form.type)); + target.Set("times_used", form.times_used); + target.Set("form_data", ToString(form.form_data)); + target.Set("generation_upload_status", + ToString(form.generation_upload_status)); + target.Set("display_name", form.display_name); + target.Set("icon_url", form.icon_url.possibly_invalid_spec()); + target.Set("federation_origin", form.federation_origin.Serialize()); + target.Set("skip_next_zero_click", form.skip_zero_click); + target.Set("was_parsed_using_autofill_predictions", + form.was_parsed_using_autofill_predictions); + target.Set("affiliated_web_realm", form.affiliated_web_realm); + target.Set("app_display_name", form.app_display_name); + target.Set("app_icon_url", form.app_icon_url.possibly_invalid_spec()); + target.Set("submission_event", ToString(form.submission_event)); + target.Set("only_for_fallback", form.only_for_fallback); + target.Set("is_gaia_with_skip_save_password_form", + form.form_data.is_gaia_with_skip_save_password_form); + target.Set("is_new_password_reliable", form.is_new_password_reliable); + target.Set("in_store", ToString(form.in_store)); std::vector<std::string> hashes; hashes.reserve(form.moving_blocked_for_list.size()); @@ -172,37 +172,34 @@ hashes.push_back(gaia_id_hash.ToBase64()); } - target->SetStringKey("moving_blocked_for_list", - base::JoinString(hashes, ", ")); + target.Set("moving_blocked_for_list", base::JoinString(hashes, ", ")); - std::vector<base::Value> password_issues; + base::Value::List password_issues; password_issues.reserve(form.password_issues.size()); for (const auto& issue : form.password_issues) { - base::Value issue_value(base::Value::Type::DICTIONARY); - issue_value.SetStringKey("insecurity_type", ToString(issue.first)); - issue_value.SetKey("create_time", - base::TimeToValue(issue.second.create_time)); - issue_value.SetBoolKey("is_muted", - static_cast<bool>(issue.second.is_muted)); - password_issues.push_back(std::move(issue_value)); + base::Value::Dict issue_value; + issue_value.Set("insecurity_type", ToString(issue.first)); + issue_value.Set("create_time", base::TimeToValue(issue.second.create_time)); + issue_value.Set("is_muted", static_cast<bool>(issue.second.is_muted)); + password_issues.Append(std::move(issue_value)); } - target->SetKey("password_issues ", base::Value(password_issues)); + target.Set("password_issues ", std::move(password_issues)); - std::vector<base::Value> password_notes; + base::Value::List password_notes; password_notes.reserve(form.notes.size()); for (const auto& note : form.notes) { - base::Value note_value(base::Value::Type::DICTIONARY); - note_value.SetStringKey("unique_display_name", note.unique_display_name); - note_value.SetStringKey("value", note.value); - note_value.SetKey("date_created", base::TimeToValue(note.date_created)); - note_value.SetBoolKey("hide_by_default", note.hide_by_default); - password_notes.push_back(std::move(note_value)); + base::Value::Dict note_dict; + note_dict.Set("unique_display_name", note.unique_display_name); + note_dict.Set("value", note.value); + note_dict.Set("date_created", base::TimeToValue(note.date_created)); + note_dict.Set("hide_by_default", note.hide_by_default); + password_notes.Append(std::move(note_dict)); } - target->SetKey("notes", base::Value(password_notes)); + target.Set("notes", std::move(password_notes)); - target->SetStringKey("previously_associated_sync_account_email", - form.previously_associated_sync_account_email); + target.Set("previously_associated_sync_account_email", + form.previously_associated_sync_account_email); } } // namespace @@ -373,19 +370,19 @@ } std::ostream& operator<<(std::ostream& os, const PasswordForm& form) { - base::Value form_json(base::Value::Type::DICTIONARY); - PasswordFormToJSON(form, &form_json); + base::Value::Dict form_json; + PasswordFormToJSON(form, form_json); // Serialize the default PasswordForm, and remove values from the result that // are equal to this to make the results more concise. - base::Value default_form_json(base::Value::Type::DICTIONARY); - PasswordFormToJSON(PasswordForm(), &default_form_json); - for (auto it_default_key_values : default_form_json.DictItems()) { + base::Value::Dict default_form_json; + PasswordFormToJSON(PasswordForm(), default_form_json); + for (auto it_default_key_values : default_form_json) { const base::Value* actual_value = - form_json.FindKey(it_default_key_values.first); + form_json.Find(it_default_key_values.first); if (actual_value != nullptr && it_default_key_values.second == *actual_value) { - form_json.RemoveKey(it_default_key_values.first); + form_json.Remove(it_default_key_values.first); } }
diff --git a/components/password_manager/core/browser/password_manager.cc b/components/password_manager/core/browser/password_manager.cc index f1039af..49f374a 100644 --- a/components/password_manager/core/browser/password_manager.cc +++ b/components/password_manager/core/browser/password_manager.cc
@@ -286,6 +286,8 @@ registry->RegisterBooleanPref(prefs::kPasswordsPrefWithNewLabelUsed, false); registry->RegisterBooleanPref( prefs::kUnenrolledFromGoogleMobileServicesDueToErrors, false); + registry->RegisterIntegerPref( + prefs::kUnenrolledFromGoogleMobileServicesAfterApiErrorCode, 0); #endif // Preferences for |PasswordChangeSuccessTracker|. registry->RegisterIntegerPref(prefs::kPasswordChangeSuccessTrackerVersion, 0);
diff --git a/components/password_manager/core/browser/password_manager_features_util.cc b/components/password_manager/core/browser/password_manager_features_util.cc index 33d166cd..504e6783 100644 --- a/components/password_manager/core/browser/password_manager_features_util.cc +++ b/components/password_manager/core/browser/password_manager_features_util.cc
@@ -85,12 +85,15 @@ // Returns the total number of accounts for which an opt-in to the account // storage exists. Used for metrics. int GetNumberOfOptedInAccounts(const PrefService* pref_service) { - const base::Value* global_pref = - pref_service->GetDictionary(prefs::kAccountStoragePerAccountSettings); + const base::Value::Dict& global_pref = + pref_service->GetValueDict(prefs::kAccountStoragePerAccountSettings); int count = 0; - for (auto entry : global_pref->DictItems()) { - if (entry.second.FindBoolKey(kAccountStorageOptedInKey).value_or(false)) + for (auto entry : global_pref) { + if (entry.second.GetDict() + .FindBool(kAccountStorageOptedInKey) + .value_or(false)) { ++count; + } } return count; } @@ -100,16 +103,15 @@ public: AccountStorageSettingsReader(const PrefService* prefs, const GaiaIdHash& gaia_id_hash) { - const base::Value* global_pref = - prefs->GetDictionary(prefs::kAccountStoragePerAccountSettings); - if (global_pref) - account_settings_ = global_pref->FindDictKey(gaia_id_hash.ToBase64()); + const base::Value::Dict& global_pref = + prefs->GetValueDict(prefs::kAccountStoragePerAccountSettings); + account_settings_ = global_pref.FindDict(gaia_id_hash.ToBase64()); } bool IsOptedIn() { if (!account_settings_) return false; - return account_settings_->FindBoolKey(kAccountStorageOptedInKey) + return account_settings_->FindBool(kAccountStorageOptedInKey) .value_or(false); } @@ -117,7 +119,7 @@ if (!account_settings_) return PasswordForm::Store::kNotSet; absl::optional<int> value = - account_settings_->FindIntKey(kAccountStorageDefaultStoreKey); + account_settings_->FindInt(kAccountStorageDefaultStoreKey); if (!value) return PasswordForm::Store::kNotSet; return PasswordStoreFromInt(*value); @@ -126,13 +128,13 @@ int GetMoveOfferedToNonOptedInUserCount() const { if (!account_settings_) return 0; - return account_settings_->FindIntKey(kMoveToAccountStoreOfferedCountKey) + return account_settings_->FindInt(kMoveToAccountStoreOfferedCountKey) .value_or(0); } private: // May be null, if no settings for this account were saved yet. - raw_ptr<const base::Value> account_settings_ = nullptr; + raw_ptr<const base::Value::Dict> account_settings_ = nullptr; }; // Helper class for updating account storage settings for a given account. Like @@ -145,34 +147,36 @@ : update_(prefs, prefs::kAccountStoragePerAccountSettings), account_hash_(gaia_id_hash.ToBase64()) {} - base::Value* GetOrCreateAccountSettings() { - base::Value* account_settings = update_->FindDictKey(account_hash_); + base::Value::Dict* GetOrCreateAccountSettings() { + base::Value::Dict* account_settings = + update_->GetDict().FindDict(account_hash_); if (!account_settings) { - account_settings = update_->SetKey( - account_hash_, base::Value(base::Value::Type::DICTIONARY)); + account_settings = &update_->GetDict() + .Set(account_hash_, base::Value::Dict()) + ->GetDict(); } DCHECK(account_settings); return account_settings; } void SetOptedIn() { - base::Value* account_settings = GetOrCreateAccountSettings(); + base::Value::Dict* account_settings = GetOrCreateAccountSettings(); // The count of refusals is only tracked when the user is not opted-in. - account_settings->RemoveKey(kMoveToAccountStoreOfferedCountKey); - account_settings->SetBoolKey(kAccountStorageOptedInKey, true); + account_settings->Remove(kMoveToAccountStoreOfferedCountKey); + account_settings->Set(kAccountStorageOptedInKey, true); } void SetDefaultStore(PasswordForm::Store default_store) { - base::Value* account_settings = GetOrCreateAccountSettings(); - account_settings->SetIntKey(kAccountStorageDefaultStoreKey, - static_cast<int>(default_store)); + base::Value::Dict* account_settings = GetOrCreateAccountSettings(); + account_settings->Set(kAccountStorageDefaultStoreKey, + static_cast<int>(default_store)); } void RecordMoveOfferedToNonOptedInUser() { - base::Value* account_settings = GetOrCreateAccountSettings(); - int count = account_settings->FindIntKey(kMoveToAccountStoreOfferedCountKey) + base::Value::Dict* account_settings = GetOrCreateAccountSettings(); + int count = account_settings->FindInt(kMoveToAccountStoreOfferedCountKey) .value_or(0); - account_settings->SetIntKey(kMoveToAccountStoreOfferedCountKey, ++count); + account_settings->Set(kMoveToAccountStoreOfferedCountKey, ++count); } void ClearAllSettings() { update_->RemoveKey(account_hash_); } @@ -231,10 +235,11 @@ // Show the opt-in if any known previous user opted into using the account // storage before and might want to access it again. return base::ranges::any_of( - pref_service->GetDictionary(prefs::kAccountStoragePerAccountSettings) - ->DictItems(), + pref_service->GetValueDict(prefs::kAccountStoragePerAccountSettings), [](const std::pair<std::string, const base::Value&>& p) { - return p.second.FindBoolKey(kAccountStorageOptedInKey).value_or(false); + return p.second.GetDict() + .FindBool(kAccountStorageOptedInKey) + .value_or(false); }); }
diff --git a/components/password_manager/core/browser/password_manager_features_util_unittest.cc b/components/password_manager/core/browser/password_manager_features_util_unittest.cc index f53dacb..76c2d5b 100644 --- a/components/password_manager/core/browser/password_manager_features_util_unittest.cc +++ b/components/password_manager/core/browser/password_manager_features_util_unittest.cc
@@ -19,11 +19,11 @@ namespace features_util { namespace { -base::Value CreateOptedInAccountPref() { - base::Value global_pref(base::Value::Type::DICTIONARY); - base::Value account_pref(base::Value::Type::DICTIONARY); - account_pref.SetBoolKey("opted_in", true); - global_pref.SetKey("some_gaia_hash", std::move(account_pref)); +base::Value::Dict CreateOptedInAccountPref() { + base::Value::Dict global_pref; + base::Value::Dict account_pref; + account_pref.Set("opted_in", true); + global_pref.Set("some_gaia_hash", std::move(account_pref)); return global_pref; } } // namespace @@ -143,8 +143,8 @@ TEST_P(PasswordManagerFeaturesUtilTest, ShowAccountStorageResignIn) { // Add an account to prefs which opted into using the account-storage. - pref_service_.Set(prefs::kAccountStoragePerAccountSettings, - CreateOptedInAccountPref()); + pref_service_.SetDict(prefs::kAccountStoragePerAccountSettings, + CreateOptedInAccountPref()); // SyncService is not running (because no user is signed-in). SetSyncStateNotSignedIn(); @@ -156,8 +156,8 @@ TEST_F(PasswordManagerFeaturesUtilWithoutAccountStorageTest, ShowAccountStorageReSignin) { // Add an account to prefs which opted into using the account-storage. - pref_service_.Set(prefs::kAccountStoragePerAccountSettings, - CreateOptedInAccountPref()); + pref_service_.SetDict(prefs::kAccountStoragePerAccountSettings, + CreateOptedInAccountPref()); // SyncService is not running (because no user is signed-in). SetSyncStateNotSignedIn(); @@ -169,8 +169,8 @@ TEST_P(PasswordManagerFeaturesUtilTest, DontShowAccountStorageResignIn_SyncActive) { // Add an account to prefs which opted into using the account-storage. - pref_service_.Set(prefs::kAccountStoragePerAccountSettings, - CreateOptedInAccountPref()); + pref_service_.SetDict(prefs::kAccountStoragePerAccountSettings, + CreateOptedInAccountPref()); // SyncService is running (for a different signed-in user). CoreAccountInfo account; @@ -197,8 +197,8 @@ TEST_P(PasswordManagerFeaturesUtilTest, DontShowAccountStorageResignIn_GaiaUrl) { // Add an account to prefs which opted into using the account-storage. - pref_service_.Set(prefs::kAccountStoragePerAccountSettings, - CreateOptedInAccountPref()); + pref_service_.SetDict(prefs::kAccountStoragePerAccountSettings, + CreateOptedInAccountPref()); // SyncService is not running (because no user is signed-in). SetSyncStateNotSignedIn();
diff --git a/components/password_manager/core/browser/password_reuse_manager_impl_unittest.cc b/components/password_manager/core/browser/password_reuse_manager_impl_unittest.cc index dcac2bb..a3e13b1 100644 --- a/components/password_manager/core/browser/password_reuse_manager_impl_unittest.cc +++ b/components/password_manager/core/browser/password_reuse_manager_impl_unittest.cc
@@ -222,10 +222,7 @@ // Check that no sync password reuse is found after clearing the password // hash. reuse_manager()->ClearGaiaPasswordHash("sync_username"); - EXPECT_EQ(0u, prefs() - .GetList(prefs::kPasswordHashDataList) - ->GetListDeprecated() - .size()); + EXPECT_EQ(0u, prefs().GetValueList(prefs::kPasswordHashDataList).size()); MockPasswordReuseDetectorConsumer mock_consumer; EXPECT_CALL(mock_consumer, OnReuseCheckDone(false, _, _, _, _)); reuse_manager()->CheckReuse(input, "https://facebook.com", &mock_consumer); @@ -251,10 +248,7 @@ // Check that no Gaia password reuse is found after clearing all Gaia // password hash. MockPasswordReuseDetectorConsumer mock_consumer; - EXPECT_EQ(0u, prefs() - .GetList(prefs::kPasswordHashDataList) - ->GetListDeprecated() - .size()); + EXPECT_EQ(0u, prefs().GetValueList(prefs::kPasswordHashDataList).size()); EXPECT_CALL(mock_consumer, OnReuseCheckDone(false, _, _, _, _)); reuse_manager()->CheckReuse(input, "https://example.com", &mock_consumer); RunUntilIdle(); @@ -296,10 +290,7 @@ // Check that no enterprise password reuse is found after clearing the // password hash. reuse_manager()->ClearAllEnterprisePasswordHash(); - EXPECT_EQ(0u, prefs() - .GetList(prefs::kPasswordHashDataList) - ->GetListDeprecated() - .size()); + EXPECT_EQ(0u, prefs().GetValueList(prefs::kPasswordHashDataList).size()); MockPasswordReuseDetectorConsumer mock_consumer; EXPECT_CALL(mock_consumer, OnReuseCheckDone(false, _, _, _, _)); reuse_manager()->CheckReuse(input, "https://example.com", &mock_consumer); @@ -331,19 +322,13 @@ "username@gmail.com", /*is_gaia_password=*/true, prefs()); ASSERT_TRUE(gmail_password_hash.has_value()); - EXPECT_EQ(2u, prefs() - .GetList(prefs::kPasswordHashDataList) - ->GetListDeprecated() - .size()); + EXPECT_EQ(2u, prefs().GetValueList(prefs::kPasswordHashDataList).size()); // Check that no non-gmail password reuse is found after clearing the // password hash. reuse_manager()->ClearAllNonGmailPasswordHash(); MockPasswordReuseDetectorConsumer mock_consumer; - EXPECT_EQ(1u, prefs() - .GetList(prefs::kPasswordHashDataList) - ->GetListDeprecated() - .size()); + EXPECT_EQ(1u, prefs().GetValueList(prefs::kPasswordHashDataList).size()); EXPECT_CALL(mock_consumer, OnReuseCheckDone(false, _, _, _, _)); reuse_manager()->CheckReuse(non_sync_gaia_password, "https://example.com", &mock_consumer);
diff --git a/components/password_manager/core/browser/password_scripts_fetcher_impl.cc b/components/password_manager/core/browser/password_scripts_fetcher_impl.cc index 3de1dae..3b878ab3 100644 --- a/components/password_manager/core/browser/password_scripts_fetcher_impl.cc +++ b/components/password_manager/core/browser/password_scripts_fetcher_impl.cc
@@ -49,14 +49,15 @@ if (!script_config.is_dict()) return {ParsingResult::kInvalidJson}; - const base::Value* supported_domains_list = - script_config.FindListKey("domains"); - if (!supported_domains_list || !supported_domains_list->is_list()) + const base::Value::List* supported_domains_list = + script_config.GetDict().FindList("domains"); + if (!supported_domains_list) return {ParsingResult::kInvalidJson}; base::flat_set<ParsingResult> warnings; - const std::string* min_version = script_config.FindStringKey("min_version"); + const std::string* min_version = + script_config.GetDict().FindString("min_version"); base::Version version; if (!min_version) { return {ParsingResult::kInvalidJson}; @@ -67,8 +68,7 @@ } } - for (const base::Value& domain : - supported_domains_list->GetListDeprecated()) { + for (const base::Value& domain : *supported_domains_list) { if (!domain.is_string()) { warnings.insert(ParsingResult::kInvalidJson); continue;
diff --git a/components/password_manager/core/browser/site_affiliation/asset_link_data.cc b/components/password_manager/core/browser/site_affiliation/asset_link_data.cc index 1f2fac4..afb2c31 100644 --- a/components/password_manager/core/browser/site_affiliation/asset_link_data.cc +++ b/components/password_manager/core/browser/site_affiliation/asset_link_data.cc
@@ -54,11 +54,11 @@ AssetLinkData& AssetLinkData::operator=(AssetLinkData&& other) = default; bool AssetLinkData::Parse(const std::string& data) { - std::unique_ptr<base::Value> value = base::JSONReader::ReadDeprecated(data); + absl::optional<base::Value> value = base::JSONReader::Read(data); if (!value || !value->is_list()) return false; base::JSONValueConverter<Statement> converter; - for (const auto& item : value->GetListDeprecated()) { + for (const auto& item : value->GetList()) { Statement statement; if (converter.Convert(item, &statement)) { if (!statement.include.empty()) {
diff --git a/components/password_manager/core/browser/ui/insecure_credentials_manager.cc b/components/password_manager/core/browser/ui/insecure_credentials_manager.cc index a304a079..030e7b6 100644 --- a/components/password_manager/core/browser/ui/insecure_credentials_manager.cc +++ b/components/password_manager/core/browser/ui/insecure_credentials_manager.cc
@@ -359,7 +359,7 @@ // If a flag is set to return every credential as compromised, ensure that // all credentials contain a "leak" password issue. for (auto& credential : credentials) { - if (!credential.IsLeaked() && credential.IsPhished()) { + if (!credential.IsLeaked() && !credential.IsPhished()) { credential.password_issues[InsecureType::kLeaked] = InsecurityMetadata(); }
diff --git a/components/password_manager/core/common/password_manager_pref_names.cc b/components/password_manager/core/common/password_manager_pref_names.cc index 1bc3c20..260485a 100644 --- a/components/password_manager/core/common/password_manager_pref_names.cc +++ b/components/password_manager/core/common/password_manager_pref_names.cc
@@ -36,6 +36,8 @@ const char kUnenrolledFromGoogleMobileServicesDueToErrors[] = "unenrolled_from_google_mobile_services_due_to_errors"; +const char kUnenrolledFromGoogleMobileServicesAfterApiErrorCode[] = + "unenrolled_from_google_mobile_services_after_api_error_code"; #endif #if BUILDFLAG(IS_WIN)
diff --git a/components/password_manager/core/common/password_manager_pref_names.h b/components/password_manager/core/common/password_manager_pref_names.h index 5ebb7943..229e621 100644 --- a/components/password_manager/core/common/password_manager_pref_names.h +++ b/components/password_manager/core/common/password_manager_pref_names.h
@@ -81,6 +81,11 @@ // of user-unresolvable errors received on communication with Google Mobile // Services. extern const char kUnenrolledFromGoogleMobileServicesDueToErrors[]; + +// Integer value indicating the Google Mobile Services API error code that +// caused the last unenrollment from the UPM experience. Only set if +// |kUnenrolledFromGoogleMobileServicesDueToErrors| is true. +extern const char kUnenrolledFromGoogleMobileServicesAfterApiErrorCode[]; #endif #if BUILDFLAG(IS_WIN)
diff --git a/components/password_manager/ios/password_form_helper.mm b/components/password_manager/ios/password_form_helper.mm index 1b28267..fbbe82c 100644 --- a/components/password_manager/ios/password_form_helper.mm +++ b/components/password_manager/ios/password_form_helper.mm
@@ -185,7 +185,7 @@ #pragma mark - Private methods - (BOOL)handleScriptCommand:(const base::Value&)JSONCommand { - const std::string* command = JSONCommand.FindStringKey("command"); + const std::string* command = JSONCommand.GetDict().FindString("command"); if (!command || *command != "passwordForm.submitButtonClick") { return NO; }
diff --git a/components/payments/content/utility/payment_manifest_parser.cc b/components/payments/content/utility/payment_manifest_parser.cc index e50db4c..18de436 100644 --- a/components/payments/content/utility/payment_manifest_parser.cc +++ b/components/payments/content/utility/payment_manifest_parser.cc
@@ -657,12 +657,12 @@ std::vector<GURL> web_app_manifest_urls; std::vector<url::Origin> supported_origins; - if (result.value) { + if (result.has_value()) { ParsePaymentMethodManifestIntoVectors( - manifest_url, base::Value::ToUniquePtrValue(std::move(*result.value)), - *log_, &web_app_manifest_urls, &supported_origins); + manifest_url, base::Value::ToUniquePtrValue(std::move(*result)), *log_, + &web_app_manifest_urls, &supported_origins); } else { - log_->Error(*result.error); + log_->Error(result.error()); } // Can trigger synchronous deletion of this object, so can't access any of @@ -676,12 +676,11 @@ parse_webapp_callback_counter_--; std::vector<WebAppManifestSection> manifest; - if (result.value) { + if (result.has_value()) { ParseWebAppManifestIntoVector( - base::Value::ToUniquePtrValue(std::move(*result.value)), *log_, - &manifest); + base::Value::ToUniquePtrValue(std::move(*result)), *log_, &manifest); } else { - log_->Error(*result.error); + log_->Error(result.error()); } // Can trigger synchronous deletion of this object, so can't access any of @@ -695,17 +694,17 @@ std::unique_ptr<WebAppInstallationInfo> installation_info; std::unique_ptr<std::vector<WebAppIcon>> icons; - if (result.value) { + if (result.has_value()) { installation_info = std::make_unique<WebAppInstallationInfo>(); icons = std::make_unique<std::vector<WebAppIcon>>(); if (!ParseWebAppInstallationInfoIntoStructs( - base::Value::ToUniquePtrValue(std::move(*result.value)), *log_, + base::Value::ToUniquePtrValue(std::move(*result)), *log_, installation_info.get(), icons.get())) { installation_info.reset(); icons.reset(); } } else { - log_->Error(*result.error); + log_->Error(result.error()); } // Can trigger synchronous deletion of this object, so can't access any of
diff --git a/components/policy/core/browser/url_blocklist_policy_handler.cc b/components/policy/core/browser/url_blocklist_policy_handler.cc index ccd670e..3cb29616 100644 --- a/components/policy/core/browser/url_blocklist_policy_handler.cc +++ b/components/policy/core/browser/url_blocklist_policy_handler.cc
@@ -32,6 +32,8 @@ bool URLBlocklistPolicyHandler::CheckPolicySettings(const PolicyMap& policies, PolicyErrorMap* errors) { size_t disabled_schemes_entries = 0; + +#if !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID) // It is safe to use `GetValueUnsafe()` because type checking is performed // before the value is used. // This policy is deprecated but still supported so check it first. @@ -45,6 +47,7 @@ disabled_schemes_entries = disabled_schemes->GetListDeprecated().size(); } } +#endif if (!policies.IsPolicySet(policy_name())) return true; @@ -98,11 +101,12 @@ PrefValueMap* prefs) { const base::Value* url_blocklist_policy = policies.GetValue(policy_name(), base::Value::Type::LIST); - const base::Value* disabled_schemes_policy = - policies.GetValue(key::kDisabledSchemes, base::Value::Type::LIST); absl::optional<base::Value::List> merged_url_blocklist; +#if !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID) + const base::Value* disabled_schemes_policy = + policies.GetValue(key::kDisabledSchemes, base::Value::Type::LIST); // We start with the DisabledSchemes because we have size limit when // handling URLBlocklists. if (disabled_schemes_policy) { @@ -113,6 +117,7 @@ } } } +#endif if (url_blocklist_policy) { if (!merged_url_blocklist)
diff --git a/components/policy/core/browser/url_blocklist_policy_handler_unittest.cc b/components/policy/core/browser/url_blocklist_policy_handler_unittest.cc index c83e91a..7d0ca58 100644 --- a/components/policy/core/browser/url_blocklist_policy_handler_unittest.cc +++ b/components/policy/core/browser/url_blocklist_policy_handler_unittest.cc
@@ -29,7 +29,9 @@ namespace { +#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) const char kTestDisabledScheme[] = "kTestDisabledScheme"; +#endif const char kTestBlocklistValue[] = "kTestBlocklistValue"; } // namespace @@ -73,6 +75,7 @@ EXPECT_EQ(0U, errors_.size()); } +#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) TEST_F(URLBlocklistPolicyHandlerTest, CheckPolicySettings_URLBlocklistUnspecified) { EXPECT_TRUE( @@ -89,6 +92,7 @@ const std::string actual = errors_.begin()->first; EXPECT_EQ(expected, actual); } +#endif TEST_F(URLBlocklistPolicyHandlerTest, CheckPolicySettings_URLBlocklistWrongType) { @@ -105,6 +109,7 @@ EXPECT_FALSE(prefs_.GetValue(policy_prefs::kUrlBlocklist, nullptr)); } +#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) TEST_F(URLBlocklistPolicyHandlerTest, ApplyPolicySettings_DisabledSchemesWrongType) { // The policy expects a list. Give it a boolean. @@ -114,14 +119,6 @@ } TEST_F(URLBlocklistPolicyHandlerTest, - ApplyPolicySettings_URLBlocklistWrongType) { - // The policy expects a list. Give it a boolean. - SetPolicy(key::kURLBlocklist, base::Value(false)); - ApplyPolicies(); - EXPECT_FALSE(prefs_.GetValue(policy_prefs::kUrlBlocklist, nullptr)); -} - -TEST_F(URLBlocklistPolicyHandlerTest, ApplyPolicySettings_DisabledSchemesEmpty) { SetPolicy(key::kDisabledSchemes, base::Value(base::Value::Type::LIST)); ApplyPolicies(); @@ -131,15 +128,6 @@ EXPECT_EQ(0U, out->GetListDeprecated().size()); } -TEST_F(URLBlocklistPolicyHandlerTest, ApplyPolicySettings_URLBlocklistEmpty) { - SetPolicy(key::kURLBlocklist, base::Value(base::Value::Type::LIST)); - ApplyPolicies(); - base::Value* out; - EXPECT_TRUE(prefs_.GetValue(policy_prefs::kUrlBlocklist, &out)); - ASSERT_TRUE(out->is_list()); - EXPECT_EQ(0U, out->GetListDeprecated().size()); -} - TEST_F(URLBlocklistPolicyHandlerTest, ApplyPolicySettings_DisabledSchemesWrongElementType) { // The policy expects string-valued elements. Give it booleans. @@ -156,21 +144,6 @@ } TEST_F(URLBlocklistPolicyHandlerTest, - ApplyPolicySettings_URLBlocklistWrongElementType) { - // The policy expects string-valued elements. Give it booleans. - base::Value in(base::Value::Type::LIST); - in.Append(false); - SetPolicy(key::kURLBlocklist, std::move(in)); - ApplyPolicies(); - - // The element should be skipped. - base::Value* out; - EXPECT_TRUE(prefs_.GetValue(policy_prefs::kUrlBlocklist, &out)); - ASSERT_TRUE(out->is_list()); - EXPECT_EQ(0U, out->GetListDeprecated().size()); -} - -TEST_F(URLBlocklistPolicyHandlerTest, ApplyPolicySettings_DisabledSchemesSuccessful) { base::Value in_disabled_schemes(base::Value::Type::LIST); in_disabled_schemes.Append(kTestDisabledScheme); @@ -187,23 +160,6 @@ EXPECT_EQ(kTestDisabledScheme + std::string("://*"), *out_string); } -TEST_F(URLBlocklistPolicyHandlerTest, - ApplyPolicySettings_URLBlocklistSuccessful) { - base::Value in_url_blocklist(base::Value::Type::LIST); - in_url_blocklist.Append(kTestBlocklistValue); - SetPolicy(key::kURLBlocklist, std::move(in_url_blocklist)); - ApplyPolicies(); - - base::Value* out; - EXPECT_TRUE(prefs_.GetValue(policy_prefs::kUrlBlocklist, &out)); - ASSERT_TRUE(out->is_list()); - EXPECT_EQ(1U, out->GetListDeprecated().size()); - - const std::string* out_string = out->GetListDeprecated()[0].GetIfString(); - ASSERT_TRUE(out_string); - EXPECT_EQ(kTestBlocklistValue, *out_string); -} - TEST_F(URLBlocklistPolicyHandlerTest, ApplyPolicySettings_MergeSuccessful) { base::Value in_disabled_schemes(base::Value::Type::LIST); in_disabled_schemes.Append(kTestDisabledScheme); @@ -228,6 +184,87 @@ EXPECT_EQ(kTestBlocklistValue, *out_string2); } +// Test that the warning message, mapped to +// |IDS_POLICY_URL_ALLOW_BLOCK_LIST_MAX_FILTERS_LIMIT_WARNING|, is added to +// |errors_| when URLBlocklist + DisabledScheme entries exceed the max filters +// per policy limit. +TEST_F(URLBlocklistPolicyHandlerTest, + ApplyPolicySettings_CheckPolicySettingsMaxFiltersLimitExceeded_2) { + base::Value in_disabled_schemes(base::Value::Type::LIST); + in_disabled_schemes.Append(kTestDisabledScheme); + SetPolicy(key::kDisabledSchemes, std::move(in_disabled_schemes)); + + size_t max_filters_per_policy = policy::kMaxUrlFiltersPerPolicy; + base::Value urls = + GetURLBlocklistPolicyValueWithEntries(max_filters_per_policy); + + EXPECT_TRUE(CheckPolicy(key::kURLBlocklist, std::move(urls))); + EXPECT_EQ(1U, errors_.size()); + + ApplyPolicies(); + + auto error_str = errors_.GetErrors(key::kURLBlocklist); + auto expected_str = l10n_util::GetStringFUTF16( + IDS_POLICY_URL_ALLOW_BLOCK_LIST_MAX_FILTERS_LIMIT_WARNING, + base::NumberToString16(max_filters_per_policy)); + EXPECT_TRUE(error_str.find(expected_str) != std::wstring::npos); + + base::Value* out; + EXPECT_TRUE(prefs_.GetValue(policy_prefs::kUrlBlocklist, &out)); + ASSERT_TRUE(out->is_list()); + EXPECT_EQ(max_filters_per_policy + 1, out->GetListDeprecated().size()); +} +#endif + +TEST_F(URLBlocklistPolicyHandlerTest, + ApplyPolicySettings_URLBlocklistWrongType) { + // The policy expects a list. Give it a boolean. + SetPolicy(key::kURLBlocklist, base::Value(false)); + ApplyPolicies(); + EXPECT_FALSE(prefs_.GetValue(policy_prefs::kUrlBlocklist, nullptr)); +} + +TEST_F(URLBlocklistPolicyHandlerTest, ApplyPolicySettings_URLBlocklistEmpty) { + SetPolicy(key::kURLBlocklist, base::Value(base::Value::Type::LIST)); + ApplyPolicies(); + base::Value* out; + EXPECT_TRUE(prefs_.GetValue(policy_prefs::kUrlBlocklist, &out)); + ASSERT_TRUE(out->is_list()); + EXPECT_EQ(0U, out->GetListDeprecated().size()); +} + +TEST_F(URLBlocklistPolicyHandlerTest, + ApplyPolicySettings_URLBlocklistWrongElementType) { + // The policy expects string-valued elements. Give it booleans. + base::Value in(base::Value::Type::LIST); + in.Append(false); + SetPolicy(key::kURLBlocklist, std::move(in)); + ApplyPolicies(); + + // The element should be skipped. + base::Value* out; + EXPECT_TRUE(prefs_.GetValue(policy_prefs::kUrlBlocklist, &out)); + ASSERT_TRUE(out->is_list()); + EXPECT_EQ(0U, out->GetListDeprecated().size()); +} + +TEST_F(URLBlocklistPolicyHandlerTest, + ApplyPolicySettings_URLBlocklistSuccessful) { + base::Value in_url_blocklist(base::Value::Type::LIST); + in_url_blocklist.Append(kTestBlocklistValue); + SetPolicy(key::kURLBlocklist, std::move(in_url_blocklist)); + ApplyPolicies(); + + base::Value* out; + EXPECT_TRUE(prefs_.GetValue(policy_prefs::kUrlBlocklist, &out)); + ASSERT_TRUE(out->is_list()); + EXPECT_EQ(1U, out->GetListDeprecated().size()); + + const std::string* out_string = out->GetListDeprecated()[0].GetIfString(); + ASSERT_TRUE(out_string); + EXPECT_EQ(kTestBlocklistValue, *out_string); +} + TEST_F(URLBlocklistPolicyHandlerTest, ApplyPolicySettings_CheckPolicySettingsMaxFiltersLimitOK) { size_t max_filters_per_policy = policy::kMaxUrlFiltersPerPolicy; @@ -271,37 +308,6 @@ EXPECT_EQ(max_filters_per_policy + 1, out->GetListDeprecated().size()); } -// Test that the warning message, mapped to -// |IDS_POLICY_URL_ALLOW_BLOCK_LIST_MAX_FILTERS_LIMIT_WARNING|, is added to -// |errors_| when URLBlocklist + DisabledScheme entries exceed the max filters -// per policy limit. -TEST_F(URLBlocklistPolicyHandlerTest, - ApplyPolicySettings_CheckPolicySettingsMaxFiltersLimitExceeded_2) { - base::Value in_disabled_schemes(base::Value::Type::LIST); - in_disabled_schemes.Append(kTestDisabledScheme); - SetPolicy(key::kDisabledSchemes, std::move(in_disabled_schemes)); - - size_t max_filters_per_policy = policy::kMaxUrlFiltersPerPolicy; - base::Value urls = - GetURLBlocklistPolicyValueWithEntries(max_filters_per_policy); - - EXPECT_TRUE(CheckPolicy(key::kURLBlocklist, std::move(urls))); - EXPECT_EQ(1U, errors_.size()); - - ApplyPolicies(); - - auto error_str = errors_.GetErrors(key::kURLBlocklist); - auto expected_str = l10n_util::GetStringFUTF16( - IDS_POLICY_URL_ALLOW_BLOCK_LIST_MAX_FILTERS_LIMIT_WARNING, - base::NumberToString16(max_filters_per_policy)); - EXPECT_TRUE(error_str.find(expected_str) != std::wstring::npos); - - base::Value* out; - EXPECT_TRUE(prefs_.GetValue(policy_prefs::kUrlBlocklist, &out)); - ASSERT_TRUE(out->is_list()); - EXPECT_EQ(max_filters_per_policy + 1, out->GetListDeprecated().size()); -} - TEST_F(URLBlocklistPolicyHandlerTest, ValidatePolicy) { EXPECT_TRUE(ValidatePolicy("http://*")); EXPECT_TRUE(ValidatePolicy("http:*"));
diff --git a/components/policy/core/common/policy_map_unittest.cc b/components/policy/core/common/policy_map_unittest.cc index 453fe38..3e419456 100644 --- a/components/policy/core/common/policy_map_unittest.cc +++ b/components/policy/core/common/policy_map_unittest.cc
@@ -982,11 +982,11 @@ PolicyMap policy_not_merged; policy_not_merged.Set(kTestPolicyName1, platform_user_mandatory.DeepCopy()); - policy_not_merged.Set(policy::key::kExtensionInstallBlocklist, + policy_not_merged.Set(policy::key::kPopupsAllowedForUrls, platform_machine_mandatory.DeepCopy()); - policy_not_merged.Set(policy::key::kExtensionInstallAllowlist, + policy_not_merged.Set(policy::key::kPopupsBlockedForUrls, cloud_machine_mandatory.DeepCopy()); - policy_not_merged.Set(policy::key::kExtensionInstallForcelist, + policy_not_merged.Set(policy::key::kDefaultPopupsSetting, platform_machine_recommended.DeepCopy()); PolicyMap group_merged = policy_not_merged.Clone(); @@ -996,11 +996,11 @@ PolicyMap expected_group_merged; expected_group_merged.Set(kTestPolicyName1, platform_user_mandatory.DeepCopy()); - expected_group_merged.Set(policy::key::kExtensionInstallBlocklist, + expected_group_merged.Set(policy::key::kPopupsAllowedForUrls, platform_machine_mandatory.DeepCopy()); - expected_group_merged.Set(policy::key::kExtensionInstallAllowlist, + expected_group_merged.Set(policy::key::kPopupsBlockedForUrls, cloud_machine_mandatory_ignored.DeepCopy()); - expected_group_merged.Set(policy::key::kExtensionInstallForcelist, + expected_group_merged.Set(policy::key::kDefaultPopupsSetting, platform_machine_recommended.DeepCopy()); EXPECT_TRUE(group_merged.Equals(expected_group_merged));
diff --git a/components/policy/core/common/policy_merger.cc b/components/policy/core/common/policy_merger.cc index 97270b1..b08cd20 100644 --- a/components/policy/core/common/policy_merger.cc +++ b/components/policy/core/common/policy_merger.cc
@@ -17,6 +17,7 @@ namespace { +#if !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID) constexpr const char* kDictionaryPoliciesToMerge[] = { #if BUILDFLAG(IS_CHROMEOS_ASH) key::kExtensionSettings, key::kDeviceLoginScreenPowerManagement, @@ -24,8 +25,9 @@ key::kScreenBrightnessPercent, key::kScreenLockDelays, #else key::kExtensionSettings, -#endif +#endif // BUILDFLAG(IS_CHROMEOS_ASH) }; +#endif // !BUILDFLAG(IS_IOS) && !BUILDFLAG(IS_ANDROID) } // namespace @@ -180,10 +182,15 @@ PolicyDictionaryMerger::PolicyDictionaryMerger( base::flat_set<std::string> policies_to_merge) +#if BUILDFLAG(IS_IOS) || BUILDFLAG(IS_ANDROID) + : policies_to_merge_(std::move(policies_to_merge)){} +#else : policies_to_merge_(std::move(policies_to_merge)), allowed_policies_(std::begin(kDictionaryPoliciesToMerge), - std::end(kDictionaryPoliciesToMerge)) {} -PolicyDictionaryMerger::~PolicyDictionaryMerger() = default; + std::end(kDictionaryPoliciesToMerge)) { +} +#endif + PolicyDictionaryMerger::~PolicyDictionaryMerger() = default; void PolicyDictionaryMerger::Merge(PolicyMap* policies) const { DCHECK(policies);
diff --git a/components/policy/core/common/policy_proto_decoders.cc b/components/policy/core/common/policy_proto_decoders.cc index f92fb0b4d..267bc27 100644 --- a/components/policy/core/common/policy_proto_decoders.cc +++ b/components/policy/core/common/policy_proto_decoders.cc
@@ -122,6 +122,18 @@ } } +bool UseExternalDataFetcher(const char* policy_name, + StringPolicyType policy_type) { + if (policy_type == StringPolicyType::EXTERNAL) + return true; + +#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) + if (strcmp(policy_name, key::kWebAppInstallForceList) == 0) + return true; +#endif + return false; +} + } // namespace void DecodeProtoFields( @@ -186,8 +198,7 @@ // needs an ExternalDataFetcher. If we ever create a second such policy, // create a new type for it instead of special-casing the policies here. std::unique_ptr<ExternalDataFetcher> external_data_fetcher = - (access.type == StringPolicyType::EXTERNAL || - strcmp(access.policy_key, key::kWebAppInstallForceList) == 0) + UseExternalDataFetcher(access.policy_key, access.type) ? std::make_unique<ExternalDataFetcher>(external_data_manager, access.policy_key) : nullptr;
diff --git a/components/policy/core/common/policy_service_impl.cc b/components/policy/core/common/policy_service_impl.cc index ea1f259..dbeb48c2 100644 --- a/components/policy/core/common/policy_service_impl.cc +++ b/components/policy/core/common/policy_service_impl.cc
@@ -93,6 +93,17 @@ bundle.Get(space).GetValue(policy, base::Value::Type::LIST)); } +bool IsUserCloudMergingAllowed(const PolicyMap& policies) { +#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_IOS) + return false; +#else + const base::Value* cloud_user_policy_merge_value = + policies.GetValue(key::kCloudUserPolicyMerge, base::Value::Type::BOOLEAN); + return cloud_user_policy_merge_value && + cloud_user_policy_merge_value->GetBool(); +#endif +} + } // namespace PolicyServiceImpl::PolicyServiceImpl(Providers providers, Migrators migrators) @@ -328,10 +339,8 @@ // Pass affiliation and CloudUserPolicyMerge values to both mergers. const bool is_user_affiliated = chrome_policies.IsUserAffiliated(); - const base::Value* cloud_user_policy_merge_value = chrome_policies.GetValue( - key::kCloudUserPolicyMerge, base::Value::Type::BOOLEAN); const bool is_user_cloud_merging_enabled = - cloud_user_policy_merge_value && cloud_user_policy_merge_value->GetBool(); + IsUserCloudMergingAllowed(chrome_policies); policy_list_merger.SetAllowUserCloudPolicyMerging( is_user_affiliated && is_user_cloud_merging_enabled); policy_dictionary_merger.SetAllowUserCloudPolicyMerging(
diff --git a/components/policy/core/common/policy_service_impl_unittest.cc b/components/policy/core/common/policy_service_impl_unittest.cc index 28e4800..e8e72ff 100644 --- a/components/policy/core/common/policy_service_impl_unittest.cc +++ b/components/policy/core/common/policy_service_impl_unittest.cc
@@ -23,6 +23,7 @@ #include "components/policy/core/common/policy_types.h" #include "components/policy/policy_constants.h" #include "components/strings/grit/components_strings.h" +#include "extensions/buildflags/buildflags.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -1229,6 +1230,7 @@ policy_service_->RemoveObserver(POLICY_DOMAIN_SIGNIN_EXTENSIONS, &observer); } +#if !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) TEST_F(PolicyServiceTest, DictionaryPoliciesMerging) { const PolicyNamespace chrome_namespace(POLICY_DOMAIN_CHROME, std::string()); @@ -1339,7 +1341,6 @@ EXPECT_TRUE(VerifyPolicies(chrome_namespace, expected_chrome)); } -#if !BUILDFLAG(IS_CHROMEOS) // Policy precedence changes are not supported on Chrome OS. TEST_F(PolicyServiceTest, DictionaryPoliciesMerging_PrecedenceChange) { const PolicyNamespace chrome_namespace(POLICY_DOMAIN_CHROME, std::string()); @@ -1438,7 +1439,8 @@ EXPECT_TRUE(VerifyPolicies(chrome_namespace, expected_chrome)); } -#endif // !BUILDFLAG(IS_CHROMEOS) +#endif // !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_ANDROID) && + // !BUILDFLAG(IS_IOS) TEST_F(PolicyServiceTest, ListsPoliciesMerging) { const PolicyNamespace chrome_namespace(POLICY_DOMAIN_CHROME, std::string()); @@ -1455,18 +1457,18 @@ result.Append(base::Value(kUrl1)); std::unique_ptr<base::ListValue> policy = std::make_unique<base::ListValue>(); - policy->Append(base::Value(policy::key::kExtensionInstallForcelist)); + policy->Append(base::Value(policy::key::kDefaultSearchProviderEncodings)); std::vector<std::pair<std::string, base::Value>> policies_1; policies_1.emplace_back(key::kPolicyListMultipleSourceMergeList, policy->Clone()); - policies_1.emplace_back(key::kExtensionInstallForcelist, list1.Clone()); + policies_1.emplace_back(key::kDefaultSearchProviderEncodings, list1.Clone()); auto policy_bundle_1 = CreateBundle(POLICY_SCOPE_MACHINE, POLICY_SOURCE_PLATFORM, std::move(policies_1), chrome_namespace); std::vector<std::pair<std::string, base::Value>> policies_2; - policies_2.emplace_back(key::kExtensionInstallForcelist, list2.Clone()); + policies_2.emplace_back(key::kDefaultSearchProviderEncodings, list2.Clone()); auto policy_bundle_2 = CreateBundle(POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, std::move(policies_2), chrome_namespace); @@ -1480,12 +1482,12 @@ PolicyMap::Entry merged(POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, POLICY_SOURCE_MERGED, std::move(result), nullptr); merged.AddConflictingPolicy(policy_bundle_2->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); merged.AddConflictingPolicy(policy_bundle_1->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); - expected_chrome.Set(key::kExtensionInstallForcelist, std::move(merged)); + expected_chrome.Set(key::kDefaultSearchProviderEncodings, std::move(merged)); provider0_.UpdatePolicy(std::move(policy_bundle_1)); provider1_.UpdatePolicy(std::move(policy_bundle_2)); @@ -1503,13 +1505,14 @@ result.Append(base::Value(kUrl1)); std::unique_ptr<base::ListValue> policy = std::make_unique<base::ListValue>(); - policy->Append(base::Value(policy::key::kExtensionInstallForcelist)); + policy->Append(base::Value(policy::key::kDefaultSearchProviderEncodings)); // policy_bundle_1 is treated as a machine platform bundle. std::vector<std::pair<std::string, base::Value>> policies_1; policies_1.emplace_back(key::kPolicyListMultipleSourceMergeList, policy->Clone()); - policies_1.emplace_back(key::kExtensionInstallForcelist, list_value.Clone()); + policies_1.emplace_back(key::kDefaultSearchProviderEncodings, + list_value.Clone()); auto policy_bundle_1 = CreateBundle(POLICY_SCOPE_MACHINE, POLICY_SOURCE_PLATFORM, std::move(policies_1), chrome_namespace); @@ -1517,7 +1520,8 @@ // policy_bundle_2 is treated as a machine cloud bundle. A string value is set // instead of the expected list value. std::vector<std::pair<std::string, base::Value>> policies_2; - policies_2.emplace_back(key::kExtensionInstallForcelist, base::Value(kUrl2)); + policies_2.emplace_back(key::kDefaultSearchProviderEncodings, + base::Value(kUrl2)); auto policy_bundle_2 = CreateBundle(POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, std::move(policies_2), chrome_namespace); @@ -1534,12 +1538,12 @@ PolicyMap::Entry merged(POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, POLICY_SOURCE_MERGED, std::move(result), nullptr); merged.AddConflictingPolicy(policy_bundle_2->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); merged.AddConflictingPolicy(policy_bundle_1->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); - expected_chrome.Set(key::kExtensionInstallForcelist, std::move(merged)); + expected_chrome.Set(key::kDefaultSearchProviderEncodings, std::move(merged)); provider0_.UpdatePolicy(std::move(policy_bundle_1)); provider1_.UpdatePolicy(std::move(policy_bundle_2)); @@ -1548,7 +1552,7 @@ EXPECT_TRUE(VerifyPolicies(chrome_namespace, expected_chrome)); } -#if !BUILDFLAG(IS_CHROMEOS) +#if !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_IOS) // The cloud user policy merging metapolicy is not applicable in Chrome OS. TEST_F(PolicyServiceTest, ListsPoliciesMerging_CloudMetapolicy) { const PolicyNamespace chrome_namespace(POLICY_DOMAIN_CHROME, std::string()); @@ -1573,11 +1577,11 @@ result.Append(base::Value(kUrl4)); std::unique_ptr<base::ListValue> policy = std::make_unique<base::ListValue>(); - policy->Append(base::Value(policy::key::kExtensionInstallForcelist)); + policy->Append(base::Value(policy::key::kDefaultSearchProviderEncodings)); // policy_bundle_1 is treated as a machine platform bundle. std::vector<std::pair<std::string, base::Value>> policies_1; - policies_1.emplace_back(key::kExtensionInstallForcelist, list1.Clone()); + policies_1.emplace_back(key::kDefaultSearchProviderEncodings, list1.Clone()); auto policy_bundle_1 = CreateBundle(POLICY_SCOPE_MACHINE, POLICY_SOURCE_PLATFORM, std::move(policies_1), chrome_namespace); @@ -1589,7 +1593,7 @@ policies_2.emplace_back(key::kPolicyListMultipleSourceMergeList, policy->Clone()); policies_2.emplace_back(key::kCloudUserPolicyMerge, base::Value(true)); - policies_2.emplace_back(key::kExtensionInstallForcelist, list2.Clone()); + policies_2.emplace_back(key::kDefaultSearchProviderEncodings, list2.Clone()); auto policy_bundle_2 = CreateBundle(POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, std::move(policies_2), chrome_namespace); policy_bundle_2->Get(chrome_namespace).SetDeviceAffiliationIds(ids); @@ -1597,7 +1601,7 @@ // policy_bundle_3 is treated as a user cloud bundle. The user affiliation IDs // are defined here to reflect what would happen in reality. std::vector<std::pair<std::string, base::Value>> policies_3; - policies_3.emplace_back(key::kExtensionInstallForcelist, list3.Clone()); + policies_3.emplace_back(key::kDefaultSearchProviderEncodings, list3.Clone()); auto policy_bundle_3 = CreateBundle(POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, std::move(policies_3), chrome_namespace); policy_bundle_3->Get(chrome_namespace).SetUserAffiliationIds(ids); @@ -1618,15 +1622,15 @@ PolicyMap::Entry merged(POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, POLICY_SOURCE_MERGED, std::move(result), nullptr); merged.AddConflictingPolicy(policy_bundle_3->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); merged.AddConflictingPolicy(policy_bundle_2->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); merged.AddConflictingPolicy(policy_bundle_1->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); - expected_chrome.Set(key::kExtensionInstallForcelist, std::move(merged)); + expected_chrome.Set(key::kDefaultSearchProviderEncodings, std::move(merged)); provider0_.UpdatePolicy(std::move(policy_bundle_3)); provider1_.UpdatePolicy(std::move(policy_bundle_2)); @@ -1635,8 +1639,9 @@ EXPECT_TRUE(VerifyPolicies(chrome_namespace, expected_chrome)); } -#endif // !BUILDFLAG(IS_CHROMEOS) +#endif // !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_IOS) +#if BUILDFLAG(ENABLE_EXTENSIONS) TEST_F(PolicyServiceTest, GroupPoliciesMergingDisabledForCloudUsers) { const PolicyNamespace chrome_namespace(POLICY_DOMAIN_CHROME, std::string()); @@ -1721,13 +1726,13 @@ result.Append(base::Value(kUrl1)); std::unique_ptr<base::ListValue> policy = std::make_unique<base::ListValue>(); - policy->Append(base::Value(policy::key::kExtensionInstallForcelist)); + policy->Append(base::Value(policy::key::kDefaultSearchProviderEncodings)); policy->Append(base::Value(policy::key::kExtensionInstallBlocklist)); std::vector<std::pair<std::string, base::Value>> policies_1; policies_1.emplace_back(key::kPolicyListMultipleSourceMergeList, policy->Clone()); - policies_1.emplace_back(key::kExtensionInstallForcelist, list1.Clone()); + policies_1.emplace_back(key::kDefaultSearchProviderEncodings, list1.Clone()); policies_1.emplace_back(key::kExtensionInstallBlocklist, list1.Clone()); auto policy_bundle_1 = CreateBundle(POLICY_SCOPE_MACHINE, POLICY_SOURCE_PLATFORM, @@ -1742,7 +1747,7 @@ PolicyMap::Entry entry_list_3(POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, list3.Clone(), nullptr); std::vector<std::pair<std::string, base::Value>> policies_2; - policies_2.emplace_back(key::kExtensionInstallForcelist, list2.Clone()); + policies_2.emplace_back(key::kDefaultSearchProviderEncodings, list2.Clone()); policies_2.emplace_back(key::kExtensionInstallBlocklist, list2.Clone()); policies_2.emplace_back(key::kExtensionInstallAllowlist, entry_list_3.value(base::Value::Type::LIST)->Clone()); @@ -1759,13 +1764,13 @@ PolicyMap::Entry merged(POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, POLICY_SOURCE_MERGED, std::move(result), nullptr); merged.AddConflictingPolicy(policy_bundle_2->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); merged.AddConflictingPolicy(policy_bundle_1->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); entry_list_3.SetIgnoredByPolicyAtomicGroup(); - expected_chrome.Set(key::kExtensionInstallForcelist, merged.DeepCopy()); + expected_chrome.Set(key::kDefaultSearchProviderEncodings, merged.DeepCopy()); expected_chrome.Set(key::kExtensionInstallBlocklist, std::move(merged)); expected_chrome.Set(key::kExtensionInstallAllowlist, std::move(entry_list_3)); expected_chrome.Set(key::kPolicyAtomicGroupsEnabled, @@ -1777,7 +1782,9 @@ EXPECT_TRUE(VerifyPolicies(chrome_namespace, expected_chrome)); } +#endif // BUILDFLAG(ENABLE_EXTENSIONS) +#if !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_IOS) TEST_F(PolicyServiceTest, CloudUserListPolicyMerge_Successful) { const PolicyNamespace chrome_namespace(POLICY_DOMAIN_CHROME, std::string()); @@ -1785,7 +1792,8 @@ base::flat_set<std::string> ids; ids.insert(kAffiliationId1); - // Initialize lists of URLs used for ExtensionInstallForcelist policy values. + // Initialize lists of URLs used for DefaultSearchProviderEncodings policy + // values. base::Value list1 = base::Value(base::Value::Type::LIST); list1.Append(base::Value(kUrl1)); list1.Append(base::Value(kUrl2)); @@ -1803,7 +1811,7 @@ // Populate separate policy bundles. std::unique_ptr<base::ListValue> policy = std::make_unique<base::ListValue>(); - policy->Append(base::Value(policy::key::kExtensionInstallForcelist)); + policy->Append(base::Value(policy::key::kDefaultSearchProviderEncodings)); // policy_bundle_1 is treated as a machine platform bundle. The metadata // policies (PolicyListMultipleSourceMergeList, CloudUserPolicyMerge) are @@ -1812,7 +1820,7 @@ policies_1.emplace_back(key::kPolicyListMultipleSourceMergeList, policy->Clone()); policies_1.emplace_back(key::kCloudUserPolicyMerge, base::Value(true)); - policies_1.emplace_back(key::kExtensionInstallForcelist, list1.Clone()); + policies_1.emplace_back(key::kDefaultSearchProviderEncodings, list1.Clone()); auto policy_bundle_1 = CreateBundle(POLICY_SCOPE_MACHINE, POLICY_SOURCE_PLATFORM, std::move(policies_1), chrome_namespace); @@ -1820,7 +1828,7 @@ // policy_bundle_2 is treated as a machine cloud bundle. The device // affiliation IDs are defined here to reflect what would happen in reality. std::vector<std::pair<std::string, base::Value>> policies_2; - policies_2.emplace_back(key::kExtensionInstallForcelist, list2.Clone()); + policies_2.emplace_back(key::kDefaultSearchProviderEncodings, list2.Clone()); auto policy_bundle_2 = CreateBundle(POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, std::move(policies_2), chrome_namespace); policy_bundle_2->Get(chrome_namespace).SetDeviceAffiliationIds(ids); @@ -1828,7 +1836,7 @@ // policy_bundle_3 is treated as a user cloud bundle. The user affiliation IDs // are defined here to reflect what would happen in reality. std::vector<std::pair<std::string, base::Value>> policies_3; - policies_3.emplace_back(key::kExtensionInstallForcelist, list3.Clone()); + policies_3.emplace_back(key::kDefaultSearchProviderEncodings, list3.Clone()); auto policy_bundle_3 = CreateBundle(POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, std::move(policies_3), chrome_namespace); policy_bundle_3->Get(chrome_namespace).SetUserAffiliationIds(ids); @@ -1846,15 +1854,15 @@ PolicyMap::Entry merged(POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, POLICY_SOURCE_MERGED, std::move(result), nullptr); merged.AddConflictingPolicy(policy_bundle_2->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); merged.AddConflictingPolicy(policy_bundle_3->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); merged.AddConflictingPolicy(policy_bundle_1->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); - expected_chrome.Set(key::kExtensionInstallForcelist, std::move(merged)); + expected_chrome.Set(key::kDefaultSearchProviderEncodings, std::move(merged)); expected_chrome.Set(key::kCloudUserPolicyMerge, policy_bundle_1->Get(chrome_namespace) .Get(key::kCloudUserPolicyMerge) @@ -1877,7 +1885,8 @@ base::flat_set<std::string> device_ids; device_ids.insert(kAffiliationId2); - // Initialize lists of URLs used for ExtensionInstallForcelist policy values. + // Initialize lists of URLs used for DefaultSearchProviderEncodings policy + // values. base::Value list1 = base::Value(base::Value::Type::LIST); list1.Append(base::Value(kUrl1)); list1.Append(base::Value(kUrl2)); @@ -1892,7 +1901,7 @@ // Populate separate policy bundles. std::unique_ptr<base::ListValue> policy = std::make_unique<base::ListValue>(); - policy->Append(base::Value(policy::key::kExtensionInstallForcelist)); + policy->Append(base::Value(policy::key::kDefaultSearchProviderEncodings)); // policy_bundle_1 is treated as a machine platform bundle. The metadata // policies (PolicyListMultipleSourceMergeList, CloudUserPolicyMerge) are @@ -1901,7 +1910,7 @@ policies_1.emplace_back(key::kPolicyListMultipleSourceMergeList, policy->Clone()); policies_1.emplace_back(key::kCloudUserPolicyMerge, base::Value(true)); - policies_1.emplace_back(key::kExtensionInstallForcelist, list1.Clone()); + policies_1.emplace_back(key::kDefaultSearchProviderEncodings, list1.Clone()); auto policy_bundle_1 = CreateBundle(POLICY_SCOPE_MACHINE, POLICY_SOURCE_PLATFORM, std::move(policies_1), chrome_namespace); @@ -1909,7 +1918,7 @@ // policy_bundle_2 is treated as a machine cloud bundle. The device // affiliation IDs are defined here to reflect what would happen in reality. std::vector<std::pair<std::string, base::Value>> policies_2; - policies_2.emplace_back(key::kExtensionInstallForcelist, list2.Clone()); + policies_2.emplace_back(key::kDefaultSearchProviderEncodings, list2.Clone()); auto policy_bundle_2 = CreateBundle(POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, std::move(policies_2), chrome_namespace); policy_bundle_2->Get(chrome_namespace).SetDeviceAffiliationIds(device_ids); @@ -1917,7 +1926,7 @@ // policy_bundle_3 is treated as a user cloud bundle. The user affiliation IDs // are defined here to reflect what would happen in reality. std::vector<std::pair<std::string, base::Value>> policies_3; - policies_3.emplace_back(key::kExtensionInstallForcelist, list3.Clone()); + policies_3.emplace_back(key::kDefaultSearchProviderEncodings, list3.Clone()); auto policy_bundle_3 = CreateBundle(POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, std::move(policies_3), chrome_namespace); policy_bundle_3->Get(chrome_namespace).SetUserAffiliationIds(user_ids); @@ -1935,15 +1944,15 @@ PolicyMap::Entry merged(POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, POLICY_SOURCE_MERGED, std::move(result), nullptr); merged.AddConflictingPolicy(policy_bundle_2->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); merged.AddConflictingPolicy(policy_bundle_3->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); merged.AddConflictingPolicy(policy_bundle_1->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); - expected_chrome.Set(key::kExtensionInstallForcelist, std::move(merged)); + expected_chrome.Set(key::kDefaultSearchProviderEncodings, std::move(merged)); expected_chrome.Set(key::kCloudUserPolicyMerge, policy_bundle_1->Get(chrome_namespace) .Get(key::kCloudUserPolicyMerge) @@ -1964,7 +1973,8 @@ base::flat_set<std::string> ids; ids.insert(kAffiliationId1); - // Initialize lists of URLs used for ExtensionInstallForcelist policy values. + // Initialize lists of URLs used for DefaultSearchProviderEncodings policy + // values. base::Value list1 = base::Value(base::Value::Type::LIST); list1.Append(base::Value(kUrl1)); base::Value list2 = base::Value(base::Value::Type::LIST); @@ -1977,7 +1987,7 @@ // Populate separate policy bundles. std::unique_ptr<base::ListValue> policy = std::make_unique<base::ListValue>(); - policy->Append(base::Value(policy::key::kExtensionInstallForcelist)); + policy->Append(base::Value(policy::key::kDefaultSearchProviderEncodings)); // policy_bundle_1 is treated as a machine platform bundle. The metadata // policies (PolicyListMultipleSourceMergeList, CloudUserPolicyMerge) are @@ -1987,7 +1997,7 @@ policies_1.emplace_back(key::kPolicyListMultipleSourceMergeList, policy->Clone()); policies_1.emplace_back(key::kCloudUserPolicyMerge, base::Value(false)); - policies_1.emplace_back(key::kExtensionInstallForcelist, list1.Clone()); + policies_1.emplace_back(key::kDefaultSearchProviderEncodings, list1.Clone()); auto policy_bundle_1 = CreateBundle(POLICY_SCOPE_MACHINE, POLICY_SOURCE_PLATFORM, std::move(policies_1), chrome_namespace); @@ -1995,7 +2005,7 @@ // policy_bundle_2 is treated as a machine cloud bundle. The device // affiliation IDs are defined here to reflect what would happen in reality. std::vector<std::pair<std::string, base::Value>> policies_2; - policies_2.emplace_back(key::kExtensionInstallForcelist, list2.Clone()); + policies_2.emplace_back(key::kDefaultSearchProviderEncodings, list2.Clone()); auto policy_bundle_2 = CreateBundle(POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, std::move(policies_2), chrome_namespace); policy_bundle_2->Get(chrome_namespace).SetDeviceAffiliationIds(ids); @@ -2003,7 +2013,7 @@ // policy_bundle_3 is treated as a user cloud bundle. The user affiliation IDs // are defined here to reflect what would happen in reality. std::vector<std::pair<std::string, base::Value>> policies_3; - policies_3.emplace_back(key::kExtensionInstallForcelist, list3.Clone()); + policies_3.emplace_back(key::kDefaultSearchProviderEncodings, list3.Clone()); auto policy_bundle_3 = CreateBundle(POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, std::move(policies_3), chrome_namespace); policy_bundle_3->Get(chrome_namespace).SetUserAffiliationIds(ids); @@ -2021,15 +2031,15 @@ PolicyMap::Entry merged(POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, POLICY_SOURCE_MERGED, std::move(result), nullptr); merged.AddConflictingPolicy(policy_bundle_2->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); merged.AddConflictingPolicy(policy_bundle_3->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); merged.AddConflictingPolicy(policy_bundle_1->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); - expected_chrome.Set(key::kExtensionInstallForcelist, std::move(merged)); + expected_chrome.Set(key::kDefaultSearchProviderEncodings, std::move(merged)); expected_chrome.Set(key::kCloudUserPolicyMerge, policy_bundle_1->Get(chrome_namespace) .Get(key::kCloudUserPolicyMerge) @@ -2050,7 +2060,8 @@ base::flat_set<std::string> ids; ids.insert(kAffiliationId1); - // Initialize lists of URLs used for ExtensionInstallForcelist policy values. + // Initialize lists of URLs used for DefaultSearchProviderEncodings policy + // values. base::Value list1 = base::Value(base::Value::Type::LIST); list1.Append(base::Value(kUrl1)); base::Value list2 = base::Value(base::Value::Type::LIST); @@ -2063,7 +2074,7 @@ // Populate separate policy bundles. std::unique_ptr<base::ListValue> policy = std::make_unique<base::ListValue>(); - policy->Append(base::Value(policy::key::kExtensionInstallForcelist)); + policy->Append(base::Value(policy::key::kDefaultSearchProviderEncodings)); // policy_bundle_1 is treated as a user platform bundle. The metadata policies // (PolicyListMultipleSourceMergeList, CloudUserPolicyMerge) are defined here. @@ -2073,14 +2084,14 @@ policies_1.emplace_back(key::kPolicyListMultipleSourceMergeList, policy->Clone()); policies_1.emplace_back(key::kCloudUserPolicyMerge, base::Value(true)); - policies_1.emplace_back(key::kExtensionInstallForcelist, list1.Clone()); + policies_1.emplace_back(key::kDefaultSearchProviderEncodings, list1.Clone()); auto policy_bundle_1 = CreateBundle(POLICY_SCOPE_USER, POLICY_SOURCE_PLATFORM, std::move(policies_1), chrome_namespace); // policy_bundle_2 is treated as a machine cloud bundle. The device // affiliation IDs are defined here to reflect what would happen in reality. std::vector<std::pair<std::string, base::Value>> policies_2; - policies_2.emplace_back(key::kExtensionInstallForcelist, list2.Clone()); + policies_2.emplace_back(key::kDefaultSearchProviderEncodings, list2.Clone()); auto policy_bundle_2 = CreateBundle(POLICY_SCOPE_MACHINE, POLICY_SOURCE_CLOUD, std::move(policies_2), chrome_namespace); policy_bundle_2->Get(chrome_namespace).SetDeviceAffiliationIds(ids); @@ -2089,7 +2100,7 @@ // are defined here to reflect what would happen in reality.t, // entry_list_3.DeepCopy()); policy_map_3.SetUserAffiliationIds(ids); std::vector<std::pair<std::string, base::Value>> policies_3; - policies_3.emplace_back(key::kExtensionInstallForcelist, list3.Clone()); + policies_3.emplace_back(key::kDefaultSearchProviderEncodings, list3.Clone()); auto policy_bundle_3 = CreateBundle(POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, std::move(policies_3), chrome_namespace); policy_bundle_3->Get(chrome_namespace).SetUserAffiliationIds(ids); @@ -2106,15 +2117,15 @@ PolicyMap::Entry merged(POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, POLICY_SOURCE_MERGED, std::move(result), nullptr); merged.AddConflictingPolicy(policy_bundle_1->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); merged.AddConflictingPolicy(policy_bundle_3->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); merged.AddConflictingPolicy(policy_bundle_2->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); - expected_chrome.Set(key::kExtensionInstallForcelist, std::move(merged)); + expected_chrome.Set(key::kDefaultSearchProviderEncodings, std::move(merged)); expected_chrome.Set(key::kCloudUserPolicyMerge, policy_bundle_1->Get(chrome_namespace) .Get(key::kCloudUserPolicyMerge) @@ -2136,7 +2147,8 @@ base::flat_set<std::string> user_ids; user_ids.insert(kAffiliationId1); - // Initialize lists of URLs used for ExtensionInstallForcelist policy values. + // Initialize lists of URLs used for DefaultSearchProviderEncodings policy + // values. base::Value list1 = base::Value(base::Value::Type::LIST); list1.Append(base::Value(kUrl1)); base::Value list2 = base::Value(base::Value::Type::LIST); @@ -2148,7 +2160,7 @@ // Populate separate policy bundles. std::unique_ptr<base::ListValue> policy = std::make_unique<base::ListValue>(); - policy->Append(base::Value(policy::key::kExtensionInstallForcelist)); + policy->Append(base::Value(policy::key::kDefaultSearchProviderEncodings)); // policy_bundle_1 is treated as a machine platform bundle. The metadata // policies (PolicyListMultipleSourceMergeList, CloudUserPolicyMerge) are @@ -2157,7 +2169,7 @@ policies_1.emplace_back(key::kPolicyListMultipleSourceMergeList, policy->Clone()); policies_1.emplace_back(key::kCloudUserPolicyMerge, base::Value(true)); - policies_1.emplace_back(key::kExtensionInstallForcelist, list1.Clone()); + policies_1.emplace_back(key::kDefaultSearchProviderEncodings, list1.Clone()); auto policy_bundle_1 = CreateBundle(POLICY_SCOPE_MACHINE, POLICY_SOURCE_PLATFORM, std::move(policies_1), chrome_namespace); @@ -2166,14 +2178,14 @@ // user GPO source are currently not merged with values from any other // source(s). std::vector<std::pair<std::string, base::Value>> policies_2; - policies_2.emplace_back(key::kExtensionInstallForcelist, list2.Clone()); + policies_2.emplace_back(key::kDefaultSearchProviderEncodings, list2.Clone()); auto policy_bundle_2 = CreateBundle(POLICY_SCOPE_USER, POLICY_SOURCE_PLATFORM, std::move(policies_2), chrome_namespace); // policy_bundle_3 is treated as a user cloud bundle. The user affiliation IDs // are defined here to reflect what would happen in reality. std::vector<std::pair<std::string, base::Value>> policies_3; - policies_3.emplace_back(key::kExtensionInstallForcelist, list3.Clone()); + policies_3.emplace_back(key::kDefaultSearchProviderEncodings, list3.Clone()); auto policy_bundle_3 = CreateBundle(POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, std::move(policies_3), chrome_namespace); policy_bundle_3->Get(chrome_namespace).SetUserAffiliationIds(user_ids); @@ -2192,15 +2204,15 @@ PolicyMap::Entry merged(POLICY_LEVEL_MANDATORY, POLICY_SCOPE_MACHINE, POLICY_SOURCE_MERGED, std::move(result), nullptr); merged.AddConflictingPolicy(policy_bundle_2->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); merged.AddConflictingPolicy(policy_bundle_3->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); merged.AddConflictingPolicy(policy_bundle_1->Get(chrome_namespace) - .Get(key::kExtensionInstallForcelist) + .Get(key::kDefaultSearchProviderEncodings) ->DeepCopy()); - expected_chrome.Set(key::kExtensionInstallForcelist, std::move(merged)); + expected_chrome.Set(key::kDefaultSearchProviderEncodings, std::move(merged)); expected_chrome.Set(key::kCloudUserPolicyMerge, policy_bundle_1->Get(chrome_namespace) .Get(key::kCloudUserPolicyMerge) @@ -2223,7 +2235,7 @@ base::Value(true)); policies.emplace_back(key::kCloudUserPolicyOverridesCloudMachinePolicy, base::Value(true)); - policies.emplace_back(key::kBookmarkBarEnabled, base::Value(true)); + policies.emplace_back(key::kTranslateEnabled, base::Value(true)); auto policy_bundle = CreateBundle(POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, std::move(policies), chrome_namespace); @@ -2240,9 +2252,10 @@ base::Value::Type::BOOLEAN)); // Other policies set from a user cloud source are not ignored. - EXPECT_NE(nullptr, policy_service_->GetPolicies(chrome_namespace) - .GetValue(key::kBookmarkBarEnabled, - base::Value::Type::BOOLEAN)); + EXPECT_NE(nullptr, + policy_service_->GetPolicies(chrome_namespace) + .GetValue(key::kTranslateEnabled, base::Value::Type::BOOLEAN)); } +#endif // !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_IOS) } // namespace policy
diff --git a/components/policy/core/common/policy_statistics_collector_unittest.cc b/components/policy/core/common/policy_statistics_collector_unittest.cc index 31a3816..6b6ccab 100644 --- a/components/policy/core/common/policy_statistics_collector_unittest.cc +++ b/components/policy/core/common/policy_statistics_collector_unittest.cc
@@ -35,7 +35,7 @@ // Arbitrary policy names used for testing. const char kTestPolicy1[] = "Test Policy 1"; const char kTestPolicy2[] = "Test Policy 2"; -const char* kTestPolicy3 = key::kExtensionInstallBlocklist; +const char* kTestPolicy3 = key::kDefaultSearchProviderEncodings; const char kEnrollmentTokenPolicy[] = "CloudManagementEnrollmentToken"; const char kEnrollmentOptionPolicy[] = "CloudManagementEnrollmentMandatory"; @@ -52,7 +52,7 @@ "properties": { "Test Policy 1": { "type": "boolean" }, "Test Policy 2": { "type": "boolean" }, - "ExtensionInstallBlocklist": { "type": "boolean" }, + "DefaultSearchProviderEncodings": { "type": "boolean" }, "CloudManagementEnrollmentToken": { "type": "boolean" }, "CloudManagementEnrollmentMandatory": { "type": "boolean" }, }
diff --git a/components/policy/core/common/schema.cc b/components/policy/core/common/schema.cc index c6981085..39543065 100644 --- a/components/policy/core/common/schema.cc +++ b/components/policy/core/common/schema.cc
@@ -13,6 +13,7 @@ #include <memory> #include <ostream> #include <set> +#include <string> #include <utility> #include "base/check_op.h" @@ -23,6 +24,7 @@ #include "base/memory/ptr_util.h" #include "base/notreached.h" #include "base/strings/stringprintf.h" +#include "base/values.h" #include "components/policy/core/common/json_schema_constants.h" #include "components/policy/core/common/schema_internal.h" #include "third_party/re2/src/re2/re2.h" @@ -1212,8 +1214,12 @@ return true; } - SchemaErrorFound(out_error_path, out_error, - "The value type doesn't match the schema type."); + SchemaErrorFound( + out_error_path, out_error, + base::StringPrintf( + "Policy type mismatch: expected: \"%s\", actual: \"%s\".", + base::Value::GetTypeName(type()), + base::Value::GetTypeName(value.type()))); return false; } @@ -1305,8 +1311,12 @@ return true; } - SchemaErrorFound(out_error_path, out_error, - "The value type doesn't match the schema type."); + SchemaErrorFound( + out_error_path, out_error, + base::StringPrintf( + "Policy type mismatch: expected: \"%s\", actual: \"%s\".", + base::Value::GetTypeName(type()), + base::Value::GetTypeName(value->type()))); return false; }
diff --git a/components/policy/resources/policy_templates.json b/components/policy/resources/policy_templates.json index 63dc27c..054432ec 100644 --- a/components/policy/resources/policy_templates.json +++ b/components/policy/resources/policy_templates.json
@@ -4412,7 +4412,7 @@ Allows the user to sign in to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>. - Setting this policy to Enabled will allows user to sign in to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>. + Setting this policy to Enabled will allow the user to sign in to <ph name="PRODUCT_NAME">$1<ex>Google Chrome</ex></ph>. Setting this policy to Disabled will prevent sign in. It also blocks apps and extensions that use the chrome.identity API from functioning. To avoid that, use <ph name="SYNC_DISABLED_POLICY_NAME">SyncDisabled</ph> instead. ''', }, @@ -10092,7 +10092,7 @@ 'owners': ['ydago@chromium.org', 'pastarmovj@chromium.org'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:78-', 'chrome_os:78-'], + 'supported_on': ['chrome.*:78-', 'chrome_os:78-', 'android:105-', 'ios:105-'], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -10119,6 +10119,7 @@ 'chrome.*:75-', 'chrome_os:75-', 'android:97-', + 'ios:105-' ], 'features': { 'dynamic_refresh': True, @@ -10190,7 +10191,7 @@ 'caption': '''Screen lock delays''', }, ], - 'supported_on': ['chrome.*:76-', 'chrome_os:76-'], + 'supported_on': ['chrome.*:76-', 'chrome_os:76-', 'android:105-', 'ios:105-'], 'features': { 'dynamic_refresh': True, 'per_profile': True, @@ -18173,7 +18174,7 @@ 'owners': ['file://components/update_client/OWNERS', 'sorin@chromium.org'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:54-', 'chrome_os:54-'], + 'supported_on': ['chrome.*:54-', 'chrome_os:54-', 'android:105-', 'ios:105-'], 'features': { 'dynamic_refresh': False, 'per_profile': False, @@ -20097,7 +20098,7 @@ 'owners': ['igorruvinov@chromium.org', 'zmin@chromium.org', 'pastarmovj@chromium.org'], 'type': 'main', 'schema': { 'type': 'boolean' }, - 'supported_on': ['chrome.*:96-', 'android:97-'], + 'supported_on': ['chrome.*:96-', 'android:97-', 'ios:105-'], 'items': [ { 'value': True, @@ -31528,7 +31529,7 @@ When the policy is set to Enabled, setTimeouts and setIntervals with an interval smaller than 4ms are not clamped as aggressively. This improves short horizon performance, but websites abusing the API will still eventually have their setTimeouts clamped. - When the policy is set to Disabled, setTimeouts and setIntervals with an interval smaller than 4ms will be clamed. + When the policy is set to Disabled, setTimeouts and setIntervals with an interval smaller than 4ms will be clamped. This may change task ordering on a web page, leading to unexpected behavior on sites that are dependent on a certain ordering in some way. It also may affect sites with a lot of setTimeout() with a timeout of 0ms usage, e.g. increasing CPU load.
diff --git a/components/policy/resources/policy_templates_de.xtb b/components/policy/resources/policy_templates_de.xtb index 35ab80f..5ca6162 100644 --- a/components/policy/resources/policy_templates_de.xtb +++ b/components/policy/resources/policy_templates_de.xtb
@@ -935,17 +935,6 @@ <translation id="1962864958436828230">Mindestgrößenbeschränkung zur Zwischenablagenbeschränkung für die Verhinderung von Datenlecks festlegen</translation> <translation id="1964634611280150550">Inkognitomodus deaktiviert</translation> <translation id="1964802606569741174">Diese Richtlinie hat keine Auswirkungen auf die Android YouTube App. Wenn der Sicherheitsmodus in YouTube erzwungen werden soll, darf das Installieren der Android YouTube App nicht zugelassen werden.</translation> -<translation id="1965363065727209968">„setTimeout(…, 0)“ wird häufig verwendet, um lange JavaScript-Aufgaben aufzuteilen. - Wenn die Richtlinie aktiviert ist, werden die JavaScript-Funktionen „setTimeouts“ und „setIntervals“ mit einem kleineren Intervall als 4 ms weniger aggressiv verzögert. - So wird die Leistung kurzfristig verbessert, aber für Websites, die die API missbrauchen, wird „setTimeouts“ trotzdem verzögert. - - Dies kann die Aufgabenreihenfolge auf einer Webseite verändern und unerwartetes Verhalten auf Websites bewirken, die auf eine bestimmte Reihenfolge angewiesen sind. - Außerdem kann dies Auswirkungen auf Websites haben, für die bei der Funktion „setTimeout()“ häufig ein Zeitlimit von 0 ms verwendet wird, etwa in Form einer erhöhten CPU-Auslastung. - - Für Nutzer, für die diese Richtlinie nicht konfiguriert ist, wird diese Änderung schrittweise in der stabilen Version von <ph name="PRODUCT_NAME" /> eingeführt. - - Diese Richtlinie kommt nur vorübergehend zum Einsatz und wird voraussichtlich in <ph name="PRODUCT_NAME" /> 107 entfernt. Die Frist kann verlängert werden, sofern bei Unternehmen Bedarf besteht. - </translation> <translation id="1967334955994230472">Projector deaktivieren</translation> <translation id="1969212217917526199">Überschreibt Richtlinien auf Fehlerbehebungs-Builds des Hosts für den Remotezugriff @@ -4096,7 +4085,6 @@ <translation id="5475361623548884387">Drucken aktivieren</translation> <translation id="547601067149622666">Werbung auf Websites mit aufdringlichen Werbeanzeigen nicht zulassen</translation> <translation id="5476152378885134514">Zwischenablage für diese Websites blockieren</translation> -<translation id="5478734531226638813">Durch die Aktivierung der Richtlinie wird die Aktualisierung von Kiosk-Chrome-Apps innerhalb der Sitzung deaktiviert (wofür die Update-URL aus dem Erweiterungsmanifest zum Einsatz kommt), wodurch nur noch der CRX-Vorabruf als Aktualisierungsmechanismus übrig bleibt.</translation> <translation id="5480380613778757009">Wenn diese Richtlinie deaktiviert oder nicht eingerichtet ist, werden alle in der verwalteten Gastsitzung festgelegten Anzeigeeinstellungen zurückgesetzt, sobald die Sitzung beendet ist. Ist diese Richtlinie auf „True“ gesetzt, bleiben Anzeigeeigenschaften nach dem Beenden der verwalteten Gastsitzung bestehen.</translation> <translation id="5483065054530244863">SHA-1-signierte Zertifikate zulassen, die von lokalen Vertrauensankern ausgestellt werden</translation> <translation id="5487758664517243511">Durch Aktivieren dieser Einstellung können Nutzer, die der Verwendung von Phone Hub zugestimmt haben, Aufgaben unter Chrome OS fortsetzen, wie etwa das Ansehen von Webseiten von ihrem Smartphone. @@ -4336,11 +4324,6 @@ Genaue Informationen zu gültigen URL-Mustern findest du unter https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="5749396052108288586">Diese Richtlinie ist veraltet. Bitte verwende stattdessen die Richtlinie <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation> <translation id="574983287620584622">Tastenkombinationen für Bedienungshilfen auf dem Anmeldebildschirm aktivieren</translation> -<translation id="5749873635525257317">Diese Richtlinie wurde eingestellt. Du kannst stattdessen „BrowserSignin“ verwenden. - - Die Richtlinie erlaubt dem Nutzer die Anmeldung in <ph name="PRODUCT_NAME" />. - - Durch Festlegen dieser Richtlinie bestimmst du, ob sich ein Nutzer in <ph name="PRODUCT_NAME" /> anmelden darf oder nicht. Wenn du für diese Richtlinie „False“ festlegst, funktionieren Apps und Erweiterungen, die die chrome.identity API verwenden, nicht mehr. Aus diesem Grund ist es empfehlenswert, stattdessen „<ph name="SYNC_DISABLED_POLICY_NAME" />“ zu verwenden.</translation> <translation id="5755002458331714762"> Die Web Components v0 APIs (Shadow DOM v0, Custom Elements v0 und HTML Imports) wurden 2018 eingestellt und ab M80 standardmäßig deaktiviert. Mit dieser Richtlinie lassen sich die Funktionen selektiv bis M84 wieder aktivieren. Wenn die Richtlinie auf "True" gesetzt ist, sind die Funktionen von Web Components v0 für alle Websites aktiviert. @@ -6064,14 +6047,6 @@ Wenn die Richtlinie aktiviert oder nicht konfiguriert ist, ist die Einheitenumrechnung über „Schnellinfo“ aktiviert. Wenn die Richtlinie deaktiviert ist, ist die Einheitenumrechnung über „Schnellinfo“ deaktiviert.</translation> <translation id="7587345076013230465">Nutzer auffordern, auf dem Anmeldebildschirm das Clientzertifikat auszuwählen, wenn die Richtlinie für die automatische Auswahl zu mehreren Zertifikaten passt</translation> -<translation id="7590188804371204512">Hiermit kann die Installation externer Erweiterungen verwaltet werden. - - Wenn diese Einstellung aktiviert ist, wird die Installation externer Erweiterungen blockiert. - - Ist sie deaktiviert oder nicht konfiguriert, können externe Erweiterungen installiert werden. - - Informationen zu externen Erweiterungen und ihrer Installation sind unter https://developer.chrome.com/apps/external_extensions verfügbar. - </translation> <translation id="759957074386651883">Safe Browsing-Einstellungen</translation> <translation id="7604169113182304895">Diese Liste kann auf freiwilliger Basis für Android-Apps übernommen werden. Es ist nicht möglich, die Verwendung zu erzwingen.</translation> <translation id="7612157962821894603">Systemweite Parameter, die beim Starten von <ph name="PRODUCT_NAME" /> angewendet werden</translation>
diff --git a/components/policy/resources/policy_templates_es-419.xtb b/components/policy/resources/policy_templates_es-419.xtb index c1c2bb9..c85a2d2 100644 --- a/components/policy/resources/policy_templates_es-419.xtb +++ b/components/policy/resources/policy_templates_es-419.xtb
@@ -946,17 +946,6 @@ <translation id="1962864958436828230">Establecer el límite de tamaño mínimo para los datos del portapapeles mediante la restricción destinada a evitar la filtración de datos</translation> <translation id="1964634611280150550">Modo incógnito inhabilitado</translation> <translation id="1964802606569741174">Esta política no tiene efecto en la app de YouTube de Android. Si se debe aplicar el modo de seguridad en YouTube, se debe inhabilitar la instalación de la app de YouTube de Android.</translation> -<translation id="1965363065727209968">setTimeout(…, 0) se usa en general para desglosar tareas largas de JavaScript. - Si habilitas la política, los parámetros de setTimeout y setInterval con un intervalo inferior a 4 ms no se restringirán de forma tan agresiva. - Esto mejora el rendimiento a corto plazo, pero los sitios web que abusen de la API tendrán, con el tiempo, sus parámetros de setTimeout restringidos. - - Es posible que esto cambie el orden de las tareas en una página web, lo que puede provocar un comportamiento inesperado en los sitios que de alguna manera dependen de un determinado orden. - También puede afectar a los sitios que tienen muchas funciones setTimeout() con un tiempo de espera de 0 ms de uso; p. ej., puede aumentar la carga de CPU. - - Para los usuarios que no establezcan esta política, <ph name="PRODUCT_NAME" /> lanzará el cambio gradualmente en el canal estable. - - Esta es una política temporal que se planea quitar en <ph name="PRODUCT_NAME" /> 107. Es posible que se extienda la fecha límite si las empresas lo necesitan. - </translation> <translation id="1967334955994230472">Inhabilitar Projector</translation> <translation id="1969212217917526199">Anula las políticas en compilaciones de depuración del host de acceso remoto. @@ -4136,7 +4125,6 @@ <translation id="5475361623548884387">Habilitar la impresión</translation> <translation id="547601067149622666">No permitir anuncios en sitios con anuncios intrusivos</translation> <translation id="5476152378885134514">Bloquear el portapapeles en estos sitios</translation> -<translation id="5478734531226638813">Si estableces la política, se inhabilitará la actualización de las apps de Chrome para kiosco durante la sesión (las cuales utilizan URL de actualización del manifiesto de la extensión) y se deja la precarga de CRX como el único mecanismo de actualización.</translation> <translation id="5480380613778757009">Si inhabilitas o no estableces esta política, apenas finalice la sesión, se restablecerán todas las opciones de configuración de pantalla que se hayan establecido en la sesión de invitado administrada. Si estableces esta política como verdadera, se conservarán las propiedades de pantalla después de salir de la sesión de invitado administrada.</translation> <translation id="5483065054530244863">Permitir los certificados firmados con SHA-1 y emitidos por los anclajes de confianza locales</translation> <translation id="5487758664517243511">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 Chrome OS. @@ -4386,11 +4374,6 @@ Para obtener información detallada sobre los patrones de URL válidos, consulta https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="5749396052108288586">Esta política es obsoleta. En su lugar, utiliza <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation> <translation id="574983287620584622">Habilita las combinaciones de teclas para las funciones de accesibilidad en la pantalla de acceso</translation> -<translation id="5749873635525257317">Esta política dejó de estar disponible; puedes usar la política BrowserSignin en su lugar. - - Permite que el usuario acceda a <ph name="PRODUCT_NAME" />. - - Si configuras esta política, podrás establecer si un usuario tiene permiso para acceder a <ph name="PRODUCT_NAME" />. Si estableces esta política como falsa, dejarán de funcionar las apps y las extensiones que usan la API de chrome.identity, por lo que probablemente sea conveniente usar la política <ph name="SYNC_DISABLED_POLICY_NAME" />.</translation> <translation id="5755002458331714762"> En 2018, las API de Web Components v0 (Shadow DOM v0, Custom Elements v0 y HTML Imports) dejaron de estar disponibles. Además, se inhabilitaron de forma predeterminada a partir de la versión M80. Esta política permite volver a habilitar estas funciones de forma selectiva hasta la versión M84. Si se establece esta política como verdadera, se habilitarán las funciones de Web Components v0 para todos los sitios. @@ -6144,14 +6127,6 @@ Si habilitas la política o no la estableces, se habilitará la conversión de unidades de Respuestas rápidas. Si inhabilitas la política, se inhabilitará la conversión de unidades de Respuestas rápidas.</translation> <translation id="7587345076013230465">Notificar al usuario que debe seleccionar el certificado de cliente cada vez que la política de selección automática coincida con varios certificados en la pantalla de acceso</translation> -<translation id="7590188804371204512">Controla la instalación de extensiones externas. - - Si se habilita esta configuración, se impide la instalación de extensiones externas. - - Si se inhabilita o no se establece, se permite la instalación de extensiones externas. - - Las extensiones externas y su instalación están documentadas en https://developer.chrome.com/apps/external_extensions. - </translation> <translation id="759957074386651883">Configuración de Navegación segura</translation> <translation id="7604169113182304895">Las apps de Android pueden respetar esta lista de forma voluntaria, pero no puedes forzarlas a que lo hagan.</translation> <translation id="7612157962821894603">Marcas que se deben aplicar al iniciar <ph name="PRODUCT_NAME" /> en todo el sistema</translation>
diff --git a/components/policy/resources/policy_templates_es.xtb b/components/policy/resources/policy_templates_es.xtb index 50e9b7f..3244528 100644 --- a/components/policy/resources/policy_templates_es.xtb +++ b/components/policy/resources/policy_templates_es.xtb
@@ -947,17 +947,6 @@ <translation id="1962864958436828230">Establecer un límite de tamaño mínimo para la restricción del portapapeles que previene la filtración de datos</translation> <translation id="1964634611280150550">Modo Incógnito inhabilitado</translation> <translation id="1964802606569741174">Esta política no influye en la aplicación YouTube para Android. Si se debe aplicar el modo Seguro en YouTube, deberás inhabilitar la descarga de la aplicación YouTube para Android.</translation> -<translation id="1965363065727209968">setTimeout(…, 0) se suele usar para dividir tareas largas de JavaScript. - Si se habilita esta política, los valores de setTimeout y setInterval que tengan un intervalo inferior a 4 ms no se redondearán de forma tan agresiva. - Esto mejora el rendimiento a corto plazo. Sin embargo, en los sitios web que hagan un uso inadecuado de la API, se redondearán los valores de setTimeout de todos modos. - - Es posible que esto cambie el orden de las tareas en una página web, lo que podría provocar un comportamiento inesperado en sitios que dependan, de algún modo, de un orden determinado. - También puede afectar a los sitios que usen mucho la función setTimeout() con un tiempo de espera de 0 ms (por ejemplo, podría aumentar la carga de la CPU). - - Para los usuarios que no tengan esta política configurada, <ph name="PRODUCT_NAME" /> lanzará el cambio de forma gradual en el canal estable. - - Se trata de una política temporal y se prevé que se elimine en la versión 107 de <ph name="PRODUCT_NAME" />. Este plazo puede ampliarse si lo necesitan las empresas. - </translation> <translation id="1967334955994230472">Inhabilitar Proyector</translation> <translation id="1969212217917526199">Anula las políticas de compilaciones de depuración del host de acceso remoto. @@ -1741,6 +1730,9 @@ <translation id="274769314493317695">Si se utiliza <ph name="PRINTERS_WHITELIST" /> para la política <ph name="BULK_PRINTERS_ACCESS_MODE_POLICY_NAME" />, al establecer la política <ph name="NATIVE_PRINTERS_BULK_WHITELIST_POLICY_NAME" />, esta especifica qué impresoras pueden utilizar los usuarios. Solo las impresoras cuyos ID coincidan con los valores incluidos en la política estarán disponibles para el usuario. Los ID deben coincidir con los campos <ph name="ID_FIELD" /> o <ph name="GUID_FIELD" /> del archivo definido en la política <ph name="NATIVE_PRINTERS_BULK_CONFIGURATION_POLICY_NAME" />. Esta política está obsoleta. Usa <ph name="PRINTERS_BULK_ALLOWLIST_POLICY_NAME" /> en su lugar.</translation> +<translation id="2751959596774212778">WebSQL está inhabilitado de forma predeterminada en contextos no seguros desde la versión M107 y se eliminará por completo en la versión M110. + Si se asigna el valor false a esta política o no se establece, WebSQL permanecerá habilitado en contextos no seguros hasta que finalice la versión M106 y, a partir de la M107, se inhabilitará. + Si se asigna el valor true a esta política, WebSQL se habilitará en contextos no seguros.</translation> <translation id="2752046642026416564">Si se habilita esta política o no se le asigna ningún valor, <ph name="PRODUCT_NAME" /> puede usar los hosts de mensajes nativos instalados a nivel de usuario. Si se inhabilita, <ph name="PRODUCT_NAME" /> solo podrá usar estos hosts si han sido instalados a nivel de sistema.</translation> @@ -4143,7 +4135,6 @@ <translation id="5475361623548884387">Habilitar impresión</translation> <translation id="547601067149622666">No permitir anuncios en sitios web con anuncios invasivos</translation> <translation id="5476152378885134514">Bloquear portapapeles en estos sitios</translation> -<translation id="5478734531226638813">Si se establece esta política, se inhabilitará la actualización de las aplicaciones de kiosco de Chrome en la sesión (que usa la URL de actualización del archivo de manifiesto de la extensión) y solo se permitirá la actualización mediante la precarga de un archivo CRX.</translation> <translation id="5480380613778757009">Si se inhabilita esta política o no se establece, todos los ajustes de pantalla que se hayan definido en la sesión de invitado gestionada se borrarán en cuanto finalice la sesión. Si se le asigna el valor True a esta política, las propiedades de pantalla se conservarán después de salir de la sesión de invitado gestionada.</translation> <translation id="5483065054530244863">Permite certificados SHA-1 firmados emitidos por anclajes de veracidad locales</translation> <translation id="5487758664517243511">Si se habilita esta opción, los usuarios que ya usen la función Mi teléfono podrán continuar tareas (como ver las páginas web de su teléfono) en ChromeOS. @@ -4394,11 +4385,6 @@ Para obtener información detallada sobre los patrones de URL válidos, consulta https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="5749396052108288586">Esta política está obsoleta. Se debe usar la política <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" /> en su lugar.</translation> <translation id="574983287620584622">Habilitar las combinaciones de teclas para las funciones de accesibilidad en la pantalla de inicio de sesión</translation> -<translation id="5749873635525257317">Esta política está obsoleta, pero puedes utilizar BrowserSignin en su lugar. - - Permite a los usuarios iniciar sesión en <ph name="PRODUCT_NAME" />. - - Esta política sirve para establecer si un usuario tiene permiso para iniciar sesión en <ph name="PRODUCT_NAME" />. Si se le asigna el valor "False", impedirá que funcionen las aplicaciones y extensiones que usen la API chrome.identity, así que te recomendamos que uses la política <ph name="SYNC_DISABLED_POLICY_NAME" /> en su lugar.</translation> <translation id="5755002458331714762"> Las API v0 de componentes web (Shadow DOM v0, Custom Elements v0 y HTML Imports) están obsoletas desde 2018 y se han inhabilitado de forma predeterminada desde M80. Esta política permite volver a habilitar estas funciones de forma selectiva hasta M84. Si se le asigna el valor "true" a esta política, las funciones v0 de los componentes web se habilitarán para todos los sitios web. @@ -5602,6 +5588,7 @@ Si se selecciona la opción U2F, la autenticación de dos factores integrada sigue la especificación FIDO U2F. Si se selecciona la opción U2F_EXTENDED, la autenticación de dos factores integrada proporciona las funciones de U2F y algunas extensiones de confirmación individual.</translation> +<translation id="6998179760789945134">Inhabilitar WebSQL en contextos no seguros a menos que lo habilite una marca de Chrome.</translation> <translation id="6999948519306285655">Esta política está obsoleta. Se debe usar la política <ph name="PROXY_SETTINGS_POLICY_NAME" /> en su lugar. Si se le asigna un valor a esta política, se especificará la URL de un archivo .pac de proxy. Esta política solo tiene validez si no se especifica la política <ph name="PROXY_SETTINGS_POLICY_NAME" /> y se ha seleccionado <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> con <ph name="PROXY_MODE_POLICY_NAME" />. @@ -6157,14 +6144,6 @@ Si se habilita esta política o no se establece, se activará la conversión de unidades de Respuestas rápidas. Si se inhabilita esta política, no se activará la conversión de unidades de Respuestas rápidas.</translation> <translation id="7587345076013230465">Pedir al usuario que seleccione el certificado de cliente cuando la política de selección automática encuentre coincidencias con varios certificados en la pantalla de inicio de sesión</translation> -<translation id="7590188804371204512">Controla la instalación de extensiones externas. - - Si se habilita esta opción, las extensiones externas se bloquearán para que no puedan instalarse. - - Si se inhabilita o no se configura, las extensiones externas podrán instalarse. - - La documentación sobre las extensiones externas y sobre cómo instalarlas está disponible en https://developer.chrome.com/apps/external_extensions - </translation> <translation id="759957074386651883">Configuración de Navegación segura</translation> <translation id="7604169113182304895">Las aplicaciones para Android pueden aceptar esta lista voluntariamente. No se les puede forzar a que lo hagan.</translation> <translation id="7612157962821894603">Opciones que se deben aplicar al iniciar <ph name="PRODUCT_NAME" /> en todo el sistema</translation> @@ -7374,6 +7353,7 @@ <translation id="8919100556245407184">Número de días tras la publicación del vencimiento de las actualizaciones automáticas después de los cuales se cerrará la sesión del usuario si la versión de <ph name="PRODUCT_OS_NAME" /> es anterior a la <ph name="CHROMEOS_VERSION_PROPERTY_NAME" /> especificada</translation> <translation id="8919369436496201075">Permite que el dispositivo reciba actualizaciones de LTS</translation> <translation id="8921669704201370845">Habilitar los informes en la nube de <ph name="PRODUCT_NAME" /> de un perfil gestionado</translation> +<translation id="8922494933893518624">Forzar que WebSQL se habilite en contextos no seguros.</translation> <translation id="8930064580550462145">Durante el inicio de sesión en la pantalla de bloqueo, <ph name="PRODUCT_OS_NAME" /> puede realizar la autenticación a través de un servidor (con conexión) o una contraseña almacenada en caché (sin conexión). Si se le asigna el valor -2 a esta política, coincidirá con el valor del límite de tiempo de inicio de sesión sin conexión de la pantalla de inicio de sesión dado por <ph name="POLICY" />.
diff --git a/components/policy/resources/policy_templates_fr.xtb b/components/policy/resources/policy_templates_fr.xtb index 28924af..74c44401 100644 --- a/components/policy/resources/policy_templates_fr.xtb +++ b/components/policy/resources/policy_templates_fr.xtb
@@ -941,17 +941,6 @@ <translation id="1962864958436828230">Définir la taille minimale liée à la restriction du presse-papiers pour prévenir les fuites de données</translation> <translation id="1964634611280150550">Mode navigation privée désactivé</translation> <translation id="1964802606569741174">Cette règle n'a aucun effet sur l'application YouTube pour Android. Vous ne devez pas autoriser son installation si le mode sécurisé de YouTube doit être appliqué.</translation> -<translation id="1965363065727209968">setTimeout(…, 0) est souvent utilisé pour décomposer les longues tâches JavaScript. - Lorsque cette règle est activée, les fonctions setTimeouts et setIntervals ayant un intervalle inférieur à 4 ms ne sont pas limitées de façon aussi agressive. - Les performances à court terme sont alors meilleures, mais les fonctions setTimeouts des sites abusant de l'API seront finalement encore limitées. - - Cela peut modifier l'ordre d'exécution des tâches sur une page Web et provoquer ainsi un comportement inattendu sur les sites qui dépendent de cet ordre. - Les sites qui emploient de nombreuses fonctions setTimeout() avec un délai d'expiration de 0 ms peuvent aussi être affectés (par exemple, ils peuvent davantage solliciter le processeur). - - Le changement sera déployé graduellement sur la version stable de <ph name="PRODUCT_NAME" /> pour les utilisateurs chez qui cette règle n'est pas configurée. - - Cette règle est temporaire et devrait être supprimée dans <ph name="PRODUCT_NAME" /> 107. Néanmoins, cette échéance peut être repoussée si des entreprises le requièrent. - </translation> <translation id="1967334955994230472">Désactiver Projector</translation> <translation id="1969212217917526199">Remplace des règles sur les versions de débogage de l'hôte d'accès à distance. @@ -4114,7 +4103,6 @@ <translation id="5475361623548884387">Activer l'impression</translation> <translation id="547601067149622666">Ne pas autoriser les annonces sur les sites présentant des annonces intrusives</translation> <translation id="5476152378885134514">Bloquer le presse-papiers sur ces sites</translation> -<translation id="5478734531226638813">Si cette règle est configurée, la mise à jour des applis Chrome Kiosk en cours de session (qui utilise l'URL de mise à jour provenant du fichier manifeste d'extension) sera désactivée. Le préchargement CRX sera alors le seul mécanisme de mise à jour.</translation> <translation id="5480380613778757009">Si cette règle est désactivée ou qu'elle n'est pas configurée, tous les paramètres d'affichage définis dans la session Invité gérée sont réinitialisés à la fermeture de la session. Si cette règle est définie sur "True", les propriétés d'affichage sont conservées après la fermeture de la session Invité gérée.</translation> <translation id="5483065054530244863">Autoriser les certificats signés SHA-1 émis par les ancres d'approbation locales</translation> <translation id="5487758664517243511">Si ce paramètre est activé, les utilisateurs qui ont déjà activé Phone Hub pourront continuer sur Chrome OS ce qu'ils étaient en train de faire sur leur téléphone, par exemple consulter des pages Web. @@ -4365,11 +4353,6 @@ Pour en savoir plus sur les formats d'URL valides, veuillez consulter la page https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="5749396052108288586">Cette règle est obsolète. Veuillez utiliser la règle <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" /> à la place.</translation> <translation id="574983287620584622">Activer les raccourcis des fonctionnalités d'accessibilité sur l'écran de connexion</translation> -<translation id="5749873635525257317">Cette règle est obsolète. Veuillez utiliser "BrowserSignin" à la place. - - Permet à l'utilisateur de se connecter à <ph name="PRODUCT_NAME" />. - - Si vous configurez cette règle, vous pouvez déterminer si un utilisateur est autorisé à se connecter à <ph name="PRODUCT_NAME" />. Définie sur "False", cette règle empêche les applis et les extensions qui utilisent l'API chrome.identity de fonctionner. Vous préférerez peut-être alors utiliser la règle <ph name="SYNC_DISABLED_POLICY_NAME" />.</translation> <translation id="5755002458331714762"> Les API Web Components v0 (Shadow DOM v0, Custom Elements v0 et HTML Imports) sont obsolètes depuis 2018 et ont été désactivées par défaut à partir de la version M80. Cette règle offre la possibilité de réactiver ces fonctionnalités pour certains sites en particulier jusqu'à la version M84. Si elle est définie sur "True", les fonctionnalités de Web Components v0 seront activées pour tous les sites. @@ -6100,14 +6083,6 @@ Si elle est activée ou si elle n'est pas configurée, la conversion d'unités pour Réponses rapides est activée. Si elle est désactivée, la conversion d'unités pour Réponses rapides est désactivée.</translation> <translation id="7587345076013230465">Demander à l'utilisateur de sélectionner le certificat client chaque fois que la règle de sélection automatique établit une correspondance avec plusieurs certificats sur l'écran de connexion</translation> -<translation id="7590188804371204512">Permet de contrôler l'installation d'extensions externes. - - Lorsque ce paramètre est activé, l'installation d'extensions externes est bloquée. - - Lorsque ce paramètre est désactivé ou qu'il n'est pas défini, l'installation d'extensions externes est permise. - - Le fonctionnement des extensions externes ainsi que leur installation sont décrits à la page https://developer.chrome.com/apps/external_extensions. - </translation> <translation id="759957074386651883">Paramètres de navigation sécurisée</translation> <translation id="7604169113182304895">Les applications Android peuvent avoir été volontairement conçues pour respecter cette liste, mais vous ne pouvez pas les forcer à effectuer cette opération.</translation> <translation id="7612157962821894603">Options système à appliquer au démarrage de <ph name="PRODUCT_NAME" /></translation>
diff --git a/components/policy/resources/policy_templates_id.xtb b/components/policy/resources/policy_templates_id.xtb index 933054f0..4d7129d2 100644 --- a/components/policy/resources/policy_templates_id.xtb +++ b/components/policy/resources/policy_templates_id.xtb
@@ -948,17 +948,6 @@ <translation id="1962864958436828230">Menyetel batas ukuran minimal untuk batasan papan klip pencegahan kebocoran data</translation> <translation id="1964634611280150550">Mode samaran dinonaktifkan</translation> <translation id="1964802606569741174">Kebijakan ini tidak memengaruhi aplikasi YouTube Android. Jika Mode Perlindungan di YouTube harus diterapkan, pemasangan aplikasi YouTube Android harus dilarang.</translation> -<translation id="1965363065727209968">setTimeout(…, 0) biasa digunakan untuk menguraikan tugas JavaScript panjang. - Jika kebijakan disetel ke Aktif, setTimeout dan setInterval dengan interval yang lebih kecil dari 4 md tidak akan dibatasi dengan sangat cepat. - Hal ini meningkatkan performa jangka pendek. Namun, situs yang menyalahgunakan API pada akhirnya akan memiliki setTimeout terbatas. - - Hal ini dapat mengubah urutan tugas di suatu halaman web, yang menyebabkan perilaku tak terduga di situs yang bergantung pada urutan tertentu dengan cara tertentu pula. - Kebijakan ini juga dapat memengaruhi situs yang menggunakan banyak setTimeout() dengan waktu tunggu 0 md, misalnya penambahan beban CPU. - - Bagi pengguna yang tidak menyetel kebijakan ini, <ph name="PRODUCT_NAME" /> akan meluncurkan perubahan secara bertahap pada saluran Stabil. - - Kebijakan ini bersifat sementara dan akan dihapus di <ph name="PRODUCT_NAME" /> 107. Batas waktu ini dapat diperpanjang jika diperlukan di antara perusahaan. - </translation> <translation id="1967334955994230472">Nonaktifkan Projector</translation> <translation id="1969212217917526199">Menggantikan kebijakan pada versi Debug untuk host akses jarak jauh. @@ -1741,6 +1730,9 @@ <translation id="274769314493317695">Jika <ph name="PRINTERS_WHITELIST" /> dipilih untuk <ph name="BULK_PRINTERS_ACCESS_MODE_POLICY_NAME" />, menyetel <ph name="NATIVE_PRINTERS_BULK_WHITELIST_POLICY_NAME" /> akan menentukan printer yang dapat digunakan oleh pengguna. Hanya printer dengan ID yang cocok dengan nilai dalam kebijakan ini yang akan tersedia bagi pengguna. ID harus sesuai dengan kolom <ph name="ID_FIELD" /> atau <ph name="GUID_FIELD" /> dalam file yang ditentukan di <ph name="NATIVE_PRINTERS_BULK_CONFIGURATION_POLICY_NAME" />. Kebijakan ini tidak digunakan lagi. Sebagai gantinya, gunakan <ph name="PRINTERS_BULK_ALLOWLIST_POLICY_NAME" />.</translation> +<translation id="2751959596774212778">WebSQL di konteks tidak aman akan nonaktif secara default mulai M107 dan akan sepenuhnya dihapus di M110. + Jika kebijakan ini disetel ke salah (false) atau tidak disetel, WebSQL di konteks tidak aman akan tetap aktif hingga akhir M106, lalu nonaktif mulai M107. + Jika kebijakan ini disetel ke benar (true), WebSQL di konteks tidak aman akan diaktifkan.</translation> <translation id="2752046642026416564">Jika kebijakan disetel ke Aktif atau tidak disetel, <ph name="PRODUCT_NAME" /> dapat menggunakan host pesan native yang diinstal di tingkat pengguna. Menyetel kebijakan ke Nonaktif berarti <ph name="PRODUCT_NAME" /> hanya dapat menggunakan host ini jika diinstal di tingkat sistem.</translation> @@ -3834,7 +3826,7 @@ * Ketat, Mode Terbatas Ketat di YouTube selalu aktif. - * Sedang, pengguna hanya dapat memilih Mode Terbatas Sedang atau Ketat di YouTube tetapi tidak dapat menonaktifkan Mode terbatas. + * Menengah, pengguna hanya dapat memilih Mode Terbatas Menengah atau Ketat di YouTube tetapi tidak dapat menonaktifkan Mode terbatas. * Nonaktif atau jika tidak ada nilai yang ditetapkan, Chrome tidak akan menerapkan Mode Terbatas di YouTube. Kebijakan eksternal seperti kebijakan YouTube tetap dapat memberlakukan Mode Terbatas.</translation> <translation id="5191476996923842491">'Perilaku default untuk penundaan minimum fungsi setTimeout().</translation> @@ -4143,7 +4135,6 @@ <translation id="5475361623548884387">Aktifkan pencetakan</translation> <translation id="547601067149622666">Jangan izinkan iklan di situs yang menayangkan iklan mengganggu</translation> <translation id="5476152378885134514">Memblokir papan klip di situs ini</translation> -<translation id="5478734531226638813">Menyetel kebijakan akan menonaktifkan update aplikasi Kiosk Chrome (yang menggunakan URL update dari manifes ekstensi) dalam sesi dan hanya akan menggunakan pra-pengambilan CRX sebagai mekanisme update.</translation> <translation id="5480380613778757009">Jika kebijakan ini dinonaktifkan atau tidak disetel, semua setelan tampilan yang disetel di Sesi tamu terkelola akan direset segera setelah sesi selesai. Jika kebijakan ini disetel ke Benar (True), properti tampilan akan tetap tersimpan setelah keluar dari sesi tamu terkelola.</translation> <translation id="5483065054530244863">Mengizinkan sertifikat bertanda tangan SHA-1 yang dikeluarkan oleh trust anchor lokal</translation> <translation id="5487758664517243511">Jika setelan ini diaktifkan, pengguna yang telah memilih untuk menggunakan Phone Hub akan dapat melanjutkan tugas seperti melihat halaman web ponsel di ChromeOS. @@ -4394,11 +4385,6 @@ Untuk informasi mendetail tentang pola URL yang valid, lihat https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="5749396052108288586">Kebijakan ini tidak digunakan lagi. Sebagai gantinya, gunakan <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation> <translation id="574983287620584622">Mengaktifkan pintasan fitur aksesibilitas di layar login</translation> -<translation id="5749873635525257317">Kebijakan ini tidak digunakan lagi. Sebaiknya gunakan BrowserSignin. - - Mengizinkan pengguna untuk login ke <ph name="PRODUCT_NAME" />. - - Jika kebijakan ini disetel, Anda dapat mengonfigurasi apakah pengguna diizinkan untuk login ke <ph name="PRODUCT_NAME" />. Jika kebijakan ini disetel ke 'Salah' (False), aplikasi dan ekstensi yang menggunakan chrome.identity API tidak akan berfungsi. Sebagai gantinya, sebaiknya gunakan <ph name="SYNC_DISABLED_POLICY_NAME" />.</translation> <translation id="5755002458331714762"> Web Components v0 API (Shadow DOM v0, Custom Elements v0, dan HTML Imports) sudah tidak digunakan lagi pada tahun 2018, dan telah dinonaktifkan secara default mulai dari M80. Kebijakan ini akan memungkinkan fitur ini diaktifkan ulang secara selektif hingga M84. Jika kebijakan ini ditetapkan ke True, fitur Web Components v0 akan diaktifkan untuk semua situs. @@ -5602,6 +5588,7 @@ Jika 'U2F' dipilih, faktor kedua yang diintegrasikan akan melakukan proses sesuai spesifikasi FIDO U2F. Jika 'U2F_EXTENDED' dipilih, faktor kedua yang diintegrasikan akan memberikan fungsi U2F, ditambah beberapa ekstensi untuk masing-masing pengesahan.</translation> +<translation id="6998179760789945134">Nonaktifkan WebSQL di konteks tidak aman kecuali jika diaktifkan oleh tanda Chrome.</translation> <translation id="6999948519306285655">Kebijakan ini tidak digunakan lagi. Sebagai gantinya, gunakan <ph name="PROXY_SETTINGS_POLICY_NAME" />. Menyetel kebijakan memungkinkan Anda menentukan URL untuk file .pac proxy. Kebijakan ini hanya berlaku jika kebijakan <ph name="PROXY_SETTINGS_POLICY_NAME" /> tidak ditentukan dan Anda memilih <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> dengan <ph name="PROXY_MODE_POLICY_NAME" />. @@ -6154,14 +6141,6 @@ Jika kebijakan ini disetel ke aktif atau tidak disetel, konversi unit Jawaban Instan akan diaktifkan. Jika kebijakan ini disetel ke nonaktif, konversi unit Jawaban Instan akan dinonaktifkan.</translation> <translation id="7587345076013230465">Minta pengguna memilih sertifikat klien setiap kali kebijakan pemilihan otomatis cocok dengan beberapa sertifikat di layar login</translation> -<translation id="7590188804371204512">Mengontrol penginstalan ekstensi eksternal. - - Jika setelan ini diaktifkan, ekstensi eksternal akan diblokir sehingga tidak dapat diinstal. - - Jika setelan ini dinonaktifkan atau tidak ditetapkan, ekstensi eksternal akan dapat diinstal. - - Ekstensi eksternal dan penginstalannya didokumentasikan di https://developer.chrome.com/apps/external_extensions. - </translation> <translation id="759957074386651883">Setelan Safe Browsing</translation> <translation id="7604169113182304895">Aplikasi Android dapat memilih untuk menerima daftar ini secara sukarela. Anda tidak dapat memaksa aplikasi untuk menerimanya.</translation> <translation id="7612157962821894603">Tanda di seluruh sistem yang akan diterapkan pada waktu mulai <ph name="PRODUCT_NAME" /></translation> @@ -7360,6 +7339,7 @@ <translation id="8919100556245407184">Waktu dalam satuan hari, jika perangkat telah mencapai kedaluwarsa update otomatis, sebelum pengguna logout jika versi <ph name="PRODUCT_OS_NAME" /> lebih rendah dari <ph name="CHROMEOS_VERSION_PROPERTY_NAME" /> yang ditentukan.</translation> <translation id="8919369436496201075">Mengizinkan perangkat menerima update LTS</translation> <translation id="8921669704201370845">Mengaktifkan pelaporan cloud <ph name="PRODUCT_NAME" /> untuk profil terkelola</translation> +<translation id="8922494933893518624">Paksa pengaktifan WebSQL di konteks tidak aman.</translation> <translation id="8930064580550462145">Saat login melalui layar kunci, <ph name="PRODUCT_OS_NAME" /> dapat melakukan autentikasi terhadap server (online) atau menggunakan sandi yang tersimpan di cache (offline). Jika kebijakan ini disetel ke -2, kebijakan akan mencocokkan nilai batas waktu login offline layar login yang berasal dari <ph name="POLICY" />.
diff --git a/components/policy/resources/policy_templates_it.xtb b/components/policy/resources/policy_templates_it.xtb index 90de2910..ee00fee 100644 --- a/components/policy/resources/policy_templates_it.xtb +++ b/components/policy/resources/policy_templates_it.xtb
@@ -943,17 +943,6 @@ <translation id="1962864958436828230">Imposta le dimensioni minime dei dati per la limitazione relativa agli appunti, al fine di impedire la fuga di dati</translation> <translation id="1964634611280150550">Modalità di navigazione in incognito non attiva</translation> <translation id="1964802606569741174">Questa norma non ha effetto sull'app YouTube per Android. Se è necessario applicare la modalità di protezione di YouTube, l'installazione dell'app YouTube per Android non deve essere consentita.</translation> -<translation id="1965363065727209968">setTimeout(…, 0) viene comunemente utilizzato per suddividere le attività JavaScript lunghe. - Se il criterio viene impostato su Enabled, i valori di setTimeouts e setIntervals con un intervallo inferiore a 4 ms non vengono limitati in modo aggressivo. - Ciò migliora le prestazioni a breve termine, ma in definitiva i valori di setTimeouts dei siti web che abusano dell'API verranno fatti rientrare nei limiti. - - L'operazione potrebbe modificare l'ordine delle attività su una pagina web, causando comportamenti imprevisti sui siti che dipendono in qualche misura da un ordine specifico. - Potrebbe anche incidere sui siti che utilizzano spesso setTimeout() con timeout di 0 ms, ad es. causando un aumento del carico della CPU. - - Per gli utenti per i quali il criterio non è stato impostato, <ph name="PRODUCT_NAME" /> renderà disponibile gradualmente la modifica sul canale stabile. - - Si tratta di un criterio temporaneo di cui è prevista la rimozione in <ph name="PRODUCT_NAME" /> 107. Questo termine potrebbe essere esteso nel caso in cui le aziende dovessero averne bisogno. - </translation> <translation id="1967334955994230472">Disattiva Proiettore</translation> <translation id="1969212217917526199">Sostituisce le build di debug dell'host di accesso remoto. @@ -4122,7 +4111,6 @@ <translation id="5475361623548884387">Attiva la stampa</translation> <translation id="547601067149622666">Non consentire gli annunci su siti con annunci invasivi</translation> <translation id="5476152378885134514">Blocca gli appunti su questi siti</translation> -<translation id="5478734531226638813">L'impostazione del criterio disattiverà l'aggiornamento delle app di Chrome Kiosk all'interno della sessione (che utilizza l'URL di aggiornamento dal manifest dell'estensione) e lascerà solo il precaricamento CRX come meccanismo di aggiornamento.</translation> <translation id="5480380613778757009">Se questo criterio viene disattivato o se non viene configurato, tutte le impostazioni di visualizzazione configurate nella sessione Ospite gestita verranno reimpostate al termine della sessione. Se questo criterio viene impostato su Vero, le proprietà di visualizzazione verranno memorizzate dopo la chiusura della sessione Ospite gestita.</translation> <translation id="5483065054530244863">Consenti i certificati SHA-1 firmati emessi dai trust anchor locali</translation> <translation id="5487758664517243511">Se questa impostazione viene attivata, gli utenti che hanno già attivato Phone Hub possono continuare attività su Chrome OS, come ad esempio la visualizzazione di pagine web che avevano iniziato a consultare sul telefono. @@ -4362,11 +4350,6 @@ Per informazioni dettagliate sui pattern URL validi, visita la pagina https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="5749396052108288586">Questo criterio è deprecato. Usa il criterio <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation> <translation id="574983287620584622">Attiva le scorciatoie delle funzioni di accessibilità nella schermata di accesso</translation> -<translation id="5749873635525257317">Questo criterio è deprecato; potresti usare il criterio BrowserSignin. - - Consente all'utente di accedere a <ph name="PRODUCT_NAME" />. - - La configurazione di questo criterio ti consente di stabilire se un utente può accedere o meno a <ph name="PRODUCT_NAME" />. Se questo criterio viene impostato su "Falso", le app e le estensioni che utilizzano l'API chrome.identity non funzioneranno, pertanto è consigliabile utilizzare il criterio <ph name="SYNC_DISABLED_POLICY_NAME" />.</translation> <translation id="5755002458331714762"> Le API Web Components v0 (Shadow DOM v0, Custom Elements v0 e HTML Imports) sono state ritirate nel 2018 e sono state disattivate per impostazione predefinita a partire dalla versione M80. Questo criterio consente di riattivare selettivamente queste funzionalità fino alla versione M84. Se questo criterio viene impostato su True, le funzionalità Web Components v0 verranno attivate per tutti i siti. @@ -6111,14 +6094,6 @@ Se il criterio è attivato o non impostato, la funzionalità di conversione delle unità di Risposte rapide sarà attiva. Se il criterio è disattivato, la funzionalità di conversione delle unità di Risposte rapide sarà disattivata.</translation> <translation id="7587345076013230465">Richiedi all'utente di selezionare il certificato client quando il criterio di selezione automatica corrisponde a più certificati nella schermata di accesso</translation> -<translation id="7590188804371204512">Controlla l'installazione delle estensioni esterne. - - L'attivazione di questa impostazione blocca l'installazione delle estensioni esterne. - - Se l'impostazione è disattivata o non viene impostata, l'installazione delle estensioni esterne è consentita. - - Le estensioni esterne e le relative modalità di installazione sono illustrate alla pagina https://developer.chrome.com/apps/external_extensions. - </translation> <translation id="759957074386651883">Impostazioni di Navigazione sicura</translation> <translation id="7604169113182304895">Le app Android potrebbero decidere volontariamente se rispettare o meno questo elenco. Non è possibile imporre il rispetto dell'elenco.</translation> <translation id="7612157962821894603">Contrassegni a livello di sistema da applicare all'avvio di <ph name="PRODUCT_NAME" /></translation>
diff --git a/components/policy/resources/policy_templates_ja.xtb b/components/policy/resources/policy_templates_ja.xtb index 6936e2bd..369fdeb 100644 --- a/components/policy/resources/policy_templates_ja.xtb +++ b/components/policy/resources/policy_templates_ja.xtb
@@ -879,17 +879,6 @@ <translation id="1962864958436828230">データ漏洩防止のクリップボード制限の最小サイズを設定する</translation> <translation id="1964634611280150550">シークレット モードを無効にする</translation> <translation id="1964802606569741174">このポリシーは Android YouTube アプリには適用されません。YouTube でセーフモードを有効にする場合は、Android YouTube アプリのインストールを禁止する必要があります。</translation> -<translation id="1965363065727209968">setTimeout(…, 0) は、一般的に長い JavaScript タスクを分割する目的で使用されます。 - このポリシーを有効に設定した場合、4 ミリ秒未満の間隔が指定された setTimeouts と setIntervals は積極的にはクランプされません。 - これにより短期的および水平的なパフォーマンスは向上しますが、API を誤用しているウェブサイトでは引き続き setTimeouts がクランプされることになります。 - - ウェブページによってはタスクの実行順序が変更され、特定の実行順序でのみ機能するサイトでは予期しない動作が発生することがあります。 - また、タイムアウトを 0 ミリ秒に設定した setTimeout() が多く使用されているサイトでも影響が生じる可能性があります(CPU の負荷が増加するなど)。 - - このポリシーを未設定のままにした場合、<ph name="PRODUCT_NAME" /> の Stable チャンネルで段階的に変更が適用されます。 - - これは、<ph name="PRODUCT_NAME" /> 107 で削除が計画されている一時的なポリシーです。企業からのニーズがある場合、この期限は延長される可能性があります。 - </translation> <translation id="1967334955994230472">プロジェクターを無効にする</translation> <translation id="1969212217917526199">リモート アクセス ホストの Debug ビルドでポリシーをオーバーライドします。 @@ -1616,6 +1605,9 @@ <translation id="274769314493317695"><ph name="BULK_PRINTERS_ACCESS_MODE_POLICY_NAME" /> の値に <ph name="PRINTERS_WHITELIST" /> が選択されている場合、<ph name="NATIVE_PRINTERS_BULK_WHITELIST_POLICY_NAME" /> でユーザーが使用できるプリンタを指定できます。ユーザーは、このポリシーで指定されている値に ID が一致するプリンタのみを使用できます。この ID は、<ph name="NATIVE_PRINTERS_BULK_CONFIGURATION_POLICY_NAME" /> で指定されたファイル内の「<ph name="ID_FIELD" />」または「<ph name="GUID_FIELD" />」フィールドに対応している必要があります。 このポリシーはサポートが終了しています。代わりに <ph name="PRINTERS_BULK_ALLOWLIST_POLICY_NAME" /> を使用してください。</translation> +<translation id="2751959596774212778">セキュアでないコンテキストでの WebSQL は M107 の時点ではデフォルトでオフになっており、M110 では完全に削除されます。 + このポリシーを false に設定するか未設定のままにした場合、セキュアでないコンテキストでの WebSQL は M106 の終了時までオンのままになり、M107 からオフになります。 + このポリシーを true に設定した場合、セキュアでないコンテキストでの WebSQL は有効になります。</translation> <translation id="2752046642026416564">このポリシーを有効に設定するか未設定のままにした場合、<ph name="PRODUCT_NAME" /> はユーザーレベルでインストールされたネイティブ メッセージング ホストを使用できます。 このポリシーを無効に設定した場合、<ph name="PRODUCT_NAME" /> はシステムレベルでインストールされたネイティブ メッセージング ホストのみを使用できます。</translation> @@ -3902,7 +3894,6 @@ <translation id="5475361623548884387">印刷を有効にする</translation> <translation id="547601067149622666">煩わしい広告を含むサイトで広告の表示を許可しない</translation> <translation id="5476152378885134514">クリップボードの使用をブロックするサイトを指定する</translation> -<translation id="5478734531226638813">このポリシーを設定すると、セッション中のキオスク Chrome アプリの更新(拡張機能マニフェストの更新 URL を使用)が無効になり、有効な更新メカニズムは CRX プリフェッチのみとなります。</translation> <translation id="5480380613778757009">このポリシーを無効にするか未設定のままにした場合、管理対象のゲスト セッションで設定されたディスプレイ設定はすべてセッションの終了時にリセットされます。このポリシーを True に設定した場合、管理対象のゲスト セッションが終了した後もディスプレイ プロパティが保持されます。</translation> <translation id="5483065054530244863">ローカルの信頼済みアンカーが発行した SHA-1 署名証明書を許可する</translation> <translation id="5487758664517243511">この設定を有効にした場合、スマートフォン ハブをすでにオプトインしているユーザーは、スマートフォンでのウェブページの閲覧などの作業を Chrome OS で継続できます。この設定を無効にした場合、ユーザーはこの機能を使用できません。PhoneHubAllowed ポリシーを無効にした場合も、ユーザーはこの機能を使用できません。このポリシーを未設定のままにした場合、デフォルトでは、企業の管理対象ユーザーと管理対象外ユーザーのいずれもこの機能を使用できます。</translation> @@ -4139,11 +4130,6 @@ 有効な URL パターンについて詳しくは、https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns をご覧ください。</translation> <translation id="5749396052108288586">このポリシーはサポートを終了しました。代わりに <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" /> を使用してください。</translation> <translation id="574983287620584622">ログイン画面でユーザー補助機能のショートカットを有効にする</translation> -<translation id="5749873635525257317">このポリシーはサポートが終了しています。代わりに BrowserSignin の使用をご検討ください。 - - ユーザーによる <ph name="PRODUCT_NAME" /> へのログインを許可します。 - - このポリシーでは、ユーザーによる <ph name="PRODUCT_NAME" /> へのログインを許可するかどうかを設定できます。このポリシーを「False」に設定すると、chrome.identity API を使用するアプリや拡張機能が機能しなくなるため、代わりに <ph name="SYNC_DISABLED_POLICY_NAME" /> の使用をおすすめします。</translation> <translation id="5755002458331714762"> Web Components v0 API(Shadow DOM v0、Custom Elements v0、HTML Imports)は 2018 年にサポートが終了し、M80 以降ではデフォルトで無効となっていますが、このポリシーにより M84 までこれらの機能を再度有効にできるようにしました。 このポリシーを True に設定した場合、Web Components v0 の機能はすべてのサイトで有効になります。このポリシーを False に設定するか未設定のままにした場合、Web Components v0 の機能は M80 以降においてデフォルトで無効になります。 @@ -5257,6 +5243,7 @@ [U2F] を選択した場合は、統合 2 段階認証プロセスが FIDO U2F 仕様に沿って適用されます。 [U2F_EXTENDED] を選択した場合は、統合 2 段階認証プロセスで U2F の機能と個人認証用の拡張機能を使用できます。</translation> +<translation id="6998179760789945134">Chrome フラグで有効になっていない限り、セキュアでないコンテキストでの WebSQL を無効にする</translation> <translation id="6999948519306285655">このポリシーはサポートが終了しています。代わりに <ph name="PROXY_SETTINGS_POLICY_NAME" /> を使用してください。 このポリシーでは、プロキシ .pac ファイルへの URL を指定できます。このポリシーは、<ph name="PROXY_SETTINGS_POLICY_NAME" /> ポリシーを指定せずに、<ph name="PROXY_MODE_POLICY_NAME" /> で <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> を選択した場合のみ適用されます。 @@ -5790,14 +5777,6 @@ このポリシーを有効にした場合、または設定しない場合、クイック アンサーの単位変換が有効になります。 このポリシーを無効にした場合、クイック アンサーの単位変換が無効になります。</translation> <translation id="7587345076013230465">ログイン画面で自動選択ポリシーが複数の証明書と一致した場合に、クライアント証明書を選択するよう求めるメッセージを常にユーザーに表示する</translation> -<translation id="7590188804371204512">外部拡張機能のインストールを管理します。 - - この設定を有効にした場合、外部拡張機能のインストールはブロックされます。 - - この設定を無効にするか未設定のままにした場合、外部拡張機能のインストールは許可されます。 - - 外部拡張機能とそのインストール方法については、https://developer.chrome.com/apps/external_extensions をご覧ください。 - </translation> <translation id="759957074386651883">セーフ ブラウジングの設定</translation> <translation id="7604169113182304895">このリストを使用するかどうかは Android アプリ側の選択となります。Android アプリにリストの使用を強制することはできません。</translation> <translation id="7612157962821894603"><ph name="PRODUCT_NAME" /> 起動時にシステム全体のフラグを適用</translation> @@ -6946,6 +6925,7 @@ <translation id="8919100556245407184"><ph name="PRODUCT_OS_NAME" /> のバージョンが指定の <ph name="CHROMEOS_VERSION_PROPERTY_NAME" /> よりも前の場合に、自動更新の有効期限の通知後、ユーザーがログアウトされるまでの期間(日)</translation> <translation id="8919369436496201075">デバイスで LTS のアップデートを受信できるようにする</translation> <translation id="8921669704201370845">管理対象プロファイルの <ph name="PRODUCT_NAME" /> クラウド レポートを有効にする</translation> +<translation id="8922494933893518624">セキュアでないコンテキストでの WebSQL を強制的に有効にする。</translation> <translation id="8930064580550462145"><ph name="PRODUCT_OS_NAME" /> では、ロック画面でのログイン時に、サーバーに対して(オンラインで)、またはキャッシュに保存されたパスワードを使用して(オフラインで)、認証を行うことができます。 このポリシーの値を -2 に設定した場合は、<ph name="POLICY" /> で指定されたログイン画面でのオフラインのログインの時間制限と同じ値が適用されます。
diff --git a/components/policy/resources/policy_templates_ko.xtb b/components/policy/resources/policy_templates_ko.xtb index b6d6a61a..47d2185 100644 --- a/components/policy/resources/policy_templates_ko.xtb +++ b/components/policy/resources/policy_templates_ko.xtb
@@ -946,17 +946,6 @@ <translation id="1962864958436828230">데이터 유출 방지를 위한 클립보드 제한용 최소 크기 한도 설정</translation> <translation id="1964634611280150550">시크릿 모드 사용이 중지됨</translation> <translation id="1964802606569741174">이 정책은 Android YouTube 앱에 아무런 영향도 미치지 않습니다. YouTube의 안전 모드를 실행해야 하는 경우 Android YouTube 앱 설치를 허용하지 않아야 합니다.</translation> -<translation id="1965363065727209968">setTimeout(…, 0)은 긴 자바스크립트 작업을 세분화하는 데 흔히 사용됩니다. - 정책을 사용으로 설정하면 간격이 4ms 미만인 setTimeout 및 setInterval이 제대로 고정되지 않으므로 - 짧은 기간의 성능이 개선됩니다. 단, API를 악용하는 웹사이트에서는 여전히 setTimeout이 고정됩니다. - - setTimeout 고정되지 않으므로 웹페이지에서 작업 순서가 변경될 수 있으며, 특정 순서에 의존하는 사이트에서는 예기치 않은 동작이 발생할 수 있습니다. - 또한 시간 초과가 0ms인 setTimeout()이 많은 경우 사이트에서 CPU 부하 증가 등의 문제가 발생할 수 있습니다. - - 정책을 설정하지 않은 사용자의 경우 <ph name="PRODUCT_NAME" />에서 공개 버전 채널을 통해 점진적으로 변경사항을 출시할 예정입니다. - - 이는 임시 정책으로 <ph name="PRODUCT_NAME" /> 107에서 삭제됩니다. 기업에 필요한 경우 기한이 연장될 수 있습니다. - </translation> <translation id="1967334955994230472">Projector 사용 중지</translation> <translation id="1969212217917526199">원격 액세스 호스트의 디버그 빌드 관련 정책을 재정의합니다. @@ -1739,6 +1728,9 @@ <translation id="274769314493317695"><ph name="BULK_PRINTERS_ACCESS_MODE_POLICY_NAME" />에 <ph name="PRINTERS_WHITELIST" />를 선택할 경우 <ph name="NATIVE_PRINTERS_BULK_WHITELIST_POLICY_NAME" />를 설정하면 사용자가 사용할 수 있는 프린터가 지정됩니다. ID가 이 정책의 값과 일치하는 프린터만 사용자에게 제공됩니다. ID는 <ph name="NATIVE_PRINTERS_BULK_CONFIGURATION_POLICY_NAME" />에 지정된 파일의 <ph name="ID_FIELD" /> 또는 <ph name="GUID_FIELD" /> 필드와 일치해야 합니다. 이 정책은 지원 중단되었으므로 <ph name="PRINTERS_BULK_ALLOWLIST_POLICY_NAME" /> 정책을 대신 사용하세요.</translation> +<translation id="2751959596774212778">비보안 컨텍스트의 WebSQL은 M107부터 기본적으로 사용 중지되며 M110에서 완전히 삭제됩니다. + 정책을 False로 설정하거나 설정하지 않으면 비보안 컨텍스트의 WebSQL이 M106이 끝날 때까지 유지된 후 M107에서 사용 중지됩니다. + 정책을 True로 설정하면 비보안 컨텍스트의 WebSQL이 사용 설정됩니다.</translation> <translation id="2752046642026416564">정책을 사용 설정하거나 설정하지 않으면 <ph name="PRODUCT_NAME" />이 사용자 수준에서 설치된 기본 메시지 호스트를 사용할 수 있습니다. 사용 중지하면 기본 메시지 호스트가 시스템 수준에서 설치된 경우에만 <ph name="PRODUCT_NAME" />에서 이러한 호스트를 사용할 수 있습니다.</translation> @@ -4137,7 +4129,6 @@ <translation id="5475361623548884387">인쇄 사용</translation> <translation id="547601067149622666">방해가 되는 광고가 포함된 사이트에서 광고 허용 안 함</translation> <translation id="5476152378885134514">사이트에서 클립보드 차단</translation> -<translation id="5478734531226638813">정책을 설정하면 세션 중에 키오스크 Chrome 앱 업데이트(확장 프로그램 매니페스트의 업데이트 URL 사용)가 사용 중지되며 업데이트 메커니즘으로 CRX 프리패치만 사용됩니다.</translation> <translation id="5480380613778757009">정책을 사용 안함으로 설정하거나 설정하지 않으면 관리 게스트 세션에서 설정된 모든 화면 설정이 세션이 끝나는 즉시 재설정됩니다. 정책을 True로 설정하면 관리 게스트 세션을 종료한 후에도 화면 속성이 유지됩니다.</translation> <translation id="5483065054530244863">로컬 트러스트 앵커에서 발행된 SHA-1 서명 인증서를 허용합니다.</translation> <translation id="5487758664517243511">설정을 켜면 이미 휴대전화 허브 사용을 선택한 사용자가 작업을 이어서 할 수 있게 됩니다(예: 휴대전화에서 보던 웹페이지를 ChromeOS에서 이어서 보기). @@ -4388,11 +4379,6 @@ 유효한 URL 패턴을 자세히 알아보려면 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns를 참고하세요.</translation> <translation id="5749396052108288586">지원 중단된 정책입니다. 대신 <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" /> 정책을 사용하세요.</translation> <translation id="574983287620584622">로그인 화면에서 접근성 기능 단축키 사용 설정</translation> -<translation id="5749873635525257317">이 정책은 지원 중단되었으므로 BrowserSignin을 대신 사용해 보시기 바랍니다. - - 사용자가 <ph name="PRODUCT_NAME" />에 로그인하도록 허용합니다. - - 정책을 설정하여 사용자가 <ph name="PRODUCT_NAME" />에 로그인하도록 허용할지 결정할 수 있습니다. 정책을 'False'로 설정하면 chrome.identity API를 사용하는 앱과 확장 프로그램이 작동하지 않으므로 대신 <ph name="SYNC_DISABLED_POLICY_NAME" />를 사용하는 것이 좋습니다.</translation> <translation id="5755002458331714762"> Web Components v0 API(Shadow DOM v0, Custom Elements v0, HTML Imports)는 2018년에 지원 중단되었으며 M80부터는 기본적으로 사용 중지되어 있습니다. 이 정책을 사용하면 위에서 언급된 기능을 M84까지 선택적으로 다시 사용 설정할 수 있습니다. 정책이 True로 설정되어 있는 경우 Web Components v0 기능이 모든 사이트에 사용됩니다. @@ -5581,6 +5567,7 @@ 'U2F'를 선택하면 FIDO U2F 사양에 따라 통합된 2차 요소가 작동합니다. 'U2F_EXTENDED'를 선택하면 통합된 2차 요소가 U2F 기능과 함께 개별 인증용 확장 프로그램을 일부 제공합니다.</translation> +<translation id="6998179760789945134">Chrome 신고에서 사용 설정하지 않는 한 비보안 컨텍스트의 WebSQL을 사용 중지합니다.</translation> <translation id="6999948519306285655">이 정책은 지원 중단되었으므로 <ph name="PROXY_SETTINGS_POLICY_NAME" /> 정책을 대신 사용하세요. 정책을 설정하면 프록시 .pac 파일 URL을 지정할 수 있습니다. 이 정책은 <ph name="PROXY_SETTINGS_POLICY_NAME" /> 정책을 지정하지 않고 <ph name="PROXY_MODE_POLICY_NAME" />에 <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> 값을 선택한 경우에만 적용됩니다. @@ -6136,14 +6123,6 @@ 정책을 사용 설정하거나 설정하지 않으면 빠른 답변 단위 변환이 사용 설정됩니다. 정책을 사용 중지하면 빠른 답변 단위 변환이 사용 중지됩니다.</translation> <translation id="7587345076013230465">자동 선택 정책과 일치하는 인증서가 여러 개 있을 때마다 로그인 화면에서 사용자에게 클라이언트 인증서를 선택하라는 메시지 표시</translation> -<translation id="7590188804371204512">외부 확장 프로그램 설치를 제어합니다. - - 이 설정을 사용하면 외부 확장 프로그램이 설치되지 못하게 차단합니다. - - 이 설정을 사용 중지하거나 설정하지 않으면 외부 확장 프로그램의 설치가 허용됩니다. - - 외부 확장 프로그램 및 설치 관련 문서는 다음 페이지에서 확인하세요. https://developer.chrome.com/apps/external_extensions - </translation> <translation id="759957074386651883">세이프 브라우징 설정</translation> <translation id="7604169113182304895">Android 앱이 자발적으로 이 목록을 사용하도록 선택할 수 있습니다. 강제로 Android 앱에서 이 목록을 사용하도록 할 수 없습니다.</translation> <translation id="7612157962821894603"><ph name="PRODUCT_NAME" /> 시작 시 시스템 전체 플래그 적용</translation> @@ -7348,6 +7327,7 @@ <translation id="8919100556245407184"><ph name="PRODUCT_OS_NAME" /> 버전이 지정된 <ph name="CHROMEOS_VERSION_PROPERTY_NAME" />보다 낮은 경우 사용자가 로그아웃되는 자동 업데이트 만료 지점 이후 경과된 시간입니다.</translation> <translation id="8919369436496201075">기기가 LTS 업데이트를 수신하도록 허용</translation> <translation id="8921669704201370845">관리 프로필을 대상으로 <ph name="PRODUCT_NAME" /> 클라우드 보고 사용</translation> +<translation id="8922494933893518624">비보안 컨텍스트의 WebSQL을 강제로 사용 설정합니다.</translation> <translation id="8930064580550462145">잠금 화면을 통해 로그인할 때 <ph name="PRODUCT_OS_NAME" />이(가) 서버(온라인) 또는 캐시된 비밀번호(오프라인)를 사용하여 인증할 수 있습니다. 이 정책을 -2로 설정하면 <ph name="POLICY" />에 따른 로그인 화면의 오프라인 로그인 시간제한 값과 일치하게 됩니다.
diff --git a/components/policy/resources/policy_templates_nl.xtb b/components/policy/resources/policy_templates_nl.xtb index 8660001..4563bab0 100644 --- a/components/policy/resources/policy_templates_nl.xtb +++ b/components/policy/resources/policy_templates_nl.xtb
@@ -920,17 +920,6 @@ <translation id="1962864958436828230">Minimale groottelimiet instellen voor klembordbeperking ter voorkoming van datalekken</translation> <translation id="1964634611280150550">Incognitomodus staat uit</translation> <translation id="1964802606569741174">Dit beleid is niet van invloed op de YouTube-app voor Android. Als de veiligheidsmodus voor YouTube moet worden afgedwongen, moet je installatie van de YouTube-app voor Android niet toestaan.</translation> -<translation id="1965363065727209968">setTimeout(…, 0) wordt vaak gebruikt om lange JavaScript-taken uit te splitsen. - Als je het beleid toepast, worden setTimeouts en setIntervals met een interval van minder dan 4 ms minder dwingend vastgezet. - Dit verbetert de prestaties op de korte termijn, maar voor websites die de API misbruiken, worden de setTimeouts uiteindelijk toch vastgezet. - - Hierdoor kan de taakvolgorde op een webpagina veranderen, wat kan leiden tot onverwacht gedrag op sites die afhankelijk zijn van een bepaalde volgorde. - De functie kan ook van invloed zijn op sites die veel instanties van setTimeout() met een time-out van 0 ms gebruiken. De CPU-belasting kan bijvoorbeeld toenemen. - - Voor gebruikers waarvoor dit beleid niet is ingesteld, rolt <ph name="PRODUCT_NAME" /> de wijziging geleidelijk uit op het stabiele kanaal. - - Dit is een tijdelijk beleid dat volgens planning wordt verwijderd in <ph name="PRODUCT_NAME" /> 107. Deze deadline kan worden verlengd als daar bij bedrijven behoefte aan is. - </translation> <translation id="1967334955994230472">Projector uitzetten</translation> <translation id="1969212217917526199">Hiermee worden beleidsregels overgeschreven op Debug-builds van de host voor externe toegang. @@ -4077,7 +4066,6 @@ <translation id="5475361623548884387">Afdrukken aanzetten</translation> <translation id="547601067149622666">Geen advertenties toestaan op sites met opdringerige advertenties</translation> <translation id="5476152378885134514">Het klembord blokkeren op deze sites</translation> -<translation id="5478734531226638813">Als je het beleid instelt, wordt het updaten van Chrome-kiosk-apps in de sessie uitgezet (waarvoor de update-URL uit het extensiemanifest wordt gebruikt) en blijft alleen CRX-prefetching over als updatemechanisme.</translation> <translation id="5480380613778757009">Als je dit beleid uitzet of niet instelt, worden alle weergave-instellingen die zijn ingesteld in de beheerde gastsessie, gereset zodra de sessie wordt beëindigd. Als je dit beleid instelt op True, worden de weergave-eigenschappen bewaard nadat de beheerde gastsessie is beëindigd.</translation> <translation id="5483065054530244863">Door lokale vertrouwensinstanties verstrekte, met SHA-1 ondertekende certificaten toestaan</translation> <translation id="5487758664517243511">Als je deze instelling aanzet, kunnen gebruikers die Telefoonhub al hebben toegestaan, taken voortzetten in Chrome OS, zoals de webpagina's van hun telefoon bekijken. @@ -4316,11 +4304,6 @@ Ga naar https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns voor gedetailleerde informatie over geldige URL-patronen.</translation> <translation id="5749396052108288586">Dit beleid is beëindigd. Gebruik in plaats daarvan <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation> <translation id="574983287620584622">Snelkoppelingen voor toegankelijkheidsfuncties op het inlogscherm aanzetten</translation> -<translation id="5749873635525257317">Dit beleid is verouderd. Je kunt in plaats daarvan BrowserSignin gebruiken. - -Hiermee wordt toegestaan dat de gebruiker inlogt bij <ph name="PRODUCT_NAME" />. - -Als je dit beleid instelt, kun je bepalen of een gebruiker mag inloggen bij <ph name="PRODUCT_NAME" />. Als je dit beleid instelt op False, werken apps en extensies die de API chrome.identity gebruiken niet meer. Daarom kun je in plaats hiervan ook <ph name="SYNC_DISABLED_POLICY_NAME" /> gebruiken.</translation> <translation id="5755002458331714762">De Web Components v0 API's (Shadow DOM v0, Custom Elements v0 en HTML Imports) zijn beëindigd in 2018 en zijn vanaf M80 standaard uitgezet. Met dit beleid kunnen deze functies selectief opnieuw worden aangezet tot M84. Als dit beleid is ingesteld op True, worden de functies van Web Components v0 aangezet voor alle sites. @@ -6045,13 +6028,6 @@ Als je het beleid toepast of niet instelt, wordt Eenheidsconversie van Snelle antwoorden aangezet. Als je het beleid niet toepast, wordt Eenheidsconversie van Snelle antwoorden uitgezet.</translation> <translation id="7587345076013230465">De gebruiker vragen om het clientcertificaat te selecteren als het beleid voor automatische selectie overeenkomt met meerdere certificaten op het inlogscherm</translation> -<translation id="7590188804371204512">Beheert de installatie van externe extensies. - - Als je deze instelling aanzet, wordt de installatie van externe extensies geblokkeerd. - - Als je deze instelling uitzet of niet instelt, kunnen externe extensies worden geïnstalleerd. - - Externe extensies en de installatie daarvan worden beschreven op https://developer.chrome.com/apps/external_extensions.</translation> <translation id="759957074386651883">Safe Browsing-instellingen</translation> <translation id="7604169113182304895">Het is mogelijk dat Android-apps deze lijst op vrijwillige basis respecteren. Je kunt ze niet dwingen om de lijst te respecteren.</translation> <translation id="7612157962821894603">Markeringen voor het hele systeem die worden toegepast bij het starten van <ph name="PRODUCT_NAME" /></translation>
diff --git a/components/policy/resources/policy_templates_pt-BR.xtb b/components/policy/resources/policy_templates_pt-BR.xtb index ff40061..335eafa 100644 --- a/components/policy/resources/policy_templates_pt-BR.xtb +++ b/components/policy/resources/policy_templates_pt-BR.xtb
@@ -941,17 +941,6 @@ <translation id="1962864958436828230">Definir o limite mínimo para a prevenção contra vazamento de dados de acordo com a restrição da área de transferência</translation> <translation id="1964634611280150550">Modo de navegação anônima desativado</translation> <translation id="1964802606569741174">Esta política não tem nenhum efeito sobre o app YouTube para Android. Se o modo de segurança do YouTube precisar ser aplicado, a instalação desse app será bloqueada.</translation> -<translation id="1965363065727209968">setTimeout(…, 0) normalmente é usado para dividir tarefas longas de JavaScript. - Quando a política for ativada, as funções setTimeouts e setIntervals com um intervalo menor que 4ms não serão ajustadas de forma tão agressiva. - Isso melhora a performance no curto prazo, mas os sites que abusam da API ainda têm os setTimeouts ajustados. - - É possível que a ordem das tarefas em uma página da Web mude, levando a um comportamento inesperado em sites que dependem de uma ordem específica. - Também é possível que isso afete sites com muitas funções setTimeout() com um tempo limite de uso de 0ms, por exemplo, aumentando a carga da CPU. - - Para usuários em que essa política não está definida, o <ph name="PRODUCT_NAME" /> vai lançar a mudança gradualmente no Canal Stable. - - Essa é uma política temporária e tem remoção planejada para a versão 107 do <ph name="PRODUCT_NAME" />. Esse prazo pode ser prorrogado caso as empresas precisem de mais tempo. - </translation> <translation id="1967334955994230472">Desativar Projector</translation> <translation id="1969212217917526199">Modifica as políticas sobre versões de depuração do host de acesso remoto. @@ -1734,6 +1723,9 @@ <translation id="274769314493317695">Se <ph name="PRINTERS_WHITELIST" /> for escolhida para <ph name="BULK_PRINTERS_ACCESS_MODE_POLICY_NAME" />, a definição de <ph name="NATIVE_PRINTERS_BULK_WHITELIST_POLICY_NAME" /> especificará quais impressoras os usuários podem usar. Apenas as impressoras com IDs correspondentes aos valores desta política estão disponíveis para o usuário. Os IDs precisam corresponder aos campos <ph name="ID_FIELD" /> ou <ph name="GUID_FIELD" /> no arquivo especificado na <ph name="NATIVE_PRINTERS_BULK_CONFIGURATION_POLICY_NAME" />. Esta política está suspensa. Use a <ph name="PRINTERS_BULK_ALLOWLIST_POLICY_NAME" />.</translation> +<translation id="2751959596774212778">Da versão M107 em diante, o WebSQL em contextos não seguros fica desativado por padrão. Na versão M110, ele vai ser totalmente removido. + Se esta política for definida como falsa ou deixada sem definição, o WebSQL em contextos não seguros vai continuar ativado até o fim da versão M106 e será desativado na M107. + Se a política for definida como verdadeira, o WebSQL em contextos não seguros vai ser ativado.</translation> <translation id="2752046642026416564">Se a política for definida como "Ativada" ou não for definida, o <ph name="PRODUCT_NAME" /> poderá usar hosts de mensagens nativas instalados no nível do usuário. Se a política for definida como "Desativada", o <ph name="PRODUCT_NAME" /> só poderá usar esses hosts se eles estiverem instalados no nível do sistema.</translation> @@ -4124,7 +4116,6 @@ <translation id="5475361623548884387">Ativar impressão</translation> <translation id="547601067149622666">Não permitir anúncios em sites com anúncios invasivos</translation> <translation id="5476152378885134514">Bloquear a área de transferência nesses sites</translation> -<translation id="5478734531226638813">Se a política for definida, a atualização de apps do Chrome para quiosque, que usa o URL de atualização do manifesto de extensão, será desativada durante a sessão e o único mecanismo de atualização será a pré-busca de CRX.</translation> <translation id="5480380613778757009">Se a política for desativada ou deixada sem definição, todas as configurações de tela que foram definidas em Sessões de visitante gerenciadas serão redefinidas assim que a sessão for encerrada. Se a política for definida como "Verdadeira", as propriedades de tela permanecerão após a Sessão de visitante gerenciada ser encerrada.</translation> <translation id="5483065054530244863">Permitir certificados SHA-1 assinados emitidos pelas âncoras de confiança locais</translation> <translation id="5487758664517243511">Se esta configuração estiver ativada, os usuários que já ativaram o recurso "Seu smartphone" poderão continuar tarefas no ChromeOS, como visualizar as páginas da Web do smartphone. @@ -4373,11 +4364,6 @@ Para informações detalhadas sobre padrões de URL válidos, consulte https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="5749396052108288586">Essa política está obsoleta. Use a <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation> <translation id="574983287620584622">Ativar atalhos de recursos de acessibilidade na tela de login</translation> -<translation id="5749873635525257317">Esta política foi descontinuada. É recomendável usar a BrowserSignin. - - Permite que o usuário faça login no <ph name="PRODUCT_NAME" />. - - Se a política for definida, será possível configurar se o usuário poderá fazer login no <ph name="PRODUCT_NAME" />. Se ela for definida como "Falsa", o funcionamento de apps e extensões que usam a API chrome.identity será impedido. Por isso, é recomendável usar a política <ph name="SYNC_DISABLED_POLICY_NAME" />.</translation> <translation id="5755002458331714762"> As APIs Web Components v0 (Shadow DOM v0, Custom Elements v0 e HTML Imports) se tornaram obsoletas em 2018 e estão desativadas por padrão desde o M80. Esta política permite que esses recursos sejam seletivamente reativados até o M84. Se esta política for definida como verdadeira, os recursos da Web Components v0 serão ativados para todos os sites. @@ -5576,6 +5562,7 @@ Se a opção U2F for selecionada, o segundo fator integrado se comportará de acordo com a especificação FIDO U2F. Se a opção U2F_EXTENDED for selecionada, o segundo fator integrado fornecerá as funções de U2F, além de algumas extensões para declaração individual.</translation> +<translation id="6998179760789945134">Desativar o WebSQL em contextos não seguros, a menos que ele seja ativado pela Sinalização do Chrome.</translation> <translation id="6999948519306285655">Esta política está obsoleta. Use a <ph name="PROXY_SETTINGS_POLICY_NAME" />. Se a política for definida, você poderá especificar um URL de um arquivo proxy .pac. Esta política só terá efeito se a <ph name="PROXY_SETTINGS_POLICY_NAME" /> não tiver sido especificada e você tiver selecionado <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> com <ph name="PROXY_MODE_POLICY_NAME" />. @@ -6127,14 +6114,6 @@ Se ela estiver ativada ou for deixada sem definição, a conversão de unidades das Respostas rápidas ficará ativada. Se a política for desativada, a conversão de unidades das Respostas rápidas ficará desativada.</translation> <translation id="7587345076013230465">Pedir para o usuário selecionar o certificado do cliente sempre que a política de seleção automática corresponder a vários certificados na tela de login</translation> -<translation id="7590188804371204512">Controla a instalação de extensões externas. - - Ativar essa configuração impede a instalação de extensões externas. - - Desativar essa configuração ou deixá-la indefinida permite a instalação de extensões externas. - - As extensões externas e a instalação estão documentadas em https://developer.chrome.com/apps/external_extensions. - </translation> <translation id="759957074386651883">Configurações da política Safe Browsing</translation> <translation id="7604169113182304895">Os apps Android podem optar voluntariamente por respeitar essa lista. Não é possível forçá-los a respeitá-la.</translation> <translation id="7612157962821894603">Sinalizações amplas do sistema que devem ser aplicadas na inicialização do <ph name="PRODUCT_NAME" /></translation> @@ -7334,6 +7313,7 @@ <translation id="8919100556245407184">O tempo, em dias, após a postagem de expiração da atualização automática até o usuário ser desconectado se a versão do <ph name="PRODUCT_OS_NAME" /> for menor que a <ph name="CHROMEOS_VERSION_PROPERTY_NAME" /> especificada.</translation> <translation id="8919369436496201075">Permitir que o dispositivo receba atualizações de LTS</translation> <translation id="8921669704201370845">Ativar os relatórios de nuvem do <ph name="PRODUCT_NAME" /> do perfil gerenciado</translation> +<translation id="8922494933893518624">Forçar a ativação do WebSQL em contextos não seguros.</translation> <translation id="8930064580550462145">Durante o login pela tela de bloqueio, o <ph name="PRODUCT_OS_NAME" /> pode fazer a autenticação por um servidor (on-line) ou usando uma senha armazenada em cache (off-line). Quando esta política é definida como -2, ela corresponde ao valor do limite de tempo de login off-line da tela de login definido pela <ph name="POLICY" />.
diff --git a/components/policy/resources/policy_templates_ru.xtb b/components/policy/resources/policy_templates_ru.xtb index 6be6945..9ea20949 100644 --- a/components/policy/resources/policy_templates_ru.xtb +++ b/components/policy/resources/policy_templates_ru.xtb
@@ -945,17 +945,6 @@ <translation id="1962864958436828230">Установить минимально допустимый объем данных для ограничения CLIPBOARD, связанного с предотвращением утечки данных</translation> <translation id="1964634611280150550">Режим инкогнито отключен</translation> <translation id="1964802606569741174">Правило не влияет на приложение YouTube для Android. Чтобы принудительно включить режим Безопасного просмотра на YouTube, необходимо запретить установку приложения YouTube для Android.</translation> -<translation id="1965363065727209968">Функция setTimeout(…, 0) обычно используется, чтобы разбивать длинные задачи JavaScript. - Если правило включено, для функций setTimeout и setInterval с временем ожидания менее 4 мс минимальная задержка применяется реже. - Это улучшает краткосрочную производительность, но на сайтах, которые используют API чрезмерно, время задержки для функции setTimeout по-прежнему будет увеличено. - - Обратите внимание, что порядок выполнения задач на веб-странице может измениться. В результате на сайтах, для работы которых этот порядок важен, возможны сбои. - Кроме того, если на сайте используется множество функций setTimeout() с временем ожидания 0 мс, может повыситься нагрузка на процессор. - - Для пользователей стабильной версии <ph name="PRODUCT_NAME" />, в которой это правило не настроено, постепенно будет выпущено изменение. - - Это временное правило, которое мы планируем удалить в <ph name="PRODUCT_NAME" /> версии 107. Срок его действия может быть продлен, если в этом возникнет необходимость у компаний. - </translation> <translation id="1967334955994230472">Отключить проектор</translation> <translation id="1969212217917526199">Позволяет изменить правила сборок для отладки хоста удаленного доступа. @@ -4120,7 +4109,6 @@ <translation id="5475361623548884387">Включить печать</translation> <translation id="547601067149622666">Заблокировать навязчивую рекламу на сайтах</translation> <translation id="5476152378885134514">Блокировать буфер обмена на этих сайтах</translation> -<translation id="5478734531226638813">Если это правило настроено, обновление киоск-приложений Chrome во время сеанса (с использованием URL обновления из манифеста расширения) будет отключено и обновление будет выполняться только путем упреждающего чтения CRX-файлов.</translation> <translation id="5480380613778757009">Если правило отключено или не настроено, все параметры экрана, заданные в управляемом гостевом сеансе, будут сброшены после его завершения. Если задано значение True, после завершения управляемого гостевого сеанса параметры экрана будут сохранены.</translation> <translation id="5483065054530244863">Разрешить сертификаты с подписью SHA-1, выпущенные локальными якорями доверия</translation> <translation id="5487758664517243511">Если это правило включено, пользователи, у которых уже настроена функция "Управление телефоном", могут продолжать выполнять в Chrome OS действия, начатые на телефоне (например, просматривать веб-страницы). @@ -4371,11 +4359,6 @@ О допустимых шаблонах URL рассказано на странице https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="5749396052108288586">Правило устарело. Вместо него используйте следующее: <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation> <translation id="574983287620584622">Использовать быстрые клавиши специальных возможностей на экране входа</translation> -<translation id="5749873635525257317">Это правило больше не поддерживается. Мы рекомендуем использовать вместо него BrowserSignin. - - Позволяет пользователю входить в <ph name="PRODUCT_NAME" />. - - Если правило настроено, вы можете разрешить или запретить вход в <ph name="PRODUCT_NAME" />. Если для правила установлено значение False, то приложения и расширения, в которых используется chrome.identity API, будут недоступны. Мы рекомендуем выбрать правило <ph name="SYNC_DISABLED_POLICY_NAME" />.</translation> <translation id="5755002458331714762">Поддержка Web Components v0 API (Shadow DOM v0, Custom Elements v0 и HTML Imports) прекратилась в 2018 году, а начиная с версии M80 эти API по умолчанию отключены. Это правило позволяет выборочно включать их в Chrome снова вплоть до версии M84. Если для правила задано значение True, функции Web Components v0 API будут включены для всех сайтов. @@ -6128,14 +6111,6 @@ Если правило включено или не настроено, преобразование единиц измерения с помощью функции "Быстрые ответы" будет разрешено. Если правило отключено, преобразование единиц измерения с помощью функции "Быстрые ответы" будет запрещено.</translation> <translation id="7587345076013230465">Предлагать пользователю выбрать сертификат клиента, если правилу автоматического выбора соответствует несколько сертификатов на экране входа</translation> -<translation id="7590188804371204512">Это правило контролирует установку внешних расширений. - - Если параметр включен, установка внешних расширений блокируется. - - Если параметр отключен или не настроен, внешние расширения можно устанавливать. - - Подробная информация о внешних расширениях, в том числе об их установке, приведена на этой странице: https://developer.chrome.com/apps/external_extensions. - </translation> <translation id="759957074386651883">Настройки Безопасного просмотра</translation> <translation id="7604169113182304895">Вы не можете принудить приложения Android соблюдать правила в отношении этого списка.</translation> <translation id="7612157962821894603">Системные настройки, действующие при запуске <ph name="PRODUCT_NAME" /></translation>
diff --git a/components/policy/resources/policy_templates_th.xtb b/components/policy/resources/policy_templates_th.xtb index 6fefb9e0..a7f4679b 100644 --- a/components/policy/resources/policy_templates_th.xtb +++ b/components/policy/resources/policy_templates_th.xtb
@@ -918,17 +918,6 @@ <translation id="1962864958436828230">ตั้งขีดจำกัดข้อมูลขนาดเล็กสำหรับข้อจำกัดของคลิปบอร์ดเพื่อป้องกันข้อมูลรั่วไหล</translation> <translation id="1964634611280150550">ปิดใช้งานโหมดไม่ระบุตัวตน</translation> <translation id="1964802606569741174">นโยบายนี้ไม่มีผลสำหรับแอป YouTube ของ Android หากมีการใช้โหมดปลอดภัยใน YouTube ควรยกเลิกการอนุญาตการติดตั้งแอป YouTube ใน Android</translation> -<translation id="1965363065727209968">โดยทั่วไปแล้ว setTimeout(…, 0) จะใช้เพื่อแบ่งงาน JavaScript ที่ยาว - เมื่อตั้งค่านโยบายนี้เป็น "เปิดใช้" ระบบจะไม่บีบ setTimeouts และ setIntervals ที่มีช่วงเวลาน้อยกว่า 4 มิลลิวินาทีมากเกินไป - การตั้งค่าดังกล่าวจะช่วยปรับปรุงประสิทธิภาพในระยะสั้น แต่สุดท้ายเว็บไซต์ที่ละเมิด API จะยังคงถูกบีบ setTimeouts ไว้ - - ซึ่งอาจทำให้ลำดับงานของบางหน้าเว็บเปลี่ยนไปได้ จนเกิดลักษณะการทำงานที่ไม่ได้คาดไว้ในเว็บไซต์ที่อาศัยการเรียงลำดับงานในบางรูปแบบ - นอกจากนี้ยังอาจส่งผลต่อเว็บไซต์ที่มี setTimeout() จำนวนมากที่มีการใช้ระยะหมดเวลาที่ 0 มิลลิวินาทีด้วย เช่น ทำให้โหลดของ CPU มากขึ้น - - สำหรับผู้ใช้ที่ไม่ได้ตั้งค่านโยบายนี้ไว้ <ph name="PRODUCT_NAME" /> จะทยอยทำการเปลี่ยนแปลงทีละน้อยในเวอร์ชันเสถียร - - นโยบายนี้เป็นนโยบายชั่วคราวซึ่งจะถูกนำออกใน <ph name="PRODUCT_NAME" /> 107 กำหนดเวลานี้อาจเลื่อนออกไปได้หากมีบริษัทที่ยังคงต้องการใช้จำนวนมาก - </translation> <translation id="1967334955994230472">ปิดใช้โปรเจ็กเตอร์</translation> <translation id="1969212217917526199">ลบล้างนโยบายในเวอร์ชันการแก้ปัญหาของโฮสต์การเข้าถึงระยะไกล @@ -4074,7 +4063,6 @@ <translation id="5475361623548884387">เปิดใช้งานการพิมพ์</translation> <translation id="547601067149622666">ไม่อนุญาตโฆษณาในเว็บไซต์ที่มีโฆษณาที่แทรก</translation> <translation id="5476152378885134514">บล็อกคลิปบอร์ดในเว็บไซต์เหล่านี้</translation> -<translation id="5478734531226638813">การตั้งค่านโยบายจะปิดใช้การอัปเดตแอป Chrome Kiosk ในเซสชัน (ซึ่งใช้ URL อัปเดตจากไฟล์ Manifest ของส่วนขยาย) และให้เพียงแค่ CRX ดึงข้อมูลล่วงหน้าได้ตามกลไกการอัปเดต</translation> <translation id="5480380613778757009">หากปิดใช้นโยบายนี้หรือไม่ได้ตั้งค่า การตั้งค่าการแสดงผลทั้งหมดที่ตั้งค่าไว้ในเซสชันผู้เยี่ยมชมที่มีการจัดการจะรีเซ็ตทันทีเมื่อจบเซสชัน หากตั้งค่านโยบายนี้เป็น "จริง" พร็อพเพอร์ตี้การแสดงผลจะคงอยู่หลังออกจากเซสชันผู้เยี่ยมชมที่มีการจัดการ</translation> <translation id="5483065054530244863">อนุญาตใบรับรองที่มีการรับรองของ SHA-1 ที่ออกโดย Trust Anchor ในพื้นที่</translation> <translation id="5487758664517243511">หากเปิดใช้การตั้งค่านี้ ผู้ใช้ที่เลือกใช้ฮับโทรศัพท์อยู่แล้วจะทำงานต่างๆ เช่น ดูหน้าเว็บของโทรศัพท์ใน Chrome OS ต่อไปได้ @@ -4313,11 +4301,6 @@ ดูข้อมูลโดยละเอียดเกี่ยวกับรูปแบบ URL ที่ถูกต้องได้ที่ https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns</translation> <translation id="5749396052108288586">นโยบายนี้เลิกใช้งานแล้ว โปรดใช้ <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" /> แทน</translation> <translation id="574983287620584622">เปิดใช้แป้นพิมพ์ลัดของฟีเจอร์การช่วยเหลือพิเศษในหน้าจอการเข้าสู่ระบบ</translation> -<translation id="5749873635525257317">นโยบายนี้เลิกใช้งานแล้ว ลองใช้ BrowserSignin แทน - - อนุญาตให้ผู้ใช้ลงชื่อเข้าใช้ <ph name="PRODUCT_NAME" /> - - หากตั้งค่านโยบายนี้ คุณกำหนดค่าได้ว่าจะอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้ <ph name="PRODUCT_NAME" /> หรือไม่ การตั้งค่านโยบายนี้เป็น "เท็จ" จะเป็นการป้องกันแอปและส่วนขยายที่ใช้ chrome.identity API ไม่ให้ทำงาน คุณจึงอาจต้องใช้ <ph name="SYNC_DISABLED_POLICY_NAME" /> แทน</translation> <translation id="5755002458331714762"> Web Components v0 API (Shadow DOM v0, Custom Elements v0 และ HTML Imports) เลิกใช้งานไปในปี 2018 และถูกปิดใช้งานโดยค่าเริ่มต้นเริ่มตั้งแต่ในเวอร์ชัน M80 นโยบายนี้อนุญาตให้เลือกเปิดใช้ฟีเจอร์เหล่านี้ได้อีกครั้งจนถึงเวอร์ชัน M84 หากตั้งค่านโยบายนี้เป็น "จริง" จะเปิดใช้ฟีเจอร์ Web Components v0 สำหรับทุกเว็บไซต์ @@ -6044,14 +6027,6 @@ หากเปิดใช้นโยบายหรือไม่ได้ตั้งค่า ระบบจะเปิดใช้การแปลงหน่วยของคำตอบด่วน หากปิดใช้นโยบาย ระบบจะปิดใช้การแปลงหน่วยของคำตอบด่วน</translation> <translation id="7587345076013230465">แสดงข้อความแจ้งให้ผู้ใช้เลือกใบรับรองไคลเอ็นต์เมื่อนโยบายการเลือกอัตโนมัติตรงกับใบรับรองหลายรายการบนหน้าจอการลงชื่อเข้าใช้</translation> -<translation id="7590188804371204512">ควบคุมการติดตั้งส่วนขยายจากภายนอก - - การเปิดใช้การตั้งค่านี้จะบล็อกไม่ให้ติดตั้งส่วนขยายจากภายนอก - - การปิดใช้หรือไม่ตั้งค่าการตั้งค่านี้จะอนุญาตให้ติดตั้งส่วนขยายจากภายนอกได้ - - ดูเอกสารประกอบเกี่ยวกับส่วนขยายจากภายนอกและการติดตั้งได้ที่ https://developer.chrome.com/apps/external_extensions - </translation> <translation id="759957074386651883">การตั้งค่า Safe Browsing</translation> <translation id="7604169113182304895">แอป Android อาจเลือกใช้รายการด้วยความสมัครใจ คุณไม่สามารถบังคับแอปให้เลือกได้</translation> <translation id="7612157962821894603">การตั้งค่าสถานะที่ใช้ทั้งระบบที่จะนำไปใช้กับการเริ่มต้นใช้งาน <ph name="PRODUCT_NAME" /></translation>
diff --git a/components/policy/resources/policy_templates_tr.xtb b/components/policy/resources/policy_templates_tr.xtb index 237e119..82cca1c 100644 --- a/components/policy/resources/policy_templates_tr.xtb +++ b/components/policy/resources/policy_templates_tr.xtb
@@ -932,17 +932,6 @@ <translation id="1962864958436828230">Veri sızıntısını önleme amaçlı pano kısıtlaması için minimum boyut sınırını belirleyin</translation> <translation id="1964634611280150550">Gizli mod devre dışı</translation> <translation id="1964802606569741174">Bu politikanın Android YouTube uygulaması üzerinde hiçbir etkisi yoktur. YouTube'da Güvenlik Modu uygulanacaksa Android YouTube uygulamasının yüklenmesine izin verilmemelidir.</translation> -<translation id="1965363065727209968">setTimeout(…, 0), genellikle uzun JavaScript görevlerinin dökümünü almak için kullanılır. - Politika, Etkin değerine ayarlandığında 4 ms'den kısa bir aralığa sahip setTimeout'lar ve setInterval'lar yoğun şekilde zaman aşımına uğramaz. - Bu şekilde kısa dönem performansı iyileştirilir ancak, API'yi kötüye kullanan web sitelerinin setTimeout'ları nihayetinde zaman aşımına uğrar. - - Bu, bir web sayfasındaki görev sıralamasını değiştirerek bir şekilde belirli bir sıralamaya bağlı olan sitelerde beklenmeyen davranışlara yol açabilir. - Ayrıca, 0 ms zaman aşımına sahip çok sayıda setTimeout() kullanımı içeren siteyi de etkileyebilir. (ör. CPU yükünü artırabilir.) - - <ph name="PRODUCT_NAME" />, bu politikanın ayarlanmadığı kullanıcılar için değişikliği kararlı kanalında kademeli olarak kullanıma sunacaktır. - - Bu politika geçicidir ve <ph name="PRODUCT_NAME" /> 107 sürümünde kaldırılması planlanmaktadır. Kuruluşların ihtiyaç duyması halinde bu süre uzatılabilir. - </translation> <translation id="1967334955994230472">Projektörü devre dışı bırak</translation> <translation id="1969212217917526199">Uzaktan erişim ana makinesinin Hata Ayıklama yapılarındaki politikaları geçersiz kılar. @@ -4107,7 +4096,6 @@ <translation id="5475361623548884387">Yazdırmayı etkinleştir</translation> <translation id="547601067149622666">Arayan giren reklamların yer aldığı sitelerde reklamlara izin verme</translation> <translation id="5476152378885134514">Bu sitelerde panoyu engelle</translation> -<translation id="5478734531226638813">Politika ayarlandığında, uzantı manifestindeki güncelleme URL'sini kullanan oturum içi Kiosk Chrome uygulamaları güncellemesi devre dışı bırakılır ve güncelleme mekanizması olarak yalnızca CRX önceden getirme işlemi kalır.</translation> <translation id="5480380613778757009">Bu politika, devre dışı bırakılır veya ayarlanmazsa Yönetilen misafir oturumunda ayarlanan tüm görüntü ayarları, oturum biter bitmez sıfırlanır. Bu politika, Doğru değerine ayarlanırsa yönetilen misafir oturumundan çıkıldıktan sonra görüntü özellikleri tutulur.</translation> <translation id="5483065054530244863">Yerel güven bağlantıları tarafından yayınlanan SHA-1 imzalı sertifikalara izin ver</translation> <translation id="5487758664517243511">Bu ayar etkinleştirilirse Telefon Merkezi'ne zaten kaydolmuş kullanıcılar, telefonlarının web sayfalarını ChromeOS'te görüntülemek gibi görevlere devam edebilirler. @@ -4348,11 +4336,6 @@ Geçerli URL kalıpları hakkında ayrıntılı bilgi için https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns adresine bakabilirsiniz.</translation> <translation id="5749396052108288586">Bu politika kullanımdan kaldırılmıştır. Lütfen bunun yerine <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" /> politikasını kullanın.</translation> <translation id="574983287620584622">Giriş ekranında erişilebilirlik özellikleri kısayollarını etkinleştir</translation> -<translation id="5749873635525257317">Bu politika kullanımdan kaldırılmıştır. Bunun yerine BrowserSignin'i kullanabilirsiniz. - - Kullanıcının <ph name="PRODUCT_NAME" /> ürününde oturum açmasına olanak tanır. - - Bu politikayı ayarlarsanız, bir kullanıcının <ph name="PRODUCT_NAME" /> ürününde oturum açmasına izin verilip verilmeyeceğini yapılandırabilirsiniz. Bu politika "Yanlış" değerine ayarlanırsa, chrome.identity API'yi kullanan uygulama ve uzantıların çalışması engelleneceğinden, onun yerine <ph name="SYNC_DISABLED_POLICY_NAME" /> politikasını kullanmanız daha iyi olabilir.</translation> <translation id="5755002458331714762"> Web Bileşenleri v0 API'leri (Gölge DOM v0, Özel Öğeler v0 ve HTML İçe Aktarmaları) 2018'de kullanımdan kaldırılmıştır ve M80 düzeyinden itibaren varsayılan olarak devre dışıdır. Bu politika, bu özelliklerin M84'e kadar seçilerek yeniden etkinleştirilmesine olanak tanır. Bu politika True (Doğru) değerine ayarlanırsa Web Bileşenleri v0 özellikleri tüm siteler için etkinleştirilir. @@ -6101,14 +6084,6 @@ Politika etkinleştirilirse veya ayarlanmadan bırakılırsa Bil bakalım birim dönüşümü etkinleştirilir. Politika devre dışı bırakılırsa Bil bakalım birim dönüşümü devre dışı bırakılır.</translation> <translation id="7587345076013230465">Otomatik seçim politikası, oturum açma ekranında birden fazla sertifikayla eşleştiğinde kullanıcıdan istemci sertifikasını seçmesini iste</translation> -<translation id="7590188804371204512">Harici uzantıların yüklenmesini kontrol eder. - - Bu ayar etkinleştirilirse harici uzantıların yüklenmesi engellenir. - - Bu ayar devre dışı bırakılır veya ayarlanmazsa harici uzantıların yüklenmesine izin verilir. - - Harici uzantılar ve yüklenmeleri hakkında bilgiyi https://developer.chrome.com/apps/external_extensions adresinde bulabilirsiniz. - </translation> <translation id="759957074386651883">Güvenli Tarama ayarları</translation> <translation id="7604169113182304895">Android uygulamaları, kendi tercihleriyle bu listeye uymaya karar verebilir. Bu uygulamaları listeye uymaya zorlayamazsınız.</translation> <translation id="7612157962821894603"><ph name="PRODUCT_NAME" /> başlatılırken uygulanan sistem genelindeki işaretler</translation>
diff --git a/components/policy/resources/policy_templates_uk.xtb b/components/policy/resources/policy_templates_uk.xtb index bc90b5d..ab0ca74c 100644 --- a/components/policy/resources/policy_templates_uk.xtb +++ b/components/policy/resources/policy_templates_uk.xtb
@@ -945,17 +945,6 @@ <translation id="1962864958436828230">Установити мінімальний обсяг для обмеження буфера обміну, пов’язаного із запобіганням витоку даних</translation> <translation id="1964634611280150550">Режим анонімного перегляду вимкнено</translation> <translation id="1964802606569741174">Це правило не впливає на додаток YouTube на пристрої Android. Щоб для YouTube використовувався Безпечний режим, забороніть встановлення додатка YouTube на пристрої Android.</translation> -<translation id="1965363065727209968">Функція setTimeout(…, 0) зазвичай використовується, щоб розділяти великі завдання JavaScript на менші. - Якщо правило ввімкнено, значення функцій setTimeouts і setIntervals з інтервалом, меншим ніж 4 мс, обмежуються не так швидко. - Це покращує ефективність у короткостроковій перспективі, але на веб-сайтах, які зловживають API, значення функції setTimeouts будуть обмежуватися. - - Це може вплинути на послідовність виконання завдань на веб-сторінці. Через це на сайтах, що якимось чином залежать від певної послідовності, може відбуватися несподівана поведінка. - Також це може впливати на сайти, що містять багато функцій setTimeout() з часом очікування 0 мс (зокрема може зрости навантаження на ЦП). - - Якщо правило не вказано, <ph name="PRODUCT_NAME" /> запускатиме цю зміну поступово в стабільній версії. - - Це тимчасове правило, яке планується вилучити в <ph name="PRODUCT_NAME" /> 107. Кінцевий термін може бути подовжено, якщо це потрібно для підприємств. - </translation> <translation id="1967334955994230472">Вимкнути Projector</translation> <translation id="1969212217917526199">Замінює правила налагоджувальних складань хосту віддаленого доступу. @@ -1738,6 +1727,9 @@ <translation id="274769314493317695">Якщо для правила <ph name="BULK_PRINTERS_ACCESS_MODE_POLICY_NAME" /> вибрано параметр <ph name="PRINTERS_WHITELIST" />, тоді налаштування <ph name="NATIVE_PRINTERS_BULK_WHITELIST_POLICY_NAME" /> визначає, які принтери можна використовувати. Користувачам доступні лише принтери з переліченими в правилі ідентифікаторами. Ідентифікатори мають відповідати полю <ph name="ID_FIELD" /> або <ph name="GUID_FIELD" /> у файлі, указаному в правилі <ph name="NATIVE_PRINTERS_BULK_CONFIGURATION_POLICY_NAME" />. Це правило більше не підтримується. Натомість використовуйте <ph name="PRINTERS_BULK_ALLOWLIST_POLICY_NAME" />.</translation> +<translation id="2751959596774212778">У незахищених ресурсах інтерфейс WebSQL вимкнено за умовчанням, починаючи з версії M107. Його буде повністю вилучено у версії M110. + Якщо це правило не налаштувати або вибрати для нього значення false (неправда), у незахищених ресурсах інтерфейс WebSQL і надалі буде ввімкнено, поки застосовується версія M106, та вимкнено після переходу на версію M107. + Якщо для цього правила вибрати значення true (правда), у незахищених ресурсах WebSQL буде ввімкнено.</translation> <translation id="2752046642026416564">Якщо це правило ввімкнено або не налаштовано, <ph name="PRODUCT_NAME" /> може використовувати хости для обміну повідомленнями з оригінальними додатками, установлені на рівні користувача. Якщо це правило вимкнено, <ph name="PRODUCT_NAME" /> може використовувати такі хости, лише якщо вони встановлені на рівні системи.</translation> @@ -4135,7 +4127,6 @@ <translation id="5475361623548884387">Увімкнути друк</translation> <translation id="547601067149622666">Заборонити рекламу на сайтах із нав'язливими оголошеннями</translation> <translation id="5476152378885134514">Заблокувати буфер обміну на цих сайтах</translation> -<translation id="5478734531226638813">Якщо це правило налаштувати, оновлення додатків-терміналів Chrome під час сеансу буде вимкнено (коли використовується URL-адреса оновлення з маніфесту розширення). Єдиним механізмом оновлення буде попереднє завантаження CRX.</translation> <translation id="5480380613778757009">Якщо це правило вимкнено або не налаштовано, усі налаштування екрана, установлені під час керованого сеансу в режимі "Гість", буде скинуто, щойно сеанс завершиться. Якщо для нього вибрано значення True, властивості екрана залишаться після завершення сеансу.</translation> <translation id="5483065054530244863">Дозволяти підписані сертифікати SHA-1, видані локальними ключами довіри</translation> <translation id="5487758664517243511">Якщо ввімкнути це налаштування, користувачі, які вже активували функцію "Керування телефоном", зможуть продовжувати виконувати на пристрої з ОС Chrome завдання, які почали на телефоні, наприклад переглядати веб-сторінки. @@ -4385,11 +4376,6 @@ Докладніше про дійсні шаблони URL-адрес можна дізнатися на сторінці https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="5749396052108288586">Це правило не підтримується. Натомість використовуйте <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation> <translation id="574983287620584622">Увімкнути спеціальні комбінації клавіш на екрані входу</translation> -<translation id="5749873635525257317">Це правило не підтримується. Натомість використовуйте правило BrowserSignin. - - Дає змогу користувачам входити в <ph name="PRODUCT_NAME" />. - - Налаштування цього правила дають змогу дозволяти або забороняти користувачам входити в <ph name="PRODUCT_NAME" />. Якщо вибрати значення False, додатки й розширення, які використовують chrome.identity API, не працюватимуть. Тому радимо натомість використовувати правило <ph name="SYNC_DISABLED_POLICY_NAME" />.</translation> <translation id="5755002458331714762"> Web Components v0 API (Shadow DOM v0, Custom Elements v0 та HTML Imports) не підтримуються з 2018 року. Їх вимкнено за умовчанням у M80 і новіших версіях. Це правило дає змогу вибірково повторно вмикати ці функції у версіях до M84. Якщо для цього правила вибрано значення true, функції веб-компонентів версії v0 буде ввімкнено для всіх сайтів. @@ -5588,6 +5574,7 @@ Якщо вибрано опцію "U2F", поведінка вбудованого другого фактора залежить від характеристик ключа безпеки FIDO U2F. Якщо вибрано опцію "U2F_EXTENDED", вбудований другий фактор забезпечує функції U2F і деякі розширення для особистого підтвердження.</translation> +<translation id="6998179760789945134">Вимкнути інтерфейс WebSQL у незахищених ресурсах, якщо його не ввімкнено за допомогою експериментального параметра Chrome.</translation> <translation id="6999948519306285655">Це правило більше не підтримується. Натомість використовуйте правило <ph name="PROXY_SETTINGS_POLICY_NAME" />. За допомогою налаштувань цього правила можна вказати URL-адресу файлу .pac проксі-сервера. Це правило діє, лише якщо правило <ph name="PROXY_SETTINGS_POLICY_NAME" /> не вказане, а для правила <ph name="PROXY_MODE_POLICY_NAME" /> вибрано значення <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" />. @@ -6141,14 +6128,6 @@ Якщо правило ввімкнути або не налаштувати, конвертування одиниць у швидких відповідях буде ввімкнено. Якщо його вимкнути, цю функцію буде вимкнено.</translation> <translation id="7587345076013230465">Просити користувача вибрати сертифікат клієнта на екрані входу, коли правило автоматичного вибору відповідає декільком сертифікатам</translation> -<translation id="7590188804371204512">Встановлення зовнішніх розширень відстежується. - - Якщо це налаштування ввімкнено, встановлення зовнішніх розширень блокується. - - Якщо це правило вимкнено або не налаштовано, встановлення зовнішніх розширень дозволено. - - Зовнішні розширення та їхнє встановлення указані на сторінці https://developer.chrome.com/apps/external_extensions. - </translation> <translation id="759957074386651883">Налаштування Безпечного перегляду</translation> <translation id="7604169113182304895">Додатки Android можуть вибирати, чи використовувати цей список. Ви не можете вплинути на це.</translation> <translation id="7612157962821894603">Позначки на рівні системи, що застосовуються під час запуску <ph name="PRODUCT_NAME" /></translation> @@ -7352,6 +7331,7 @@ <translation id="8919100556245407184">Період часу (у днях) після припинення автоматичних оновлень, коли користувач вийде з облікового запису, якщо версія <ph name="PRODUCT_OS_NAME" /> старіша за вказану в <ph name="CHROMEOS_VERSION_PROPERTY_NAME" /></translation> <translation id="8919369436496201075">Дозволити пристрою отримувати оновлення довгострокової підтримки</translation> <translation id="8921669704201370845">Увімкнути хмарне звітування <ph name="PRODUCT_NAME" /> для керованого профілю</translation> +<translation id="8922494933893518624">Примусово вмикати WebSQL у незахищених ресурсах.</translation> <translation id="8930064580550462145"><ph name="PRODUCT_OS_NAME" /> може автентифікувати користувачів під час входу на заблокованому екрані за даними із сервера (онлайн) або за допомогою кешованих паролів (офлайн). Якщо для правила вибрати значення -2, воно збігатиметься зі значенням ліміту часу для входу офлайн на заблокованому екрані з правила <ph name="POLICY" />.
diff --git a/components/policy/resources/policy_templates_vi.xtb b/components/policy/resources/policy_templates_vi.xtb index 7f450b7d..1047a142 100644 --- a/components/policy/resources/policy_templates_vi.xtb +++ b/components/policy/resources/policy_templates_vi.xtb
@@ -949,17 +949,6 @@ <translation id="1962864958436828230">Đặt giới hạn kích thước tối thiểu để ngăn chặn rò rỉ dữ liệu theo quy tắc hạn chế khay nhớ tạm</translation> <translation id="1964634611280150550">Đã tắt chế độ ẩn danh</translation> <translation id="1964802606569741174">Chính sách này không ảnh hưởng đến ứng dụng YouTube trên Android. Nếu bị buộc phải sử dụng Chế độ an toàn trên YouTube thì việc cài đặt ứng dụng YouTube trên Android sẽ không được cho phép.</translation> -<translation id="1965363065727209968">setTimeout(…, 0) thường được dùng để chia nhỏ các tác vụ JavaScript dài. - Khi bạn Bật chính sách này, thì setTimeouts và setIntervals có khoảng thời gian nhỏ hơn 4 mili giây sẽ không được kẹp một cách triệt để. - Điều này giúp cải thiện hiệu suất trong khoảng thời gian ngắn, nhưng setTimeouts của những trang web lạm dụng API này cuối cùng vẫn sẽ bị kẹp. - - Nếu vậy, thứ tự tác vụ trên trang web có thể thay đổi, dẫn đến hành vi không mong muốn trên những trang web phụ thuộc vào một thứ tự nhất định theo một cách nào đó. - Những trang web có nhiều hàm setTimeout() sử dụng thời gian chờ 0 mili giây, ví dụ như tăng tải CPU, cũng sẽ bị ảnh hưởng. - - Đối với người dùng không đặt chính sách này, <ph name="PRODUCT_NAME" /> sẽ ra mắt thay đổi từng bước trên kênh chính thức. - - Đây là một chính sách tạm thời và dự kiến sẽ được loại bỏ trong <ph name="PRODUCT_NAME" /> 107. Thời hạn này có thể được lùi nếu các doanh nghiệp có nhu cầu. - </translation> <translation id="1967334955994230472">Tắt Máy chiếu</translation> <translation id="1969212217917526199">Ghi đè chính sách trên bản dựng Gỡ lỗi của máy chủ truy cập từ xa. @@ -1741,6 +1730,9 @@ <translation id="274769314493317695">Nếu bạn chọn <ph name="PRINTERS_WHITELIST" /> cho <ph name="BULK_PRINTERS_ACCESS_MODE_POLICY_NAME" />, thì việc đặt <ph name="NATIVE_PRINTERS_BULK_WHITELIST_POLICY_NAME" /> sẽ chỉ định những máy in mà người dùng có thể sử dụng. Người dùng chỉ có thể sử dụng những máy in có mã nhận dạng khớp với giá trị trong chính sách này. Các mã nhận dạng này phải tương ứng với trường <ph name="ID_FIELD" /> hoặc <ph name="GUID_FIELD" /> ở tệp được chỉ định trong <ph name="NATIVE_PRINTERS_BULK_CONFIGURATION_POLICY_NAME" />. Chính sách này không còn dùng nữa, vui lòng sử dụng <ph name="PRINTERS_BULK_ALLOWLIST_POLICY_NAME" />.</translation> +<translation id="2751959596774212778">WebSQL trong bối cảnh không an toàn bị tắt theo mặc định kể từ M107 và sẽ bị xoá hẳn trong M110. + Nếu bạn đặt chính sách này thành sai hoặc không đặt, thì WebSQL trong bối cảnh không an toàn vẫn bật cho đến cuối M106, sau đó sẽ tắt kể từ M107. + Nếu bạn đặt chính sách này thành đúng thì WebSQL trong bối cảnh không an toàn sẽ bật.</translation> <translation id="2752046642026416564">Nếu bạn không đặt hoặc đặt chính sách này thành Bật, thì <ph name="PRODUCT_NAME" /> có thể sử dụng các máy chủ nhắn tin gốc đã cài đặt ở cấp người dùng. Nếu bạn đặt chính sách này thành Tắt, <ph name="PRODUCT_NAME" /> chỉ có thể sử dụng các máy chủ này nếu được cài đặt ở cấp hệ thống.</translation> @@ -4133,7 +4125,6 @@ <translation id="5475361623548884387">Bật tính năng in</translation> <translation id="547601067149622666">Không cho phép quảng cáo trên các trang web chứa quảng cáo xâm nhập</translation> <translation id="5476152378885134514">Chặn bảng nhớ tạm trên những trang web này</translation> -<translation id="5478734531226638813">Nếu bạn đặt chính sách này, thì hệ thống sẽ dừng việc cập nhật các ứng dụng Kiosk Chrome trong phiên (sử dụng URL cập nhật từ tệp kê khai tiện ích) và chỉ sử dụng tính năng tìm nạp trước CRX làm cơ chế cập nhật.</translation> <translation id="5480380613778757009">Nếu bạn tắt hoặc không đặt chính sách này, thì tất cả những chế độ cài đặt hiển thị đã đặt trong Phiên khách được quản lý sẽ được đặt lại ngay khi phiên này kết thúc. Nếu bạn đặt chính sách này thành Bật, thì các thuộc tính hiển thị sẽ vẫn giữ nguyên sau khi bạn thoát khỏi phiên khách được quản lý.</translation> <translation id="5483065054530244863">Cho phép các chứng chỉ SHA-1 có chữ ký do neo tin cậy cục bộ phát hành</translation> <translation id="5487758664517243511">Nếu bạn bật chế độ cài đặt này, người dùng đã chọn sử dụng Trung tâm điều khiển điện thoại sẽ có thể tiếp tục thực hiện những thao tác như xem trang web trên điện thoại qua ChromeOS. @@ -4384,11 +4375,6 @@ Để biết thông tin chi tiết về mẫu URL hợp lệ, vui lòng truy cập vào https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns.</translation> <translation id="5749396052108288586">Chính sách này không còn dùng nữa. Thay vào đó, vui lòng sử dụng <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />.</translation> <translation id="574983287620584622">Bật phím tắt của tính năng hỗ trợ tiếp cận trên màn hình đăng nhập</translation> -<translation id="5749873635525257317">Chính sách này không còn dùng nữa, thay vào đó, hãy cân nhắc sử dụng BrowserSignin. - - Cho phép người dùng đăng nhập vào <ph name="PRODUCT_NAME" />. - - Nếu đặt chính sách này, thì bạn có thể định cấu hình để cho phép hoặc không cho phép người dùng đăng nhập vào <ph name="PRODUCT_NAME" />. Việc tắt chính sách này sẽ khiến các ứng dụng và tiện ích sử dụng API chrome.identity ngừng hoạt động, thay vào đó, bạn nên dùng <ph name="SYNC_DISABLED_POLICY_NAME" />.</translation> <translation id="5755002458331714762"> Các API Thành phần web phiên bản 0 (Shadow DOM v0, Custom Elements v0 và HTML Imports) đã ngừng hoạt động vào năm 2018 và bị tắt theo mặc định kể từ M80. Theo chính sách này, bạn có thể lựa chọn (các) tính năng nào trong số này sẽ bật lại cho đến M84. Nếu bạn đặt chính sách này thành True, thì các tính năng của Thành phần web phiên bản 0 sẽ bật cho tất cả trang web. @@ -5565,6 +5551,7 @@ Nếu bạn chọn 'U2F', hai yếu tố đã tích hợp sẽ tuân theo thông số FIDO U2F. Nếu bạn chọn 'U2F_EXTENDED', hai yếu tố đã tích hợp sẽ cung cấp các chức năng của U2F cùng với một số tiện ích để chứng thực cá nhân.</translation> +<translation id="6998179760789945134">Tắt WebSQL trong bối cảnh không an toàn, trừ khi WebSQL được bật bởi Cờ Chrome.</translation> <translation id="6999948519306285655">Chính sách này không còn dùng nữa, vui lòng sử dụng <ph name="PROXY_SETTINGS_POLICY_NAME" />. Nếu đặt chính sách này, bạn có thể chỉ định URL dẫn tới một tệp proxy .pac. Chính sách này chỉ có hiệu lực nếu bạn chưa chỉ định chính sách <ph name="PROXY_SETTINGS_POLICY_NAME" /> và đã chọn <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> cho <ph name="PROXY_MODE_POLICY_NAME" />. @@ -6120,14 +6107,6 @@ Nếu bạn bật hoặc không đặt chính sách này, thì hệ thống sẽ bật tính năng chuyển đổi đơn vị của Thông tin nhanh. Nếu bạn tắt chính sách, thì hệ thống sẽ tắt tính năng chuyển đổi đơn vị của Thông tin nhanh.</translation> <translation id="7587345076013230465">Nhắc người dùng chọn chứng chỉ máy khách mỗi khi chính sách tự động chọn khớp với nhiều chứng chỉ trên màn hình đăng nhập</translation> -<translation id="7590188804371204512">Kiểm soát quá trình cài đặt tiện ích bên ngoài. - - Nếu bạn bật tùy chọn cài đặt này, các tiện ích bên ngoài sẽ bị chặn không cho cài đặt. - - Nếu bạn tắt hoặc không đặt tùy chọn cài đặt này, các tiện ích bên ngoài sẽ được phép cài đặt. - - Các tiện ích bên ngoài và cách cài đặt được nêu tại https://developer.chrome.com/apps/external_extensions. - </translation> <translation id="759957074386651883">Cài đặt Duyệt web an toàn</translation> <translation id="7604169113182304895">Các ứng dụng Android có thể chọn sử dụng danh sách này một cách tự nguyện. Bạn không thể buộc các ứng dụng đó sử dụng danh sách.</translation> <translation id="7612157962821894603">Cờ trên toàn hệ thống được áp dụng khi khởi động <ph name="PRODUCT_NAME" /></translation> @@ -7337,6 +7316,7 @@ <translation id="8919100556245407184">Thời gian (tính theo ngày) mà sau khi bài đăng hết hạn tự động cập nhật thì người dùng sẽ bị đăng xuất nếu phiên bản <ph name="PRODUCT_OS_NAME" /> cũ hơn phiên bản <ph name="CHROMEOS_VERSION_PROPERTY_NAME" /> được chỉ định</translation> <translation id="8919369436496201075">Cho phép thiết bị nhận bản cập nhật LTS (hỗ trợ dài hạn)</translation> <translation id="8921669704201370845">Bật tính năng báo cáo của <ph name="PRODUCT_NAME" /> trên đám mây qua hồ sơ được quản lý</translation> +<translation id="8922494933893518624">Buộc bật WebSQL trong bối cảnh không an toàn.</translation> <translation id="8930064580550462145">Trong khi đăng nhập qua màn hình khóa, <ph name="PRODUCT_OS_NAME" /> có thể xác thực với một máy chủ (trực tuyến) hoặc dùng mật khẩu lưu trong bộ nhớ đệm (ngoại tuyến). Khi bạn đặt chính sách này thành -2, chính sách này sẽ khớp với giá trị của giới hạn thời gian đăng nhập ngoại tuyến trên màn hình đăng nhập trong chính sách <ph name="POLICY" />.
diff --git a/components/policy/resources/policy_templates_zh-CN.xtb b/components/policy/resources/policy_templates_zh-CN.xtb index 0176e045..6b1390a9 100644 --- a/components/policy/resources/policy_templates_zh-CN.xtb +++ b/components/policy/resources/policy_templates_zh-CN.xtb
@@ -916,17 +916,6 @@ <translation id="1962864958436828230">设定数据大小下限以与旨在预防数据泄露的剪贴板限制规则搭配使用</translation> <translation id="1964634611280150550">隐身模式已停用</translation> <translation id="1964802606569741174">此政策对 Android 版 YouTube 应用没有任何影响。如果应在 YouTube 中强制启用安全模式,则应禁止安装 Android 版 YouTube 应用。</translation> -<translation id="1965363065727209968">setTimeout(…, 0) 通常用于中断耗时较长的 JavaScript 任务。 - 如果此政策设为 Enabled,系统不会主动将时间间隔小于 4 毫秒的 setTimeout 和 setInterval 强制设为下限值。 - 这可以提升短时间内的性能,但如果网站滥用该 API,其 setTimeout 最终仍会被强制设为下限值。 - - 这可能会改变网页上的任务排序,从而导致以某种方式依赖于特定顺序的网站上出现意外行为。 - 这可能还会影响大量使用超时设为 0 毫秒的 setTimeout() 的网站,例如增加 CPU 负载。 - - 对于未设置此政策的用户,<ph name="PRODUCT_NAME" /> 将在稳定渠道上逐步推出相应变更。 - - 这是一项暂时性政策,我们计划在 <ph name="PRODUCT_NAME" /> 107 中将其移除。如果众多企业需要此政策,这个期限可能会延长。 - </translation> <translation id="1967334955994230472">停用投影仪</translation> <translation id="1969212217917526199">覆盖与远程访问主机的调试版本号相关的政策。 @@ -1697,6 +1686,9 @@ <translation id="274769314493317695">如果为 <ph name="BULK_PRINTERS_ACCESS_MODE_POLICY_NAME" /> 选择了 <ph name="PRINTERS_WHITELIST" />,您便可通过设置 <ph name="NATIVE_PRINTERS_BULK_WHITELIST_POLICY_NAME" /> 来指定用户可以使用哪些打印机。用户将只能使用那些符合条件(ID 与此政策中所列的值匹配)的打印机。ID 必须与 <ph name="NATIVE_PRINTERS_BULK_CONFIGURATION_POLICY_NAME" /> 所指定文件内的<ph name="ID_FIELD" />或<ph name="GUID_FIELD" />字段相符。 此政策已被弃用,请改用 <ph name="PRINTERS_BULK_ALLOWLIST_POLICY_NAME" />。</translation> +<translation id="2751959596774212778">自 M107 起,不安全情境中的 WebSQL 默认处于关闭状态,并将在 M110 中被完全移除。 + 如果此政策设为 false 或未设置,不安全情境中的 WebSQL 将保持开启状态至 M106 结束时,然后自 M107 起会默认处于关闭状态。 + 如果此政策设为 true,系统将启用不安全情境中的 WebSQL。</translation> <translation id="2752046642026416564">如果此政策已启用或未设置,<ph name="PRODUCT_NAME" /> 便可使用在用户级安装的本地消息传递主机。 如果此政策已停用,<ph name="PRODUCT_NAME" /> 将只能使用在系统级安装的本地消息传递主机。</translation> @@ -4068,7 +4060,6 @@ <translation id="5475361623548884387">启用打印功能</translation> <translation id="547601067149622666">不允许含侵扰性广告的网站展示广告</translation> <translation id="5476152378885134514">禁止这些网站使用剪贴板</translation> -<translation id="5478734531226638813">如果设置此政策,系统将禁止在会话期间更新自助服务终端 Chrome 应用(此类更新使用扩展程序清单中的更新网址),仅保留 CRX 预提取作为更新机制。</translation> <translation id="5480380613778757009">如果此政策已停用或未设置,系统将会在受管理访客会话完成后立即重置该会话中已设置的所有显示设置。如果此政策设为 True,系统将会在退出受管理访客会话后保留该会话的显示属性。</translation> <translation id="5483065054530244863">允许使用由本地信任锚颁发的 SHA-1 签名证书</translation> <translation id="5487758664517243511">如果启用此设置,已选择启用 Phone Hub 功能的用户将能够在 Chrome 操作系统中继续执行尚未在手机中完成的任务(例如查看手机中的网页)。 @@ -4308,11 +4299,6 @@ 如需详细了解有效网址格式,请访问 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。</translation> <translation id="5749396052108288586">此政策已被弃用。请改用 <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" />。</translation> <translation id="574983287620584622">在登录屏幕上启用无障碍功能快捷方式</translation> -<translation id="5749873635525257317">此政策已被弃用,请考虑改用 BrowserSignin。 - - 允许用户登录 <ph name="PRODUCT_NAME" />。 - - 如果您设置了此政策,则可配置是否允许用户登录 <ph name="PRODUCT_NAME" />。如果此政策设为“False”,使用 chrome.identity API 的应用和扩展程序将无法正常运行,所以您最好改用 <ph name="SYNC_DISABLED_POLICY_NAME" />。</translation> <translation id="5755002458331714762"> Web Components v0 API(Shadow DOM v0、Custom Elements v0 和 HTML Imports)已于 2018 年被弃用,并且从 M80 起就已默认处于停用状态。此政策允许有选择地重新启用这些功能直至 M84。 如果此政策设为 True,系统会为所有网站启用 Web Components v0 功能。 @@ -5486,6 +5472,7 @@ 如果选择“U2F”,集成的双重身份验证将会按照 FIDO U2F 规范发挥作用。 如果选择“U2F_EXTENDED”,集成的双重身份验证将不仅会提供 U2F 功能,还会提供一些扩展功能以便进行个人验证。</translation> +<translation id="6998179760789945134">停用不安全情境中的 WebSQL,除非已通过 Chrome flag 启用。</translation> <translation id="6999948519306285655">此政策已被弃用,请改用 <ph name="PROXY_SETTINGS_POLICY_NAME" />。 通过设置此政策,您可以指定代理 .pac 文件的网址。此政策仅在 <ph name="PROXY_SETTINGS_POLICY_NAME" /> 政策未被指定并且您选择了 <ph name="PROXY_MODE_POLICY_NAME" /> 中的 <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> 时生效。 @@ -6039,14 +6026,6 @@ 如果此政策已启用或未设置,系统将启用快速解答单位换算功能。 如果此政策已停用,系统将停用快速解答单位换算功能。</translation> <translation id="7587345076013230465">当登录屏幕上有多份客户端证书与自动选择政策匹配时,提示用户做出选择</translation> -<translation id="7590188804371204512">控制外部扩展程序的安装。 - - 启用此设置会禁止安装外部扩展程序。 - - 停用或不设定此设置则会允许安装外部扩展程序。 - - 要查看外部扩展程序及其安装方法,请参阅 https://developer.chrome.com/apps/external_extensions 上的文档。 - </translation> <translation id="759957074386651883">安全浏览设置</translation> <translation id="7604169113182304895">Android 应用可能会主动选择采纳该列表。您无法强制此类应用采纳该列表。</translation> <translation id="7612157962821894603">在 <ph name="PRODUCT_NAME" /> 启动时应用于整个系统的设置</translation> @@ -7231,6 +7210,7 @@ <translation id="8919100556245407184">如果 <ph name="PRODUCT_OS_NAME" />版本低于指定的 <ph name="CHROMEOS_VERSION_PROPERTY_NAME" />,系统会在自动更新到期日已过多少天后强制用户退出登录</translation> <translation id="8919369436496201075">允许设备接收 LTS 更新</translation> <translation id="8921669704201370845">为受管理个人资料启用 <ph name="PRODUCT_NAME" /> 云报告功能</translation> +<translation id="8922494933893518624">强制启用不安全情境中的 WebSQL。</translation> <translation id="8930064580550462145">在用户通过锁定屏幕登录期间,<ph name="PRODUCT_OS_NAME" />可通过服务器(在线)或使用缓存的密码(离线)来验证用户的身份。 如果设为 -2,此政策会与登录屏幕离线登录时间限制(来自 <ph name="POLICY" />)的值相匹配。
diff --git a/components/policy/resources/policy_templates_zh-TW.xtb b/components/policy/resources/policy_templates_zh-TW.xtb index e0a7f94..50e4c444 100644 --- a/components/policy/resources/policy_templates_zh-TW.xtb +++ b/components/policy/resources/policy_templates_zh-TW.xtb
@@ -925,17 +925,6 @@ <translation id="1962864958436828230">設定防止資料外洩的剪貼簿資料大小最低限制</translation> <translation id="1964634611280150550">無痕模式已停用</translation> <translation id="1964802606569741174">這項政策對 Android YouTube 應用程式沒有影響。如要強制採用 YouTube 安全模式,則必須禁止下載 Android YouTube 應用程式。</translation> -<translation id="1965363065727209968">setTimeout(…, 0) 常用來細分長時間的 JavaScript 工作。 - 將這項政策設為啟用時,系統不會主動延遲間隔時間小於 4 毫秒的 setTimeouts 和 setIntervals。 - 這麼做可以提升短期間的執行效能,但濫用 API 的網站最終仍會將 setTimeouts 設為延遲。 - - 這可能會改變網頁上的工作排序,進而導致必須以某種方法透過特定排序完成工作的網站發生異常行為, - 也可能影響將許多 setTimeout() 設為逾時 0 毫秒 (例如增加 CPU 負載) 的網站。 - - 對於未設定這項政策的使用者,<ph name="PRODUCT_NAME" /> 將在穩定版上逐步推出變更。 - - 這項政策是暫時性的,預計會在 <ph name="PRODUCT_NAME" /> 107 中移除。如果有需要的企業眾多,我們將會延長這個期限。 - </translation> <translation id="1967334955994230472">停用 Projector</translation> <translation id="1969212217917526199">覆寫遠端存取主機的偵錯版本政策。 @@ -1703,6 +1692,9 @@ <translation id="274769314493317695">如果在 <ph name="BULK_PRINTERS_ACCESS_MODE_POLICY_NAME" /> 中選擇了 <ph name="PRINTERS_WHITELIST" />,系統會根據 <ph name="NATIVE_PRINTERS_BULK_WHITELIST_POLICY_NAME" /> 的設定指定使用者可操作的印表機。只有 ID 與這項政策值相符的印表機,才會提供給使用者。印表機 ID 必須與 <ph name="NATIVE_PRINTERS_BULK_CONFIGURATION_POLICY_NAME" /> 政策指定檔案的 <ph name="ID_FIELD" /> 或 <ph name="GUID_FIELD" /> 欄位值相符。 這項政策已遭淘汰,請改用 <ph name="PRINTERS_BULK_ALLOWLIST_POLICY_NAME" />。</translation> +<translation id="2751959596774212778">從 M107 開始,不安全內容中的 WebSQL 預設為關閉狀態,而在 M110 中將全面移除。 + 如果將這項政策設為 False 或未設定,不安全內容中的 WebSQL 會維持啟用狀態,一直到 M106 結束時為止,接著在 M107 中停用。 + 如果將這項政策設為 True,系統會啟用不安全內容中的 WebSQL。</translation> <translation id="2752046642026416564">如果將這項政策設為啟用或不設定,<ph name="PRODUCT_NAME" /> 將可使用安裝在使用者層級的原生訊息傳遞主機。 如果設為停用,<ph name="PRODUCT_NAME" /> 只能使用安裝在系統層級的主機。</translation> @@ -4069,7 +4061,6 @@ <translation id="5475361623548884387">啟用列印功能</translation> <translation id="547601067149622666">禁止含侵入式廣告的網站顯示廣告</translation> <translation id="5476152378885134514">禁止這些網站使用剪貼簿</translation> -<translation id="5478734531226638813">如果設定這項政策,系統會停用工作階段中的 Kiosk Chrome 應用程式更新作業 (該作業會使用擴充功能資訊清單中的更新網址),且只會保留 CRX 預先擷取做為更新機制。</translation> <translation id="5480380613778757009">如果停用或不設定這項政策,當受管理訪客工作階段結束後,系統就會立即重設在此期間配置的所有顯示設定。如果將這項政策設為 True,系統就會在受管理的訪客工作階段結束後保留顯示屬性。</translation> <translation id="5483065054530244863">允許本機信任錨點核發的 SHA-1 簽署憑證</translation> <translation id="5487758664517243511">如果啟用這項設定,已開啟 Phone Hub 功能的使用者將可在 Chrome OS 上繼續執行工作,例如瀏覽手機的網頁。 @@ -4299,11 +4290,6 @@ 如果想進一步瞭解有效的網址模式,請參閱 https://cloud.google.com/docs/chrome-enterprise/policies/url-patterns。</translation> <translation id="5749396052108288586">這項政策已遭淘汰,請改用 <ph name="REMOTE_ACCESS_HOST_CLIENT_DOMAIN_LIST_POLICY_NAME" /> 政策。</translation> <translation id="574983287620584622">在登入畫面上啟用無障礙功能快速鍵</translation> -<translation id="5749873635525257317">這項政策已遭淘汰,請考慮改用 BrowserSignin。 - - 允許使用者登入 <ph name="PRODUCT_NAME" />。 - - 如果設定這項政策,你可以設定是否允許使用者登入 <ph name="PRODUCT_NAME" />。將這項政策設為「False」後,將會導致使用 chrome.identity API 的應用程式和擴充功能無法運作,因此建議你改用 <ph name="SYNC_DISABLED_POLICY_NAME" />。</translation> <translation id="5755002458331714762"> Web Components v0 API (Shadow DOM v0、Custom Elements v0 和 HTML Imports) 已在 2018 年淘汰,並從 M80 版開始預設為停用。這項政策可讓你選擇性地重新啟用這些功能,直到 M84 版為止。 如果將這項政策設為 True,系統會在所有網站上啟用 Web Components v0 功能。 @@ -5470,6 +5456,7 @@ 如果選取 [U2F],整合式雙重驗證將依照 FIDO U2F 規格運作。 如果選取 [U2F_EXTENDED],整合式雙重驗證會為個人認證提供 U2F 功能和一些擴充功能。</translation> +<translation id="6998179760789945134">除非已經透過 Chrome 旗標加以啟用,否則請在不安全內容中停用 WebSQL。</translation> <translation id="6999948519306285655">這項政策已遭淘汰,請改用 <ph name="PROXY_SETTINGS_POLICY_NAME" />。 你可以透過這項政策,指定 Proxy .pac 檔案的網址。只有在 <ph name="PROXY_SETTINGS_POLICY_NAME" /> 政策未設定,且你為 <ph name="PROXY_MODE_POLICY_NAME" /> 選取 <ph name="PROXY_MODE_ENUM_PAC_SCRIPT" /> 時,這項政策才會生效。 @@ -6023,14 +6010,6 @@ 如果將這項政策設為啟用或不設定,系統會啟用快速解答的單位轉換功能。 如果停用這項政策,系統會停用快速解答的單位轉換功能。</translation> <translation id="7587345076013230465">每當自動選取政策與多個憑證相符時,在登入畫面中提示使用者選取用戶端憑證</translation> -<translation id="7590188804371204512">控管是否能安裝外部擴充功能。 - - 啟用這項設定會禁止安裝外部擴充功能。 - - 如果停用或不指定這項設定,則可以安裝外部擴充功能。 - - 外部擴充功能及其安裝方式請參閱 https://developer.chrome.com/apps/external_extensions。 - </translation> <translation id="759957074386651883">安全瀏覽設定</translation> <translation id="7604169113182304895">Android 應用程式可以選擇是否使用這份清單,你無法強制套用。</translation> <translation id="7612157962821894603">要在 <ph name="PRODUCT_NAME" /> 啟動時套用的全系統設定</translation> @@ -7202,6 +7181,7 @@ <translation id="8919100556245407184">將使用者登出前的緩衝天數。如果使用者未在自動更新期限訊息顯示後將 <ph name="PRODUCT_OS_NAME" />版本更新為指定的 <ph name="CHROMEOS_VERSION_PROPERTY_NAME" /> 版,系統會在設定的天數過後將該使用者登出</translation> <translation id="8919369436496201075">允許裝置接收長期支援更新</translation> <translation id="8921669704201370845">為受管理的設定檔啟用 <ph name="PRODUCT_NAME" /> 雲端報告功能</translation> +<translation id="8922494933893518624">強制在不安全內容中啟用 WebSQL。</translation> <translation id="8930064580550462145">透過螢幕鎖定畫面登入時,<ph name="PRODUCT_OS_NAME" />可以透過伺服器進行線上驗證,或使用快取密碼進行離線驗證。 如果為這項政策設定 -2 的值,系統會根據 <ph name="POLICY" /> 政策決定登入畫面的離線登入時限值。
diff --git a/components/policy/tools/generate_policy_source.py b/components/policy/tools/generate_policy_source.py index 724531af..2e1f6e7 100755 --- a/components/policy/tools/generate_policy_source.py +++ b/components/policy/tools/generate_policy_source.py
@@ -504,7 +504,7 @@ # Ensure only windows supported policies are returned when building for windows. # Eventually only supported policies on every platforms will be returned. def _GetSupportedPolicies(policies, target_platform): - if target_platform in ['win', 'linux', 'mac']: + if target_platform in ['win', 'linux', 'mac', 'ios']: return [policy for policy in policies if policy.is_supported] return [
diff --git a/components/proxy_config/BUILD.gn b/components/proxy_config/BUILD.gn index 4e09932..ea24543 100644 --- a/components/proxy_config/BUILD.gn +++ b/components/proxy_config/BUILD.gn
@@ -15,8 +15,6 @@ "proxy_config_export.h", "proxy_config_pref_names.cc", "proxy_config_pref_names.h", - "proxy_policy_handler.cc", - "proxy_policy_handler.h", "proxy_prefs.cc", "proxy_prefs.h", ] @@ -43,6 +41,13 @@ } else { deps += [ "//components/pref_registry" ] } + + if (!is_ios) { + sources += [ + "proxy_policy_handler.cc", + "proxy_policy_handler.h", + ] + } } source_set("unit_tests") { @@ -50,7 +55,6 @@ sources = [ "pref_proxy_config_tracker_impl_unittest.cc", "proxy_config_dictionary_unittest.cc", - "proxy_policy_handler_unittest.cc", "proxy_prefs_unittest.cc", ] deps = [ @@ -68,4 +72,8 @@ "//testing/gtest", "//third_party/abseil-cpp:absl", ] + + if (!is_ios) { + sources += [ "proxy_policy_handler_unittest.cc" ] + } }
diff --git a/components/reporting/health/BUILD.gn b/components/reporting/health/BUILD.gn new file mode 100644 index 0000000..8ebb2277 --- /dev/null +++ b/components/reporting/health/BUILD.gn
@@ -0,0 +1,34 @@ +# Copyright 2022 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/features.gni") + +static_library("health_module") { + sources = [ + "health_module_files.cc", + "health_module_files.h", + ] + + deps = [ + "//base", + "//components/reporting/proto:record_proto", + "//components/reporting/util:file", + "//components/reporting/util:status", + "//components/reporting/util:status_macros", + "//third_party/re2", + ] +} + +# All unit tests are built as part of the //components:components_unittests +# target and must be one targets named "unit_tests". +source_set("unit_tests") { + testonly = true + sources = [ "health_module_files_unittest.cc" ] + + deps = [ + ":health_module", + "//base/test:test_support", + "//testing/gtest", + ] +}
diff --git a/components/reporting/health/DEPS b/components/reporting/health/DEPS new file mode 100644 index 0000000..0de07bb --- /dev/null +++ b/components/reporting/health/DEPS
@@ -0,0 +1,3 @@ +include_rules = [ + "+third_party/re2", +]
diff --git a/components/reporting/health/health_module_files.cc b/components/reporting/health/health_module_files.cc new file mode 100644 index 0000000..d32d1c5 --- /dev/null +++ b/components/reporting/health/health_module_files.cc
@@ -0,0 +1,191 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/reporting/health/health_module_files.h" + +#include "base/files/file.h" +#include "base/files/file_enumerator.h" +#include "base/files/file_util.h" +#include "base/strings/strcat.h" +#include "base/strings/string_number_conversions.h" +#include "base/strings/string_split.h" +#include "third_party/re2/src/re2/re2.h" + +namespace reporting { + +std::unique_ptr<HealthModuleFiles> HealthModuleFiles::Create( + const base::FilePath& directory, + base::StringPiece file_base_name, + const uint32_t max_storage_space) { + if (max_storage_space == 0) { + return nullptr; + } + + uint32_t max_file_header = 0; + uint32_t storage_used = 0; + std::map<uint32_t, base::FilePath> files{}; + base::FileEnumerator dir_enum(directory, /*recursive=*/false, + base::FileEnumerator::FILES, + FILE_PATH_LITERAL("*")); + RE2 pattern(base::StrCat({".*", file_base_name, "([0-9]+).*"})); + + for (auto path = dir_enum.Next(); !path.empty(); path = dir_enum.Next()) { + uint32_t header; + if (!RE2::PartialMatch(path.MaybeAsASCII(), pattern, &header)) { + continue; + } + + max_file_header = std::max(max_file_header, header); + files.emplace(header, path); + + auto size_result = FileSize(path); + if (!size_result.ok()) { + continue; + } + uint32_t file_size = size_result.ValueOrDie(); + + if (file_size > 0) { + storage_used += file_size; + } else if (file_size == 0) { + base::DeleteFile(path); + files.erase(header); + } + } + + return std::unique_ptr<HealthModuleFiles>( + new HealthModuleFiles(directory, file_base_name, max_storage_space, + storage_used, max_file_header, std::move(files))); +} + +HealthModuleFiles::HealthModuleFiles( + const base::FilePath& directory, + base::StringPiece file_base_name, + uint32_t max_storage_space, + uint32_t storage_used, + uint32_t max_file_header, + const std::map<uint32_t, base::FilePath>& files) + : directory_(directory), + file_base_name_(file_base_name), + max_storage_space_(max_storage_space), + storage_used_(storage_used), + files_(files) { + const auto free_result = FreeStorage(0); + if (!free_result.ok()) { + DVLOG(1) << "failed to initialize health files storage: " + << free_result.error_message(); + } +} + +HealthModuleFiles::~HealthModuleFiles() = default; + +base::FilePath HealthModuleFiles::CreateNewFile() { + ++max_file_header_; + base::FilePath file_path(directory_.AppendASCII( + base::StrCat({file_base_name_, base::NumberToString(max_file_header_)}))); + files_.emplace(max_file_header_, file_path); + return file_path; +} + +void HealthModuleFiles::DeleteOldestFile() { + if (files_.empty()) { + return; + } + + const auto it = files_.begin(); + base::DeleteFile(it->second); + files_.erase(it); +} + +void HealthModuleFiles::PopulateHistory(ERPHealthData* data) const { + for (const auto& file : files_) { + const auto read_result = MaybeReadFile(file.second, /*offset=*/0); + if (!read_result.status().ok()) { + return; + } + + const auto records = + base::SplitString(read_result.ValueOrDie(), "\n", + base::WhitespaceHandling::KEEP_WHITESPACE, + base::SplitResult::SPLIT_WANT_NONEMPTY); + for (const auto& record : records) { + std::string bytes; + base::HexStringToString(record, &bytes); + data->add_history()->ParseFromString(bytes); + } + } +} + +Status HealthModuleFiles::Write(base::StringPiece data) { + Status free_status = ReserveStorage(data.size()); + RETURN_IF_ERROR(free_status); + + if (files_.empty()) { + CreateNewFile(); + } else { + ASSIGN_OR_RETURN(const uint32_t size_result, + FileSize(files_.rbegin()->second)); + if (size_result + data.size() > max_file_storage_) { + CreateNewFile(); + } + } + + // +1 for newline char. + storage_used_ += data.size() + 1; + return ::reporting::AppendLine(files_.rbegin()->second, data); +} + +Status HealthModuleFiles::FreeStorage(uint32_t storage) { + if (storage_used_ + storage <= max_storage_space_) { + return Status::StatusOK(); + } + uint32_t storage_to_remove = storage_used_ + storage - max_storage_space_; + uint32_t storage_removed = 0; + // Ensure max storage requirement is met. + while (!files_.empty() && storage_to_remove > storage_removed) { + const auto& file_path = files_.begin()->second; + ASSIGN_OR_RETURN(uint32_t file_size, FileSize(file_path)); + + if (file_size == 0 || file_size <= storage_to_remove - storage_removed) { + DeleteOldestFile(); + storage_removed += file_size; + } else { + ASSIGN_OR_RETURN(uint32_t remove_result, + ::reporting::RemoveAndTruncateLine( + file_path, storage_to_remove - storage_removed - 1)); + storage_removed += remove_result; + } + } + + DCHECK_GE(storage_used_, storage_removed); + storage_used_ -= storage_removed; + return Status::StatusOK(); +} + +Status HealthModuleFiles::ReserveStorage(uint32_t storage) { + // account for newline character. + uint32_t actual_storage = storage + 1; + if (actual_storage > max_storage_space_) { + return Status(error::RESOURCE_EXHAUSTED, + "Requested storage space is larger than max allowed storage"); + } + if (max_storage_space_ >= actual_storage + storage_used_) { + return Status::StatusOK(); + } + + return FreeStorage(actual_storage); +} + +// static +StatusOr<uint32_t> HealthModuleFiles::FileSize( + const base::FilePath& file_path) { + base::File::Info file_info; + base::File file(file_path, base::File::FLAG_OPEN | base::File::FLAG_READ); + if (!file.IsValid() || !file.GetInfo(&file_info)) { + return Status(error::DATA_LOSS, + base::StrCat({"Failed to read health data file info ", + file_path.MaybeAsASCII()})); + } + return file_info.size; +} +} // namespace reporting
diff --git a/components/reporting/health/health_module_files.h b/components/reporting/health/health_module_files.h new file mode 100644 index 0000000..efb5d05 --- /dev/null +++ b/components/reporting/health/health_module_files.h
@@ -0,0 +1,101 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include <map> + +#include "base/files/file.h" +#include "components/reporting/proto/synced/record.pb.h" +#include "components/reporting/util/file.h" +#include "components/reporting/util/status.h" +#include "components/reporting/util/status_macros.h" +#include "components/reporting/util/statusor.h" + +#ifndef COMPONENTS_REPORTING_HEALTH_HEALTH_MODULE_FILES_H_ +#define COMPONENTS_REPORTING_HEALTH_HEALTH_MODULE_FILES_H_ + +namespace reporting { + +// HealthModuleFiles is a module used by the health module to persistently +// store ERP Health data. It contains the logic for reading and writing data to +// files and populating the ERPHealthData proto. Accesses to the underlying +// files should be called on the same sequenced task runner to achieve mutual +// exclusion. +class HealthModuleFiles { + public: + ~HealthModuleFiles(); + + HealthModuleFiles(const HealthModuleFiles& other) = delete; + HealthModuleFiles& operator=(const HealthModuleFiles& other) = delete; + + // Creation logic for the files interface. Maps what files are available + // to be read, and the storage usage. Also attempts to clear up space if too + // much is being used relative to |max_storage_space|. + static std::unique_ptr<HealthModuleFiles> Create( + const base::FilePath& directory, + base::StringPiece file_base_name, + uint32_t max_storage_space); + + // Dumps contents of underlying files into |data|. + void PopulateHistory(ERPHealthData* data) const; + + // Writes data to the underlying files. If space is full, this will cause + // other bits of data to be removed from the files. + Status Write(base::StringPiece data); + + private: + // Constructor for the class. Called by Create method. + HealthModuleFiles(const base::FilePath& directory, + base::StringPiece file_base_name, + uint32_t max_storage_space, + uint32_t storage_used, + uint32_t max_file_header, + const std::map<uint32_t, base::FilePath>& files); + + // Frees |storage| space from underlying files. This will do nothing if + // |storage| + |storage_used_| < |max_storage_space|. It may free more space + // than |storage| as it will remove an entire line from the underlying files + // (i.e. the oldest file's first line is 5 chars, and we request to remove 3 + // bytes. In this case the remaining 2 bytes of the line plus the newline + // will also be removed. + Status FreeStorage(uint32_t storage); + + // Requests a certain amount of storage from the health module. This will + // trigger some data to be deleted from the underlying files if |storage| + + // |storage_used_| > |max_storage_space|. + Status ReserveStorage(uint32_t storage); + + // Add a new file to |files|. + base::FilePath CreateNewFile(); + + // Remove the last file in |files|. Age is tracked by the file header. + void DeleteOldestFile(); + + // Helper method checking size for a given file. + static StatusOr<uint32_t> FileSize(const base::FilePath& file_path); + + // Root directory of ERP Health data files. + const base::FilePath directory_; + + // Base name of files for the storage represented. + base::StringPiece file_base_name_; + + // Max storage space that can be used by every file. + const uint32_t max_storage_space_; + + // Available storage space. + uint32_t storage_used_; + + // Current largest file header in use. + uint32_t max_file_header_ = 0; + + // Files currently managed for a given history. + std::map<uint32_t, base::FilePath> files_; + + // Max storage used by an individual history, 10KB. + // TODO(tylergarrett) control each history per policy. + uint32_t max_file_storage_ = 10000; +}; +} // namespace reporting + +#endif // COMPONENTS_REPORTING_HEALTH_HEALTH_MODULE_FILES_H_
diff --git a/components/reporting/health/health_module_files_unittest.cc b/components/reporting/health/health_module_files_unittest.cc new file mode 100644 index 0000000..737c773 --- /dev/null +++ b/components/reporting/health/health_module_files_unittest.cc
@@ -0,0 +1,168 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/reporting/health/health_module_files.h" + +#include "base/files/scoped_temp_dir.h" +#include "base/strings/strcat.h" +#include "base/strings/string_number_conversions.h" +#include "testing/gmock/include/gmock/gmock.h" +#include "testing/gtest/include/gtest/gtest.h" + +using ::testing::IsEmpty; +using ::testing::StrEq; + +namespace reporting { +namespace { + +constexpr char kBaseFileOne[] = "base_file_name"; +constexpr char kUnmatchedBaseFile[] = "no_files_match_this"; +constexpr int kInitialFiles = 3; +constexpr int kIntialRecordsPerFile = 5; +constexpr uint32_t kSimpleEnqueueRecordCallLineSize = 21; +constexpr uint32_t kSmallMaxStorageSize = 70; +constexpr uint32_t kLargeMaxStorageSize = 1000; +constexpr uint32_t kFullMaxStorageSize = 20000; + +const char kHexCharLookup[0x10] = { + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', +}; + +std::string BytesToHexString(base::StringPiece bytes) { + std::string result; + for (char byte : bytes) { + result.push_back(kHexCharLookup[(byte >> 4) & 0xf]); + result.push_back(kHexCharLookup[byte & 0xf]); + } + return result; +} + +class HealthModuleFilesTest : public ::testing::Test { + protected: + void SetUp() override { + ASSERT_TRUE(directory_.CreateUniqueTempDir()); + + for (int i = 0; i < kInitialFiles; i++) { + const std::string file_name = + base::StrCat({kBaseFileOne, base::NumberToString(i)}); + for (int k = 0; k < kIntialRecordsPerFile; k++) { + auto call = AddEnqueueRecordCall(); + *initial_health_data_.add_history() = call; + ASSERT_TRUE( + ::reporting::AppendLine(directory_.GetPath().AppendASCII(file_name), + BytesToHexString(call.SerializeAsString())) + .ok()); + } + } + } + + HealthDataHistory AddEnqueueRecordCall() { + HealthDataHistory history; + EnqueueRecordCall call; + call.set_priority( + static_cast<Priority>(priority_counter_++ % Priority_MAX + 1)); + *history.mutable_enqueue_record_call() = call; + history.set_timestamp_seconds(base::Time::Now().ToTimeT()); + return history; + } + + base::ScopedTempDir directory_; + + ERPHealthData initial_health_data_; + + private: + int priority_counter_ = Priority_MIN; +}; + +TEST_F(HealthModuleFilesTest, TestCreation) { + ERPHealthData history; + std::unique_ptr<HealthModuleFiles> files = HealthModuleFiles::Create( + directory_.GetPath(), kBaseFileOne, kLargeMaxStorageSize); + ASSERT_TRUE(files != nullptr); + files->PopulateHistory(&history); + EXPECT_THAT(history.SerializeAsString(), + ::testing::StrEq(initial_health_data_.SerializeAsString())); + + ERPHealthData empty_history; + std::unique_ptr<HealthModuleFiles> no_files = HealthModuleFiles::Create( + directory_.GetPath(), kUnmatchedBaseFile, kLargeMaxStorageSize); + ASSERT_TRUE(no_files != nullptr); + no_files->PopulateHistory(&empty_history); + EXPECT_THAT(empty_history.history(), ::testing::IsEmpty()); + + ERPHealthData small_history; + const uint32_t total_records_stored = + kSmallMaxStorageSize / kSimpleEnqueueRecordCallLineSize; + std::unique_ptr<HealthModuleFiles> small_files = HealthModuleFiles::Create( + directory_.GetPath(), kBaseFileOne, kSmallMaxStorageSize); + ASSERT_TRUE(small_files != nullptr); + small_files->PopulateHistory(&small_history); + int initial_size = initial_health_data_.history_size(); + initial_health_data_.mutable_history()->DeleteSubrange( + 0, initial_size - total_records_stored); + EXPECT_THAT(small_history.SerializeAsString(), + ::testing::StrEq(initial_health_data_.SerializeAsString())); + + std::unique_ptr<HealthModuleFiles> null_files = HealthModuleFiles::Create( + directory_.GetPath(), kBaseFileOne, /*max_storage_space=*/0); + ASSERT_TRUE(null_files == nullptr); +} + +TEST_F(HealthModuleFilesTest, TestFullStorage) { + ERPHealthData history; + std::unique_ptr<HealthModuleFiles> files = HealthModuleFiles::Create( + directory_.GetPath(), kBaseFileOne, kFullMaxStorageSize); + const uint32_t total_records_stored = + kFullMaxStorageSize / kSimpleEnqueueRecordCallLineSize; + ASSERT_TRUE(files != nullptr); + for (int i = 0; i < 1000; i++) { + auto call = AddEnqueueRecordCall(); + ASSERT_TRUE(files->Write(BytesToHexString(call.SerializeAsString())).ok()); + if (i + total_records_stored >= 1000) { + *history.add_history() = call; + } + } + ERPHealthData got; + files->PopulateHistory(&got); + EXPECT_THAT(history.SerializeAsString(), + ::testing::StrEq(got.SerializeAsString())); +} + +TEST_F(HealthModuleFilesTest, NotEnoughStorage) { + ERPHealthData history; + std::unique_ptr<HealthModuleFiles> files = HealthModuleFiles::Create( + directory_.GetPath(), kBaseFileOne, /*max_storage_space=*/1); + ASSERT_TRUE(files != nullptr); + files->PopulateHistory(&history); + ASSERT_THAT(history.history(), ::testing::IsEmpty()); + + ASSERT_FALSE( + files->Write(BytesToHexString(AddEnqueueRecordCall().SerializeAsString())) + .ok()); + files->PopulateHistory(&history); + ASSERT_THAT(history.history(), ::testing::IsEmpty()); +} + +TEST_F(HealthModuleFilesTest, JustEnoughStorage) { + ERPHealthData history; + std::unique_ptr<HealthModuleFiles> files = HealthModuleFiles::Create( + directory_.GetPath(), kBaseFileOne, kSimpleEnqueueRecordCallLineSize); + ASSERT_TRUE(files != nullptr); + files->PopulateHistory(&history); + int initial_size = initial_health_data_.history_size(); + initial_health_data_.mutable_history()->DeleteSubrange(0, initial_size - 1); + ASSERT_THAT(history.SerializeAsString(), + ::testing::StrEq(initial_health_data_.SerializeAsString())); + + history.mutable_history()->Clear(); + auto call = AddEnqueueRecordCall(); + *initial_health_data_.mutable_history(0) = call; + ASSERT_TRUE(files->Write(BytesToHexString(call.SerializeAsString())).ok()); + files->PopulateHistory(&history); + EXPECT_THAT(history.SerializeAsString(), + ::testing::StrEq(initial_health_data_.SerializeAsString())); +} +} // namespace +} // namespace reporting
diff --git a/components/search_engines/default_search_policy_handler.cc b/components/search_engines/default_search_policy_handler.cc index f3cb5634..082b07e 100644 --- a/components/search_engines/default_search_policy_handler.cc +++ b/components/search_engines/default_search_policy_handler.cc
@@ -86,9 +86,11 @@ base::Value::Type::STRING}, {key::kDefaultSearchProviderImageURLPostParams, DefaultSearchManager::kImageURLPostParams, base::Value::Type::STRING}, +#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) {key::kDefaultSearchProviderContextMenuAccessAllowed, prefs::kDefaultSearchProviderContextMenuAccessAllowed, base::Value::Type::BOOLEAN}, +#endif }; // DefaultSearchPolicyHandler implementation ----------------------------------- @@ -111,7 +113,9 @@ for (const auto& policy_map_entry : kDefaultSearchPolicyDataMap) { const char* policy_name = policy_map_entry.policy_name; if (policy_name != key::kDefaultSearchProviderEnabled && +#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) policy_name != key::kDefaultSearchProviderContextMenuAccessAllowed && +#endif HasDefaultSearchPolicy(policies, policy_name)) { errors->AddError(policy_name, IDS_POLICY_DEFAULT_SEARCH_DISABLED); } @@ -182,11 +186,15 @@ DefaultSearchManager::kSuggestionsURLPostParams, dict); SetStringInPref(policies, key::kDefaultSearchProviderImageURLPostParams, DefaultSearchManager::kImageURLPostParams, dict); +#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_IOS) SetBooleanInPref(policies, key::kDefaultSearchProviderContextMenuAccessAllowed, prefs::kDefaultSearchProviderContextMenuAccessAllowed, dict); - size_t policyCount = 14; +#else + size_t policyCount = 13; +#endif + CHECK_EQ(policyCount, std::size(kDefaultSearchPolicyDataMap)); // Set the fields which are not specified by the policy to default values.
diff --git a/components/search_engines/template_url_parser.cc b/components/search_engines/template_url_parser.cc index 4ac09746..073ec6f2 100644 --- a/components/search_engines/template_url_parser.cc +++ b/components/search_engines/template_url_parser.cc
@@ -167,13 +167,13 @@ void SafeTemplateURLParser::OnXmlParseComplete( data_decoder::DataDecoder::ValueOrError value_or_error) { - if (value_or_error.error) { - DLOG(ERROR) << "Failed to parse XML: " << *value_or_error.error; + if (!value_or_error.has_value()) { + DLOG(ERROR) << "Failed to parse XML: " << value_or_error.error(); std::move(callback_).Run(nullptr); return; } - const base::Value& root = *value_or_error.value; + const base::Value& root = *value_or_error; // Get the namespaces used in the XML document, which will be used // to access nodes by tag name in GetChildElementsByTag().
diff --git a/components/security_interstitials/core/BUILD.gn b/components/security_interstitials/core/BUILD.gn index 28940817..939869e 100644 --- a/components/security_interstitials/core/BUILD.gn +++ b/components/security_interstitials/core/BUILD.gn
@@ -8,8 +8,6 @@ "bad_clock_ui.h", "base_safe_browsing_error_ui.cc", "base_safe_browsing_error_ui.h", - "blocked_interception_ui.cc", - "blocked_interception_ui.h", "common_string_util.cc", "common_string_util.h", "controller_client.cc", @@ -18,14 +16,10 @@ "https_only_mode_allowlist.h", "https_only_mode_metrics.cc", "https_only_mode_metrics.h", - "https_only_mode_policy_handler.cc", - "https_only_mode_policy_handler.h", "https_only_mode_ui_util.cc", "https_only_mode_ui_util.h", "metrics_helper.cc", "metrics_helper.h", - "mitm_software_ui.cc", - "mitm_software_ui.h", "omnibox_https_upgrade_metrics.cc", "omnibox_https_upgrade_metrics.h", "pref_names.cc", @@ -42,10 +36,12 @@ "urls.h", ] - if (is_ios) { - sources -= [ + if (!is_ios) { + sources += [ "blocked_interception_ui.cc", "blocked_interception_ui.h", + "https_only_mode_policy_handler.cc", + "https_only_mode_policy_handler.h", "mitm_software_ui.cc", "mitm_software_ui.h", ]
diff --git a/components/soda/soda_installer.cc b/components/soda/soda_installer.cc index 179ad05..e2d99ea 100644 --- a/components/soda/soda_installer.cc +++ b/components/soda/soda_installer.cc
@@ -96,8 +96,7 @@ global_prefs->SetTime(prefs::kSodaScheduledDeletionTime, base::Time()); SodaInstaller::GetInstance()->InstallSoda(global_prefs); - if (global_prefs->GetList(prefs::kSodaRegisteredLanguagePacks) - ->GetListDeprecated() + if (global_prefs->GetValueList(prefs::kSodaRegisteredLanguagePacks) .empty()) { // TODO(crbug.com/1200667): Register the default language used by // Dictation on ChromeOS. @@ -111,8 +110,7 @@ } for (const auto& language : - global_prefs->GetList(prefs::kSodaRegisteredLanguagePacks) - ->GetListDeprecated()) { + global_prefs->GetValueList(prefs::kSodaRegisteredLanguagePacks)) { SodaInstaller::GetInstance()->InstallLanguage(language.GetString(), global_prefs); } @@ -227,10 +225,10 @@ void SodaInstaller::RegisterRegisteredLanguagePackPref( PrefRegistrySimple* registry) { // TODO: Default to one of the user's languages. - base::Value::ListStorage default_languages; - default_languages.push_back(base::Value(kUsEnglishLocale)); + base::Value::List default_languages; + default_languages.Append(base::Value(kUsEnglishLocale)); registry->RegisterListPref(prefs::kSodaRegisteredLanguagePacks, - base::Value(std::move(default_languages))); + std::move(default_languages)); } void SodaInstaller::NotifyOnSodaInstalled(LanguageCode language_code) { @@ -252,14 +250,14 @@ void SodaInstaller::RegisterLanguage(const std::string& language, PrefService* global_prefs) { ListPrefUpdate update(global_prefs, prefs::kSodaRegisteredLanguagePacks); - if (!base::Contains(update->GetListDeprecated(), base::Value(language))) { - update->Append(language); + if (!base::Contains(update->GetList(), base::Value(language))) { + update->GetList().Append(language); } } void SodaInstaller::UnregisterLanguages(PrefService* global_prefs) { ListPrefUpdate update(global_prefs, prefs::kSodaRegisteredLanguagePacks); - update->ClearList(); + update->GetList().clear(); } bool SodaInstaller::IsSodaDownloading(LanguageCode language_code) const {
diff --git a/components/strings/components_strings_as.xtb b/components/strings/components_strings_as.xtb index 64443ff..2628e973 100644 --- a/components/strings/components_strings_as.xtb +++ b/components/strings/components_strings_as.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">পঢ়াৰ সূচী</translation> <translation id="1264309058268477500">বিকল্প</translation> <translation id="1264974993859112054">খেলা-ধূলা</translation> +<translation id="1266469291454105242">ডিভাইচ আনলক কৰাৰ সুবিধা</translation> <translation id="1269516672602708785">Google Sitesত ক্ষিপ্ৰভাৱে এটা নতুন ছাইট সৃষ্টি কৰক</translation> <translation id="1270502636509132238">পিকআপৰ পদ্ধতি</translation> <translation id="1281476433249504884">ষ্টেকাৰ ১</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">ডেটিং আৰু ব্যক্তিগত সেৱা</translation> <translation id="1753706481035618306">পৃষ্ঠাৰ সংখ্যা</translation> <translation id="1755621011177747277">শিশু তুলি লোৱা</translation> +<translation id="1756026472674246267">লিংকটো নতুন টেবত খোলক</translation> <translation id="175656076281618225">যাদু</translation> <translation id="1757773103848038814">Monospace ফ’ণ্ট</translation> <translation id="1763864636252898013">এই ছার্ভাৰটোৱে এইটোক <ph name="DOMAIN" /> বুলি প্ৰমাণ কৰিব নোৱাৰিলে; আপোনাৰ ডিভাইচৰ অপাৰেটিং ছিষ্টেমে ইয়াৰ সুৰক্ষাৰ প্ৰমাণপত্ৰ বিশ্বাস নকৰে। এয়া কোনো ভুল কনফিগাৰেশ্বনৰ বাবে বা কোনো আক্ৰমণকাৰীয়ে আপোনাৰ সংযোগ অৱৰোধ কৰাৰ বাবে হ'ব পাৰে।</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">পৰিশোধ বাতিল কৰক</translation> <translation id="2148613324460538318">কাৰ্ড যোগ কৰক</translation> <translation id="2149968176347646218">সংযোগটো সুৰক্ষিত নহয়</translation> +<translation id="2153609454945889823">Google Play Services for AR ইনষ্টল কৰিবনে?</translation> <translation id="2154054054215849342">আপোনাৰ ড‘মেইনত ছিংক কৰাৰ সুবিধা নাই</translation> <translation id="2154484045852737596">কাৰ্ড সম্পাদনা কৰক</translation> <translation id="2161656808144014275">পাঠ</translation> @@ -830,6 +833,7 @@ <translation id="3229277193950731405">সংস্কৰণৰ ষ্ট্ৰিং প্ৰতিলিপি কৰক</translation> <translation id="323107829343500871"><ph name="CREDIT_CARD" />ৰ CVC দিয়ক</translation> <translation id="3234666976984236645">এই ছাইটটোত সদায়েই গুৰুত্বপূৰ্ণ সমল ধৰা পেলাওক</translation> +<translation id="3238395604961564389">লিংকটো ইনক’গনিট’ ৱিণ্ড’ত খোলক</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, আপোনাৰ ব্ৰাউজাৰৰ ৰূপ কাষ্টমাইজ কৰিবলৈ টেব টিপক আৰু তাৰ পাছত এণ্টাৰ টিপক</translation> <translation id="3240791268468473923">কোনো মিল নথকা সুৰক্ষিত পৰিশোধৰ ক্ৰিডেনশ্বিয়েল থকা শ্বীটখন খোলা হৈছে</translation> <translation id="324180406144491771">“<ph name="HOST_NAME" />”ৰ লিংকসমূহ অৱৰোধ কৰা হৈছে</translation> @@ -942,6 +946,7 @@ <translation id="3531780078352352885">কামৰ শ্বীটসমূহ</translation> <translation id="3532844647053365774"><ph name="HOST" />এ আপোনাৰ মাইক্ৰ'ফ'ন ব্যৱহাৰ কৰিব খোজে</translation> <translation id="3533328374079021623">মেইলবক্স ৫</translation> +<translation id="3542768452570884558">লিংকটো নতুন ৱিণ্ড’ত খোলক</translation> <translation id="3550112004925580947">আতিথ্য সেৱাৰ উদ্যােগ</translation> <translation id="3552297013052089404">Sans-serif ফ’ণ্ট</translation> <translation id="3558573058928565255">দিনত</translation> @@ -1112,11 +1117,13 @@ <translation id="4040350669425716613">মহাবিদ্যালয় আৰু বিশ্ববিদ্যালয়</translation> <translation id="4056223980640387499">ছেপিয়া</translation> <translation id="4058922952496707368">চাবি "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4063924980214801036">কাৰ্ডসমূহ দ্ৰুততাৰে নিশ্চিত কৰিবলৈ ডিভাইচ আনলক কৰাৰ সুবিধাটো ব্যৱহাৰ কৰক</translation> <translation id="4067098466788473230">শিক্ষাৰ বাবে দিয়া অনুদান আৰু জলপানি</translation> <translation id="4067263367174615723">C1 (লেফাফা)</translation> <translation id="4067947977115446013">মান্য ঠিকনা দিয়ক</translation> <translation id="4072193657607981494">নীতি ল’ড হৈ আছে</translation> <translation id="4072486802667267160">আপোনাৰ অৰ্ডাৰ প্ৰক্ৰিয়া চলি থকা অৱস্থাত কোনো আসোঁৱাহ হৈছে। অনুগ্ৰহ কৰি আকৌ চেষ্টা কৰক।</translation> +<translation id="4073376909608563327">ডিভাইচ আনলক কৰাৰ সুবিধাটো ব্যৱহাৰ কৰিব পৰা নগ’ল</translation> <translation id="4073797364926776829">কাৰ্ড চাওক</translation> <translation id="4075732493274867456">ক্লায়েণ্ট আৰু ছাৰ্ভাৰত এটা উমৈহতীয়া SSL প্ৰট’কল সংস্কৰণ বা চাইফাৰ ছুট সমৰ্থন নকৰে।</translation> <translation id="4079302484614802869">প্ৰক্সি কনফিগাৰেশ্বন এটা .pac স্ক্রিপ্ট URL ব্যৱহাৰ কৰিবলৈহে ছেট কৰা হয়, স্থিৰ প্ৰক্সি ছাৰ্ভাৰ ব্যৱহাৰ কৰিবলৈ নহয়।</translation> @@ -1408,6 +1415,7 @@ <translation id="4840250757394056958">আপোনাৰ Chromeৰ ইতিহাস চাওক</translation> <translation id="484462545196658690">স্বয়ংক্ৰিয়</translation> <translation id="484671803914931257"><ph name="MERCHANT_NAME" /> আৰু বহুতত ৰেহাই পাওক</translation> +<translation id="484988093836683706">ডিভাইচ আনলক কৰাৰ সুবিধাটো ব্যৱহাৰ কৰক</translation> <translation id="4850886885716139402">চাওক</translation> <translation id="4852429274334674023">অপাৰেটিং ছিষ্টেম</translation> <translation id="485316830061041779">জাৰ্মান</translation> @@ -1795,6 +1803,7 @@ <translation id="5921185718311485855">অন আছে</translation> <translation id="5921639886840618607">কাৰ্ডখন Google একাউণ্টত ছেভ কৰিবনে?</translation> <translation id="5922853866070715753">প্ৰায় সম্পূর্ণ হৈছেই</translation> +<translation id="5923492272538889093">CVCৰ পৰিৱৰ্তে ডিভাইচ আনলক কৰাৰ সুবিধাটো ব্যৱহাৰ কৰিবনে?</translation> <translation id="5928444777041341328">ঘৰ আৰু বাগিচা</translation> <translation id="5932224571077948991">ছাইটে বিনা অনুমতিত বা কোনো বিভ্ৰান্তিকৰ বিজ্ঞাপন দেখুৱায়</translation> <translation id="5937560539988385583">পৃষ্ঠাখন অনুবাদ কৰা হ’ল</translation> @@ -1967,6 +1976,7 @@ <translation id="643051589346665201">Googleৰ পাছৱৰ্ড সলনি কৰক</translation> <translation id="6433490469411711332">সম্পর্কৰ তথ্য সম্পাদনা কৰক</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" />এ সংযোগ কৰিবলৈ অস্বীকাৰ কৰিছে।</translation> +<translation id="6433797564277305076">এতিয়াৰ পৰা ডিভাইচ আনলক কৰাৰ সুবিধাটো ব্যৱহাৰ কৰি আপোনাৰ কাৰ্ডসমূহ দ্ৰুততাৰে নিশ্চিত কৰক</translation> <translation id="6440503408713884761">উপেক্ষিত কৰা হৈছে</translation> <translation id="6443406338865242315">আপুনি ইনষ্টল কৰা এক্সটেনশ্বন আৰু প্লাগইনসমূহ</translation> <translation id="6446163441502663861">কাহু (লেফাফা)</translation> @@ -2173,6 +2183,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{এই মুহূৰ্তত এই কার্ডখন ছেভ কৰিব নোৱাৰি}one{এই মুহূৰ্তত এই কার্ডসমূহ ছেভ কৰিব নোৱাৰি}other{এই মুহূৰ্তত এই কার্ডসমূহ ছেভ কৰিব নোৱাৰি}}</translation> <translation id="7053983685419859001">অৱৰোধ কৰক</translation> <translation id="7058163556978339998"><ph name="BROWSER" />এ সত্যাপন কৰিছে যে <ph name="ISSUER" />এ এই ৱেবছাইটটোৰ প্ৰমাণপত্ৰ জাৰি কৰিছে।</translation> +<translation id="7058774143982824355">CSV পাছৱৰ্ড পাৰ্ছাৰ সেৱা</translation> <translation id="7061777300866737982">ঘৰৰ সুৰক্ষা আৰু নিৰাপত্তা</translation> <translation id="7062635574500127092">গাঢ় সেউজ-নীলা</translation> <translation id="706295145388601875">Chromeৰ ছেটিঙত ঠিকনা যোগ দিয়ক আৰু পৰিচালনা কৰক</translation> @@ -2437,6 +2448,7 @@ <translation id="7696089921647603491">ক্লাছিক ৰক আৰু পুৰণি সংগীত</translation> <translation id="7697066736081121494">Prc8 (লেফাফা)</translation> <translation id="769721561045429135">এই মুহূৰ্তত আপোনাৰ লগত কেইখনমান কাৰ্ড আছে যিবোৰ কেৱল এই ডিভাইচটোতহে ব্যৱহাৰ কৰিব পাৰি। কাৰ্ডবোৰৰ পৰ্যালোচনা কৰিবলৈ অব্যাহত ৰাখক-ত ক্লিক কৰক</translation> +<translation id="7698864304447945242">Google Play Services for AR আপডে’ট কৰিবনে?</translation> <translation id="7699293099605015246">প্ৰৱন্ধবোৰ এই মুহূৰ্তত উপলব্ধ নহয়</translation> <translation id="7701040980221191251">নাই</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" /> <ph name="SITE" /> (অসুৰক্ষিত) লৈ যাওক<ph name="END_LINK" /></translation> @@ -2449,6 +2461,7 @@ <translation id="7723047071702270851">কাৰ্ড সম্পাদনা কৰক</translation> <translation id="7734285854693414638">Google Formsত ক্ষিপ্ৰভাৱে এখন নতুন ফ’ৰ্ম সৃষ্টি কৰক</translation> <translation id="773466115871691567">সদায় পৃষ্ঠাসমূহ <ph name="SOURCE_LANGUAGE" />লৈ অনুবাদ কৰক</translation> +<translation id="7736959720849233795">লিংকটোৰ ঠিকনাটো প্ৰতিলিপি কৰক</translation> <translation id="7740996059027112821">মান্য</translation> <translation id="77424286611022110">এই ছাইটটোৱে অননুমোদিত অথবা বিভ্ৰান্তিকৰ বিজ্ঞাপন দেখুৱায়। <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">বিপজ্জনক সমল অৱৰোধ কৰা হৈছে।</translation>
diff --git a/components/strings/components_strings_ca.xtb b/components/strings/components_strings_ca.xtb index a8cef64..535e1cd 100644 --- a/components/strings/components_strings_ca.xtb +++ b/components/strings/components_strings_ca.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Llista de lectura</translation> <translation id="1264309058268477500">Alternatiu</translation> <translation id="1264974993859112054">Esports</translation> +<translation id="1266469291454105242">Desbloqueig del dispositiu</translation> <translation id="1269516672602708785">Crea un lloc web a Google Sites ràpidament</translation> <translation id="1270502636509132238">Mètode de recollida</translation> <translation id="1281476433249504884">Apiladora 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Cites i anuncis personals</translation> <translation id="1753706481035618306">Número de pàgina</translation> <translation id="1755621011177747277">Adopció</translation> +<translation id="1756026472674246267">Obre l'enllaç en una pestanya nova</translation> <translation id="175656076281618225">Màgia</translation> <translation id="1757773103848038814">Tipus de lletra monoespaiada</translation> <translation id="1763864636252898013">Aquest servidor no ha pogut comprovar que sigui <ph name="DOMAIN" /> perquè el sistema operatiu del vostre dispositiu considera que el seu certificat de seguretat no és de confiança. Això pot ser a causa d'una configuració incorrecta o d'un atacant que intercepta la vostra connexió.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Cancel·la el pagament</translation> <translation id="2148613324460538318">Afegeix una targeta</translation> <translation id="2149968176347646218">La connexió no és segura</translation> +<translation id="2153609454945889823">Vols instal·lar Serveis de Google Play per a RA?</translation> <translation id="2154054054215849342">La sincronització no està disponible per al teu domini</translation> <translation id="2154484045852737596">Edita la targeta</translation> <translation id="2161656808144014275">Text</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">Copia la cadena de versió</translation> <translation id="323107829343500871">Introdueix el CVC de la targeta <ph name="CREDIT_CARD" /></translation> <translation id="3234666976984236645">Detecta sempre el contingut important d'aquest lloc</translation> +<translation id="3238395604961564389">Obre l'enllaç en una finestra d'incògnit</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />: prem Tab i després Retorn per personalitzar l'aspecte del teu navegador</translation> <translation id="3240791268468473923">S'ha obert el full de credencials no coincidents de credencials de pagament segur</translation> <translation id="324180406144491771">Els enllaços de "<ph name="HOST_NAME" />" estan bloquejats</translation> @@ -945,6 +949,7 @@ <translation id="3531780078352352885">Fulls de treball</translation> <translation id="3532844647053365774"><ph name="HOST" /> vol utilitzar el micròfon</translation> <translation id="3533328374079021623">Bústia de correu 5</translation> +<translation id="3542768452570884558">Obre l'enllaç en una finestra nova</translation> <translation id="3550112004925580947">Sector de l'hostaleria</translation> <translation id="3552297013052089404">Tipus de lletra Sans Serif</translation> <translation id="3558573058928565255">Durant el dia</translation> @@ -1115,11 +1120,13 @@ <translation id="4040350669425716613">Universitats i facultats</translation> <translation id="4056223980640387499">Sèpia</translation> <translation id="4058922952496707368">Tecla "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Utilitza el desbloqueig del dispositiu per confirmar les targetes més ràpidament</translation> <translation id="4067098466788473230">Beques i ajudes per als estudis</translation> <translation id="4067263367174615723">C1 (sobre)</translation> <translation id="4067947977115446013">Afegeix una adreça vàlida</translation> <translation id="4072193657607981494">S'estan carregant les polítiques</translation> <translation id="4072486802667267160">S’ha produït un error en processar la comanda. Torna-ho a provar.</translation> +<translation id="4073376909608563327">No s'ha pogut utilitzar el desbloqueig del dispositiu</translation> <translation id="4073797364926776829">Mostra la targeta</translation> <translation id="4075732493274867456">El client i el servidor no admeten cap versió de protocol SSL ni cap sistema de xifratge comuns.</translation> <translation id="4079302484614802869">La configuració del servidor intermediari s'ha definit perquè utilitzi un URL de script .pac, en lloc de servidors intermedis fixos.</translation> @@ -1412,6 +1419,7 @@ <translation id="4840250757394056958">Mostra l'historial de Chrome</translation> <translation id="484462545196658690">Automàtic</translation> <translation id="484671803914931257">Obtén un descompte a <ph name="MERCHANT_NAME" /> i més</translation> +<translation id="484988093836683706">Utilitza el desbloqueig del dispositiu</translation> <translation id="4850886885716139402">Mostra</translation> <translation id="4852429274334674023">Sistemes operatius</translation> <translation id="485316830061041779">Alemany</translation> @@ -1799,6 +1807,7 @@ <translation id="5921185718311485855">Activat</translation> <translation id="5921639886840618607">Vols desar la targeta al Compte de Google?</translation> <translation id="5922853866070715753">Ja queda poc</translation> +<translation id="5923492272538889093">Vols utilitzar el desbloqueig del dispositiu en lloc del CVC?</translation> <translation id="5928444777041341328">Llar i jardí</translation> <translation id="5932224571077948991">El lloc web mostra anuncis intrusius o enganyosos</translation> <translation id="5937560539988385583">S'ha traduït la pàgina</translation> @@ -1972,6 +1981,7 @@ <translation id="643051589346665201">Canvia la contrasenya de Google</translation> <translation id="6433490469411711332">Edita la informació de contacte</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> no ens ha permès establir la connexió.</translation> +<translation id="6433797564277305076">A partir d'ara, confirma les targetes més ràpidament amb el desbloqueig del dispositiu</translation> <translation id="6440503408713884761">Ignorada</translation> <translation id="6443406338865242315">Quines extensions i connectors has instal·lat</translation> <translation id="6446163441502663861">Kahu (sobre)</translation> @@ -2178,6 +2188,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{En aquest moment no es pot desar la targeta}other{En aquest moment no es poden desar les targetes}}</translation> <translation id="7053983685419859001">Bloqueja</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> ha verificat que <ph name="ISSUER" /> ha emès el certificat d'aquest lloc web.</translation> +<translation id="7058774143982824355">Servei d'anàlisi de contrasenyes de CSV</translation> <translation id="7061777300866737982">Seguretat i salut domèstica</translation> <translation id="7062635574500127092">Verd blavós</translation> <translation id="706295145388601875">Afegeix i gestiona adreces a la configuració de Chrome</translation> @@ -2442,6 +2453,7 @@ <translation id="7696089921647603491">Rock clàssic i èxits antics</translation> <translation id="7697066736081121494">Prc8 (sobre)</translation> <translation id="769721561045429135">En aquest moment tens targetes que només es poden fer servir en aquest dispositiu. Fes clic a Continua per consultar les targetes.</translation> +<translation id="7698864304447945242">Vols actualitzar Serveis de Google Play per a RA?</translation> <translation id="7699293099605015246">En aquests moments no hi ha articles disponibles</translation> <translation id="7701040980221191251">Cap</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Continua per accedir a <ph name="SITE" /> (no segur)<ph name="END_LINK" /></translation> @@ -2454,6 +2466,7 @@ <translation id="7723047071702270851">Edita la targeta</translation> <translation id="7734285854693414638">Crea un formulari a Formularis de Google ràpidament</translation> <translation id="773466115871691567">Tradueix sempre les pàgines en <ph name="SOURCE_LANGUAGE" /></translation> +<translation id="7736959720849233795">Copia l'adreça de l'enllaç</translation> <translation id="7740996059027112821">Estàndard</translation> <translation id="77424286611022110">Aquest lloc web mostra anuncis intrusius o enganyosos. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">S'ha bloquejat el contingut perillós.</translation>
diff --git a/components/strings/components_strings_cs.xtb b/components/strings/components_strings_cs.xtb index 30dd9982..02bf4e6d 100644 --- a/components/strings/components_strings_cs.xtb +++ b/components/strings/components_strings_cs.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Seznam četby</translation> <translation id="1264309058268477500">Alternativní</translation> <translation id="1264974993859112054">Sport</translation> +<translation id="1266469291454105242">Odemknutí zařízení</translation> <translation id="1269516672602708785">Rychle vytvořit nový web ve Webech Google</translation> <translation id="1270502636509132238">Způsob vyzvednutí</translation> <translation id="1281476433249504884">Stohovač 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Seznamování a osobní inzerce</translation> <translation id="1753706481035618306">Číslo stránky</translation> <translation id="1755621011177747277">Adopce</translation> +<translation id="1756026472674246267">Otevřít odkaz na nové kartě</translation> <translation id="175656076281618225">Magie</translation> <translation id="1757773103848038814">Písmo s pevnou šířkou</translation> <translation id="1763864636252898013">Server nedokázal prokázat, že patří doméně <ph name="DOMAIN" />. Operační systém vašeho zařízení nedůvěřuje jeho bezpečnostnímu certifikátu. Může to být způsobeno nesprávnou konfigurací nebo tím, že vaše připojení zachytává útočník.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Zrušit platbu</translation> <translation id="2148613324460538318">Přidat kartu</translation> <translation id="2149968176347646218">Připojení není zabezpečené</translation> +<translation id="2153609454945889823">Nainstalovat Služby Google Play pro RR?</translation> <translation id="2154054054215849342">Synchronizace není pro vaši doménu k dispozici</translation> <translation id="2154484045852737596">Úprava karty</translation> <translation id="2161656808144014275">Text</translation> @@ -829,6 +832,7 @@ <translation id="3229277193950731405">Zkopírovat řetězec verze</translation> <translation id="323107829343500871">Zadejte kód CVC karty <ph name="CREDIT_CARD" /></translation> <translation id="3234666976984236645">Vždy na tomto webu zjišťovat důležitý obsah</translation> +<translation id="3238395604961564389">Otevřít odkaz v anonymním okně</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, stisknutím tabulátoru a poté klávesy Enter si přizpůsobíte vzhled prohlížeče</translation> <translation id="3240791268468473923">List identifikačních údajů pro zabezpečené platby o nenalezených odpovídajících identifikačních údajích je otevřený</translation> <translation id="324180406144491771">Odkazy „<ph name="HOST_NAME" />“ jsou blokovány</translation> @@ -942,6 +946,7 @@ <translation id="3531780078352352885">Listy úlohy</translation> <translation id="3532844647053365774">Stránka <ph name="HOST" /> chce použít váš mikrofon</translation> <translation id="3533328374079021623">Schránka 5</translation> +<translation id="3542768452570884558">Otevřít odkaz v novém okně</translation> <translation id="3550112004925580947">Pohostinství</translation> <translation id="3552297013052089404">Bezpatkové písmo</translation> <translation id="3558573058928565255">Den</translation> @@ -1111,11 +1116,13 @@ <translation id="4040350669425716613">Vysoké školy a univerzity</translation> <translation id="4056223980640387499">Sépie</translation> <translation id="4058922952496707368">Klíč <ph name="SUBKEY" />: <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Potvrzovat karty rychleji pomocí odemknutí zařízení</translation> <translation id="4067098466788473230">Studijní granty a stipendia</translation> <translation id="4067263367174615723">C1 (obálka)</translation> <translation id="4067947977115446013">Přidejte platnou adresu</translation> <translation id="4072193657607981494">Načítání zásad</translation> <translation id="4072486802667267160">Při zpracování objednávky došlo k chybě. Zkuste to prosím znovu.</translation> +<translation id="4073376909608563327">Odemknutí zařízení se nepodařilo použít</translation> <translation id="4073797364926776829">Zobrazit kartu</translation> <translation id="4075732493274867456">Klient a server nepodporují společnou verzi protokolu SSL nebo šifrovací sadu.</translation> <translation id="4079302484614802869">Proxy je nastaveno na používání adresy URL skriptu PAC, nikoliv pevně daných serverů proxy.</translation> @@ -1408,6 +1415,7 @@ <translation id="4840250757394056958">Zobrazit historii Chromu</translation> <translation id="484462545196658690">Automaticky</translation> <translation id="484671803914931257">Získejte slevu u obchodníka <ph name="MERCHANT_NAME" /> a dalších</translation> +<translation id="484988093836683706">Použít odemknutí zařízení</translation> <translation id="4850886885716139402">Zobrazit</translation> <translation id="4852429274334674023">Operační systémy</translation> <translation id="485316830061041779">němčina</translation> @@ -1795,6 +1803,7 @@ <translation id="5921185718311485855">Zapnuto</translation> <translation id="5921639886840618607">Uložit kartu do účtu Google?</translation> <translation id="5922853866070715753">Téměř dokončeno</translation> +<translation id="5923492272538889093">Používat místo kódu CVC odemknutí zařízení?</translation> <translation id="5928444777041341328">Dům a zahrada</translation> <translation id="5932224571077948991">Web zobrazuje rušivé nebo zavádějící reklamy</translation> <translation id="5937560539988385583">Stránka byla přeložena</translation> @@ -1967,6 +1976,7 @@ <translation id="643051589346665201">Změnit heslo Google</translation> <translation id="6433490469411711332">Upravit kontaktní údaje</translation> <translation id="6433595998831338502">Web <ph name="HOST_NAME" /> odmítl připojení.</translation> +<translation id="6433797564277305076">Od teď karty potvrzovat rychleji pomocí odemknutí zařízení</translation> <translation id="6440503408713884761">Ignorováno</translation> <translation id="6443406338865242315">Která rozšíření a pluginy máte nainstalované</translation> <translation id="6446163441502663861">Kahu (obálka)</translation> @@ -2173,6 +2183,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Tuto kartu v tuto chvíli nelze uložit}few{Tyto karty v tuto chvíli nelze uložit}many{Tyto karty v tuto chvíli nelze uložit}other{Tyto karty v tuto chvíli nelze uložit}}</translation> <translation id="7053983685419859001">Blokovat</translation> <translation id="7058163556978339998">Prohlížeč <ph name="BROWSER" /> ověřil, že certifikát tohoto webu byl vydán vydavatelem <ph name="ISSUER" />.</translation> +<translation id="7058774143982824355">Služba analýzy hesel CSV</translation> <translation id="7061777300866737982">Zabezpečení domácnosti</translation> <translation id="7062635574500127092">Šedozelená</translation> <translation id="706295145388601875">Přidávejte a spravujte adresy v nastavení Chromu</translation> @@ -2436,6 +2447,7 @@ <translation id="7696089921647603491">Klasický rock a oldies</translation> <translation id="7697066736081121494">Prc8 (obálka)</translation> <translation id="769721561045429135">V současné době máte karty, které lze používat jen na tomto zařízení. Chcete-li karty zkontrolovat, klikněte na Pokračovat.</translation> +<translation id="7698864304447945242">Aktualizovat Služby Google Play pro RR?</translation> <translation id="7699293099605015246">Články momentálně nejsou dostupné</translation> <translation id="7701040980221191251">Žádné</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Pokračovat na web <ph name="SITE" /> (nespolehlivý)<ph name="END_LINK" /></translation> @@ -2448,6 +2460,7 @@ <translation id="7723047071702270851">Úprava karty</translation> <translation id="7734285854693414638">Rychle vytvořit nový formulář ve Formulářích Google</translation> <translation id="773466115871691567">Stránky v jazyce <ph name="SOURCE_LANGUAGE" /> vždy překládat</translation> +<translation id="7736959720849233795">Zkopírovat adresu odkazu</translation> <translation id="7740996059027112821">Standardně</translation> <translation id="77424286611022110">Tento web zobrazuje rušivé nebo zavádějící reklamy. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Byl zablokován nebezpečný obsah.</translation>
diff --git a/components/strings/components_strings_cy.xtb b/components/strings/components_strings_cy.xtb index 9885645..df8d7d4 100644 --- a/components/strings/components_strings_cy.xtb +++ b/components/strings/components_strings_cy.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Rhestr ddarllen</translation> <translation id="1264309058268477500">Amgen</translation> <translation id="1264974993859112054">Chwaraeon</translation> +<translation id="1266469291454105242">Datgloi dyfais</translation> <translation id="1269516672602708785">Creu gwefan newydd yn Google Sites yn gyflym</translation> <translation id="1270502636509132238">Dull Casglu</translation> <translation id="1281476433249504884">Pentyrrwr 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Detio a hysbysebion personol</translation> <translation id="1753706481035618306">Rhif tudalen</translation> <translation id="1755621011177747277">Mabwysiadu</translation> +<translation id="1756026472674246267">Agor Dolen mewn Tab Newydd</translation> <translation id="175656076281618225">Hud a lledrith</translation> <translation id="1757773103848038814">Ffont Lled Sefydlog</translation> <translation id="1763864636252898013">Ni allai'r gweinydd hwn brofi ei fod yn <ph name="DOMAIN" />; nid yw system weithredu eich dyfais yn ymddiried yn ei dystysgrif ddiogelwch. Gall hyn gael ei achosi gan gamffurfweddiad neu ymosodwr yn rhyng-gipio'ch cysylltiad.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Canslo taliad</translation> <translation id="2148613324460538318">Ychwanegu Cerdyn</translation> <translation id="2149968176347646218">Nid yw'r cysylltiad yn ddiogel</translation> +<translation id="2153609454945889823">Gosod Google Play Services ar gyfer AR?</translation> <translation id="2154054054215849342">Nid yw cysoni ar gael ar gyfer eich parth</translation> <translation id="2154484045852737596">Golygu cerdyn</translation> <translation id="2161656808144014275">Testun</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">Copïo'r llinyn fersiynau</translation> <translation id="323107829343500871">Rhowch y CVC ar gyfer <ph name="CREDIT_CARD" /></translation> <translation id="3234666976984236645">Canfod cynnwys pwysig ar y wefan hon bob amser</translation> +<translation id="3238395604961564389">Agor Dolen mewn Ffenestr Anhysbys</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, Pwyswch Tab yna Enter i bersonoleiddio gwedd eich porwr</translation> <translation id="3240791268468473923">Mae dalen dim manylion sy'n cyfateb y prosiect manylion talu diogel ar agor</translation> <translation id="324180406144491771">Mae dolenni “<ph name="HOST_NAME" />” wedi'u rhwystro</translation> @@ -945,6 +949,7 @@ <translation id="3531780078352352885">Dalenni swyddi</translation> <translation id="3532844647053365774">Mae <ph name="HOST" /> eisiau defnyddio'ch meicroffon</translation> <translation id="3533328374079021623">Blwch negeseuon 5</translation> +<translation id="3542768452570884558">Agor Dolen mewn Ffenest Newydd</translation> <translation id="3550112004925580947">Diwydiant lletygarwch</translation> <translation id="3552297013052089404">Ffont Sans-serif</translation> <translation id="3558573058928565255">Yn ystod y dydd</translation> @@ -1115,11 +1120,13 @@ <translation id="4040350669425716613">Colegau a phrifysgolion</translation> <translation id="4056223980640387499">Sepia</translation> <translation id="4058922952496707368">Allwedd "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Defnyddio'r datgloi dyfais i gadarnhau cardiau yn gyflymach</translation> <translation id="4067098466788473230">Grantiau astudio ac ysgoloriaethau</translation> <translation id="4067263367174615723">C1 (Amlen)</translation> <translation id="4067947977115446013">Ychwanegu Cyfeiriad Dilys</translation> <translation id="4072193657607981494">Wrthi'n llwytho polisïau</translation> <translation id="4072486802667267160">Bu gwall wrth brosesu eich archeb. Rhowch gynnig arall arni.</translation> +<translation id="4073376909608563327">Methu â defnyddio datgloi dyfais</translation> <translation id="4073797364926776829">Gweld y cerdyn</translation> <translation id="4075732493274867456">Nid yw'r cleient na'r gweinydd yn cefnogi fersiwn protocol SSL cyffredin na chyfres seiffr.</translation> <translation id="4079302484614802869">Mae'r ffurfweddiad dirprwy weinyddion wedi'i osod i ddefnyddio URL sgript .pac, nid dirprwy weinyddion sefydlog.</translation> @@ -1412,6 +1419,7 @@ <translation id="4840250757394056958">Gweld eich hanes Chrome</translation> <translation id="484462545196658690">Awtomatig</translation> <translation id="484671803914931257">Cael gostyngiad ar <ph name="MERCHANT_NAME" /> a rhagor</translation> +<translation id="484988093836683706">Defnyddio datgloi dyfais</translation> <translation id="4850886885716139402">Gweld</translation> <translation id="4852429274334674023">Systemau gweithredu</translation> <translation id="485316830061041779">Almaeneg</translation> @@ -1799,6 +1807,7 @@ <translation id="5921185718311485855">Ymlaen</translation> <translation id="5921639886840618607">Cadw cerdyn i Gyfrif Google?</translation> <translation id="5922853866070715753">Bron â gorffen</translation> +<translation id="5923492272538889093">Defnyddio datgloi dyfais yn lle CGS?</translation> <translation id="5928444777041341328">Cartref a gardd</translation> <translation id="5932224571077948991">Mae'r wefan yn dangos hysbysebion ymwthiol neu gamarweiniol</translation> <translation id="5937560539988385583">Mae'r dudalen wedi'i chyfieithu</translation> @@ -1972,6 +1981,7 @@ <translation id="643051589346665201">Newid cyfrinair Google</translation> <translation id="6433490469411711332">Golygu manylion cyswllt</translation> <translation id="6433595998831338502">Mae <ph name="HOST_NAME" /> wedi gwrthod cysylltu.</translation> +<translation id="6433797564277305076">Cadarnhewch eich cardiau'n gynt gan ddefnyddio datgloi dyfais o hyn ymlaen</translation> <translation id="6440503408713884761">Wedi anwybyddu</translation> <translation id="6443406338865242315">Pa estyniadau ac ategion rydych wedi'u gosod</translation> <translation id="6446163441502663861">Kahu (Amlen)</translation> @@ -2178,6 +2188,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Ni ellir cadw'r cerdyn hwn ar hyn o bryd}zero{Ni ellir cadw'r cardiau hyn ar hyn o bryd}two{Ni ellir cadw'r cardiau hyn ar hyn o bryd}few{Ni ellir cadw'r cardiau hyn ar hyn o bryd}many{Ni ellir cadw'r cardiau hyn ar hyn o bryd}other{Ni ellir cadw'r cardiau hyn ar hyn o bryd}}</translation> <translation id="7053983685419859001">Rhwystro</translation> <translation id="7058163556978339998">Gwnaeth <ph name="BROWSER" /> ddilysu bod <ph name="ISSUER" /> wedi cyhoeddi tystysgrif y wefan hon.</translation> +<translation id="7058774143982824355">Gwasanaeth Dosrannwr Cyfrineiriau CSV</translation> <translation id="7061777300866737982">Diogelwch cartref</translation> <translation id="7062635574500127092">Glaswyrdd</translation> <translation id="706295145388601875">Ychwanegu a rheoli cyfeiriadau yng ngosodiadau Chrome</translation> @@ -2442,6 +2453,7 @@ <translation id="7696089921647603491">Roc clasurol a hen ganeuon</translation> <translation id="7697066736081121494">Prc8 (Amlen)</translation> <translation id="769721561045429135">Ar hyn o bryd, mae gennych gardiau y gellir eu defnyddio ar y ddyfais hon yn unig. Cliciwch Parhau i weld y cardiau.</translation> +<translation id="7698864304447945242">Diweddaru Google Play Services ar gyfer AR?</translation> <translation id="7699293099605015246">Nid yw erthyglau ar gael ar hyn o bryd</translation> <translation id="7701040980221191251">Dim</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Parhau i <ph name="SITE" /> (anniogel)<ph name="END_LINK" /></translation> @@ -2454,6 +2466,7 @@ <translation id="7723047071702270851">Golygu'r Cerdyn</translation> <translation id="7734285854693414638">Creu ffurflen newydd yn Google Forms yn gyflym</translation> <translation id="773466115871691567">Cyfieithu tudalennau yn <ph name="SOURCE_LANGUAGE" /> bob amser</translation> +<translation id="7736959720849233795">Copïo Cyfeiriad y Ddolen</translation> <translation id="7740996059027112821">Safonol</translation> <translation id="77424286611022110">Mae'r wefan hon yn dangos hysbysebion ymwthiol neu gamarweiniol. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Rhwystrwyd cynnwys peryglus.</translation>
diff --git a/components/strings/components_strings_da.xtb b/components/strings/components_strings_da.xtb index bada21a..b0662e72 100644 --- a/components/strings/components_strings_da.xtb +++ b/components/strings/components_strings_da.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Læseliste</translation> <translation id="1264309058268477500">Alternativ</translation> <translation id="1264974993859112054">Sport</translation> +<translation id="1266469291454105242">Enhedsoplåsning</translation> <translation id="1269516672602708785">Opret hurtigt et nyt website i Google Sites</translation> <translation id="1270502636509132238">Afhentningsmetode</translation> <translation id="1281476433249504884">Stabler 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Kontaktannoncer og personlige annoncer</translation> <translation id="1753706481035618306">Sidetal</translation> <translation id="1755621011177747277">Adoption</translation> +<translation id="1756026472674246267">Åbn link på ny fane</translation> <translation id="175656076281618225">Magi</translation> <translation id="1757773103848038814">Skrifttype med enkelt tegnafstand</translation> <translation id="1763864636252898013">Denne server kunne ikke bevise, at den er <ph name="DOMAIN" />, da operativsystemet på din enhed ikke har tillid til sikkerhedscertifikatet. Dette kan skyldes en fejlkonfiguration, eller at en hacker har opfanget din forbindelse.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Annuller betaling</translation> <translation id="2148613324460538318">Tilføj kort</translation> <translation id="2149968176347646218">Forbindelsen er ikke sikker</translation> +<translation id="2153609454945889823">Vil du installere Google Play-tjenester til AR?</translation> <translation id="2154054054215849342">Synkronisering er ikke tilgængelig for dit domæne</translation> <translation id="2154484045852737596">Rediger kort</translation> <translation id="2161656808144014275">Tekst</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">Kopiér versionsstreng</translation> <translation id="323107829343500871">Angiv kontrolkoden for <ph name="CREDIT_CARD" /></translation> <translation id="3234666976984236645">Registrer altid vigtigt indhold på dette website</translation> +<translation id="3238395604961564389">Åbn link i inkognitovindue</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />– tryk på Tab-tasten efterfulgt af Enter for at tilpasse din browsers udseende</translation> <translation id="3240791268468473923">Regneark uden matchende loginoplysninger til sikker betaling er åbent</translation> <translation id="324180406144491771">"<ph name="HOST_NAME" />"-links er blokeret</translation> @@ -945,6 +949,7 @@ <translation id="3531780078352352885">Udskriftsjob</translation> <translation id="3532844647053365774"><ph name="HOST" /> anmoder om at bruge din mikrofon</translation> <translation id="3533328374079021623">Postkasse 5</translation> +<translation id="3542768452570884558">Åbn link i nyt vindue</translation> <translation id="3550112004925580947">Restaurations- og hotelbranchen</translation> <translation id="3552297013052089404">Sans Serif-skrifttype</translation> <translation id="3558573058928565255">Dagtimer</translation> @@ -1115,11 +1120,13 @@ <translation id="4040350669425716613">Gymnasier og universiteter</translation> <translation id="4056223980640387499">Sepia</translation> <translation id="4058922952496707368">Nøgle "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Brug enhedsoplåsning til at bekræfte kort hurtigere</translation> <translation id="4067098466788473230">Studielegater og stipendier</translation> <translation id="4067263367174615723">C1 (Envelope)</translation> <translation id="4067947977115446013">Tilføj gyldig adresse</translation> <translation id="4072193657607981494">Indlæser politikker</translation> <translation id="4072486802667267160">Der opstod en fejl under behandlingen af din ordre. Prøv igen.</translation> +<translation id="4073376909608563327">Enhedsoplåsning kunne ikke anvendes</translation> <translation id="4073797364926776829">Vis kort</translation> <translation id="4075732493274867456">Klienten og serveren understøtter ikke en fælles SSL-protokolversion eller et fælles krypteringsprogram.</translation> <translation id="4079302484614802869">Proxykonfiguration er angivet til at anvende en webadresse for .pac-script, ikke faste proxyservere.</translation> @@ -1412,6 +1419,7 @@ <translation id="4840250757394056958">Se din Chrome-historik</translation> <translation id="484462545196658690">Automatisk</translation> <translation id="484671803914931257">Få rabat på <ph name="MERCHANT_NAME" /> og meget mere</translation> +<translation id="484988093836683706">Brug enhedsoplåsning</translation> <translation id="4850886885716139402">Vis</translation> <translation id="4852429274334674023">Operativsystemer</translation> <translation id="485316830061041779">Tysk</translation> @@ -1799,6 +1807,7 @@ <translation id="5921185718311485855">Til</translation> <translation id="5921639886840618607">Vil du gemme kortet på din Google-konto?</translation> <translation id="5922853866070715753">Næsten færdig</translation> +<translation id="5923492272538889093">Vil du bruge enhedsoplåsning i stedet for kontrolkoden?</translation> <translation id="5928444777041341328">Hus og have</translation> <translation id="5932224571077948991">Websitet viser påtrængende eller vildledende annoncer</translation> <translation id="5937560539988385583">Siden blev oversat</translation> @@ -1972,6 +1981,7 @@ <translation id="643051589346665201">Skift Google-adgangskode</translation> <translation id="6433490469411711332">Rediger kontaktoplysninger</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> nægtede at oprette forbindelse.</translation> +<translation id="6433797564277305076">Bekræft dine kort hurtigere ved hjælp af enhedsoplåsning fra nu af</translation> <translation id="6440503408713884761">Ignoreret</translation> <translation id="6443406338865242315">Hvilke udvidelser og plugins, du har installeret</translation> <translation id="6446163441502663861">Kahu (Envelope)</translation> @@ -2178,6 +2188,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Kortet kan ikke tilføjes lige nu}one{Kortet kan ikke tilføjes lige nu}other{Kortene kan ikke tilføjes lige nu}}</translation> <translation id="7053983685419859001">Bloker</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> bekræftede, at <ph name="ISSUER" /> har udstedt dette websites certifikat.</translation> +<translation id="7058774143982824355">Parsingtjeneste til CSV-adgangskode</translation> <translation id="7061777300866737982">Sikkerhed i hjemmet</translation> <translation id="7062635574500127092">Grønblå</translation> <translation id="706295145388601875">Tilføj og administrer adresser i Chrome-indstillingerne</translation> @@ -2442,6 +2453,7 @@ <translation id="7696089921647603491">Klassisk rock og ældre musik</translation> <translation id="7697066736081121494">Prc8 (Envelope)</translation> <translation id="769721561045429135">Lige nu har du kort, som kun kan bruges på denne enhed. Klik på Fortsæt for at se kortene.</translation> +<translation id="7698864304447945242">Vil du opdatere Google Play-tjenester til AR?</translation> <translation id="7699293099605015246">Der er ingen tilgængelige artikler lige nu</translation> <translation id="7701040980221191251">Ingen</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Fortsæt til <ph name="SITE" /> (usikkert)<ph name="END_LINK" /></translation> @@ -2454,6 +2466,7 @@ <translation id="7723047071702270851">Rediger kort</translation> <translation id="7734285854693414638">Opret hurtigt en ny formular i Google Analyse</translation> <translation id="773466115871691567">Oversæt altid sider på <ph name="SOURCE_LANGUAGE" /></translation> +<translation id="7736959720849233795">Kopiér linkadresse</translation> <translation id="7740996059027112821">Standard</translation> <translation id="77424286611022110">Dette website viser påtrængende eller vildledende annoncer. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Farligt indhold er blokeret.</translation>
diff --git a/components/strings/components_strings_de.xtb b/components/strings/components_strings_de.xtb index 7ca8b23..358e6c3 100644 --- a/components/strings/components_strings_de.xtb +++ b/components/strings/components_strings_de.xtb
@@ -1407,7 +1407,7 @@ <translation id="4834250788637067901">Zahlungsmethoden, Angebote und Adressen aus Google Pay</translation> <translation id="4838327282952368871">Träumerisch</translation> <translation id="4839087176073128681">Bezahle beim nächsten Mal schneller und schütze deine Karte mit der branchenführenden Sicherheit von Google.</translation> -<translation id="4840250757394056958">Chrome-Verlauf anzeigen</translation> +<translation id="4840250757394056958">Chrome-Verlauf ansehen</translation> <translation id="484462545196658690">Auto</translation> <translation id="484671803914931257">Erhalte Rabatte bei <ph name="MERCHANT_NAME" /> und weiteren Händlern</translation> <translation id="4850886885716139402">Anzeigen</translation> @@ -1759,7 +1759,7 @@ <translation id="5789643057113097023">.</translation> <translation id="5803412860119678065">Möchtest du die Daten deiner <ph name="CARD_DETAIL" /> eingeben?</translation> <translation id="5804241973901381774">Berechtigungen</translation> -<translation id="5808435672482059465">Chrome-Verlauf anzeigen</translation> +<translation id="5808435672482059465">Chrome-Verlauf ansehen</translation> <translation id="5808542072418270309">Simulationsspiele</translation> <translation id="5810442152076338065">Deine Verbindung zu <ph name="DOMAIN" /> ist mit einer veralteten Codier-Suite verschlüsselt.</translation> <translation id="5812947184178430888">Wenn Chrome Sicherheitshinweise meldet, werden relevante Informationen an deinen Administrator gesendet. Dazu gehören z. B. URLs der von dir in Chrome besuchten Seiten, Dateinamen oder Metadaten sowie der Nutzername, den du zum Anmelden in Webanwendungen, auf deinem Gerät und in Chrome verwendest.</translation>
diff --git a/components/strings/components_strings_es-419.xtb b/components/strings/components_strings_es-419.xtb index fc97132..f400837 100644 --- a/components/strings/components_strings_es-419.xtb +++ b/components/strings/components_strings_es-419.xtb
@@ -1224,7 +1224,7 @@ <translation id="4310070645992025887">Buscar tus Exploraciones</translation> <translation id="4312613361423056926">B2</translation> <translation id="4312866146174492540">Bloquear (predeterminado)</translation> -<translation id="4314815835985389558">Administrar la sincronización</translation> +<translation id="4314815835985389558">Administrar sincronización</translation> <translation id="4318312030194671742">Servicio para crear vista previa de sitios web</translation> <translation id="4318566738941496689">Tu nombre de dispositivo y la dirección de red</translation> <translation id="4325600325087822253">Bandeja 17</translation> @@ -2263,7 +2263,7 @@ <translation id="7298195798382681320">Recomendada</translation> <translation id="7300012071106347854">Azul cobalto</translation> <translation id="7304030187361489308">Alto</translation> -<translation id="7304562222803846232">Administrar la configuración de privacidad de la Cuenta de Google</translation> +<translation id="7304562222803846232">Administrar configuración de privacidad de la Cuenta de Google</translation> <translation id="7305756307268530424">Empezar más despacio</translation> <translation id="7308436126008021607">sincronización en segundo plano</translation> <translation id="7310392214323165548">El dispositivo se reiniciará en breve</translation>
diff --git a/components/strings/components_strings_es.xtb b/components/strings/components_strings_es.xtb index 2fe5719..d3a58aef 100644 --- a/components/strings/components_strings_es.xtb +++ b/components/strings/components_strings_es.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Lista de lectura</translation> <translation id="1264309058268477500">Alternativa</translation> <translation id="1264974993859112054">Deportes</translation> +<translation id="1266469291454105242">Desbloqueo del dispositivo</translation> <translation id="1269516672602708785">Crea un nuevo sitio con Google Sites rápidamente</translation> <translation id="1270502636509132238">Método de recogida</translation> <translation id="1281476433249504884">Apilador 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Citas y anuncios personales</translation> <translation id="1753706481035618306">Número de página</translation> <translation id="1755621011177747277">Adopción</translation> +<translation id="1756026472674246267">Abrir enlace en una pestaña nueva</translation> <translation id="175656076281618225">Magia</translation> <translation id="1757773103848038814">Fuente monoespaciada</translation> <translation id="1763864636252898013">Este servidor no ha podido probar que su dominio es <ph name="DOMAIN" />, el sistema operativo de tu dispositivo no confía en su certificado de seguridad. Este problema puede deberse a una configuración incorrecta o a que un atacante haya interceptado la conexión.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Cancelar pago</translation> <translation id="2148613324460538318">Añadir tarjeta</translation> <translation id="2149968176347646218">La conexión no es segura</translation> +<translation id="2153609454945889823">¿Instalar Servicios de Google Play para RA?</translation> <translation id="2154054054215849342">La sincronización no está disponible para tu dominio</translation> <translation id="2154484045852737596">Editar tarjeta</translation> <translation id="2161656808144014275">Texto</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">Copiar cadena de versión</translation> <translation id="323107829343500871">Introduce el código CVC de la tarjeta <ph name="CREDIT_CARD" /></translation> <translation id="3234666976984236645">Detectar siempre contenido importante en este sitio</translation> +<translation id="3238395604961564389">Abrir enlace en una ventana de incógnito</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />: pulsa Tabulador y, después, Intro para personalizar el diseño de tu navegador</translation> <translation id="3240791268468473923">Se ha abierto la hoja de credenciales de pago seguro con una credencial que no coincide</translation> <translation id="324180406144491771">Los enlaces de <ph name="HOST_NAME" /> se han bloqueado</translation> @@ -945,6 +949,7 @@ <translation id="3531780078352352885">Hojas de tarea</translation> <translation id="3532844647053365774"><ph name="HOST" /> quiere usar el micrófono</translation> <translation id="3533328374079021623">Buzón de correo 5</translation> +<translation id="3542768452570884558">Abrir enlace en una ventana nueva</translation> <translation id="3550112004925580947">Hostelería</translation> <translation id="3552297013052089404">Fuente Sans Serif</translation> <translation id="3558573058928565255">Día y hora</translation> @@ -1115,11 +1120,13 @@ <translation id="4040350669425716613">Universidades</translation> <translation id="4056223980640387499">Sepia</translation> <translation id="4058922952496707368">Clave "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Usa el desbloqueo del dispositivo para confirmar las tarjetas más rápido</translation> <translation id="4067098466788473230">Subvenciones y becas para estudiantes</translation> <translation id="4067263367174615723">C1 (sobre)</translation> <translation id="4067947977115446013">Añade una dirección válida</translation> <translation id="4072193657607981494">Cargando políticas</translation> <translation id="4072486802667267160">Se ha producido un error al procesar el pedido. Vuelve a intentarlo.</translation> +<translation id="4073376909608563327">No se ha podido usar el desbloqueo del dispositivo</translation> <translation id="4073797364926776829">Ver tarjeta</translation> <translation id="4075732493274867456">El cliente y el servidor no son compatibles con la misma versión de protocolo SSL o de cifrado.</translation> <translation id="4079302484614802869">Se ha configurado el proxy para que use una URL de secuencia de comandos .pac, en lugar de servidores proxy fijos.</translation> @@ -1412,6 +1419,7 @@ <translation id="4840250757394056958">Ver tu historial de Chrome</translation> <translation id="484462545196658690">Automático</translation> <translation id="484671803914931257">Obtén descuentos en <ph name="MERCHANT_NAME" /> y más</translation> +<translation id="484988093836683706">Usar desbloqueo del dispositivo</translation> <translation id="4850886885716139402">Ver</translation> <translation id="4852429274334674023">Sistemas operativos</translation> <translation id="485316830061041779">Alemán</translation> @@ -1799,6 +1807,7 @@ <translation id="5921185718311485855">Activado</translation> <translation id="5921639886840618607">¿Quieres guardar la tarjeta en tu cuenta de Google?</translation> <translation id="5922853866070715753">Casi hemos acabado</translation> +<translation id="5923492272538889093">¿Usar el desbloqueo del dispositivo en vez del CVC?</translation> <translation id="5928444777041341328">Casa y jardín</translation> <translation id="5932224571077948991">El sitio web muestra anuncios invasivos o engañosos</translation> <translation id="5937560539988385583">Página traducida</translation> @@ -1928,7 +1937,7 @@ <translation id="6305205051461490394">No se puede acceder a <ph name="URL" />.</translation> <translation id="6312113039770857350">Página web no disponible</translation> <translation id="6316226860534107313">Escúteres y ciclomotores</translation> -<translation id="63172326633386613">Gestionar la configuración de accesibilidad</translation> +<translation id="63172326633386613">Gestionar configuración de accesibilidad</translation> <translation id="6319249456820053699">Cámaras y videocámaras</translation> <translation id="6321917430147971392">Comprueba tu configuración de DNS</translation> <translation id="6322182122604171028">No se ha podido usar Windows Hello</translation> @@ -1972,6 +1981,7 @@ <translation id="643051589346665201">Cambiar contraseña de Google</translation> <translation id="6433490469411711332">Editar información de contacto</translation> <translation id="6433595998831338502">La página <ph name="HOST_NAME" /> ha rechazado la conexión.</translation> +<translation id="6433797564277305076">Confirma tus tarjetas más rápido usando el desbloqueo del dispositivo a partir de ahora</translation> <translation id="6440503408713884761">Ignorada</translation> <translation id="6443406338865242315">Qué extensiones y complementos tienes instalados</translation> <translation id="6446163441502663861">Kahu (sobre)</translation> @@ -2178,6 +2188,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Ahora no se puede guardar esta tarjeta}other{Ahora no se pueden guardar estas tarjetas}}</translation> <translation id="7053983685419859001">Bloquear</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> ha verificado que <ph name="ISSUER" /> emitió el certificado de este sitio web.</translation> +<translation id="7058774143982824355">Servicio para analizar contraseñas de CSV</translation> <translation id="7061777300866737982">Seguridad doméstica</translation> <translation id="7062635574500127092">Turquesa</translation> <translation id="706295145388601875">Añade y gestiona direcciones en la configuración de Chrome</translation> @@ -2262,7 +2273,7 @@ <translation id="7298195798382681320">Recomendada</translation> <translation id="7300012071106347854">Azul cobalto</translation> <translation id="7304030187361489308">Alto</translation> -<translation id="7304562222803846232">Gestionar configuración de privacidad de la cuenta de Google</translation> +<translation id="7304562222803846232">Gestionar configuración de privacidad de cuenta de Google</translation> <translation id="7305756307268530424">Empezar más lento</translation> <translation id="7308436126008021607">sincronización en segundo plano</translation> <translation id="7310392214323165548">El dispositivo se reiniciará en breve</translation> @@ -2442,6 +2453,7 @@ <translation id="7696089921647603491">Clásicos del rock</translation> <translation id="7697066736081121494">Prc8 (sobre)</translation> <translation id="769721561045429135">Tienes tarjetas que solo se pueden usar en este dispositivo. Haz clic en Continuar para revisarlas.</translation> +<translation id="7698864304447945242">¿Actualizar Servicios de Google Play para RA?</translation> <translation id="7699293099605015246">Los artículos no están disponibles en este momento</translation> <translation id="7701040980221191251">No hay</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Acceder a <ph name="SITE" /> (sitio no seguro)<ph name="END_LINK" /></translation> @@ -2454,6 +2466,7 @@ <translation id="7723047071702270851">Edita la tarjeta</translation> <translation id="7734285854693414638">Crea un nuevo Formulario de Google rápidamente</translation> <translation id="773466115871691567">Traducir siempre las páginas en <ph name="SOURCE_LANGUAGE" /></translation> +<translation id="7736959720849233795">Copiar dirección de enlace</translation> <translation id="7740996059027112821">Estándar</translation> <translation id="77424286611022110">Este sitio muestra anuncios invasivos o engañosos. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Contenido peligroso bloqueado.</translation>
diff --git a/components/strings/components_strings_et.xtb b/components/strings/components_strings_et.xtb index 2bb36e0f..93a2e46 100644 --- a/components/strings/components_strings_et.xtb +++ b/components/strings/components_strings_et.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Lugemisloend</translation> <translation id="1264309058268477500">Alternatiivne</translation> <translation id="1264974993859112054">Sport</translation> +<translation id="1266469291454105242">Seadmega avamine</translation> <translation id="1269516672602708785">Rakenduses Google Sites kiirelt uue saidi loomine</translation> <translation id="1270502636509132238">Kättesaamisviis</translation> <translation id="1281476433249504884">Virnastaja 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Kohtingud ja tutvumiskuulutused</translation> <translation id="1753706481035618306">Lk</translation> <translation id="1755621011177747277">Adopteerimine</translation> +<translation id="1756026472674246267">Ava link uuel vahelehel</translation> <translation id="175656076281618225">Mustkunst</translation> <translation id="1757773103848038814">Püsisammuga font</translation> <translation id="1763864636252898013">Server ei suutnud tõestada, et see on domeen <ph name="DOMAIN" />, seadme operatsioonisüsteem ei usalda selle turvasertifikaati. Selle põhjuseks võib olla vale seadistus või ründaja, kes on sekkunud teie ühendusse.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Tühista makse</translation> <translation id="2148613324460538318">Lisa kaart</translation> <translation id="2149968176347646218">Ühendus ei ole turvaline</translation> +<translation id="2153609454945889823">Kas installida rakendus Google Play Services for AR?</translation> <translation id="2154054054215849342">Sünkroonimisteenus pole domeeni jaoks saadaval</translation> <translation id="2154484045852737596">Kaardi muutmine</translation> <translation id="2161656808144014275">Tekst</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">Kopeeri versioonistring</translation> <translation id="323107829343500871">Krediitkaardi <ph name="CREDIT_CARD" /> CVC sisestamine</translation> <translation id="3234666976984236645">Sellel saidil olulise sisu alati tuvastamine</translation> +<translation id="3238395604961564389">Ava link inkognito aknas</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, oma brauseri ilme kohandamiseks vajutage tabulaatorit ja siis sisestusklahvi</translation> <translation id="3240791268468473923">Turvalise maksemandaadi leht selle kohta, et pole ühtegi sobivat mandaati, on avatud</translation> <translation id="324180406144491771">Hosti „<ph name="HOST_NAME" />“ lingid on blokeeritud</translation> @@ -945,6 +949,7 @@ <translation id="3531780078352352885">Töölehed</translation> <translation id="3532844647053365774"><ph name="HOST" /> soovib kasutada teie mikrofoni</translation> <translation id="3533328374079021623">Postkast 5</translation> +<translation id="3542768452570884558">Ava link uues aknas</translation> <translation id="3550112004925580947">Võõrustamistööstus</translation> <translation id="3552297013052089404">Seriifideta font</translation> <translation id="3558573058928565255">Päev</translation> @@ -1115,11 +1120,13 @@ <translation id="4040350669425716613">Kolledžid ja ülikoolid</translation> <translation id="4056223980640387499">Seepia</translation> <translation id="4058922952496707368">Võti „<ph name="SUBKEY" />”: <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Kasutage kaartide kiiremaks kinnitamiseks seadmega avamist</translation> <translation id="4067098466788473230">Õppetoetused ja stipendiumid</translation> <translation id="4067263367174615723">C1 (ümbrik)</translation> <translation id="4067947977115446013">Sobiva aadressi lisamine</translation> <translation id="4072193657607981494">Reeglite laadimine</translation> <translation id="4072486802667267160">Teie tellimuse töötlemisel ilmnes viga. Proovige uuesti.</translation> +<translation id="4073376909608563327">Seadmega avamist ei saanud kasutada</translation> <translation id="4073797364926776829">Kuva kaart</translation> <translation id="4075732493274867456">Klient ja server ei toeta tavapärast SSL-protokolli versiooni ega šifreerimiskomplekti.</translation> <translation id="4079302484614802869">Puhverserveri konfigureerimine on määratud kasutama pac-skripti URL-i, mitte fikseeritud puhverservereid.</translation> @@ -1412,6 +1419,7 @@ <translation id="4840250757394056958">Chrome’i ajaloo vaatamine</translation> <translation id="484462545196658690">Automaatne</translation> <translation id="484671803914931257">Saage allahindlust kaupmehe <ph name="MERCHANT_NAME" /> juures ja mujalgi</translation> +<translation id="484988093836683706">Kasuta seadmega avamist</translation> <translation id="4850886885716139402">Kuva</translation> <translation id="4852429274334674023">Operatsioonisüsteemid</translation> <translation id="485316830061041779">saksa keel</translation> @@ -1799,6 +1807,7 @@ <translation id="5921185718311485855">Sees</translation> <translation id="5921639886840618607">Kas salvestada kaart Google'i kontole?</translation> <translation id="5922853866070715753">Peaaegu valmis</translation> +<translation id="5923492272538889093">Kas kasutada CVC asemel seadmega avamist?</translation> <translation id="5928444777041341328">Kodu ja aed</translation> <translation id="5932224571077948991">Sait kuvab sekkuvaid või eksitavaid reklaame</translation> <translation id="5937560539988385583">Leht on tõlgitud</translation> @@ -1972,6 +1981,7 @@ <translation id="643051589346665201">Muuda Google'i parooli</translation> <translation id="6433490469411711332">Kontaktandmete muutmine</translation> <translation id="6433595998831338502">Host <ph name="HOST_NAME" /> keeldus ühendamast.</translation> +<translation id="6433797564277305076">Kinnitage oma kaardid kiiremini, kasutades edaspidi seadmega avamist</translation> <translation id="6440503408713884761">Eiras</translation> <translation id="6443406338865242315">Millised laiendused ja pistikprogrammid olete installinud</translation> <translation id="6446163441502663861">Kahu (ümbrik)</translation> @@ -2178,6 +2188,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Seda kaarti ei saa praegu salvestada}other{Neid kaarte ei saa praegu salvestada}}</translation> <translation id="7053983685419859001">Blokeeri</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> kinnitas, et selle veebisaidi sertifikaadi andis välja <ph name="ISSUER" />.</translation> +<translation id="7058774143982824355">Paroolide CSV-faili sõelumise teenus</translation> <translation id="7061777300866737982">Kodune turvalisus ja julgeolek</translation> <translation id="7062635574500127092">Sinakasroheline</translation> <translation id="706295145388601875">Lisage ja hallake Chrome'i seadetes aadresse</translation> @@ -2442,6 +2453,7 @@ <translation id="7696089921647603491">Klassikaline rokk ja vanad hitid</translation> <translation id="7697066736081121494">Prc8 (ümbrik)</translation> <translation id="769721561045429135">Praegu on teil kaarte, mida saab kasutada ainult selles seadmes. Kaartide ülevaatamiseks klõpsake käsul Jätka.</translation> +<translation id="7698864304447945242">Kas värskendada rakendust Google Play Services for AR?</translation> <translation id="7699293099605015246">Artiklid pole praegu saadaval</translation> <translation id="7701040980221191251">Pole</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Edasiliikumine saidile <ph name="SITE" /> (ebaturvaline)<ph name="END_LINK" /></translation> @@ -2454,6 +2466,7 @@ <translation id="7723047071702270851">Kaardi muutmine</translation> <translation id="7734285854693414638">Rakenduses Google'i vormid kiirelt uue vormi loomine</translation> <translation id="773466115871691567">Tõlgi alati <ph name="SOURCE_LANGUAGE" /> keeles olevad lehed</translation> +<translation id="7736959720849233795">Kopeeri lingi aadress</translation> <translation id="7740996059027112821">Tavapärane</translation> <translation id="77424286611022110">Sait kuvab sekkuvaid või eksitavaid reklaame. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Ohtlik sisu blokeeriti.</translation>
diff --git a/components/strings/components_strings_eu.xtb b/components/strings/components_strings_eu.xtb index ffc7836a..1b2e5981 100644 --- a/components/strings/components_strings_eu.xtb +++ b/components/strings/components_strings_eu.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Irakurketa-zerrenda</translation> <translation id="1264309058268477500">Ordezkoa</translation> <translation id="1264974993859112054">Kirolak</translation> +<translation id="1266469291454105242">Gailu-desblokeoa</translation> <translation id="1269516672602708785">Sortu bizkor webgune bat Google Sites-en</translation> <translation id="1270502636509132238">Jasotzeko modua</translation> <translation id="1281476433249504884">1. pilatzailea</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Zitetarako eta gauza pertsonaletarako zerbitzuak</translation> <translation id="1753706481035618306">Orri-zenbakia</translation> <translation id="1755621011177747277">Adopzioak</translation> +<translation id="1756026472674246267">Ireki esteka beste fitxa batean</translation> <translation id="175656076281618225">Magia</translation> <translation id="1757773103848038814">Monospace letra</translation> <translation id="1763864636252898013">Zerbitzari honek ezin izan du egiaztatu <ph name="DOMAIN" /> domeinua denik. Zure gailuaren sistema eragilea ez da bere segurtasun-ziurtagiriaz fidatzen. Baliteke gaizki konfiguratuta dagoelako izatea edo erasotzaile batek zure konexioa atzeman duelako izatea.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Utzi bertan behera ordainketa</translation> <translation id="2148613324460538318">Gehitu txartela</translation> <translation id="2149968176347646218">Konexioa ez da segurua</translation> +<translation id="2153609454945889823">Errealitate areagoturako Google Play Services instalatu nahi duzu?</translation> <translation id="2154054054215849342">Sinkronizazioa ez dago erabilgarri zure domeinuan</translation> <translation id="2154484045852737596">Editatu txartela</translation> <translation id="2161656808144014275">testua</translation> @@ -829,6 +832,7 @@ <translation id="3229277193950731405">Kopiatu bertsioaren katea</translation> <translation id="323107829343500871">Idatzi <ph name="CREDIT_CARD" /> txartelaren CVC kodea</translation> <translation id="3234666976984236645">Hauteman beti webgune honetako eduki garrantzitsua</translation> +<translation id="3238395604961564389">Ireki esteka ezkutuko moduko leiho batean</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />: sakatu tabuladorea eta, ondoren, sakatu "Sartu" tekla arakatzailearen itxura pertsonalizatzeko</translation> <translation id="3240791268468473923">Ordainketak egiteko kredentzial segurua bat ez datorrela dioen kredentzial-orria irekita dago</translation> <translation id="324180406144491771"><ph name="HOST_NAME" /> motako estekak blokeatuta daude</translation> @@ -941,6 +945,7 @@ <translation id="3531780078352352885">Lan-orriak</translation> <translation id="3532844647053365774"><ph name="HOST" /> webguneak mikrofonoa erabili nahi du</translation> <translation id="3533328374079021623">5. postontzia</translation> +<translation id="3542768452570884558">Ireki esteka beste leiho batean</translation> <translation id="3550112004925580947">Ostalaritza</translation> <translation id="3552297013052089404">Sans-serif letra</translation> <translation id="3558573058928565255">Eguna</translation> @@ -1111,11 +1116,13 @@ <translation id="4040350669425716613">Fakultateak eta unibertsitateak</translation> <translation id="4056223980640387499">Sepia</translation> <translation id="4058922952496707368">"<ph name="SUBKEY" />" tekla: <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Erabili gailu-desblokeoa txartelak bizkorrago berresteko</translation> <translation id="4067098466788473230">Ikasteko laguntzak eta bekak</translation> <translation id="4067263367174615723">C1 (gutun-azala)</translation> <translation id="4067947977115446013">Gehitu balio duen helbide bat</translation> <translation id="4072193657607981494">Gidalerroak kargatzen</translation> <translation id="4072486802667267160">Errore bat gertatu da eskaera prozesatzean. Saiatu berriro.</translation> +<translation id="4073376909608563327">Ezin izan da erabili gailu-desblokeoa</translation> <translation id="4073797364926776829">Ikusi txartela</translation> <translation id="4075732493274867456">Bezeroak eta zerbitzariak ez dute onartzen SSL protokoloaren bertsio edo enkriptatze multzo arrunta.</translation> <translation id="4079302484614802869">Proxy-konfigurazioa .pac scripteko URLa erabiltzeko dago ezarrita, ez proxy-zerbitzari finkoak.</translation> @@ -1408,6 +1415,7 @@ <translation id="4840250757394056958">Ikusi Chrome-ko historia</translation> <translation id="484462545196658690">Automatikoa</translation> <translation id="484671803914931257">Eskuratu deskontuak <ph name="MERCHANT_NAME" /> eta beste saltzaile batzuen produktuetan</translation> +<translation id="484988093836683706">Erabili gailu-desblokeoa</translation> <translation id="4850886885716139402">Ikusi</translation> <translation id="4852429274334674023">Sistema eragileak</translation> <translation id="485316830061041779">Alemana</translation> @@ -1795,6 +1803,7 @@ <translation id="5921185718311485855">Aktibatuta</translation> <translation id="5921639886840618607">Google-ko kontuan gorde nahi duzu txartela?</translation> <translation id="5922853866070715753">Ia amaitu da</translation> +<translation id="5923492272538889093">Gailu-desblokeoa erabili nahi duzu CVCaren ordez?</translation> <translation id="5928444777041341328">Etxea eta lorategia</translation> <translation id="5932224571077948991">Webguneak iragarki oztopatzaile edo iruzurrezkoak erakusten ditu</translation> <translation id="5937560539988385583">Itzuli da orria</translation> @@ -1967,6 +1976,7 @@ <translation id="643051589346665201">Aldatu Google-ko pasahitza</translation> <translation id="6433490469411711332">Editatu harremanetarako informazioa</translation> <translation id="6433595998831338502">Konexioa baztertu du <ph name="HOST_NAME" /> webguneak.</translation> +<translation id="6433797564277305076">Aurrerantzean, berretsi txartelak bizkorrago gailu-desblokeoa erabilita</translation> <translation id="6440503408713884761">Ez ikusi egin zaio</translation> <translation id="6443406338865242315">Instalatuta dauzkazun luzapenak eta pluginak.</translation> <translation id="6446163441502663861">Kahu (gutun-azala)</translation> @@ -2173,6 +2183,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Ezin da gorde txartela une honetan}other{Ezin dira gorde txartelak une honetan}}</translation> <translation id="7053983685419859001">Blokeatu</translation> <translation id="7058163556978339998">Webgunearen ziurtagiria <ph name="ISSUER" /> hornitzaileak jaulki duela egiaztatu du <ph name="BROWSER" /> arakatzaileak.</translation> +<translation id="7058774143982824355">Pasahitzen CSV formatuko fitxategiak analizatzeko zerbitzua</translation> <translation id="7061777300866737982">Etxeko babesa eta segurtasuna</translation> <translation id="7062635574500127092">Anila</translation> <translation id="706295145388601875">Gehitu eta kudeatu helbideak Chrome-ren ezarpenetan</translation> @@ -2437,6 +2448,7 @@ <translation id="7696089921647603491">Rock klasikoa eta abesti zaharrak</translation> <translation id="7697066736081121494">Prc8 (gutun-azala)</translation> <translation id="769721561045429135">Une honetan, gailu honetan soilik erabil daitezkeen txartelak dituzu. Txartelak berrikusteko, sakatu Egin aurrera.</translation> +<translation id="7698864304447945242">Errealitate areagoturako Google Play Services eguneratu nahi duzu?</translation> <translation id="7699293099605015246">Une honetan, artikuluak ez daude erabilgarri</translation> <translation id="7701040980221191251">Bat ere ez</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Joan <ph name="SITE" /> webgunera (ez da segurua)<ph name="END_LINK" /></translation> @@ -2449,6 +2461,7 @@ <translation id="7723047071702270851">Editatu txartela</translation> <translation id="7734285854693414638">Sortu bizkor inprimaki bat Google Inprimakiak zerbitzuan</translation> <translation id="773466115871691567">Itzuli beti <ph name="SOURCE_LANGUAGE" /> darabilten orriak</translation> +<translation id="7736959720849233795">Kopiatu estekaren helbidea</translation> <translation id="7740996059027112821">Estandarra</translation> <translation id="77424286611022110">Webgune honek iragarki oztopatzaile edo iruzurrezkoak erakusten ditu. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Eduki arriskutsua blokeatu da.</translation>
diff --git a/components/strings/components_strings_fi.xtb b/components/strings/components_strings_fi.xtb index df3ae7f..6bf2650 100644 --- a/components/strings/components_strings_fi.xtb +++ b/components/strings/components_strings_fi.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Lukulista</translation> <translation id="1264309058268477500">Vaihtoehtoinen</translation> <translation id="1264974993859112054">Urheilu</translation> +<translation id="1266469291454105242">Laitteen lukituksen avaustapa</translation> <translation id="1269516672602708785">Luo uusi Google Sites ‑sivusto nopeasti</translation> <translation id="1270502636509132238">Noutotapa</translation> <translation id="1281476433249504884">Pinoaja 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Treffipalvelut ja henkilökohtaista-ilmoitukset</translation> <translation id="1753706481035618306">Sivunumero</translation> <translation id="1755621011177747277">Adoptio</translation> +<translation id="1756026472674246267">Avaa linkki uudella välilehdellä</translation> <translation id="175656076281618225">Taikuus</translation> <translation id="1757773103848038814">Monospace-fontti</translation> <translation id="1763864636252898013">Palvelin ei voinut todistaa olevansa <ph name="DOMAIN" />; laitteesi käyttöjärjestelmä ei luota sen suojausvarmenteeseen. Tämä voi johtua määritysvirheestä tai verkkoyhteytesi siepanneesta hyökkääjästä.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Peru maksu</translation> <translation id="2148613324460538318">Lisää kortti</translation> <translation id="2149968176347646218">Yhteys ei ole turvallinen</translation> +<translation id="2153609454945889823">Asennetaanko Google Play Services for AR?</translation> <translation id="2154054054215849342">Synkronointi ei ole käytettävissä verkkotunnuksessasi.</translation> <translation id="2154484045852737596">Muokkaa korttia</translation> <translation id="2161656808144014275">Teksti</translation> @@ -833,6 +836,7 @@ <translation id="3229277193950731405">Kopioi version merkkijono</translation> <translation id="323107829343500871">Anna kortin <ph name="CREDIT_CARD" /> CVC</translation> <translation id="3234666976984236645">Havaitse aina tärkeä sisältö tällä sivustolla</translation> +<translation id="3238395604961564389">Avaa linkki incognito-ikkunassa</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, muokkaa selaimen ulkoasua painamalla sarkainta ja sitten Enter</translation> <translation id="3240791268468473923">Suojatun maksun kirjautumistiedot eivät täsmää ‑kirjautumistietotaulukko on avattu</translation> <translation id="324180406144491771"><ph name="HOST_NAME" />‑linkit on estetty</translation> @@ -946,6 +950,7 @@ <translation id="3531780078352352885">Työpaikkasivut</translation> <translation id="3532844647053365774"><ph name="HOST" /> haluaa käyttää mikrofoniasi.</translation> <translation id="3533328374079021623">Postilaatikko 5</translation> +<translation id="3542768452570884558">Avaa linkki uudessa ikkunassa</translation> <translation id="3550112004925580947">Matkailu ja vapaa-ajan palvelut</translation> <translation id="3552297013052089404">Sans Serif ‑fontti</translation> <translation id="3558573058928565255">Päiväsaika</translation> @@ -1116,11 +1121,13 @@ <translation id="4040350669425716613">Colleget ja yliopistot</translation> <translation id="4056223980640387499">Seepia</translation> <translation id="4058922952496707368">Avain <ph name="SUBKEY" />: <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Vahvista kortteja nopeammin laitteen lukituksen avaustavalla</translation> <translation id="4067098466788473230">Opiskeluapurahat ja ‑stipendit</translation> <translation id="4067263367174615723">C1 (kirjekuori)</translation> <translation id="4067947977115446013">Lisää kelvollinen osoite</translation> <translation id="4072193657607981494">Ladataan käytäntöjä</translation> <translation id="4072486802667267160">Virhe tilausta käsiteltäessä. Yritä uudelleen.</translation> +<translation id="4073376909608563327">Laitteen lukituksen avaustapaa ei voitu käyttää</translation> <translation id="4073797364926776829">Katso kortti</translation> <translation id="4075732493274867456">Asiakassovellus ja palvelin eivät tue samaa SSL-protokollaversiota tai salaustekniikkaa.</translation> <translation id="4079302484614802869">Välityspalvelinmääritykset on asetettu käyttämään .pac-URL-osoitteita, ei kiinteitä välityspalvelimia.</translation> @@ -1413,6 +1420,7 @@ <translation id="4840250757394056958">Tarkista Chrome-historiasi</translation> <translation id="484462545196658690">Automaattinen</translation> <translation id="484671803914931257"><ph name="MERCHANT_NAME" /> ja muut voivat tarjota alennuksia</translation> +<translation id="484988093836683706">Käytä laitteen lukituksen avaustapaa</translation> <translation id="4850886885716139402">Näytä</translation> <translation id="4852429274334674023">Käyttöjärjestelmät</translation> <translation id="485316830061041779">saksa</translation> @@ -1800,6 +1808,7 @@ <translation id="5921185718311485855">Päällä</translation> <translation id="5921639886840618607">Tallennetaanko kortti Google-tilille?</translation> <translation id="5922853866070715753">Lähes valmis</translation> +<translation id="5923492272538889093">Käytetäänkö laitteen lukituksen avaustapaa CVC:n sijaan?</translation> <translation id="5928444777041341328">Koti ja puutarha</translation> <translation id="5932224571077948991">Sivustolla on häiritseviä tai harhaanjohtavia mainoksia</translation> <translation id="5937560539988385583">Sivu käännetty</translation> @@ -1973,6 +1982,7 @@ <translation id="643051589346665201">Vaihda Google-salasana</translation> <translation id="6433490469411711332">Muokkaa yhteystietoja</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> kieltäytyi muodostamasta yhteyttä.</translation> +<translation id="6433797564277305076">Vahvista kortit jatkossa nopeammin laitteen lukituksen avaustavalla</translation> <translation id="6440503408713884761">Ohitettu</translation> <translation id="6443406338865242315">Asentamasi laajennukset</translation> <translation id="6446163441502663861">Kahu (kirjekuori)</translation> @@ -2179,6 +2189,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Tätä korttia ei voi tallentaa juuri nyt}other{Näitä kortteja ei voi tallentaa juuri nyt}}</translation> <translation id="7053983685419859001">Estä</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> vahvisti, että <ph name="ISSUER" /> on myöntänyt tämän sivuston varmenteen.</translation> +<translation id="7058774143982824355">CSV-salasanatiedoston jäsennyspalvelu</translation> <translation id="7061777300866737982">Kodin turvallisuus ja valvonta</translation> <translation id="7062635574500127092">Turkoosi</translation> <translation id="706295145388601875">Lisää ja muuta osoitteita Chromen asetuksista</translation> @@ -2443,6 +2454,7 @@ <translation id="7696089921647603491">Klassinen rock ja ikivihreät suosikit</translation> <translation id="7697066736081121494">Prc8 (kirjekuori)</translation> <translation id="769721561045429135">Joitakin korttejasi voi juuri nyt käyttää vain tällä laitteella. Katso kortit valitsemalla Jatka.</translation> +<translation id="7698864304447945242">Päivitetäänkö Google Play Services for AR?</translation> <translation id="7699293099605015246">Artikkelit eivät juuri nyt ole saatavilla.</translation> <translation id="7701040980221191251">Ei mitään</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Siirry sivustoon <ph name="SITE" /> (tämä ei ole turvallista)<ph name="END_LINK" /></translation> @@ -2455,6 +2467,7 @@ <translation id="7723047071702270851">Muokkaa korttia</translation> <translation id="7734285854693414638">Luo uusi lomake nopeasti Google Formsissa</translation> <translation id="773466115871691567">Käännä aina kielellä <ph name="SOURCE_LANGUAGE" /> kirjoitut sivut</translation> +<translation id="7736959720849233795">Kopioi linkin osoite</translation> <translation id="7740996059027112821">Vakio</translation> <translation id="77424286611022110">Tällä sivustolla on häiritseviä tai harhaanjohtavia mainoksia. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Vaarallinen sisältö estetty</translation>
diff --git a/components/strings/components_strings_fil.xtb b/components/strings/components_strings_fil.xtb index 1ff023c2..5b44557 100644 --- a/components/strings/components_strings_fil.xtb +++ b/components/strings/components_strings_fil.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Listahan ng babasahin</translation> <translation id="1264309058268477500">Alternatibo</translation> <translation id="1264974993859112054">Pampalakasan</translation> +<translation id="1266469291454105242">Pag-unlock ng device</translation> <translation id="1269516672602708785">Gumawa ng bagong site sa Google Sites nang mabilis</translation> <translation id="1270502636509132238">Paraan sa Pag-pick up</translation> <translation id="1281476433249504884">Stacker 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Pakikipag-date at mga personal na bagay</translation> <translation id="1753706481035618306">Numero ng page</translation> <translation id="1755621011177747277">Pag-ampon</translation> +<translation id="1756026472674246267">Buksan ang Link sa Bagong Tab</translation> <translation id="175656076281618225">Magic</translation> <translation id="1757773103848038814">Monospace Font</translation> <translation id="1763864636252898013">Hindi mapatunayan ng server na ito na ito ay <ph name="DOMAIN" />; hindi pinagkakatiwalaan ng operating system ng iyong device ang certificate ng seguridad nito. Maaaring dulot ito ng maling configuration o isang umaatake na hinahadlangan ang iyong koneksyon.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Kanselahin ang pagbabayad</translation> <translation id="2148613324460538318">Magdagdag ng Card</translation> <translation id="2149968176347646218">Hindi secure ang koneksyon</translation> +<translation id="2153609454945889823">I-install ang Google Play Services para sa AR?</translation> <translation id="2154054054215849342">Hindi available ang pag-sync para sa iyong domain</translation> <translation id="2154484045852737596">I-edit ang card</translation> <translation id="2161656808144014275">Text</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">Kopyahin ang string ng bersyon</translation> <translation id="323107829343500871">Ilagay ang iyong CVC para sa <ph name="CREDIT_CARD" /></translation> <translation id="3234666976984236645">Palaging tukuyin ang mahalagang content sa site na ito</translation> +<translation id="3238395604961564389">Buksan ang Link sa Incognito Window</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, Pindutin ang tab at pagkatapos ay ang Enter para i-customize ang hitsura ng iyong browser</translation> <translation id="3240791268468473923">Nakabukas ang sheet na walang tumutugmang kredensyal sa kredensyal sa secure na pagbabayad</translation> <translation id="324180406144491771">Naka-block ang mga link na “<ph name="HOST_NAME" />”</translation> @@ -945,6 +949,7 @@ <translation id="3531780078352352885">Mga sheet ng trabaho</translation> <translation id="3532844647053365774">Gustong gamitin ng <ph name="HOST" /> ang iyong mikropono</translation> <translation id="3533328374079021623">Mailbox 5</translation> +<translation id="3542768452570884558">Buksan ang Link sa Bagong Window</translation> <translation id="3550112004925580947">Industriya ng hospitality</translation> <translation id="3552297013052089404">Sans-serif Font</translation> <translation id="3558573058928565255">Oras sa umaga</translation> @@ -1115,11 +1120,13 @@ <translation id="4040350669425716613">Mga kolehiyo at unibersidad</translation> <translation id="4056223980640387499">Sepia</translation> <translation id="4058922952496707368">Key "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Gamitin ang pag-unlock ng device para kumpirmahin nang mas mabilis ang mga card</translation> <translation id="4067098466788473230">Mga study grant at scholarship</translation> <translation id="4067263367174615723">C1 (Envelope)</translation> <translation id="4067947977115446013">Magdagdag ng Wastong Address</translation> <translation id="4072193657607981494">Nilo-load ang mga patakaran</translation> <translation id="4072486802667267160">Nagkaroon ng error sa pagproseso ng iyong order. Pakisubukang muli.</translation> +<translation id="4073376909608563327">Hindi magamit ang pag-unlock ng device</translation> <translation id="4073797364926776829">Tingnan ang card</translation> <translation id="4075732493274867456">Hindi sinusuportahan ng client at server ang isang karaniwang bersyon o cipher suite ng SSL protocol.</translation> <translation id="4079302484614802869">Nakatakda ang configuration ng proxy upang gumamit ng isang .pac script URL, hindi ng mga hindi nababagong proxy server.</translation> @@ -1412,6 +1419,7 @@ <translation id="4840250757394056958">Tingnan ang iyong history sa Chrome</translation> <translation id="484462545196658690">Auto</translation> <translation id="484671803914931257">Makakuha ng diskwento sa <ph name="MERCHANT_NAME" /> at higit pa</translation> +<translation id="484988093836683706">Gamitin ang pag-unlock ng device</translation> <translation id="4850886885716139402">View</translation> <translation id="4852429274334674023">Mga operating system</translation> <translation id="485316830061041779">German</translation> @@ -1799,6 +1807,7 @@ <translation id="5921185718311485855">Naka-on</translation> <translation id="5921639886840618607">I-save ang card sa Google Account?</translation> <translation id="5922853866070715753">Malapit nang matapos</translation> +<translation id="5923492272538889093">Gamitin ang pag-unlock ng device sa halip na CVC?</translation> <translation id="5928444777041341328">Tahanan at hardin</translation> <translation id="5932224571077948991">Nagpapakita ang site ng mga nakakasagabal o nakakapanlinlang na ad</translation> <translation id="5937560539988385583">Naisalin na ang page</translation> @@ -1972,6 +1981,7 @@ <translation id="643051589346665201">Palitan ang password sa Google</translation> <translation id="6433490469411711332">I-edit ang impormasyon sa pakikipag-ugnayan</translation> <translation id="6433595998831338502">Tumangging kumonekta ang <ph name="HOST_NAME" />.</translation> +<translation id="6433797564277305076">Kumpirmahin nang mas mabilis ang iyong mga card sa pamamagitan ng paggamit sa pag-unlock ng device mula ngayon</translation> <translation id="6440503408713884761">Binalewala</translation> <translation id="6443406338865242315">Aling mga extension at plugin ang na-install mo</translation> <translation id="6446163441502663861">Kahu (Envelope)</translation> @@ -2178,6 +2188,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Hindi mase-save sa ngayon ang card na ito}one{Hindi mase-save sa ngayon ang mga card na ito}other{Hindi mase-save sa ngayon ang mga card na ito}}</translation> <translation id="7053983685419859001">I-block</translation> <translation id="7058163556978339998">Na-verify ng <ph name="BROWSER" /> na ang <ph name="ISSUER" /> ang nag-isyu ng certificate na ito ng website.</translation> +<translation id="7058774143982824355">Serbisyong Pang-parse ng CSV na Password</translation> <translation id="7061777300866737982">Kaligtasan at seguridad sa tahanan</translation> <translation id="7062635574500127092">Teal</translation> <translation id="706295145388601875">Magdagdag at mamahala ng mga address sa mga setting ng Chrome</translation> @@ -2442,6 +2453,7 @@ <translation id="7696089921647603491">Classic rock at oldies</translation> <translation id="7697066736081121494">Prc8 (Envelope)</translation> <translation id="769721561045429135">Sa ngayon, may mga card kang magagamit lang sa device na ito. I-click ang Magpatuloy para suriin ang mga card.</translation> +<translation id="7698864304447945242">I-update ang Google Play Services para sa AR?</translation> <translation id="7699293099605015246">Hindi available sa ngayon ang mga artikulo</translation> <translation id="7701040980221191251">Wala</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Magpatuloy sa <ph name="SITE" /> (hindi ligtas)<ph name="END_LINK" /></translation> @@ -2454,6 +2466,7 @@ <translation id="7723047071702270851">I-edit ang Card</translation> <translation id="7734285854693414638">Gumawa ng bagong form sa Google Forms nang mabilis</translation> <translation id="773466115871691567">Palaging isalin ang mga page sa <ph name="SOURCE_LANGUAGE" /></translation> +<translation id="7736959720849233795">Kopyahin ang Address ng Link</translation> <translation id="7740996059027112821">Karaniwan</translation> <translation id="77424286611022110">Nagpapakita ang site na ito ng mga nakakasagabal o nakakapanlinlang na ad. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Na-block ang mapanganib na content.</translation>
diff --git a/components/strings/components_strings_gu.xtb b/components/strings/components_strings_gu.xtb index 8f699fa..ed10f2b5 100644 --- a/components/strings/components_strings_gu.xtb +++ b/components/strings/components_strings_gu.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">વાચન સૂચિ</translation> <translation id="1264309058268477500">વૈકલ્પિક</translation> <translation id="1264974993859112054">રમત-ગમત</translation> +<translation id="1266469291454105242">ડિવાઇસ અનલૉક કરવાની સુવિધા</translation> <translation id="1269516672602708785">Google Sitesમાં ઝડપથી કોઈ નવી સાઇટ બનાવો</translation> <translation id="1270502636509132238">પિકઅપ પદ્ધતિ</translation> <translation id="1281476433249504884">સ્ટૅકર 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">ડેટિંગ અને વ્યક્તિગત</translation> <translation id="1753706481035618306">પેજ નંબર</translation> <translation id="1755621011177747277">દત્તક લેવા સંબંધિત સેવાઓ</translation> +<translation id="1756026472674246267">નવી ટૅબમાં લિંક ખોલો</translation> <translation id="175656076281618225">જાદુ</translation> <translation id="1757773103848038814">Monospace ફૉન્ટ</translation> <translation id="1763864636252898013">આ સર્વર સાબિત કરી શક્યું નથી કે એ <ph name="DOMAIN" /> છે; એનું સુરક્ષા પ્રમાણપત્ર તમારા ડિવાઇસની ઑપરેટિંગ સિસ્ટમ દ્વારા વિશ્વસનીય નથી. આ કોઈ ખોટી ગોઠવણીને કારણે થયું હશે અથવા કોઈ હુમલાખોર તમારા કનેક્શનને અટકાવી રહ્યો છે.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">ચુકવણી રદ કરો</translation> <translation id="2148613324460538318">કાર્ડ ઉમેરો</translation> <translation id="2149968176347646218">કનેક્શન સુરક્ષિત નથી</translation> +<translation id="2153609454945889823">શું Google Play Services for AR ઇન્સ્ટૉલ કરીએ?</translation> <translation id="2154054054215849342">સમન્વયન તમારા ડોમેન માટે ઉપલબ્ધ નથી.</translation> <translation id="2154484045852737596">કાર્ડમાં ફેરફાર કરો</translation> <translation id="2161656808144014275">ટેક્સ્ટ</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">વર્ઝનની સ્ટ્રિંગ કૉપિ કરો</translation> <translation id="323107829343500871"><ph name="CREDIT_CARD" /> માટે CVC દાખલ કરો</translation> <translation id="3234666976984236645">હંમેશાં આ સાઇટ પરનું મહત્ત્વનું કન્ટેન્ટ શોધો</translation> +<translation id="3238395604961564389">છૂપી વિન્ડોમાં લિંક ખોલો</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, તમારા બ્રાઉઝરનો દેખાવ કસ્ટમાઇઝ કરવા માટે, પહેલાં Tab અને પછી Enter કી દબાવો</translation> <translation id="3240791268468473923">ચુકવણીની સુરક્ષિત લૉગ ઇન વિગત, મેળ ખાતી લૉગ ઇન વિગતની કોઈપણ શીટ ખોલવામાં આવી નથી</translation> <translation id="324180406144491771">“<ph name="HOST_NAME" />”ની લિંક બ્લૉક કરેલી છે</translation> @@ -945,6 +949,7 @@ <translation id="3531780078352352885">જોબ શીટ</translation> <translation id="3532844647053365774"><ph name="HOST" /> તમારા માઇક્રોફોનનો ઉપયોગ કરવા માગે છે</translation> <translation id="3533328374079021623">મેઇલબૉક્સ 5</translation> +<translation id="3542768452570884558">નવી વિન્ડોમાં લિંક ખોલો</translation> <translation id="3550112004925580947">આતિથ્યસત્કાર ઉદ્યોગ</translation> <translation id="3552297013052089404">Sans-Serif ફૉન્ટ</translation> <translation id="3558573058928565255">દિવસનો સમય</translation> @@ -1115,11 +1120,13 @@ <translation id="4040350669425716613">કૉલેજ અને યુનિવર્સિટી</translation> <translation id="4056223980640387499">Sepia</translation> <translation id="4058922952496707368">કી "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4063924980214801036">કાર્ડને વધુ ઝડપથી કન્ફર્મ કરવા માટે, ડિવાઇસ અનલૉક કરવાની સુવિધાનો ઉપયોગ કરો</translation> <translation id="4067098466788473230">શિક્ષણ માટે અનુદાન અને શિષ્યવૃત્તિ</translation> <translation id="4067263367174615723">C1 (એન્વલપ)</translation> <translation id="4067947977115446013">માન્ય સરનામું ઉમેરો</translation> <translation id="4072193657607981494">પૉલિસી લોડ થઈ રહી છે</translation> <translation id="4072486802667267160">તમારા ઑર્ડરની પ્રક્રિયા કરતી વખતે એક ભૂલ આવી હતી. કૃપા કરીને ફરીથી પ્રયાસ કરો.</translation> +<translation id="4073376909608563327">ડિવાઇસ અનલૉક કરવાની સુવિધાનો ઉપયોગ કરી શકાયો નથી</translation> <translation id="4073797364926776829">કાર્ડ જુઓ</translation> <translation id="4075732493274867456">ક્લાઇન્ટ અને સર્વર સામાન્ય SSL પ્રોટોકોલ વર્ઝન અથવા સાઇફર સ્યૂટની સહાય કરતા નથી.</translation> <translation id="4079302484614802869">પ્રૉક્સી ગોઠવણી .pac સ્ક્રિપ્ટ URLનો ઉપયોગ કરવા માટે સેટ છે, ફિક્સ્ડ પ્રૉક્સી સર્વર માટે નહીંં.</translation> @@ -1412,6 +1419,7 @@ <translation id="4840250757394056958">તમારો Chrome ઇતિહાસ જુઓ</translation> <translation id="484462545196658690">ઑટો</translation> <translation id="484671803914931257"><ph name="MERCHANT_NAME" /> અને અન્ય ઘણા પર ડિસ્કાઉન્ટ મેળવો</translation> +<translation id="484988093836683706">ડિવાઇસ અનલૉક કરવાની સુવિધાનો ઉપયોગ કરો</translation> <translation id="4850886885716139402">જુઓ</translation> <translation id="4852429274334674023">ઑપરેટિંગ સિસ્ટમ</translation> <translation id="485316830061041779">જર્મન</translation> @@ -1799,6 +1807,7 @@ <translation id="5921185718311485855">ચાલુ</translation> <translation id="5921639886840618607">Google એકાઉન્ટમાં કાર્ડ સાચવીએ?</translation> <translation id="5922853866070715753">લગભગ થઈ ગયું</translation> +<translation id="5923492272538889093">શું CVCને બદલે ડિવાઇસ અનલૉક કરવાની સુવિધાનો ઉપયોગ કરીએ?</translation> <translation id="5928444777041341328">ઘર અને બગીચા માટેની વસ્તુઓ</translation> <translation id="5932224571077948991">સાઇટ ઘૃણાસ્પદ અથવા ભ્રામક જાહેરાતો બતાવે છે</translation> <translation id="5937560539988385583">પેજનો અનુવાદ કર્યો</translation> @@ -1972,6 +1981,7 @@ <translation id="643051589346665201">Google પાસવર્ડ બદલો</translation> <translation id="6433490469411711332">સંપર્ક માહિતીમાં ફેરફાર કરો</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> એ કનેક્ટ કરવાનો ઇનકાર કર્યો.</translation> +<translation id="6433797564277305076">હવેથી ડિવાઇસ અનલૉક કરવાની સુવિધાનો ઉપયોગ કરીને તમારા કાર્ડ વધુ ઝડપથી કન્ફર્મ કરો</translation> <translation id="6440503408713884761">અવગણી</translation> <translation id="6443406338865242315">તમે કયા એક્સ્ટેંશન અને પ્લગ-ઇન ઇન્સ્ટૉલ કર્યા છે</translation> <translation id="6446163441502663861">Kahu (એન્વલપ)</translation> @@ -2178,6 +2188,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{આ કાર્ડ અત્યારે સાચવી શકાતું નથી}one{આ કાર્ડ અત્યારે સાચવી શકાતાં નથી}other{આ કાર્ડ અત્યારે સાચવી શકાતાં નથી}}</translation> <translation id="7053983685419859001">અવરોધિત કરો</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> દ્વારા ચકાસણી કરાઈ છે કે <ph name="ISSUER" /> દ્વારા આ વેબસાઇટનું પ્રમાણપત્ર જારી કરાયું છે.</translation> +<translation id="7058774143982824355">CSV પાસવર્ડ સંબંધિત વિશ્લેષક સેવા</translation> <translation id="7061777300866737982">ઘરની સલામતી અને સુરક્ષા</translation> <translation id="7062635574500127092">મોરપીંછ</translation> <translation id="706295145388601875">Chrome સેટિંગમાં ઍડ્રેસ ઉમેરો અને તેને મેનેજ કરો</translation> @@ -2442,6 +2453,7 @@ <translation id="7696089921647603491">ક્લાસિક રૉક અને જૂના ગીતો</translation> <translation id="7697066736081121494">Prc8 (એન્વલપ)</translation> <translation id="769721561045429135">હમણાં, તમારી પાસે જે કાર્ડ છે તેનો માત્ર આ ડિવાઇસ પર ઉપયોગ કરી શકાય છે. કાર્ડને રિવ્યૂ કરવા માટે 'ચાલુ રાખો' પર ક્લિક કરો.</translation> +<translation id="7698864304447945242">શું Google Play Services for AR અપડેટ કરીએ?</translation> <translation id="7699293099605015246">લેખો અત્યારે ઉપલબ્ધ નથી</translation> <translation id="7701040980221191251">કોઈ નથી</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" /><ph name="SITE" /> પર આગળ વધો (અસલામત)<ph name="END_LINK" /></translation> @@ -2454,6 +2466,7 @@ <translation id="7723047071702270851">કાર્ડમાં ફેરફાર કરો</translation> <translation id="7734285854693414638">Google Formsમાં ઝડપથી કોઈ નવું ફોર્મ બનાવો</translation> <translation id="773466115871691567">હંમેશાં પેજનો <ph name="SOURCE_LANGUAGE" />માં અનુવાદ કરો</translation> +<translation id="7736959720849233795">લિંકનું ઍડ્રેસ કૉપિ કરો</translation> <translation id="7740996059027112821">માનક</translation> <translation id="77424286611022110">આ સાઇટ ઘૃણાસ્પદ અથવા ગેરમાર્ગે દોરનારી જાહેરાતો બતાવે છે. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">જોખમકારક કન્ટેન્ટ બ્લૉક કર્યું.</translation>
diff --git a/components/strings/components_strings_hu.xtb b/components/strings/components_strings_hu.xtb index d99d2b2..15af2d0b 100644 --- a/components/strings/components_strings_hu.xtb +++ b/components/strings/components_strings_hu.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Olvasási lista</translation> <translation id="1264309058268477500">Alternatív</translation> <translation id="1264974993859112054">Sport</translation> +<translation id="1266469291454105242">Eszköz feloldása</translation> <translation id="1269516672602708785">Új webhely gyors létrehozása a Google Webhelyek szolgáltatással</translation> <translation id="1270502636509132238">Átvételi mód</translation> <translation id="1281476433249504884">1. kötegelő</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Párkeresés és ismerkedés</translation> <translation id="1753706481035618306">Oldalszám</translation> <translation id="1755621011177747277">Örökbefogadás</translation> +<translation id="1756026472674246267">Link megnyitása új lapon</translation> <translation id="175656076281618225">Bűvészet</translation> <translation id="1757773103848038814">Fix szélességű betűtípus</translation> <translation id="1763864636252898013">A szerver nem tudta bizonyítani, hogy valóban a(z) <ph name="DOMAIN" /> domainbe tartozik; biztonsági tanúsítványa az Ön eszközének operációs rendszere szerint nem megbízható. Ennek oka lehet konfigurációs hiba, vagy hogy egy támadó eltérítette az Ön kapcsolódását.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Fizetés visszavonása</translation> <translation id="2148613324460538318">Kártya hozzáadása</translation> <translation id="2149968176347646218">A kapcsolat nem biztonságos</translation> +<translation id="2153609454945889823">Telepíti a Google Play Services for AR szolgáltatást?</translation> <translation id="2154054054215849342">A szinkronizálás az Ön domainjén nem áll rendelkezésre</translation> <translation id="2154484045852737596">Kártya szerkesztése</translation> <translation id="2161656808144014275">Szöveg</translation> @@ -830,6 +833,7 @@ <translation id="3229277193950731405">Verzió-karakterlánc másolása</translation> <translation id="323107829343500871">Adja meg a(z) <ph name="CREDIT_CARD" /> kártya CVC-kódját</translation> <translation id="3234666976984236645">Mindig észlelje a fontos tartalmat ezen a webhelyen</translation> +<translation id="3238395604961564389">Link megnyitása inkognitó ablakban</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />. Nyomja le a Tab, majd az Enter billentyűt a böngésző megjelenésének személyre szabásához.</translation> <translation id="3240791268468473923">A biztonságos fizetés hitelesítési adataihoz tartozó nem egyező hitelesítési adatok űrlapja megnyitva</translation> <translation id="324180406144491771">A(z) „<ph name="HOST_NAME" />” linkjei le vannak tiltva</translation> @@ -943,6 +947,7 @@ <translation id="3531780078352352885">Munkalapok</translation> <translation id="3532844647053365774">A(z) <ph name="HOST" /> használni szeretné a mikrofont</translation> <translation id="3533328374079021623">5. postaláda</translation> +<translation id="3542768452570884558">Link megnyitása új ablakban</translation> <translation id="3550112004925580947">Vendéglátóipar</translation> <translation id="3552297013052089404">Sans-serif betűtípus</translation> <translation id="3558573058928565255">Nappal</translation> @@ -1113,11 +1118,13 @@ <translation id="4040350669425716613">Egyetemek és főiskolák</translation> <translation id="4056223980640387499">Szépia</translation> <translation id="4058922952496707368">"<ph name="SUBKEY" />" kulcs: <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Az eszköz feloldási módszerének használata a kártyák gyorsabb igazolásához</translation> <translation id="4067098466788473230">Tanulási ösztöndíjak</translation> <translation id="4067263367174615723">C1 (boríték)</translation> <translation id="4067947977115446013">Érvényes címet adjon meg</translation> <translation id="4072193657607981494">Házirendek betöltése…</translation> <translation id="4072486802667267160">Hiba történt a rendelés feldolgozása közben. Kérjük, próbálja újra.</translation> +<translation id="4073376909608563327">Nem sikerült az eszköz feloldási módszerének használata</translation> <translation id="4073797364926776829">Kártya megtekintése</translation> <translation id="4075732493274867456">Az ügyfél és a szerver nem támogat ugyanolyan SSL-protokollverziót vagy rejtjelezési csomagot.</translation> <translation id="4079302484614802869">A proxykonfiguráció a .pac típusú szkript URL-cím, nem pedig a fix proxyszerverek használatára van beállítva.</translation> @@ -1410,6 +1417,7 @@ <translation id="4840250757394056958">Chrome-előzmények megtekintése</translation> <translation id="484462545196658690">Automatikus</translation> <translation id="484671803914931257">Kedvezmények <ph name="MERCHANT_NAME" /> keresekedőnél és másoknál</translation> +<translation id="484988093836683706">Eszközfeloldási módszer használata</translation> <translation id="4850886885716139402">Nézet</translation> <translation id="4852429274334674023">Operációs rendszerek</translation> <translation id="485316830061041779">német</translation> @@ -1797,6 +1805,7 @@ <translation id="5921185718311485855">Be</translation> <translation id="5921639886840618607">Menti a kártyát a Google-fiókjába?</translation> <translation id="5922853866070715753">Majdnem kész</translation> +<translation id="5923492272538889093">Az eszköz feloldási módszerét szeretné használni CVC helyett?</translation> <translation id="5928444777041341328">Otthon és kert</translation> <translation id="5932224571077948991">A webhely tolakodó vagy félrevezető hirdetéseket jelenít meg</translation> <translation id="5937560539988385583">Oldal lefordítva</translation> @@ -1970,6 +1979,7 @@ <translation id="643051589346665201">Google-jelszó módosítása</translation> <translation id="6433490469411711332">Kapcsolattartási adatok szerkesztése</translation> <translation id="6433595998831338502">A(z) <ph name="HOST_NAME" /> visszautasította a csatlakozást.</translation> +<translation id="6433797564277305076">Mostantól gyorsabban igazolhatja kártyáit az eszköz feloldási módszerének használatával</translation> <translation id="6440503408713884761">Figyelmen kívül hagyva</translation> <translation id="6443406338865242315">Ön milyen bővítményeket és beépülő modulokat telepített.</translation> <translation id="6446163441502663861">Kahu (boríték)</translation> @@ -2176,6 +2186,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Ez a kártya jelenleg nem menthető}other{Ezeket a kártyákat jelenleg nem lehet menteni}}</translation> <translation id="7053983685419859001">Letiltás</translation> <translation id="7058163556978339998">A <ph name="BROWSER" /> ellenőrizte, hogy a(z) <ph name="ISSUER" /> adta ki ezt a webhelytanúsítványt.</translation> +<translation id="7058774143982824355">Jelszavakat tartalmazó CSV-fájlt elemző szolgáltatás</translation> <translation id="7061777300866737982">Otthonvédelem és -biztonság</translation> <translation id="7062635574500127092">Pávakék</translation> <translation id="706295145388601875">Címek hozzáadása és kezelése a Chrome-beállítások között</translation> @@ -2440,6 +2451,7 @@ <translation id="7696089921647603491">Klasszikus rock és régi zenék</translation> <translation id="7697066736081121494">Prc8 (boríték)</translation> <translation id="769721561045429135">Jelenleg vannak olyan kártyái, amelyek csak ezen az eszközön használhatók Kattintson a Folytatás lehetőségre a kártyák áttekintéséhez.</translation> +<translation id="7698864304447945242">Frissíti a Google Play Services for AR szolgáltatást?</translation> <translation id="7699293099605015246">A cikkek jelenleg nem állnak rendelkezésre</translation> <translation id="7701040980221191251">Nincs</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Tovább a(z) <ph name="SITE" /> webhelyre (nem biztonságos)<ph name="END_LINK" /></translation> @@ -2452,6 +2464,7 @@ <translation id="7723047071702270851">Kártya szerkesztése</translation> <translation id="7734285854693414638">Új űrlap gyors létrehozása a Google Űrlapok szolgáltatással</translation> <translation id="773466115871691567">Mindig fordítsa le a(z) <ph name="SOURCE_LANGUAGE" /> nyelvű oldalakat</translation> +<translation id="7736959720849233795">Link címének másolása</translation> <translation id="7740996059027112821">Szokásos</translation> <translation id="77424286611022110">Ez a webhely tolakodó vagy félrevezető hirdetéseket jelenít meg. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Veszélyes tartalom letiltva.</translation>
diff --git a/components/strings/components_strings_hy.xtb b/components/strings/components_strings_hy.xtb index ff5e749..8402672 100644 --- a/components/strings/components_strings_hy.xtb +++ b/components/strings/components_strings_hy.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Ընթերցանության ցանկ</translation> <translation id="1264309058268477500">Այլ</translation> <translation id="1264974993859112054">Սպորտ</translation> +<translation id="1266469291454105242">Սարքի ապակողպում</translation> <translation id="1269516672602708785">Արագ ստեղծել կայք Google Կայքերում</translation> <translation id="1270502636509132238">Ստացման եղանակը</translation> <translation id="1281476433249504884">Շեղջիչ 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Ծանոթություններ և անձնական հանդիպումներ</translation> <translation id="1753706481035618306">Էջի համարը</translation> <translation id="1755621011177747277">Որդեգրում</translation> +<translation id="1756026472674246267">Բացել հղումը նոր ներդիրում</translation> <translation id="175656076281618225">Իլյուզիոնիստներ</translation> <translation id="1757773103848038814">Monospace տառատեսակ</translation> <translation id="1763864636252898013">Այս սերվերը չի կարող ապացուցել, որ <ph name="DOMAIN" /> է: Ձեր սարքի օպերացիոն համակարգը չի վստահում դրա անվտանգության վկայականին: Պատճառը կարող է լինել սխալ կազմաձևումը կամ կապակցման խափանումը հարձակվողի կողմից:</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Չեղարկել վճարումը</translation> <translation id="2148613324460538318">Ավելացնել քարտ</translation> <translation id="2149968176347646218">Կապը պաշտպանված չէ</translation> +<translation id="2153609454945889823">Տեղադրե՞լ Google Play ծառայություններն AR-ի համար</translation> <translation id="2154054054215849342">Համաժամացումը հասանելի չէ ձեր տիրույթի համար</translation> <translation id="2154484045852737596">Քարտի փոփոխություն</translation> <translation id="2161656808144014275">Տեքստ</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">Պատճենել տարբերակի տողը</translation> <translation id="323107829343500871">Մուտքագրեք <ph name="CREDIT_CARD" /> քարտի CVC կոդը</translation> <translation id="3234666976984236645">Միշտ հատկորոշել կարևոր բովանդակությունը այս կայքում</translation> +<translation id="3238395604961564389">Բացել հղումը ինկոգնիտո պատուհանում</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />։ Դիտարկիչի տեսքը կարգավորելու համար սեղմեք Tab, ապա՝ Enter։</translation> <translation id="3240791268468473923">Բացվել է պատուհան, որը ցուցադրում է անվտանգ վճարման տվյալների անհամապատասխանությունը տվյալների աղյուսակի հետ</translation> <translation id="324180406144491771">«<ph name="HOST_NAME" />» հղումներն արգելափակված են</translation> @@ -945,6 +949,7 @@ <translation id="3531780078352352885">Առաջադրանքի թերթեր</translation> <translation id="3532844647053365774"><ph name="HOST" /> կայքն ուզում է օգտագործել ձեր խոսափողը</translation> <translation id="3533328374079021623">Փոստարկղ 5</translation> +<translation id="3542768452570884558">Բացել հղումը նոր պատուհանում</translation> <translation id="3550112004925580947">Հյուրընկալության ծառայություններ</translation> <translation id="3552297013052089404">Sans-serif տառատեսակ</translation> <translation id="3558573058928565255">Ցերեկ</translation> @@ -1115,11 +1120,13 @@ <translation id="4040350669425716613">Քոլեջներ և համալսարաններ</translation> <translation id="4056223980640387499">Սեպիա</translation> <translation id="4058922952496707368">Բանալու «<ph name="SUBKEY" />»՝ <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Օգտագործել սարքի ապակողպումը՝ քարտերն ավելի արագ հաստատելու համար</translation> <translation id="4067098466788473230">Ուսումնական դրամաշնորհներ և կրթաթոշակներ</translation> <translation id="4067263367174615723">C1 (ծրար)</translation> <translation id="4067947977115446013">Ավելացրեք վավեր հասցե</translation> <translation id="4072193657607981494">Կանոնները բեռնվում են</translation> <translation id="4072486802667267160">Վճարումը մշակելու ընթացքում սխալ առաջացավ: Նորից փորձեք:</translation> +<translation id="4073376909608563327">Չհաջողվեց օգտագործել սարքի ապակողպումը</translation> <translation id="4073797364926776829">Դիտել քարտը</translation> <translation id="4075732493274867456">Սպասառուն և սերվերը չեն աջակցում SSL հաղորդակարգի միևնույն տարբերակը կամ ծածկագրման լրակազմը:</translation> <translation id="4079302484614802869">Պրոքսի-սերվերի կազմաձևումը նախատեսում է PAC սկրիպտների URL-ների օգտագործում՝ ֆիքսված պրոքսի-սերվերների փոխարեն:</translation> @@ -1412,6 +1419,7 @@ <translation id="4840250757394056958">Դիտել Chrome-ի պատմությունը</translation> <translation id="484462545196658690">Ավտոմատ</translation> <translation id="484671803914931257">Ստացեք զեղչ <ph name="MERCHANT_NAME" /> և այլ խանութներում</translation> +<translation id="484988093836683706">Օգտագործել սարքի ապակողպումը</translation> <translation id="4850886885716139402">Տեսք</translation> <translation id="4852429274334674023">Օպերացիոն համակարգեր</translation> <translation id="485316830061041779">Գերմանական</translation> @@ -1800,6 +1808,7 @@ <translation id="5921185718311485855">Միաց</translation> <translation id="5921639886840618607">Պահե՞լ քարտը Google հաշվում</translation> <translation id="5922853866070715753">Գրեթե պատրաստ է</translation> +<translation id="5923492272538889093">Օգտագործե՞լ սարքի ապակողպումը՝ CVC-ի փոխարեն</translation> <translation id="5928444777041341328">Տուն և այգի</translation> <translation id="5932224571077948991">Կայքը հոգնեցնող կամ մոլորեցնող գովազդ է ցուցադրում</translation> <translation id="5937560539988385583">Էջը թարգմանված է</translation> @@ -1973,6 +1982,7 @@ <translation id="643051589346665201">Փոխել Google-ի գաղտնաբառը</translation> <translation id="6433490469411711332">Փոփոխեք կոնտակտային տվյալները</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" />-ը մերժեց կապակցումը:</translation> +<translation id="6433797564277305076">Այսուհետ ավելի արագ հաստատեք ձեր քարտերը սարքի ապակողպման միջոցով</translation> <translation id="6440503408713884761">Անտեսված</translation> <translation id="6443406338865242315">Ինչ ընդլայնումներ և փլագիններ եք դուք տեղադրել</translation> <translation id="6446163441502663861">Kahu (ծրար)</translation> @@ -2179,6 +2189,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Քարտն այս պահին չի կարող պահվել}one{Քարտն այս պահին չի կարող պահվել}other{Քարտերն այս պահին չեն կարող պահվել}}</translation> <translation id="7053983685419859001">Արգելափակել</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> դիտարկիչը հաստատել է, որ այս կայքի հավաստագիրը թողարկել է <ph name="ISSUER" /> ընկերությունը:</translation> +<translation id="7058774143982824355">CSV ֆայլերում գաղտնաբառերի վերլուծիչի ծառայություն</translation> <translation id="7061777300866737982">Տան անվտանգություն և պաշտպանություն</translation> <translation id="7062635574500127092">Փիրուզագույն</translation> <translation id="706295145388601875">Ավելացրեք հասցեներ և կառավարեք դրանք Chrome-ի կարգավորումներում</translation> @@ -2443,6 +2454,7 @@ <translation id="7696089921647603491">Դասական ռոք և ռետրո</translation> <translation id="7697066736081121494">Prc8 (ծրար)</translation> <translation id="769721561045429135">Տվյալ պահին դուք ունեք քարտեր, որոնք կարող են օգտագործվել միայն այս սարքում: Սեղմեք «Շարունակել»՝ դրանց տվյալները տեսնելու համար:</translation> +<translation id="7698864304447945242">Թարմացնե՞լ Google Play ծառայություններն AR-ի համար</translation> <translation id="7699293099605015246">Հոդվածներն այս պահին հասանելի չեն</translation> <translation id="7701040980221191251">Չկա</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Անցնել <ph name="SITE" /> (ապահով չէ)<ph name="END_LINK" /></translation> @@ -2455,6 +2467,7 @@ <translation id="7723047071702270851">Փոփոխեք քարտի տվյալները</translation> <translation id="7734285854693414638">Արագ ստեղծել ձև Google Ձևաթղթերում</translation> <translation id="773466115871691567">Միշտ թարգմանել <ph name="SOURCE_LANGUAGE" /> էջերը</translation> +<translation id="7736959720849233795">Պատճենել հղման հասցեն</translation> <translation id="7740996059027112821">Ստանդարտ</translation> <translation id="77424286611022110">Այս կայքը հոգնեցնող կամ մոլորեցնող գովազդ է ցուցադրում։ <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Վտանգավոր բովանդակությունն արգելափակված է</translation>
diff --git a/components/strings/components_strings_id.xtb b/components/strings/components_strings_id.xtb index 7c840da..c90f4789 100644 --- a/components/strings/components_strings_id.xtb +++ b/components/strings/components_strings_id.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Daftar bacaan</translation> <translation id="1264309058268477500">Alternatif</translation> <translation id="1264974993859112054">Olahraga</translation> +<translation id="1266469291454105242">Buka kunci perangkat</translation> <translation id="1269516672602708785">Buat situs baru di Google Sites dengan cepat</translation> <translation id="1270502636509132238">Metode Pengambilan</translation> <translation id="1281476433249504884">Tempat kertas 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Kencan & pribadi</translation> <translation id="1753706481035618306">Nomor halaman</translation> <translation id="1755621011177747277">Adopsi</translation> +<translation id="1756026472674246267">Buka Link di Tab Baru</translation> <translation id="175656076281618225">Sulap</translation> <translation id="1757773103848038814">Font Monospace</translation> <translation id="1763864636252898013">Server ini tidak dapat membuktikan bahwa ini adalah <ph name="DOMAIN" />; sertifikat keamanannya tidak dipercaya oleh sistem operasi perangkat Anda. Hal ini dapat disebabkan oleh kesalahan konfigurasi atau penyerang memotong sambungan Anda.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Batalkan pembayaran</translation> <translation id="2148613324460538318">Tambahkan Kartu</translation> <translation id="2149968176347646218">Koneksi tidak aman</translation> +<translation id="2153609454945889823">Instal Layanan Google Play untuk AR?</translation> <translation id="2154054054215849342">Sinkronisasi tidak tersedia untuk domain Anda</translation> <translation id="2154484045852737596">Edit kartu</translation> <translation id="2161656808144014275">Teks</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">Salin string versi</translation> <translation id="323107829343500871">Masukkan CVC untuk <ph name="CREDIT_CARD" /></translation> <translation id="3234666976984236645">Selalu deteksi konten penting di situs ini</translation> +<translation id="3238395604961564389">Buka Link di Jendela Samaran</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, Tekan tab lalu Enter untuk menyesuaikan tampilan browser Anda</translation> <translation id="3240791268468473923">Sheet tidak ada kredensial yang cocok untuk Kredensial pembayaran aman terbuka</translation> <translation id="324180406144491771">Link “<ph name="HOST_NAME" />” diblokir</translation> @@ -944,6 +948,7 @@ <translation id="3531780078352352885">Lembar tugas</translation> <translation id="3532844647053365774"><ph name="HOST" /> ingin menggunakan mikrofon Anda</translation> <translation id="3533328374079021623">Kotak surat 5</translation> +<translation id="3542768452570884558">Buka Link di Jendela Baru</translation> <translation id="3550112004925580947">Industri pelayanan</translation> <translation id="3552297013052089404">Font Sans Serif</translation> <translation id="3558573058928565255">Siang hari</translation> @@ -1114,11 +1119,13 @@ <translation id="4040350669425716613">Perguruan tinggi & universitas</translation> <translation id="4056223980640387499">Sepia</translation> <translation id="4058922952496707368">Kunci "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Gunakan fitur buka kunci perangkat untuk mengonfirmasi kartu lebih cepat</translation> <translation id="4067098466788473230">Hibah & beasiswa pendidikan</translation> <translation id="4067263367174615723">C1 (Envelope)</translation> <translation id="4067947977115446013">Tambahkan Alamat yang Valid</translation> <translation id="4072193657607981494">Memuat kebijakan</translation> <translation id="4072486802667267160">Terjadi error saat memproses pesanan Anda. Harap coba lagi.</translation> +<translation id="4073376909608563327">Tidak dapat menggunakan fitur buka kunci perangkat</translation> <translation id="4073797364926776829">Lihat kartu</translation> <translation id="4075732493274867456">Klien dan server tidak mendukung versi protokol SSL umum atau cipher suite.</translation> <translation id="4079302484614802869">Konfigurasi proxy disetel untuk menggunakan URL skrip .pac, bukan server proxy yang tetap.</translation> @@ -1411,6 +1418,7 @@ <translation id="4840250757394056958">Lihat histori Chrome Anda</translation> <translation id="484462545196658690">Otomatis</translation> <translation id="484671803914931257">Dapatkan diskon di <ph name="MERCHANT_NAME" /> dan lainnya</translation> +<translation id="484988093836683706">Gunakan fitur buka kunci perangkat</translation> <translation id="4850886885716139402">Lihat</translation> <translation id="4852429274334674023">Sistem operasi</translation> <translation id="485316830061041779">Jerman</translation> @@ -1798,6 +1806,7 @@ <translation id="5921185718311485855">Aktif</translation> <translation id="5921639886840618607">Simpan kartu ke Akun Google?</translation> <translation id="5922853866070715753">Hampir selesai</translation> +<translation id="5923492272538889093">Gunakan fitur buka kunci perangkat dan bukan CVC?</translation> <translation id="5928444777041341328">Rumah & taman</translation> <translation id="5932224571077948991">Situs menampilkan iklan yang mengganggu atau menyesatkan</translation> <translation id="5937560539988385583">Halaman diterjemahkan</translation> @@ -1971,6 +1980,7 @@ <translation id="643051589346665201">Ubah sandi Google</translation> <translation id="6433490469411711332">Edit info kontak</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> menolak untuk terhubung.</translation> +<translation id="6433797564277305076">Mulai sekarang, konfirmasi kartu Anda lebih cepat dengan fitur buka kunci perangkat</translation> <translation id="6440503408713884761">Diabaikan</translation> <translation id="6443406338865242315">Ekstensi dan plugin yang telah Anda instal</translation> <translation id="6446163441502663861">Kahu (Envelope)</translation> @@ -2177,6 +2187,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Kartu ini tidak dapat disimpan sekarang}other{Kartu-kartu ini tidak dapat disimpan sekarang}}</translation> <translation id="7053983685419859001">Blokir</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> memverifikasi bahwa <ph name="ISSUER" /> menerbitkan sertifikat situs ini.</translation> +<translation id="7058774143982824355">Layanan Parser Sandi CSV</translation> <translation id="7061777300866737982">Keamanan & keselamatan rumah</translation> <translation id="7062635574500127092">Hijau kebiruan</translation> <translation id="706295145388601875">Tambahkan dan kelola alamat di setelan Chrome</translation> @@ -2439,6 +2450,7 @@ <translation id="7696089921647603491">Musik rock klasik & lawas</translation> <translation id="7697066736081121494">Prc8 (Envelope)</translation> <translation id="769721561045429135">Sekarang, Anda memiliki beberapa kartu yang hanya dapat digunakan di perangkat ini. Klik Lanjutkan untuk meninjau kartu.</translation> +<translation id="7698864304447945242">Update Layanan Google Play untuk AR?</translation> <translation id="7699293099605015246">Artikel tidak tersedia untuk saat ini</translation> <translation id="7701040980221191251">Tidak ada</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Lanjutkan ke <ph name="SITE" /> (tidak aman)<ph name="END_LINK" /></translation> @@ -2451,6 +2463,7 @@ <translation id="7723047071702270851">Edit Kartu</translation> <translation id="7734285854693414638">Buat formulir baru di Google Formulir dengan cepat</translation> <translation id="773466115871691567">Selalu terjemahkan halaman dalam bahasa <ph name="SOURCE_LANGUAGE" /></translation> +<translation id="7736959720849233795">Salin Alamat Link</translation> <translation id="7740996059027112821">Standar</translation> <translation id="77424286611022110">Situs ini menampilkan iklan yang mengganggu atau menyesatkan. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Konten berbahaya diblokir.</translation>
diff --git a/components/strings/components_strings_ja.xtb b/components/strings/components_strings_ja.xtb index 7ef4dcf4..6f919e07 100644 --- a/components/strings/components_strings_ja.xtb +++ b/components/strings/components_strings_ja.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">リーディング リスト</translation> <translation id="1264309058268477500">代替</translation> <translation id="1264974993859112054">スポーツ</translation> +<translation id="1266469291454105242">デバイスのロック解除</translation> <translation id="1269516672602708785">Google サイトで新しいサイトをすばやく作成します</translation> <translation id="1270502636509132238">受け取り方法</translation> <translation id="1281476433249504884">スタッカー 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">出会い</translation> <translation id="1753706481035618306">ページ番号</translation> <translation id="1755621011177747277">養子縁組</translation> +<translation id="1756026472674246267">新しいタブでリンクを開く</translation> <translation id="175656076281618225">手品</translation> <translation id="1757773103848038814">Monospace フォント</translation> <translation id="1763864636252898013">このサーバーが <ph name="DOMAIN" /> であることを確認できませんでした。このサーバーのセキュリティ証明書は、ご使用のデバイスのオペレーティング システムによって信頼されているものではありません。原因としては、不適切な設定や、悪意のあるユーザーによる接続妨害が考えられます。</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">支払いをキャンセル</translation> <translation id="2148613324460538318">カードを追加</translation> <translation id="2149968176347646218">接続は安全ではありません</translation> +<translation id="2153609454945889823">Google Play 開発者サービス(AR)をインストールしますか?</translation> <translation id="2154054054215849342">お使いのドメインでは同期機能をご利用いただけません</translation> <translation id="2154484045852737596">カードを編集</translation> <translation id="2161656808144014275">テキスト</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">バージョン文字列をコピー</translation> <translation id="323107829343500871"><ph name="CREDIT_CARD" /> の CVC を入力</translation> <translation id="3234666976984236645">このサイトの重要なコンテンツを常に検出</translation> +<translation id="3238395604961564389">シークレット ウインドウでリンクを開く</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" /> です。Tab、Enter キーの順に押すと、ブラウザのデザインをカスタマイズできます</translation> <translation id="3240791268468473923">保護されたお支払い認証情報(認証情報の一致なし)シートが開いています</translation> <translation id="324180406144491771">「<ph name="HOST_NAME" />」リンクはブロックされています</translation> @@ -945,6 +949,7 @@ <translation id="3531780078352352885">ジョブシート</translation> <translation id="3532844647053365774"><ph name="HOST" /> から、マイクの使用許可を求められています</translation> <translation id="3533328374079021623">用紙受け 5</translation> +<translation id="3542768452570884558">新しいウィンドウでリンクを開く</translation> <translation id="3550112004925580947">サービス業</translation> <translation id="3552297013052089404">Sans Serif フォント</translation> <translation id="3558573058928565255">日中</translation> @@ -1115,11 +1120,13 @@ <translation id="4040350669425716613">大学</translation> <translation id="4056223980640387499">セピア</translation> <translation id="4058922952496707368">キー「<ph name="SUBKEY" />」: <ph name="ERROR" /></translation> +<translation id="4063924980214801036">デバイスのロック解除を使用してカードをすばやく確認する</translation> <translation id="4067098466788473230">奨学金</translation> <translation id="4067263367174615723">C1(封筒)</translation> <translation id="4067947977115446013">有効なアドレスの追加</translation> <translation id="4072193657607981494">ポリシーを読み込んでいます</translation> <translation id="4072486802667267160">ご注文の処理中にエラーが発生しました。もう一度お試しください。</translation> +<translation id="4073376909608563327">デバイスのロック解除を使用できませんでした</translation> <translation id="4073797364926776829">カードを表示</translation> <translation id="4075732493274867456">クライアントとサーバーで、共通の SSL プロトコル バージョンまたは暗号スイートがサポートされていません。</translation> <translation id="4079302484614802869">プロキシは固定プロキシ サーバーではなく .pac スクリプト URL を使用するように設定されています。</translation> @@ -1412,6 +1419,7 @@ <translation id="4840250757394056958">Chrome 履歴を表示</translation> <translation id="484462545196658690">自動</translation> <translation id="484671803914931257"><ph name="MERCHANT_NAME" /> などの割引を取得</translation> +<translation id="484988093836683706">デバイスのロック解除を使用</translation> <translation id="4850886885716139402">表示</translation> <translation id="4852429274334674023">オペレーティング システム</translation> <translation id="485316830061041779">ドイツ語</translation> @@ -1799,6 +1807,7 @@ <translation id="5921185718311485855">オン</translation> <translation id="5921639886840618607">カードを Google アカウントに保存しますか?</translation> <translation id="5922853866070715753">ほぼ完了です</translation> +<translation id="5923492272538889093">CVC の代わりにデバイスのロック解除を使用しますか?</translation> <translation id="5928444777041341328">家庭、園芸</translation> <translation id="5932224571077948991">このサイトでは煩わしい広告や誤解を招く広告が表示されます</translation> <translation id="5937560539988385583">ページが翻訳されました</translation> @@ -1972,6 +1981,7 @@ <translation id="643051589346665201">Google のパスワードを変更</translation> <translation id="6433490469411711332">連絡先情報の編集</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> で接続が拒否されました。</translation> +<translation id="6433797564277305076">今後はデバイスのロック解除を使用して、カードの確認をより迅速に行います</translation> <translation id="6440503408713884761">除外されました</translation> <translation id="6443406338865242315">インストールした拡張機能とプラグイン</translation> <translation id="6446163441502663861">Kahu(封筒)</translation> @@ -2178,6 +2188,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{現在、このカードは保存できません}other{現在、これらのカードは保存できません}}</translation> <translation id="7053983685419859001">ブロック</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> で、このウェブサイトの証明書が <ph name="ISSUER" /> 発行のものであると確認されました。</translation> +<translation id="7058774143982824355">CSV パスワード パーサー サービス</translation> <translation id="7061777300866737982">ホーム セキュリティ</translation> <translation id="7062635574500127092">青緑</translation> <translation id="706295145388601875">Chrome の設定で住所を追加、管理する</translation> @@ -2442,6 +2453,7 @@ <translation id="7696089921647603491">クラシック ロック、オールディーズ</translation> <translation id="7697066736081121494">Prc8(封筒)</translation> <translation id="769721561045429135">現在、このデバイスでのみ使用できるカードがあります。カードを確認するには [続行] をクリックしてください。</translation> +<translation id="7698864304447945242">Google Play 開発者サービス(AR)を更新しますか?</translation> <translation id="7699293099605015246">記事は現在利用できません</translation> <translation id="7701040980221191251">なし</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" /><ph name="SITE" /> にアクセスする(安全ではありません)<ph name="END_LINK" /></translation> @@ -2454,6 +2466,7 @@ <translation id="7723047071702270851">カードの編集</translation> <translation id="7734285854693414638">Google フォームで新しいフォームをすばやく作成します</translation> <translation id="773466115871691567"><ph name="SOURCE_LANGUAGE" />のページを常に翻訳する</translation> +<translation id="7736959720849233795">リンクのアドレスをコピー</translation> <translation id="7740996059027112821">標準</translation> <translation id="77424286611022110">このサイトでは煩わしい広告または誤解を招く広告が表示されます。<ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">危険なコンテンツがブロックされました。</translation>
diff --git a/components/strings/components_strings_kk.xtb b/components/strings/components_strings_kk.xtb index 94a9070b..825154d6 100644 --- a/components/strings/components_strings_kk.xtb +++ b/components/strings/components_strings_kk.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Оқу тізімі</translation> <translation id="1264309058268477500">Басқа</translation> <translation id="1264974993859112054">Спорт</translation> +<translation id="1266469291454105242">Құрылғының құлпын ашу</translation> <translation id="1269516672602708785">Google Sites-та жылдам жаңа сайт жасау</translation> <translation id="1270502636509132238">Таңдау әдісі</translation> <translation id="1281476433249504884">1-жинастырушы</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Танысу және оған қатысты хабарландырулар</translation> <translation id="1753706481035618306">Бет нөмірі</translation> <translation id="1755621011177747277">Бала асырап алу</translation> +<translation id="1756026472674246267">Сілтемені жаңа қойындыда ашу</translation> <translation id="175656076281618225">Сиқыр</translation> <translation id="1757773103848038814">Monospace қарпі</translation> <translation id="1763864636252898013">Бұл сервер оның <ph name="DOMAIN" /> екендігін дәлелдей алмайды; оның қауіпсіздік сертификаты құрылғының операциялық жүйесі арқылы тексерілмеген. Бұған конфигурация ақаулығы немесе қаскүнемнің қосылымыңызды тоқтатуы себеп болуы мүмкін.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Төлемнен бас тарту</translation> <translation id="2148613324460538318">Картаны енгізу</translation> <translation id="2149968176347646218">Байланыс қауіпсіз емес</translation> +<translation id="2153609454945889823">Google Play Services for AR қолданбасын орнату керек пе?</translation> <translation id="2154054054215849342">Синхрондау функциясы доменіңіз үшін қолжетімді емес</translation> <translation id="2154484045852737596">Карта мәліметін өңдеу</translation> <translation id="2161656808144014275">Мәтін</translation> @@ -831,6 +834,7 @@ <translation id="3229277193950731405">Нұсқа жолын көшіру</translation> <translation id="323107829343500871"><ph name="CREDIT_CARD" /> картасының CVC кодын енгізіңіз</translation> <translation id="3234666976984236645">Әрқашан осы сайттағы маңызды мазмұнды анықтау</translation> +<translation id="3238395604961564389">Сілтемені инкогнито терезесінде ашу</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />. Браузер көрінісін реттеу үшін Tab, сосын Enter пернесін басыңыз.</translation> <translation id="3240791268468473923">Қауіпсіз төлемге арналған деректердің сәйкес келмейтіндігі көрсетілген парақ ашылды.</translation> <translation id="324180406144491771">"<ph name="HOST_NAME" />" сілтемелері бөгелген</translation> @@ -944,6 +948,7 @@ <translation id="3531780078352352885">Тапсырма парақтары</translation> <translation id="3532844647053365774"><ph name="HOST" /> хосты микрофоныңызды пайдаланғысы келеді</translation> <translation id="3533328374079021623">5-ші пошта жәшігі</translation> +<translation id="3542768452570884558">Сілтемені жаңа терезеде ашу</translation> <translation id="3550112004925580947">Қонақ үй индустриясы</translation> <translation id="3552297013052089404">Sans-serif қарпі</translation> <translation id="3558573058928565255">Күн, уақыт</translation> @@ -1114,11 +1119,13 @@ <translation id="4040350669425716613">Колледждер мен университеттер</translation> <translation id="4056223980640387499">Сепия</translation> <translation id="4058922952496707368">"<ph name="SUBKEY" />" кілті: <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Карталарды жылдамырақ растау үшін құрылғының құлпын ашу функциясын пайдаланыңыз.</translation> <translation id="4067098466788473230">Оқу гранттары мен шәкіртақылары</translation> <translation id="4067263367174615723">C1 (Envelope)</translation> <translation id="4067947977115446013">Жарамды мекенжайды енгізу</translation> <translation id="4072193657607981494">Саясаттар жүктелуде</translation> <translation id="4072486802667267160">Төлем жасау кезінде қате кетті. Әрекетті қайталаңыз.</translation> +<translation id="4073376909608563327">Құрылғының құлпын ашу функциясын пайдалану мүмкін болмады</translation> <translation id="4073797364926776829">Картаны көру</translation> <translation id="4075732493274867456">Клиент пен сервер ортақ SSL протоколының нұсқасын немесе шифрлар жиынтығын қолдамайды.</translation> <translation id="4079302484614802869">Прокси конфигурациясы бекітілген прокси серверлерді емес, .pac сценарий URL мекенжайын пайдалануға орнатылған.</translation> @@ -1411,6 +1418,7 @@ <translation id="4840250757394056958">Chrome тарихын көру</translation> <translation id="484462545196658690">Авто</translation> <translation id="484671803914931257"><ph name="MERCHANT_NAME" /> және т. б. дүкендердің жеңілдіктерін алыңыз</translation> +<translation id="484988093836683706">Құрылғының құлпын ашу функциясын пайдалану</translation> <translation id="4850886885716139402">Көрініс</translation> <translation id="4852429274334674023">Операциялық жүйелер</translation> <translation id="485316830061041779">неміс</translation> @@ -1798,6 +1806,7 @@ <translation id="5921185718311485855">Қосулы</translation> <translation id="5921639886840618607">Картаны Google аккаунтына сақтау қажет пе?</translation> <translation id="5922853866070715753">Аяқтап қалдыңыз</translation> +<translation id="5923492272538889093">CVC-дің орнына құрылғының құлпын ашу функциясын пайдалану керек пе?</translation> <translation id="5928444777041341328">Үй және бақша</translation> <translation id="5932224571077948991">Сайтта мазалайтын не жалған ақпаратты жарнамалар көрсетіледі</translation> <translation id="5937560539988385583">Бет аударылды.</translation> @@ -1971,6 +1980,7 @@ <translation id="643051589346665201">Google құпия сөзін өзгерту</translation> <translation id="6433490469411711332">Байланыс ақпаратын өңдеу</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> байланыстан бас тартты.</translation> +<translation id="6433797564277305076">Құрылғының құлпын ашу функциясы арқылы карталарды жылдамырақ растаңыз.</translation> <translation id="6440503408713884761">Еленбейді</translation> <translation id="6443406338865242315">қай кеңейтімдер мен плагиндерді орнатқаныңызды;</translation> <translation id="6446163441502663861">Kahu (Envelope)</translation> @@ -2177,6 +2187,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Бұл карта қазір сақталмайды}other{Бұл карталар қазір сақталмайды}}</translation> <translation id="7053983685419859001">Бөгеу</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> браузері <ph name="ISSUER" /> осы веб-сайттың сертификатын шығарғанын растады.</translation> +<translation id="7058774143982824355">CSV құпия сөзін талдау қызметі</translation> <translation id="7061777300866737982">Үй қауіпсіздігі</translation> <translation id="7062635574500127092">Көкшіл жасыл</translation> <translation id="706295145388601875">Chrome параметрлері арқылы мекенжайларды қосу және басқару</translation> @@ -2441,6 +2452,7 @@ <translation id="7696089921647603491">Классикалық рок және ескі туындылар</translation> <translation id="7697066736081121494">Prc8 (Envelope)</translation> <translation id="769721561045429135">Осы құрылғыда ғана пайдаланылатын карталар бар. Карталарды қарап шығу үшін "Жалғастыру" түймесін басыңыз.</translation> +<translation id="7698864304447945242">Google Play Services for AR қолданбасын жаңарту керек пе?</translation> <translation id="7699293099605015246">Дәл қазір мақалалар жоқ</translation> <translation id="7701040980221191251">Жоқ</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" /><ph name="SITE" /> сайтына өту (қауіпті)<ph name="END_LINK" /></translation> @@ -2453,6 +2465,7 @@ <translation id="7723047071702270851">Карта мәліметін өңдеу</translation> <translation id="7734285854693414638">Google Forms-да жылдам жаңа үлгі жасау</translation> <translation id="773466115871691567"><ph name="SOURCE_LANGUAGE" /> тіліндегі беттер әрқашан аударылсын</translation> +<translation id="7736959720849233795">Сілтеме мекенжайын көшіру</translation> <translation id="7740996059027112821">Стандартты</translation> <translation id="77424286611022110">Бұл сайтта мазалайтын немесе жалған ақпаратты жарнамалар көрсетіледі. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Қауіпті мазмұн бөгелді.</translation>
diff --git a/components/strings/components_strings_ko.xtb b/components/strings/components_strings_ko.xtb index 46e0468..5378e06 100644 --- a/components/strings/components_strings_ko.xtb +++ b/components/strings/components_strings_ko.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">읽기 목록</translation> <translation id="1264309058268477500">대체</translation> <translation id="1264974993859112054">스포츠</translation> +<translation id="1266469291454105242">기기 잠금 해제</translation> <translation id="1269516672602708785">Google Sites에서 빠르게 새 사이트 만들기</translation> <translation id="1270502636509132238">픽업 방법</translation> <translation id="1281476433249504884">스태커 1</translation> @@ -147,7 +148,7 @@ <ph name="LIST_ITEM" />고용주 또는 학교 <ph name="LIST_ITEM" />인터넷 서비스 제공업체 <ph name="END_LIST" /></translation> -<translation id="1337692097987160377">탭 공유</translation> +<translation id="1337692097987160377">이 탭 공유</translation> <translation id="1339601241726513588">등록 도메인:</translation> <translation id="1340482604681802745">수령 주소</translation> <translation id="1346748346194534595">오른쪽</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">데이트 및 결혼 정보</translation> <translation id="1753706481035618306">페이지 번호</translation> <translation id="1755621011177747277">입양</translation> +<translation id="1756026472674246267">새 탭에서 링크 열기</translation> <translation id="175656076281618225">마술</translation> <translation id="1757773103848038814">고정폭 글꼴</translation> <translation id="1763864636252898013">이 서버가 <ph name="DOMAIN" />임을 입증할 수 없으며 기기의 운영체제에서 신뢰하는 보안 인증서가 아닙니다. 서버를 잘못 설정했거나 불법 사용자가 연결을 가로채고 있기 때문일 수 있습니다.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">결제 취소</translation> <translation id="2148613324460538318">카드 추가</translation> <translation id="2149968176347646218">연결이 안전하지 않음</translation> +<translation id="2153609454945889823">Google Play AR 서비스를 설치하시겠습니까?</translation> <translation id="2154054054215849342">도메인에 대해 동기화를 사용할 수 없습니다.</translation> <translation id="2154484045852737596">카드 수정</translation> <translation id="2161656808144014275">텍스트</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">버전 문자열 복사</translation> <translation id="323107829343500871"><ph name="CREDIT_CARD" /> 카드의 CVC를 입력하세요.</translation> <translation id="3234666976984236645">이 사이트에서 중요한 콘텐츠 항상 감지</translation> +<translation id="3238395604961564389">시크릿 창에서 링크 열기</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, 브라우저 테마를 맞춤설정하려면 Tab과 Enter를 차례로 누르세요</translation> <translation id="3240791268468473923">일치하는 결제 사용자 인증 정보 시트가 없는 보안 결제 사용자 인증 정보 열림</translation> <translation id="324180406144491771">“<ph name="HOST_NAME" />” 링크가 차단되었습니다</translation> @@ -945,6 +949,7 @@ <translation id="3531780078352352885">작업 시트</translation> <translation id="3532844647053365774"><ph name="HOST" />에서 마이크를 사용하려고 합니다</translation> <translation id="3533328374079021623">메일박스 5</translation> +<translation id="3542768452570884558">새 창에서 링크 열기</translation> <translation id="3550112004925580947">환대 산업</translation> <translation id="3552297013052089404">산세리프 글꼴</translation> <translation id="3558573058928565255">낮</translation> @@ -1115,11 +1120,13 @@ <translation id="4040350669425716613">대학(단과/종합)</translation> <translation id="4056223980640387499">세피아</translation> <translation id="4058922952496707368">'<ph name="SUBKEY" />' 키: <ph name="ERROR" /></translation> +<translation id="4063924980214801036">기기 잠금 해제를 사용하여 빠르게 카드 확인</translation> <translation id="4067098466788473230">학업 보조금 및 장학금</translation> <translation id="4067263367174615723">C1(봉투)</translation> <translation id="4067947977115446013">유효한 주소 추가</translation> <translation id="4072193657607981494">정책 로드 중</translation> <translation id="4072486802667267160">주문을 처리하는 중에 오류가 발생했습니다. 다시 시도하세요.</translation> +<translation id="4073376909608563327">기기 잠금 해제를 사용할 수 없음</translation> <translation id="4073797364926776829">카드 보기</translation> <translation id="4075732493274867456">클라이언트와 서버가 일반적인 SSL 프로토콜 버전 또는 암호화 제품군을 지원하지 않습니다.</translation> <translation id="4079302484614802869">프록시 설정이 고정 프록시 서버가 아닌 .pac 스크립트 URL을 사용하도록 설정됩니다.</translation> @@ -1412,6 +1419,7 @@ <translation id="4840250757394056958">Chrome 방문 기록 보기</translation> <translation id="484462545196658690">자동</translation> <translation id="484671803914931257"><ph name="MERCHANT_NAME" /> 등에서 할인을 받으세요</translation> +<translation id="484988093836683706">기기 잠금 해제 사용</translation> <translation id="4850886885716139402">보기</translation> <translation id="4852429274334674023">운영체제</translation> <translation id="485316830061041779">독일어</translation> @@ -1799,6 +1807,7 @@ <translation id="5921185718311485855">사용</translation> <translation id="5921639886840618607">카드를 Google 계정에 저장하시겠습니까?</translation> <translation id="5922853866070715753">거의 완료되었습니다</translation> +<translation id="5923492272538889093">CVC 대신 기기 잠금 해제를 사용하시겠습니까?</translation> <translation id="5928444777041341328">인테리어 및 조경</translation> <translation id="5932224571077948991">사이트에서 방해가 되거나 사용자를 현혹하는 광고를 표시함</translation> <translation id="5937560539988385583">페이지 번역됨</translation> @@ -1972,6 +1981,7 @@ <translation id="643051589346665201">Google 비밀번호 변경</translation> <translation id="6433490469411711332">연락처 정보 수정</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" />에서 연결을 거부했습니다.</translation> +<translation id="6433797564277305076">이제부터 기기 잠금 해제를 사용하여 빠르게 카드를 확인하세요</translation> <translation id="6440503408713884761">무시됨</translation> <translation id="6443406338865242315">내가 설치한 확장 프로그램 및 플러그인</translation> <translation id="6446163441502663861">Kahu(봉투)</translation> @@ -2178,6 +2188,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{지금은 이 카드를 저장할 수 없습니다.}other{지금은 이 카드를 저장할 수 없습니다.}}</translation> <translation id="7053983685419859001">차단</translation> <translation id="7058163556978339998"><ph name="BROWSER" />에서 <ph name="ISSUER" /> 업체가 이 웹사이트 인증서를 발급했음을 확인했습니다.</translation> +<translation id="7058774143982824355">CSV 비밀번호 파서 서비스</translation> <translation id="7061777300866737982">가택 경비 및 보안</translation> <translation id="7062635574500127092">청록색</translation> <translation id="706295145388601875">Chrome 설정에서 주소 추가 및 관리</translation> @@ -2441,6 +2452,7 @@ <translation id="7696089921647603491">클래식 록 및 추억의 음악</translation> <translation id="7697066736081121494">Prc8(봉투)</translation> <translation id="769721561045429135">현재 이 기기에서만 사용할 수 있는 카드가 있습니다. 카드를 검토하려면 계속을 클릭하세요.</translation> +<translation id="7698864304447945242">Google Play AR 서비스를 업데이트하시겠습니까?</translation> <translation id="7699293099605015246">지금은 기사를 가져올 수 없음</translation> <translation id="7701040980221191251">없음</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" /><ph name="SITE" />(안전하지 않음)<ph name="END_LINK" />(으)로 이동</translation> @@ -2453,6 +2465,7 @@ <translation id="7723047071702270851">카드 수정</translation> <translation id="7734285854693414638">Google Forms에서 빠르게 새 양식 만들기</translation> <translation id="773466115871691567"><ph name="SOURCE_LANGUAGE" />로 된 페이지를 항상 번역</translation> +<translation id="7736959720849233795">링크 주소 복사</translation> <translation id="7740996059027112821">표준</translation> <translation id="77424286611022110">이 사이트에서는 방해가 되거나 사용자를 현혹하는 광고를 표시합니다. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">위험한 콘텐츠 차단됨</translation>
diff --git a/components/strings/components_strings_lt.xtb b/components/strings/components_strings_lt.xtb index 43a7832..ea9630e 100644 --- a/components/strings/components_strings_lt.xtb +++ b/components/strings/components_strings_lt.xtb
@@ -244,7 +244,7 @@ <translation id="1549470594296187301">Norint naudoti šią funkciją, reikia įgalinti „JavaScript“.</translation> <translation id="155039086686388498">Engineering-D</translation> <translation id="1551884710160394169">Programinė įranga be mokesčio ar su laikinu mokesčiu</translation> -<translation id="1553358976309200471">Atnaujinkite „Chrome“</translation> +<translation id="1553358976309200471">Atnaujinti „Chrome“</translation> <translation id="1555130319947370107">Mėlyna</translation> <translation id="1559447966090556585">Gauti pranešimus?</translation> <translation id="1559528461873125649">Nėra tokio failo ar katalogo</translation>
diff --git a/components/strings/components_strings_ms.xtb b/components/strings/components_strings_ms.xtb index ceb0b3f..a561f11 100644 --- a/components/strings/components_strings_ms.xtb +++ b/components/strings/components_strings_ms.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Senarai bacaan</translation> <translation id="1264309058268477500">Alternatif</translation> <translation id="1264974993859112054">Sukan</translation> +<translation id="1266469291454105242">Buka kunci peranti</translation> <translation id="1269516672602708785">Buat laman baharu dalam Google Sites dengan pantas</translation> <translation id="1270502636509132238">Kaedah Pengambilan</translation> <translation id="1281476433249504884">Petak 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Dating & peribadi</translation> <translation id="1753706481035618306">Nombor halaman</translation> <translation id="1755621011177747277">Anak angkat</translation> +<translation id="1756026472674246267">Buka Pautan dalam Tab Baharu</translation> <translation id="175656076281618225">Magik</translation> <translation id="1757773103848038814">Fon Monospace</translation> <translation id="1763864636252898013">Pelayan ini tidak dapat membuktikan bahawa domainnya ialah <ph name="DOMAIN" />; sijil keselamatannya tidak dipercayai oleh sistem pengendalian peranti anda. Ini mungkin disebabkan oleh kesilapan konfigurasi atau penyerang yang memintasi sambungan anda.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Batalkan pembayaran</translation> <translation id="2148613324460538318">Tambahkan Kad</translation> <translation id="2149968176347646218">Sambungan tidak selamat</translation> +<translation id="2153609454945889823">Pasang Google Play Services for AR?</translation> <translation id="2154054054215849342">Penyegerakan tidak tersedia untuk domain anda</translation> <translation id="2154484045852737596">Edit kad</translation> <translation id="2161656808144014275">Teks</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">Salin rentetan versi</translation> <translation id="323107829343500871">Masukkan CVC untuk <ph name="CREDIT_CARD" /></translation> <translation id="3234666976984236645">Sentiasa kesan kandungan penting di laman web ini</translation> +<translation id="3238395604961564389">Buka Pautan dalam Tetingkap Inkognito</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, Tekan tab kemudian Enter untuk menyesuaikan rupa penyemak imbas anda</translation> <translation id="3240791268468473923">Bukti kelayakan pembayaran selamat tiada helaian bukti kelayakan yang sepadan dibuka</translation> <translation id="324180406144491771">Pautan “<ph name="HOST_NAME" />” disekat</translation> @@ -945,6 +949,7 @@ <translation id="3531780078352352885">Helaian tugas</translation> <translation id="3532844647053365774"><ph name="HOST" /> ingin menggunakan mikrofon anda</translation> <translation id="3533328374079021623">Peti mel 5</translation> +<translation id="3542768452570884558">Buka pautan dalam Tetingkap Baharu</translation> <translation id="3550112004925580947">Industri hospitaliti</translation> <translation id="3552297013052089404">Fon Sans-serif</translation> <translation id="3558573058928565255">Waktu siang</translation> @@ -1116,11 +1121,13 @@ <translation id="4040350669425716613">Kolej & universiti</translation> <translation id="4056223980640387499">Sepia</translation> <translation id="4058922952496707368">Kekunci "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Gunakan kunci skrin peranti untuk mengesahkan kad dengan lebih cepat</translation> <translation id="4067098466788473230">Geran & biasiswa pendidikan</translation> <translation id="4067263367174615723">C1 (Sampul Surat)</translation> <translation id="4067947977115446013">Tambahkan Alamat yang Sah</translation> <translation id="4072193657607981494">Memuatkan dasar</translation> <translation id="4072486802667267160">Ralat berlaku semasa memproses pesanan anda. Sila cuba lagi.</translation> +<translation id="4073376909608563327">Tidak dapat menggunakan buka kunci peranti</translation> <translation id="4073797364926776829">Lihat kad</translation> <translation id="4075732493274867456">Pelanggan dan pelayan tidak menyokong versi protokol SSL atau set sifer biasa.</translation> <translation id="4079302484614802869">Konfigurasi proksi ditetapkan kepada penggunaaan URL skrip .pac, bukannya pelayan proksi tetap.</translation> @@ -1413,6 +1420,7 @@ <translation id="4840250757394056958">Lihat sejarah Chrome anda</translation> <translation id="484462545196658690">Auto</translation> <translation id="484671803914931257">Dapatkan diskaun di <ph name="MERCHANT_NAME" /> dan pelbagai lagi</translation> +<translation id="484988093836683706">Gunakan buka kunci peranti</translation> <translation id="4850886885716139402">Lihat</translation> <translation id="4852429274334674023">Sistem pengendalian</translation> <translation id="485316830061041779">Bahasa Jerman</translation> @@ -1800,6 +1808,7 @@ <translation id="5921185718311485855">Hidup</translation> <translation id="5921639886840618607">Simpan kad ke Akaun Google?</translation> <translation id="5922853866070715753">Hampir selesai</translation> +<translation id="5923492272538889093">Gunakan buka kunci peranti dan bukan CVC?</translation> <translation id="5928444777041341328">Rumah & taman</translation> <translation id="5932224571077948991">Tapak menyiarkan iklan yang mengganggu atau mengelirukan</translation> <translation id="5937560539988385583">Halaman diterjemahkan</translation> @@ -1973,6 +1982,7 @@ <translation id="643051589346665201">Tukar kata laluan Google</translation> <translation id="6433490469411711332">Edit maklumat hubungan</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> enggan menyambung.</translation> +<translation id="6433797564277305076">Sahkan kad anda dengan lebih cepat dengan menggunakan buka kunci peranti mulai sekarang</translation> <translation id="6440503408713884761">Diabaikan</translation> <translation id="6443406338865242315">Sambungan dan pemalam yang telah anda pasang</translation> <translation id="6446163441502663861">Kahu (Sampul Surat)</translation> @@ -2179,6 +2189,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Kad ini tidak dapat disimpan sekarang}other{Kad ini tidak dapat disimpan sekarang}}</translation> <translation id="7053983685419859001">Sekat</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> mengesahkan bahawa <ph name="ISSUER" /> telah mengeluarkan sijil laman web ini.</translation> +<translation id="7058774143982824355">Perkhidmatan Penghurai Kata Laluan CSV</translation> <translation id="7061777300866737982">Keselamatan & sekuriti kediaman</translation> <translation id="7062635574500127092">Hijau kebiruan</translation> <translation id="706295145388601875">Tambah dan urus alamat dalam tetapan Chrome</translation> @@ -2443,6 +2454,7 @@ <translation id="7696089921647603491">Rock klasik & lagu lama</translation> <translation id="7697066736081121494">Prc8 (Sampul Surat)</translation> <translation id="769721561045429135">Sekarang, anda mempunyai kad yang boleh digunakan pada peranti ini sahaja. Klik Teruskan untuk menyemak kad.</translation> +<translation id="7698864304447945242">Kemas kini Google Play Services for AR?</translation> <translation id="7699293099605015246">Artikel tidak tersedia sekarang</translation> <translation id="7701040980221191251">Tiada</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Teruskan ke <ph name="SITE" /> (tidak selamat)<ph name="END_LINK" /></translation> @@ -2455,6 +2467,7 @@ <translation id="7723047071702270851">Edit Kad</translation> <translation id="7734285854693414638">Buat borang baharu dalam Google Forms dengan pantas</translation> <translation id="773466115871691567">Sentiasa terjemahkan halaman dalam <ph name="SOURCE_LANGUAGE" /></translation> +<translation id="7736959720849233795">Salin Alamat Pautan</translation> <translation id="7740996059027112821">Standard</translation> <translation id="77424286611022110">Laman ini menyiarkan iklan yang mengganggu atau mengelirukan. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Kandungan berbahaya disekat.</translation>
diff --git a/components/strings/components_strings_ne.xtb b/components/strings/components_strings_ne.xtb index 7404f32..a5f3cc2 100644 --- a/components/strings/components_strings_ne.xtb +++ b/components/strings/components_strings_ne.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">पाठ्य सूची</translation> <translation id="1264309058268477500">वैकल्पिक</translation> <translation id="1264974993859112054">खेलकुद</translation> +<translation id="1266469291454105242">डिभाइस अनलक</translation> <translation id="1269516672602708785">Google Sites प्रयोग गरी तुरुन्तै नयाँ साइट बनाउनुहोस्</translation> <translation id="1270502636509132238">पिकअपको विधि</translation> <translation id="1281476433249504884">स्ट्याकर १</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">डेटिङ तथा व्यक्तिगत कुराहरू</translation> <translation id="1753706481035618306">पृष्ठ संख्या</translation> <translation id="1755621011177747277">धर्मसन्तान ग्रहण</translation> +<translation id="1756026472674246267">यो लिंक नयाँ ट्याबमा खोल्नुहोस्</translation> <translation id="175656076281618225">जादु</translation> <translation id="1757773103848038814">मोनोस्पेस फन्ट</translation> <translation id="1763864636252898013">यो सर्भर हो भनेर प्रमाणित गर्न सकेन <ph name="DOMAIN" />; यसको सुरक्षा प्रमाणपत्रलाई तपाईंको डिभाइसको अपरेटिङ सिस्टमले विश्वास गरेन। यो एक गलत कन्फिगुरेसन वा तपाईंको जडान अवरोध गर्न खोज्ने आक्रमणकारीको हुनसक्छ।</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">भुक्तानी रद्द गर्नुहोस्</translation> <translation id="2148613324460538318">कार्ड थप्नुहोस्</translation> <translation id="2149968176347646218">इन्टरनेट सुरक्षित छैन</translation> +<translation id="2153609454945889823">Google Play Services for AR इन्स्टल गर्ने हो?</translation> <translation id="2154054054215849342">तपाईंको डोमेनको लागि सिंंक उपलब्ध छैन</translation> <translation id="2154484045852737596">कार्ड सम्पादन गर्नुहोस्</translation> <translation id="2161656808144014275">पाठ</translation> @@ -829,6 +832,7 @@ <translation id="3229277193950731405">संस्करणको स्ट्रिङ कपी गर्नुहोस्</translation> <translation id="323107829343500871"><ph name="CREDIT_CARD" /> को CVC प्रविष्टि गर्नुहोस्</translation> <translation id="3234666976984236645">सधैं यस साइटमा महत्वपूर्ण सामग्री पत्ता लगाउनुहोस्</translation> +<translation id="3238395604961564389">यो लिंक इन्कोग्निटो विन्डोमा खोल्नुहोस्</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, तपाईं आफ्नो ब्राउजरको स्वरूप कस्टमाइज गर्न चाहनुहुन्छ भने Tab थिच्नुहोस् अनि Enter थिच्नुहोस्</translation> <translation id="3240791268468473923">क्रिडेन्सियल सिटसँग नमिल्ने सुरक्षित भुक्तानी क्रिडेन्सियल खोलियो</translation> <translation id="324180406144491771">“<ph name="HOST_NAME" />” का लिंकहरू ब्लक गरिएका छन्</translation> @@ -942,6 +946,7 @@ <translation id="3531780078352352885">कार्य पानाहरू</translation> <translation id="3532844647053365774"><ph name="HOST" /> तपाईंको माइक्रोफोन प्रयोग गर्न चाहन्छ</translation> <translation id="3533328374079021623">मेलबक्स ५</translation> +<translation id="3542768452570884558">यो लिंक नयाँ विन्डोमा खोल्नुहोस्</translation> <translation id="3550112004925580947">आतिथ्य उद्योग</translation> <translation id="3552297013052089404">Sans Serif फन्ट</translation> <translation id="3558573058928565255">दिउँसो</translation> @@ -1112,11 +1117,13 @@ <translation id="4040350669425716613">कलेज तथा विश्वविद्यालयहरू</translation> <translation id="4056223980640387499">सेपिया</translation> <translation id="4058922952496707368">कुञ्जी "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4063924980214801036">आफ्ना कार्डहरू अझ चाँडो पुष्टि गर्न डिभाइस अनलक प्रयोग गर्नुहोस्</translation> <translation id="4067098466788473230">शैक्षिक अनुदान तथा छात्रवृत्तिहरू</translation> <translation id="4067263367174615723">C1 (Envelope)</translation> <translation id="4067947977115446013">मान्य ठेगाना थप्नुहोस्</translation> <translation id="4072193657607981494">नीतिहरू लोड गरिँदै छन्</translation> <translation id="4072486802667267160">तपाईंको भुक्तानीको प्रक्रियालाई अघि बढाउँदा कुनै त्रुटि भयो, कृपया फेरि प्रयास गर्नुहोस्।</translation> +<translation id="4073376909608563327">डिभाइस अनलक प्रयोग गर्न सकिएन</translation> <translation id="4073797364926776829">कार्ड हेर्नुहोस्</translation> <translation id="4075732493274867456">ग्राहक र सर्भरले एउटा साधारण SSL प्रोटोकल संस्करण वा साइफर सुइटलाई समर्थन गर्दैनन्।</translation> <translation id="4079302484614802869">प्रोक्सी विन्यासले .प्याक स्क्रिप्ट युआरएल प्रयोग गर्न सेट गरिएको छ, निश्चित प्रोक्सी सर्भरहरू होइन।</translation> @@ -1409,6 +1416,7 @@ <translation id="4840250757394056958">Chrome को ब्राउजिङ इतिहास हेर्नुहोस्</translation> <translation id="484462545196658690">स्वतः</translation> <translation id="484671803914931257"><ph name="MERCHANT_NAME" /> र अन्य स्टोरहरूमा छुट प्राप्त गर्नुहोस्</translation> +<translation id="484988093836683706">डिभाइस अनलक प्रयोग गर्नुहोस्</translation> <translation id="4850886885716139402">हेर्नुहोस्</translation> <translation id="4852429274334674023">अपरेटिङ सिस्टमहरू</translation> <translation id="485316830061041779">जर्मन</translation> @@ -1796,6 +1804,7 @@ <translation id="5921185718311485855">सक्रिय छ</translation> <translation id="5921639886840618607">कार्डलाई Google खातामा सुरक्षित गर्ने हो?</translation> <translation id="5922853866070715753">लगभग सकियो</translation> +<translation id="5923492272538889093">CVC को साटो डिभाइस अनलक प्रयोग गर्ने हो?</translation> <translation id="5928444777041341328">घर तथा उद्यान</translation> <translation id="5932224571077948991">यो साइटले हस्तक्षेपकारी वा भ्रामक विज्ञापनहरू देखाउँछ</translation> <translation id="5937560539988385583">पेज अनुवाद गरिएको छ</translation> @@ -1969,6 +1978,7 @@ <translation id="643051589346665201">Google खाताको पासवर्ड बदल्नुहोस्</translation> <translation id="6433490469411711332">सम्पर्क सम्बन्धी जानकारीलाई सम्पादन गर्नुहोस्</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> ले जडान गर्न अस्वीकार गर्यो।</translation> +<translation id="6433797564277305076">अबदेखि डिभाइस अनलक प्रयोग गरेर आफ्ना कार्डहरू अझ चाँडो पुष्टि गर्नुहोस्</translation> <translation id="6440503408713884761">उपेक्षित</translation> <translation id="6443406338865242315">तपाईंले स्थापना गर्नुभएका विस्तार र प्लगइनहरू</translation> <translation id="6446163441502663861">Kahu (Envelope)</translation> @@ -2175,6 +2185,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{यो कार्ड अहिले सुरक्षित गर्न सकिँदैन}other{यी कार्डहरू अहिले सुरक्षित गर्न सकिँदैन}}</translation> <translation id="7053983685419859001">रोक्नुहोस्</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> ले यस वेबसाइटको सर्टिफिकेट <ph name="ISSUER" /> ले जारी गरेको हो भन्ने कुरा पुष्टि गरेको छ।</translation> +<translation id="7058774143982824355">CSV पासवर्ड पार्सर सेवा</translation> <translation id="7061777300866737982">घरको सुरक्षा</translation> <translation id="7062635574500127092">गाढा निलो र हरियो</translation> <translation id="706295145388601875">Chrome का सेटिङमा गई ठेगानाहरू थप्नुहोस् तथा व्यवस्थापन गर्नुहोस्</translation> @@ -2439,6 +2450,7 @@ <translation id="7696089921647603491">क्लासिक रक तथा ओल्डिज</translation> <translation id="7697066736081121494">Prc8 (Envelope)</translation> <translation id="769721561045429135">यस बेला, तपाईंसँग यस यन्त्रमा मात्र प्रयोग गर्न मिल्ने कार्डहरू छन्। कार्डहरूको समीक्षा गर्न जारी राख्नुहोस् नामक बटनमा क्लिक गर्नुहोस्।</translation> +<translation id="7698864304447945242">Google Play Services for AR अपडेट गर्ने हो?</translation> <translation id="7699293099605015246">अहिले लेखहरू उपलब्ध छैनन्</translation> <translation id="7701040980221191251">कुनै पनि होइन</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" /> <ph name="SITE" /> मा अगाडि बढ्नु (असुरक्षित छ)<ph name="END_LINK" /></translation> @@ -2451,6 +2463,7 @@ <translation id="7723047071702270851">कार्ड सम्पादन गर्नुहोस्</translation> <translation id="7734285854693414638">Google Forms प्रयोग गरी तुरुन्तै नयाँ फाराम बनाउनुहोस्</translation> <translation id="773466115871691567"><ph name="SOURCE_LANGUAGE" /> मा रहेका पृष्ठहरूलाई सधैँ अनुवाद गर्नुहोस्</translation> +<translation id="7736959720849233795">यो लिंक कपी गर्नुहोस्</translation> <translation id="7740996059027112821">मानक</translation> <translation id="77424286611022110">यो साइटले हस्तक्षेपकारी वा भ्रामक विज्ञापनहरू देखाउँछ। <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">खतरनाक सामग्रीमाथि रोक लगाइयो।</translation>
diff --git a/components/strings/components_strings_no.xtb b/components/strings/components_strings_no.xtb index 28125af..7adb259 100644 --- a/components/strings/components_strings_no.xtb +++ b/components/strings/components_strings_no.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Leseliste</translation> <translation id="1264309058268477500">Alternativ skuff</translation> <translation id="1264974993859112054">Sport</translation> +<translation id="1266469291454105242">Enhetsopplåsing</translation> <translation id="1269516672602708785">Opprett et nytt nettsted i Google Nettsteder raskt</translation> <translation id="1270502636509132238">Hentemåte</translation> <translation id="1281476433249504884">Hylle 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Stevnemøter og kontaktannonser</translation> <translation id="1753706481035618306">Sidenummer</translation> <translation id="1755621011177747277">Adopsjon</translation> +<translation id="1756026472674246267">Åpne linken på en ny fane</translation> <translation id="175656076281618225">Magi</translation> <translation id="1757773103848038814">Monospace-skrifttype</translation> <translation id="1763864636252898013">Denne tjeneren kunne ikke bevise at den er <ph name="DOMAIN" />. Sikkerhetssertifikatet til tjeneren er ikke klarert av enhetens operativsystem. Dette kan være forårsaket av en feilkonfigurering eller en angriper som avskjærer tilkoblingen din.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Avbryt betalingen</translation> <translation id="2148613324460538318">Legg til et kort</translation> <translation id="2149968176347646218">Tilkoblingen er ikke sikker</translation> +<translation id="2153609454945889823">Vil du installere Google Play-tjenester for AR?</translation> <translation id="2154054054215849342">Synkronisering er ikke tilgjengelig for domenet ditt</translation> <translation id="2154484045852737596">Endre kortet</translation> <translation id="2161656808144014275">Tekst</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">Kopier versjonsstrengen</translation> <translation id="323107829343500871">Skriv inn verifiseringskoden for <ph name="CREDIT_CARD" /></translation> <translation id="3234666976984236645">Oppdag alltid viktig innhold på dette nettstedet</translation> +<translation id="3238395604961564389">Åpne linken i et inkognitovindu</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" /> – trykk på Tab og deretter på Enter for å tilpasse nettleserens utseende</translation> <translation id="3240791268468473923">Ark for sikker betalingslegitimasjon uten samsvarende legitimasjon er åpnet</translation> <translation id="324180406144491771">«<ph name="HOST_NAME" />»-linker er blokkert</translation> @@ -945,6 +949,7 @@ <translation id="3531780078352352885">Jobbark</translation> <translation id="3532844647053365774"><ph name="HOST" /> ber om å bruke mikrofonen din</translation> <translation id="3533328374079021623">Postkasse 5</translation> +<translation id="3542768452570884558">Åpne linken i et nytt vindu</translation> <translation id="3550112004925580947">Gjestfrihetsbransjen</translation> <translation id="3552297013052089404">Sans-serif-skrifttype</translation> <translation id="3558573058928565255">Dagtid</translation> @@ -1115,11 +1120,13 @@ <translation id="4040350669425716613">Høyskoler og universiteter</translation> <translation id="4056223980640387499">Sepia</translation> <translation id="4058922952496707368">Nøkkel – «<ph name="SUBKEY" />»: <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Bruk enhetsopplåsing til å bekrefte kort raskere</translation> <translation id="4067098466788473230">Legater og stipender</translation> <translation id="4067263367174615723">C1 (konvolutt)</translation> <translation id="4067947977115446013">Du må angi en gyldig adresse</translation> <translation id="4072193657607981494">Laster inn regler</translation> <translation id="4072486802667267160">Det oppsto en feil under behandlingen av bestillingen din. Prøv på nytt.</translation> +<translation id="4073376909608563327">Kunne ikke bruke enhetsopplåsing</translation> <translation id="4073797364926776829">Se kortet</translation> <translation id="4075732493274867456">Klienten og tjeneren støtter ingen felles SSL-protokollversjon eller -chifferserie.</translation> <translation id="4079302484614802869">Konfigurasjonen av proxytjeneren er angitt til å bruke en nettadresse med .pac-skript, ikke statiske proxytjenere.</translation> @@ -1412,6 +1419,7 @@ <translation id="4840250757394056958">Se Chrome-loggen din</translation> <translation id="484462545196658690">Auto</translation> <translation id="484671803914931257">Få rabatt hos <ph name="MERCHANT_NAME" /> og flere</translation> +<translation id="484988093836683706">Bruk enhetsopplåsing</translation> <translation id="4850886885716139402">Visning</translation> <translation id="4852429274334674023">Operativsystemer</translation> <translation id="485316830061041779">Tysk</translation> @@ -1799,6 +1807,7 @@ <translation id="5921185718311485855">På</translation> <translation id="5921639886840618607">Vil du lagre kortet i Google-kontoen?</translation> <translation id="5922853866070715753">Nesten ferdig</translation> +<translation id="5923492272538889093">Vil du bruke enhetsopplåsing i stedet for verifiseringskode?</translation> <translation id="5928444777041341328">Hjem og hage</translation> <translation id="5932224571077948991">Nettstedet viser forstyrrende eller villedende annonser</translation> <translation id="5937560539988385583">Siden er oversatt</translation> @@ -1972,6 +1981,7 @@ <translation id="643051589346665201">Bytt Google-passord</translation> <translation id="6433490469411711332">Endre kontaktinformasjonen</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> avviste tilkoblingsforsøket.</translation> +<translation id="6433797564277305076">Bekreft kortene dine raskere ved å bruke enhetsopplåsing fremover</translation> <translation id="6440503408713884761">Ignorert</translation> <translation id="6443406338865242315">hvilke utvidelser og programtillegg du har installert</translation> <translation id="6446163441502663861">Kahu (konvolutt)</translation> @@ -2178,6 +2188,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Kan ikke lagre dette kortet akkurat nå}other{Kan ikke lagre disse kortene akkurat nå}}</translation> <translation id="7053983685419859001">Blokkér</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> har bekreftet at sertifikatet for dette nettstedet er utstedt av <ph name="ISSUER" />.</translation> +<translation id="7058774143982824355">Tjeneste for parsing av CSV-passord</translation> <translation id="7061777300866737982">Hjemmesikring og sikkerhet</translation> <translation id="7062635574500127092">Blågrønn</translation> <translation id="706295145388601875">Legg til og administrer adresser i Chrome-innstillingene</translation> @@ -2441,6 +2452,7 @@ <translation id="7696089921647603491">Klassisk rock og slagere</translation> <translation id="7697066736081121494">Prc8 (konvolutt)</translation> <translation id="769721561045429135">Akkurat nå har du kort som bare kan brukes på denne enheten. Klikk på Fortsett for å gå gjennom kortene.</translation> +<translation id="7698864304447945242">Vil du oppdatere Google Play-tjenester for AR?</translation> <translation id="7699293099605015246">Artikler er ikke tilgjengelige for øyeblikket</translation> <translation id="7701040980221191251">Ingen</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Fortsett til <ph name="SITE" /> (usikker side)<ph name="END_LINK" /></translation> @@ -2453,6 +2465,7 @@ <translation id="7723047071702270851">Endre kortet</translation> <translation id="7734285854693414638">Opprett et nytt skjema i Google Skjemaer raskt</translation> <translation id="773466115871691567">Oversett alltid sider på <ph name="SOURCE_LANGUAGE" /></translation> +<translation id="7736959720849233795">Kopier linkadressen</translation> <translation id="7740996059027112821">Standard</translation> <translation id="77424286611022110">Dette nettstedet viser forstyrrende eller villedende annonser. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Farlig innhold er blokkert.</translation>
diff --git a/components/strings/components_strings_or.xtb b/components/strings/components_strings_or.xtb index 6231726..288e1ca 100644 --- a/components/strings/components_strings_or.xtb +++ b/components/strings/components_strings_or.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">ପଢ଼ିବା ତାଲିକା</translation> <translation id="1264309058268477500">ବିକଳ୍ପ</translation> <translation id="1264974993859112054">ଖେଳଗୁଡିକ</translation> +<translation id="1266469291454105242">ଡିଭାଇସ ଅନଲକ</translation> <translation id="1269516672602708785">Google Sitesରେ ଶୀଘ୍ର ଏକ ନୂଆ ସାଇଟ୍ ତିଆରି କରନ୍ତୁ</translation> <translation id="1270502636509132238">ଉଠାଇବା ପଦ୍ଧତି</translation> <translation id="1281476433249504884">ଷ୍ଟାକର୍ 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">ଡେଟିଂ ଏବଂ ପର୍ସନାଲ୍ସ</translation> <translation id="1753706481035618306">ପୃଷ୍ଠା ସଂଖ୍ୟା</translation> <translation id="1755621011177747277">ପୋଷ୍ୟ ସନ୍ତାନ ଗ୍ରହଣ</translation> +<translation id="1756026472674246267">ନୂଆ ଟାବରେ ଲିଙ୍କ ଖୋଲନ୍ତୁ</translation> <translation id="175656076281618225">ମ୍ୟାଜିକ</translation> <translation id="1757773103848038814">Monospace ଫଣ୍ଟ</translation> <translation id="1763864636252898013">ଏହି ସର୍ଭର୍ ଏହା ପ୍ରମାଣ କରିପାରିଲା ନାହିଁ ଯେ ଏହା <ph name="DOMAIN" /> ଅଟେ; ଏହାର ସୁରକ୍ଷା ସାର୍ଟିଫିକେଟ୍ ଆପଣଙ୍କର ଅପରେଟିଂ ସିଷ୍ଟମ୍ ଦ୍ୱାରା ବିଶ୍ୱସନୀୟ ନୁହେଁ। ଏହା ହୁଏତ ଏକ ଭୁଲ୍ କନଫିଗ୍ରେସନ୍ କିମ୍ବା ଆପଣଙ୍କର ସଂଯୋଗକୁ ପ୍ରତିରୋଧ କରୁଥିବା ଜଣେ ଆକ୍ରମଣକାରୀଙ୍କ କାରଣରୁ ହୋଇପାରେ।</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">ପେମେଣ୍ଟ ବାତିଲ୍ କରନ୍ତୁ</translation> <translation id="2148613324460538318">କାର୍ଡ ଯୋଗ କରନ୍ତୁ</translation> <translation id="2149968176347646218">ସଂଯୋଗଟି ସୁରକ୍ଷିତ ନୁହେଁ</translation> +<translation id="2153609454945889823">AR ପାଇଁ Google Play ସେବାଗୁଡ଼ିକ ଇନଷ୍ଟଲ କରିବେ?</translation> <translation id="2154054054215849342">ଆପଣଙ୍କ ଡୋମେନ୍ ପାଇଁ ସିଙ୍କ୍ ଉପଲବ୍ଧ ନାହିଁ</translation> <translation id="2154484045852737596">କାର୍ଡକୁ ଏଡିଟ୍ କରନ୍ତୁ</translation> <translation id="2161656808144014275">ଟେକ୍ସଟ୍</translation> @@ -830,6 +833,7 @@ <translation id="3229277193950731405">ସଂସ୍କରଣ ଷ୍ଟ୍ରିଂ କପି କରନ୍ତୁ</translation> <translation id="323107829343500871"><ph name="CREDIT_CARD" /> ପାଇଁ CVC ଲେଖନ୍ତୁ</translation> <translation id="3234666976984236645">ସର୍ବଦା ଏହି ସାଇଟ୍ରେ ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ ବିଷୟବସ୍ତୁ ଚିହ୍ନଟ କରେ</translation> +<translation id="3238395604961564389">ଇନକଗ୍ନିଟୋ ୱିଣ୍ଡୋରେ ଲିଙ୍କ ଖୋଲନ୍ତୁ</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, ଆପଣଙ୍କ ବ୍ରାଉଜରର ଲୁକ କଷ୍ଟମାଇଜ କରିବାକୁ Tab କରି Enter ଦବାନ୍ତୁ</translation> <translation id="3240791268468473923">ସୁରକ୍ଷିତ ପେମେଣ୍ଟ କ୍ରେଡେନସିଆଲ୍ ସହ ମେଳ ହେଉଥିବା କୌଣସି କ୍ରେଡେନସିଆଲ୍ ସିଟ୍ ଖୋଲାଯାଇନାହିଁ</translation> <translation id="324180406144491771">“<ph name="HOST_NAME" />” ଲିଙ୍କଗୁଡ଼ିକୁ ବ୍ଲକ କରାଯାଇଛି</translation> @@ -943,6 +947,7 @@ <translation id="3531780078352352885">ଜବ୍ ସିଟ୍ସ</translation> <translation id="3532844647053365774"><ph name="HOST" /> ଆପଣଙ୍କର ମାଇକ୍ରୋଫୋନ୍ ବ୍ୟବହାର କରିବାକୁ ଚାହୁଁଛି</translation> <translation id="3533328374079021623">ମେଲବକ୍ସ 5</translation> +<translation id="3542768452570884558">ନୂଆ ୱିଣ୍ଡୋରେ ଲିଙ୍କ ଖୋଲନ୍ତୁ</translation> <translation id="3550112004925580947">ହସ୍ପିଟାଲିଟି ଇଣ୍ଡଷ୍ଟ୍ରି</translation> <translation id="3552297013052089404">Sans-serif ଫଣ୍ଟ</translation> <translation id="3558573058928565255">ଦିନ ସମୟ</translation> @@ -1112,11 +1117,13 @@ <translation id="4040350669425716613">କଲେଜ ଏବଂ ବିଶ୍ୱବିଦ୍ୟାଳୟଗୁଡ଼ିକ</translation> <translation id="4056223980640387499">ସେପିଆ</translation> <translation id="4058922952496707368">କୀ "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4063924980214801036">କାର୍ଡଗୁଡ଼ିକୁ ଶୀଘ୍ର ସୁନିଶ୍ଚିତ କରିବା ପାଇଁ ଡିଭାଇସ ଅନଲକ ବ୍ୟବହାର କରନ୍ତୁ</translation> <translation id="4067098466788473230">ଷ୍ଟଡି ଗ୍ରାଣ୍ଟ ଏବଂ ବୃତ୍ତିଗୁଡ଼ିକ</translation> <translation id="4067263367174615723">C1 (ଏନଭଲପ୍)</translation> <translation id="4067947977115446013">ବୈଧ ଠିକଣା ଯୋଗ କରନ୍ତୁ</translation> <translation id="4072193657607981494">ନୀତିଗୁଡ଼ିକ ଲୋଡ୍ ହେଉଛି</translation> <translation id="4072486802667267160">ଆପଣଙ୍କର ଅର୍ଡର୍ ପ୍ରକ୍ରିୟାକରଣ କରିବା ସମୟରେ ଏକ ତ୍ରୁଟି ହୋଇଛି। ଦୟାକରି ପୁଣିଥରେ ଚେଷ୍ଟା କରନ୍ତୁ।</translation> +<translation id="4073376909608563327">ଡିଭାଇସ ଅନଲକ ବ୍ୟବହାର କରାଯାଇପାରିଲା ନାହିଁ</translation> <translation id="4073797364926776829">କାର୍ଡ ଦେଖନ୍ତୁ</translation> <translation id="4075732493274867456">କ୍ଲାଏଣ୍ଟ ଓ ସର୍ଭର୍ ଏକ ସାଧାରଣ SSL ପ୍ରୋଟୋକଲ୍ ସଂସ୍କରଣ କିମ୍ବା ସାଇଫର୍ ସୁଟ୍ର ସମର୍ଥନ କରନ୍ତି ନାହିଁ।</translation> <translation id="4079302484614802869">ପ୍ରକ୍ସି କନଫିଗ୍ରେସନ୍ ଏକ .pac ସ୍କ୍ରିପ୍ଟ URL ବ୍ୟବହାର କରିବାକୁ ସେଟ୍ କରାଯାଇଛି, ସ୍ଥିରୀକୃତ ପ୍ରକ୍ସି ସର୍ଭର୍ ନୁହେଁ।</translation> @@ -1410,6 +1417,7 @@ <translation id="4840250757394056958">ଆପଣଙ୍କ Chrome ଇତିହାସ ଦେଖନ୍ତୁ</translation> <translation id="484462545196658690">ସ୍ୱତଃ</translation> <translation id="484671803914931257"><ph name="MERCHANT_NAME" /> ଏବଂ ଆହୁରି ଅନେକ କିଛିରେ ରିହାତି ପାଆନ୍ତୁ</translation> +<translation id="484988093836683706">ଡିଭାଇସ ଅନଲକ ବ୍ୟବହାର କରନ୍ତୁ</translation> <translation id="4850886885716139402">ଦେଖନ୍ତୁ</translation> <translation id="4852429274334674023">ଅପରେଟିଂ ସିଷ୍ଟମଗୁଡ଼ିକ</translation> <translation id="485316830061041779">ଜର୍ମାନ୍</translation> @@ -1797,6 +1805,7 @@ <translation id="5921185718311485855">ଚାଲୁ ଅଛି</translation> <translation id="5921639886840618607">Google ଆକାଉଣ୍ଟରେ କାର୍ଡ ସେଭ୍ କରିବେ?</translation> <translation id="5922853866070715753">ପ୍ରାୟ ହୋଇଗଲାଣି!</translation> +<translation id="5923492272538889093">CVC ପରିବର୍ତ୍ତେ ଡିଭାଇସ ଅନଲକ ବ୍ୟବହାର କରିବେ?</translation> <translation id="5928444777041341328">ଘର ଏବଂ ବଗିଚା</translation> <translation id="5932224571077948991">ସାଇଟ୍, ଅନଧିକାର ପ୍ରବେଶ କରିଥିବା କିମ୍ବା ବିଭ୍ରାନ୍ତିକର ବିଜ୍ଞାପନ ଦେଖାଉଛି</translation> <translation id="5937560539988385583">ପୃଷ୍ଠାକୁ ଅନୁବାଦ କରାଯାଇଛି</translation> @@ -1969,6 +1978,7 @@ <translation id="643051589346665201">Google ପାସୱାର୍ଡ ପରିବର୍ତ୍ତନ କରନ୍ତୁ</translation> <translation id="6433490469411711332">ଯୋଗାଯୋଗ ସୂଚନା ଏଡିଟ୍ କରନ୍ତୁ</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> ସଂଯୋଗ କରିବାକୁ ଅସ୍ୱୀକାର କରିଛନ୍ତି।</translation> +<translation id="6433797564277305076">ବର୍ତ୍ତମାନଠାରୁ ଡିଭାଇସ ଅନଲକ ବ୍ୟବହାର କରି ଆପଣଙ୍କ କାର୍ଡଗୁଡ଼ିକୁ ଶୀଘ୍ର ସୁନିଶ୍ଚିତ କରନ୍ତୁ</translation> <translation id="6440503408713884761">ଅଣଦେଖା କରାଗଲା</translation> <translation id="6443406338865242315">ଆପଣ କେଉଁ ଏକ୍ସଟେନସନ୍ ଏବଂ ପ୍ଲଗଇନଗୁଡ଼ିକ ଇନଷ୍ଟଲ୍ କରିଛନ୍ତି</translation> <translation id="6446163441502663861">କାହୁ (ଏନଭଲପ୍)</translation> @@ -2175,6 +2185,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{ଏହି କାର୍ଡ ବର୍ତ୍ତମାନ ସମୟରେ ସେଭ୍ କରାଯାଇପାରିବ ନାହିଁ}other{ଏହି କାର୍ଡଗୁଡ଼ିକ ବର୍ତ୍ତମାନ ସମୟରେ ସେଭ୍ କରାଯାଇପାରିବ ନାହିଁ}}</translation> <translation id="7053983685419859001">ଅବରୋଧ କରନ୍ତୁ</translation> <translation id="7058163556978339998"><ph name="ISSUER" /> ଦ୍ଵାରା ଏହି ୱେବସାଇଟର ସାର୍ଟିଫିକେଟ୍ ଜାରି କରାଯାଇଛି ବୋଲି <ph name="BROWSER" /> ଯାଞ୍ଚ କରିଛି।</translation> +<translation id="7058774143982824355">CSV ପାସୱାର୍ଡ ପାର୍ସର ସେବା</translation> <translation id="7061777300866737982">ଘରର ସୁରକ୍ଷା ଏବଂ ନିରାପତ୍ତା</translation> <translation id="7062635574500127092">ଟିଲ୍</translation> <translation id="706295145388601875">Chrome ସେଟିଂସରେ ଠିକଣାଗୁଡ଼ିକୁ ଯୋଗ କରି ପରିଚାଳନା କରନ୍ତୁ</translation> @@ -2439,6 +2450,7 @@ <translation id="7696089921647603491">କ୍ଲାସିକ ରକ ଏବଂ ଓଲ୍ଡିଜ</translation> <translation id="7697066736081121494">Prc8 (ଏନଭଲପ୍)</translation> <translation id="769721561045429135">ବର୍ତ୍ତମାନ, ଆପଣଙ୍କ ପାଖରେ ସେହି କାର୍ଡଗୁଡ଼ିକ ଅଛି ଯାହା କେବଳ ଏହି ଡିଭାଇସ୍ରେ ବ୍ୟବହାର କରାଯାଇପାରିବ। କାର୍ଡଗୁଡ଼ିକର ସମୀକ୍ଷା କରିବାକୁ ’ଜାରି ରଖନ୍ତୁ’ରେ କ୍ଲିକ୍ କରନ୍ତୁ।</translation> +<translation id="7698864304447945242">AR ପାଇଁ Google Play ସେବାଗୁଡ଼ିକ ଅପଡେଟ କରିବେ?</translation> <translation id="7699293099605015246">ବର୍ତ୍ତମାନ ପ୍ରବନ୍ଧଗୁଡ଼ିକ ଉପଲବ୍ଧ ନାହିଁ</translation> <translation id="7701040980221191251">କିଛି ନାହିଁ</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" /><ph name="SITE" />(ଅସୁରକ୍ଷିତ)କୁ ଅଗ୍ରସର ହୁଅନ୍ତୁ<ph name="END_LINK" /></translation> @@ -2451,6 +2463,7 @@ <translation id="7723047071702270851">କାର୍ଡକୁ ଏଡିଟ୍ କରନ୍ତୁ</translation> <translation id="7734285854693414638">Google Formsରେ ଶୀଘ୍ର ଏକ ନୂଆ ଫର୍ମ ତିଆରି କରନ୍ତୁ</translation> <translation id="773466115871691567">ସର୍ବଦା <ph name="SOURCE_LANGUAGE" />ରେ ପୃଷ୍ଠାଗୁଡ଼ିକୁ ଅନୁବାଦ କରନ୍ତୁ</translation> +<translation id="7736959720849233795">ଲିଙ୍କ ଠିକଣାକୁ କପି କରନ୍ତୁ</translation> <translation id="7740996059027112821">ମାନାଙ୍କ</translation> <translation id="77424286611022110">ଏହି ସାଇଟ୍ ଅନଧିକାର ପ୍ରବେଶ କରିଥିବା କିମ୍ବା ବିଭ୍ରାନ୍ତିକର ବିଜ୍ଞାପନଗୁଡ଼ିକ ଦେଖାଏ। <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">ବିପଜ୍ଜନକ ବିଷୟବସ୍ତୁ ବ୍ଲକ୍ କରାଯାଇଛି।</translation>
diff --git a/components/strings/components_strings_pa.xtb b/components/strings/components_strings_pa.xtb index b3317f8..5cd7a13b 100644 --- a/components/strings/components_strings_pa.xtb +++ b/components/strings/components_strings_pa.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">ਪੜ੍ਹਤ ਸੂਚੀ</translation> <translation id="1264309058268477500">ਵਿਕਲਪਿਕ</translation> <translation id="1264974993859112054">ਖੇਡਾਂ</translation> +<translation id="1266469291454105242">ਡੀਵਾਈਸ ਅਣਲਾਕ ਸੁਵਿਧਾ</translation> <translation id="1269516672602708785">Google Sites ਵਿੱਚ ਤੇਜ਼ੀ ਨਾਲ ਨਵੀਂ ਸਾਈਟ ਬਣਾਓ</translation> <translation id="1270502636509132238">ਪਿਕਅੱਪ ਵਿਧੀ</translation> <translation id="1281476433249504884">ਸਟੈਕਰ 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">ਡੇਟਿੰਗ ਅਤੇ ਵਿਅਕਤੀਗਤ</translation> <translation id="1753706481035618306">ਪੰਨਾ ਨੰਬਰ</translation> <translation id="1755621011177747277">ਗੋਦ ਲੈਣਾ</translation> +<translation id="1756026472674246267">ਨਵੀਂ ਟੈਬ ਵਿੱਚ ਲਿੰਕ ਖੋਲ੍ਹੋ</translation> <translation id="175656076281618225">ਜਾਦੂ</translation> <translation id="1757773103848038814">ਮੋਨੋਸਪੇਸ ਫ਼ੌਂਟ</translation> <translation id="1763864636252898013">ਇਹ ਸਰਵਰ ਇਹ ਸਿੱਧ ਨਹੀਂ ਕਰ ਸਕਿਆ ਕਿ ਇਹ <ph name="DOMAIN" /> ਹੈ; ਇਸਦਾ ਸੁਰੱਖਿਆ ਪ੍ਰਮਾਣ-ਪੱਤਰ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਦੇ ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ ਵੱਲੋਂ ਭਰੋਸੇਯੋਗ ਨਹੀਂ ਹੈ। ਇਸ ਦਾ ਕਾਰਨ ਗਲਤ ਸੰਰੂਪਣ ਹੋ ਸਕਦਾ ਹੈ ਜਾਂ ਕੋਈ ਹਮਲਾਵਰ ਤੁਹਾਡੇ ਕਨੈਕਸ਼ਨ ਦੇ ਰਾਹ ਨੂੰ ਰੋਕ ਰਿਹਾ ਹੈ।</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">ਭੁਗਤਾਨ ਰੱਦ ਕਰੋ</translation> <translation id="2148613324460538318">ਕਾਰਡ ਸ਼ਾਮਲ ਕਰੋ</translation> <translation id="2149968176347646218">ਕਨੈਕਸ਼ਨ ਸੁਰੱਖਿਅਤ ਨਹੀਂ ਹੈ</translation> +<translation id="2153609454945889823">ਕੀ Google Play Services for AR ਨੂੰ ਸਥਾਪਤ ਕਰਨਾ ਹੈ?</translation> <translation id="2154054054215849342">ਸਿੰਕ ਤੁਹਾਡੀ ਡੋਮੇਨ ਲਈ ਉਪਲਬਧ ਨਹੀਂ ਹੈ</translation> <translation id="2154484045852737596">ਕਾਰਡ ਦਾ ਸੰਪਾਦਨ ਕਰੋ</translation> <translation id="2161656808144014275">ਲਿਖਤ</translation> @@ -830,6 +833,7 @@ <translation id="3229277193950731405">ਵਰਜਨ ਸਤਰ ਕਾਪੀ ਕਰੋ</translation> <translation id="323107829343500871"><ph name="CREDIT_CARD" /> ਦਾ CVC ਦਾਖਲ ਕਰੋ</translation> <translation id="3234666976984236645">ਇਸ ਸਾਈਟ 'ਤੇ ਹਮੇਸ਼ਾਂ ਆਯਾਤ ਸਮੱਗਰੀ ਖੋਜੋ</translation> +<translation id="3238395604961564389">ਇਨਕੋਗਨਿਟੋ ਵਿੰਡੋ ਵਿੱਚ ਲਿੰਕ ਖੋਲ੍ਹੋ</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, Tab ਦਬਾ ਕੇ, ਫਿਰ ਆਪਣੇ ਬ੍ਰਾਊਜ਼ਰ ਦੀ ਦਿੱਖ ਨੂੰ ਵਿਉਂਤਬੱਧ ਕਰਨ ਲਈ Enter ਦਬਾਓ</translation> <translation id="3240791268468473923">ਭਗਤਾਨ ਕ੍ਰੀਡੈਂਸ਼ੀਅਲ ਨੂੰ ਸੁਰੱਖਿਅਤ ਬਣਾਓ ਕੋਈ ਮੇਲ ਖਾਂਦੇ ਕ੍ਰੀਡੈਂਸ਼ੀਅਲ ਸੰਬੰਧੀ ਸ਼ੀਟ ਖੁੱਲ੍ਹੀ ਨਹੀਂ ਹੈ</translation> <translation id="324180406144491771">“<ph name="HOST_NAME" />” ਲਿੰਕਾਂ ਨੂੰ ਬਲਾਕ ਕੀਤਾ ਗਿਆ ਹੈ</translation> @@ -943,6 +947,7 @@ <translation id="3531780078352352885">ਕਾਰਵਾਈ ਸ਼ੀਟਾਂ</translation> <translation id="3532844647053365774"><ph name="HOST" /> ਦੀ ਤੁਹਾਡੇ ਮਾਈਕ੍ਰੋਫ਼ੋਨ ਨੂੰ ਵਰਤਣ ਦੀ ਇੱਛਾ ਹੈ</translation> <translation id="3533328374079021623">ਮੇਲਬਾਕਸ 5</translation> +<translation id="3542768452570884558">ਨਵੀਂ ਵਿੰਡੋ ਵਿੱਚ ਲਿੰਕ ਖੋਲ੍ਹੋ</translation> <translation id="3550112004925580947">ਖਾਤਰਦਾਰੀ ਉਦਯੋਗ</translation> <translation id="3552297013052089404">ਸਾਂਸ-ਸੈਰਿਫ ਫ਼ੌਂਟ</translation> <translation id="3558573058928565255">ਦਿਨ ਦਾ ਸਮਾਂ</translation> @@ -1112,11 +1117,13 @@ <translation id="4040350669425716613">ਕਾਲਜ ਅਤੇ ਯੂਨੀਵਰਸਟੀਆਂ</translation> <translation id="4056223980640387499">Sepia</translation> <translation id="4058922952496707368">ਕੁੰਜੀ "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4063924980214801036">ਕਾਰਡਾਂ ਦੀ ਵਧੇਰੇ ਤੇਜ਼ੀ ਨਾਲ ਤਸਦੀਕ ਕਰਨ ਲਈ ਡੀਵਾਈਸ ਅਣਲਾਕ ਸੁਵਿਧਾ ਵਰਤੋ</translation> <translation id="4067098466788473230">ਪੜ੍ਹਾਈ ਲਈ ਅਨੁਦਾਨ ਅਤੇ ਵਜ਼ੀਫ਼ੇ</translation> <translation id="4067263367174615723">C1 (ਲਿਫ਼ਾਫ਼ਾ)</translation> <translation id="4067947977115446013">ਵੈਧ ਪਤਾ ਸ਼ਾਮਲ ਕਰੋ</translation> <translation id="4072193657607981494">ਨੀਤੀਆਂ ਨੂੰ ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation> <translation id="4072486802667267160">ਤੁਹਾਡੇ ਆਰਡਰ 'ਤੇ ਪ੍ਰਕਿਰਿਆ ਕਰਨ ਦੌਰਾਨ ਗੜਬੜ ਹੋਈ। ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> +<translation id="4073376909608563327">ਡੀਵਾਈਸ ਅਣਲਾਕ ਕਰਨ ਦੀ ਸੁਵਿਧਾ ਨੂੰ ਵਰਤਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ</translation> <translation id="4073797364926776829">ਕਾਰਡ ਦੇਖੋ</translation> <translation id="4075732493274867456">ਗਾਹਕ ਅਤੇ ਸਰਵਰ ਇੱਕ ਆਮ SSL ਪ੍ਰੋਟੋਕੋਲ ਵਰਜਨ ਜਾਂ ਸਿਫ਼ਰ ਸੁਈਟ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦੇ ਹਨ।</translation> <translation id="4079302484614802869">ਪ੍ਰੌਕਸੀ ਸੰਰੂਪਿਤ ਇੱਕ .pac ਸਕ੍ਰਿਪਟ URL ਵਰਤਣ ਲਈ ਸੈੱਟ ਹੈ, ਸਥਿਰ ਪ੍ਰੌਕਸੀ ਸਰਵਰਾਂ ਨੂੰ ਨਹੀਂ।</translation> @@ -1409,6 +1416,7 @@ <translation id="4840250757394056958">ਆਪਣਾ Chrome ਇਤਿਹਾਸ ਦੇਖੋ</translation> <translation id="484462545196658690">ਸਵੈ</translation> <translation id="484671803914931257"><ph name="MERCHANT_NAME" /> ਅਤੇ ਹੋਰ ਚੀਜ਼ਾਂ 'ਤੇ ਛੋਟ ਪ੍ਰਾਪਤ ਕਰੋ</translation> +<translation id="484988093836683706">ਡੀਵਾਈਸ ਅਣਲਾਕ ਸੁਵਿਧਾ ਵਰਤੋ</translation> <translation id="4850886885716139402">ਦੇਖੋ</translation> <translation id="4852429274334674023">ਓਪਰੇਟਿੰਗ ਸਿਸਟਮ</translation> <translation id="485316830061041779">ਜਰਮਨ</translation> @@ -1796,6 +1804,7 @@ <translation id="5921185718311485855">ਚਾਲੂ</translation> <translation id="5921639886840618607">ਕੀ ਕਾਰਡ ਨੂੰ Google ਖਾਤੇ ਵਿੱਚ ਰੱਖਿਅਤ ਕਰਨਾ ਹੈ?</translation> <translation id="5922853866070715753">ਲਗਭਗ ਹੋ ਗਿਆ</translation> +<translation id="5923492272538889093">ਕੀ ਡੀਵਾਈਸ ਅਣਲਾਕ ਸੁਵਿਧਾ ਦੀ ਬਜਾਏ CVC ਨੂੰ ਵਰਤਣਾ ਹੈ?</translation> <translation id="5928444777041341328">ਘਰ ਅਤੇ ਬਗੀਚਾ</translation> <translation id="5932224571077948991">ਸਾਈਟ ਦਖਲਅੰਦਾਜ਼ੀ ਜਾਂ ਗੁਮਰਾਹ ਕਰਨ ਵਾਲੇ ਵਿਗਿਆਪਨ ਦਿਖਾਉਂਦੀ ਹੈ</translation> <translation id="5937560539988385583">ਪੰਨੇ ਦਾ ਅਨੁਵਾਦ ਕੀਤਾ ਗਿਆ</translation> @@ -1968,6 +1977,7 @@ <translation id="643051589346665201">Google ਪਾਸਵਰਡ ਬਦਲੋ</translation> <translation id="6433490469411711332">ਸੰਪਰਕ ਜਾਣਕਾਰੀ ਦਾ ਸੰਪਾਦਨ ਕਰੋ</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> ਨੇ ਕਨੈਕਟ ਹੋਣ ਤੋਂ ਇਨਕਾਰ ਕੀਤਾ।</translation> +<translation id="6433797564277305076">ਹੁਣ ਤੋਂ ਡੀਵਾਈਸ ਅਣਲਾਕ ਸੁਵਿਧਾ ਨੂੰ ਵਰਤ ਕੇ ਆਪਣੇ ਕਾਰਡਾਂ ਦੀ ਵਧੇਰੇ ਤੇਜ਼ੀ ਨਾਲ ਤਸਦੀਕ ਕਰੋ</translation> <translation id="6440503408713884761">ਅਣਡਿੱਠ ਕੀਤਾ ਗਿਆ</translation> <translation id="6443406338865242315">ਤੁਸੀਂ ਕਿਹੜੀਆਂ ਐਕਸਟੈਂਸ਼ਨਾਂ ਅਤੇ ਪਲੱਗਇਨ ਸਥਾਪਤ ਕੀਤੇ ਹੋਏ ਹਨ</translation> <translation id="6446163441502663861">Kahu (ਲਿਫ਼ਾਫ਼ਾ)</translation> @@ -2174,6 +2184,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{ਇਸ ਕਾਰਡ ਨੂੰ ਫਿਲਹਾਲ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ}one{ਇਸ ਕਾਰਡ ਨੂੰ ਫਿਲਹਾਲ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ}other{ਇਹਨਾਂ ਕਾਰਡਾਂ ਨੂੰ ਫਿਲਹਾਲ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ}}</translation> <translation id="7053983685419859001">ਬਲੌਕ ਕਰੋ</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> ਨੇ ਇਹ ਪੁਸ਼ਟੀ ਕੀਤੀ ਹੈ ਕਿ ਇਸ ਵੈੱਬਸਾਈਟ ਦਾ ਪ੍ਰਮਾਣ-ਪੱਤਰ <ph name="ISSUER" /> ਨੇ ਜਾਰੀ ਕੀਤਾ ਹੈ।</translation> +<translation id="7058774143982824355">CSV ਪਾਸਵਰਡ ਪਾਰਸਰ ਸੇਵਾ</translation> <translation id="7061777300866737982">ਘਰ ਦੀ ਸੁਰੱਖਿਆ ਅਤੇ ਰੱਖਿਆ</translation> <translation id="7062635574500127092">ਹਰਾ-ਨੀਲਾ</translation> <translation id="706295145388601875">Chrome ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਪਤੇ ਸ਼ਾਮਲ ਕਰੋ ਅਤੇ ਉਹਨਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ</translation> @@ -2438,6 +2449,7 @@ <translation id="7696089921647603491">ਕਲਾਸਿਕ ਰੌਕ ਅਤੇ ਪੁਰਾਣੇ ਗੀਤ</translation> <translation id="7697066736081121494">Prc8 (ਲਿਫ਼ਾਫ਼ਾ)</translation> <translation id="769721561045429135">ਫਿਲਹਾਲ, ਤੁਹਾਡੇ ਕੋਲ ਉਹ ਕਾਰਡ ਹਨ ਜੋ ਸਿਰਫ਼ ਇਸ ਡੀਵਾਈਸ 'ਤੇ ਹੀ ਵਰਤੇ ਜਾ ਸਕਦੇ ਹਨ। ਕਾਰਡਾਂ ਦੀ ਸਮੀਖਿਆ ਲਈ ਜਾਰੀ ਰੱਖੋ 'ਤੇ ਕਲਿੱਕ ਕਰੋ।</translation> +<translation id="7698864304447945242">ਕੀ Google Play Services for AR ਨੂੰ ਅੱਪਡੇਟ ਕਰਨਾ ਹੈ?</translation> <translation id="7699293099605015246">ਫਿਲਹਾਲ ਲੇਖ ਉਪਲਬਧ ਨਹੀਂ ਹਨ</translation> <translation id="7701040980221191251">ਕੋਈ ਨਹੀਂ</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" /><ph name="SITE" /> ਲਈ ਅੱਗੇ ਵੱਧੋ (ਅਸੁਰੱਖਿਅਤ)<ph name="END_LINK" /></translation> @@ -2450,6 +2462,7 @@ <translation id="7723047071702270851">ਕਾਰਡ ਦਾ ਸੰਪਾਦਨ ਕਰੋ</translation> <translation id="7734285854693414638">Google Forms ਵਿੱਚ ਤੇਜ਼ੀ ਨਾਲ ਨਵਾਂ ਫ਼ਾਰਮ ਬਣਾਓ</translation> <translation id="773466115871691567">ਪੰਨਿਆਂ ਦਾ ਅਨੁਵਾਦ ਹਮੇਸ਼ਾਂ <ph name="SOURCE_LANGUAGE" /> ਭਾਸ਼ਾ ਵਿੱਚ ਕਰੋ</translation> +<translation id="7736959720849233795">ਲਿੰਕ ਪਤਾ ਕਾਪੀ ਕਰੋ</translation> <translation id="7740996059027112821">ਸਟੈਂਡਰਡ</translation> <translation id="77424286611022110">ਇਹ ਸਾਈਟ ਦਖਲਅੰਦਾਜ਼ੀ ਜਾਂ ਗੁਮਰਾਹ ਕਰਨ ਵਾਲੇ ਵਿਗਿਆਪਨ ਦਿਖਾਉਂਦੀ ਹੈ। <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">ਖਤਰਨਾਕ ਸਮੱਗਰੀ ਬਲਾਕ ਕੀਤੀ ਗਈ।</translation>
diff --git a/components/strings/components_strings_pl.xtb b/components/strings/components_strings_pl.xtb index 3598902..b4832e74 100644 --- a/components/strings/components_strings_pl.xtb +++ b/components/strings/components_strings_pl.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Do przeczytania</translation> <translation id="1264309058268477500">Alternatywne</translation> <translation id="1264974993859112054">Sport</translation> +<translation id="1266469291454105242">Odblokowywanie urządzenia</translation> <translation id="1269516672602708785">Szybko utwórz nową witrynę w Witrynach Google</translation> <translation id="1270502636509132238">Metoda odbioru</translation> <translation id="1281476433249504884">Układarka 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Randki i ogłoszenia towarzyskie</translation> <translation id="1753706481035618306">Numer strony</translation> <translation id="1755621011177747277">Adopcja</translation> +<translation id="1756026472674246267">Otwórz link w nowej karcie</translation> <translation id="175656076281618225">Iluzja</translation> <translation id="1757773103848038814">Czcionka o stałej szerokości</translation> <translation id="1763864636252898013">Ten serwer nie mógł udowodnić, że należy do <ph name="DOMAIN" />. Jego certyfikat bezpieczeństwa nie jest zaufany w systemie operacyjnym tego urządzenia. Może to być spowodowane błędną konfiguracją lub przechwyceniem połączenia przez atakującego.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Anuluj płatność</translation> <translation id="2148613324460538318">Dodaj kartę</translation> <translation id="2149968176347646218">Połączenie nie jest bezpieczne</translation> +<translation id="2153609454945889823">Zainstalować Usługi Google Play dla AR?</translation> <translation id="2154054054215849342">Synchronizacja nie jest dostępna w Twojej domenie.</translation> <translation id="2154484045852737596">Edytowanie karty</translation> <translation id="2161656808144014275">Tekstowe</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">Skopiuj ciąg znaków wersji</translation> <translation id="323107829343500871">Wpisz kod CVC karty <ph name="CREDIT_CARD" /></translation> <translation id="3234666976984236645">Zawsze wykrywaj ważną treść na tej stronie</translation> +<translation id="3238395604961564389">Otwórz link w oknie incognito</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />; aby dostosować wygląd przeglądarki, naciśnij Tab, a potem Enter.</translation> <translation id="3240791268468473923">Arkusz dotyczący braku pasujących danych uwierzytelniających na potrzeby bezpiecznych płatności jest otwarty</translation> <translation id="324180406144491771">Linki „<ph name="HOST_NAME" />” są zablokowane</translation> @@ -945,6 +949,7 @@ <translation id="3531780078352352885">Arkusze zadań</translation> <translation id="3532844647053365774"><ph name="HOST" /> chce korzystać z mikrofonu</translation> <translation id="3533328374079021623">Zestaw tac odbiorczych 5</translation> +<translation id="3542768452570884558">Otwórz link w nowym oknie</translation> <translation id="3550112004925580947">Branża turystyczna</translation> <translation id="3552297013052089404">Czcionka bezszeryfowa</translation> <translation id="3558573058928565255">Dzień godzina</translation> @@ -1115,11 +1120,13 @@ <translation id="4040350669425716613">Szkoły wyższe</translation> <translation id="4056223980640387499">Sepia</translation> <translation id="4058922952496707368">Klucz „<ph name="SUBKEY" />”: <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Używaj odblokowywania urządzenia, aby szybciej potwierdzać karty</translation> <translation id="4067098466788473230">Stypendia naukowe</translation> <translation id="4067263367174615723">C1 (koperta)</translation> <translation id="4067947977115446013">Dodaj poprawny adres</translation> <translation id="4072193657607981494">Ładuję zasady</translation> <translation id="4072486802667267160">Podczas przetwarzania zamówienia wystąpił błąd. Spróbuj ponownie.</translation> +<translation id="4073376909608563327">Nie udało się użyć odblokowywania urządzenia</translation> <translation id="4073797364926776829">Wyświetl kartę</translation> <translation id="4075732493274867456">Klient i serwer nie obsługują wspólnej wersji protokołu SSL lub mechanizmu szyfrowania.</translation> <translation id="4079302484614802869">Proxy skonfigurowano do używania URL-a skryptu PAC, a nie ustalonych serwerów proxy.</translation> @@ -1412,6 +1419,7 @@ <translation id="4840250757394056958">Wyświetl historię Chrome</translation> <translation id="484462545196658690">Automatycznie</translation> <translation id="484671803914931257">Otrzymaj rabat w sklepie <ph name="MERCHANT_NAME" /> i nie tylko</translation> +<translation id="484988093836683706">Używaj odblokowywania urządzenia</translation> <translation id="4850886885716139402">Widok</translation> <translation id="4852429274334674023">Systemy operacyjne</translation> <translation id="485316830061041779">Niemiecki</translation> @@ -1799,6 +1807,7 @@ <translation id="5921185718311485855">włączono</translation> <translation id="5921639886840618607">Zapisać kartę na koncie Google?</translation> <translation id="5922853866070715753">Prawie gotowe</translation> +<translation id="5923492272538889093">Używać odblokowywania urządzenia zamiast kodu CVC?</translation> <translation id="5928444777041341328">Dom i ogród</translation> <translation id="5932224571077948991">Na tej stronie wyświetlają się uciążliwe lub wprowadzające w błąd reklamy</translation> <translation id="5937560539988385583">Strona została przetłumaczona</translation> @@ -1972,6 +1981,7 @@ <translation id="643051589346665201">Zmień hasło do Google</translation> <translation id="6433490469411711332">Edytuj dane kontaktowe</translation> <translation id="6433595998831338502">Serwer <ph name="HOST_NAME" /> odrzucił połączenie.</translation> +<translation id="6433797564277305076">Potwierdzaj karty szybciej przy użyciu odblokowywania urządzenia</translation> <translation id="6440503408713884761">Ignorowany</translation> <translation id="6443406338865242315">Zainstalowane przez Ciebie rozszerzenia i wtyczki</translation> <translation id="6446163441502663861">Kahu (koperta)</translation> @@ -2178,6 +2188,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Nie można teraz zapisać tej karty}few{Nie można teraz zapisać tych kart}many{Nie można teraz zapisać tych kart}other{Nie można teraz zapisać tych kart}}</translation> <translation id="7053983685419859001">Blokuj</translation> <translation id="7058163556978339998">W <ph name="BROWSER" /> sprawdzono, że wydawcą certyfikatu tej witryny jest <ph name="ISSUER" />.</translation> +<translation id="7058774143982824355">Usługa parsera haseł w formacie CSV</translation> <translation id="7061777300866737982">Zabezpieczenia domu</translation> <translation id="7062635574500127092">Morski</translation> <translation id="706295145388601875">Dodaj adresy i zarządzaj nimi w ustawieniach Chrome</translation> @@ -2442,6 +2453,7 @@ <translation id="7696089921647603491">Klasyczny rock i stare przeboje</translation> <translation id="7697066736081121494">Prc8 (koperta)</translation> <translation id="769721561045429135">Obecnie niektórych z Twoich kart można używać tylko na tym urządzeniu. Kliknij Dalej, by wyświetlić karty.</translation> +<translation id="7698864304447945242">Zaktualizować Usługi Google Play dla AR?</translation> <translation id="7699293099605015246">Artykuły nie są obecnie dostępne</translation> <translation id="7701040980221191251">Brak</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Otwórz stronę <ph name="SITE" /> (niebezpieczną)<ph name="END_LINK" /></translation> @@ -2454,6 +2466,7 @@ <translation id="7723047071702270851">Edytuj kartę</translation> <translation id="7734285854693414638">Szybko utwórz nowy formularz w Formularzach Google</translation> <translation id="773466115871691567">Zawsze tłumacz strony, których językiem jest <ph name="SOURCE_LANGUAGE" /></translation> +<translation id="7736959720849233795">Kopiuj adres linku</translation> <translation id="7740996059027112821">Standardowa</translation> <translation id="77424286611022110">Na tej stronie wyświetlają się uciążliwe lub wprowadzające w błąd reklamy. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Zablokowano niebezpieczne treści.</translation>
diff --git a/components/strings/components_strings_pt-BR.xtb b/components/strings/components_strings_pt-BR.xtb index 7c4c0e4..ff6a441e 100644 --- a/components/strings/components_strings_pt-BR.xtb +++ b/components/strings/components_strings_pt-BR.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Lista de leitura</translation> <translation id="1264309058268477500">Alternativa</translation> <translation id="1264974993859112054">Esportes</translation> +<translation id="1266469291454105242">Desbloqueio do dispositivo</translation> <translation id="1269516672602708785">Criar rapidamente um novo site no Google Sites</translation> <translation id="1270502636509132238">Método de Retirada</translation> <translation id="1281476433249504884">Empilhador 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Namoro e assuntos pessoais</translation> <translation id="1753706481035618306">Numero da página</translation> <translation id="1755621011177747277">Adoção</translation> +<translation id="1756026472674246267">Abrir link em uma nova guia</translation> <translation id="175656076281618225">Mágica</translation> <translation id="1757773103848038814">Fonte monoespaçada</translation> <translation id="1763864636252898013">Este servidor não conseguiu provar que é <ph name="DOMAIN" />. O certificado de segurança não é confiável para o sistema operacional do seu dispositivo. Isso pode ser causado por uma configuração incorreta ou pela interceptação da sua conexão por um invasor.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Cancelar pagamento</translation> <translation id="2148613324460538318">Adicionar Cartão</translation> <translation id="2149968176347646218">A conexão não é segura</translation> +<translation id="2153609454945889823">Instalar o Google Play Services para RA?</translation> <translation id="2154054054215849342">O serviço de sincronização não está disponível para seu domínio</translation> <translation id="2154484045852737596">Editar cartão</translation> <translation id="2161656808144014275">Texto</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">Copiar string da versão</translation> <translation id="323107829343500871">Digite o CVC do <ph name="CREDIT_CARD" /></translation> <translation id="3234666976984236645">Sempre detectar conteúdo importante neste site</translation> +<translation id="3238395604961564389">Abrir link em uma janela anônima</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />. Pressione Tab e depois Enter para personalizar a aparência do navegador</translation> <translation id="3240791268468473923">A página de credenciais para pagamento seguro sem correspondência está aberta</translation> <translation id="324180406144491771">Os links de “<ph name="HOST_NAME" />” são bloqueados</translation> @@ -945,6 +949,7 @@ <translation id="3531780078352352885">Páginas da tarefa</translation> <translation id="3532844647053365774"><ph name="HOST" /> quer usar seu microfone</translation> <translation id="3533328374079021623">Caixa de e-mails 5</translation> +<translation id="3542768452570884558">Abrir link em uma nova janela</translation> <translation id="3550112004925580947">Indústria da hospitalidade</translation> <translation id="3552297013052089404">Fonte Sans-Serif</translation> <translation id="3558573058928565255">Dia</translation> @@ -1115,11 +1120,13 @@ <translation id="4040350669425716613">Faculdades e universidades</translation> <translation id="4056223980640387499">Sépia</translation> <translation id="4058922952496707368">Chave "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Usar o desbloqueio do dispositivo para confirmar os cartões mais rapidamente</translation> <translation id="4067098466788473230">Bolsas de estudo</translation> <translation id="4067263367174615723">C1 (Envelope)</translation> <translation id="4067947977115446013">Adicione um Endereço Válido</translation> <translation id="4072193657607981494">Carregando políticas</translation> <translation id="4072486802667267160">Ocorreu um erro ao processar seu pedido. Tente novamente.</translation> +<translation id="4073376909608563327">Não foi possível usar o desbloqueio do dispositivo</translation> <translation id="4073797364926776829">Ver cartão</translation> <translation id="4075732493274867456">O cliente e o servidor não são compatíveis com uma versão do protocolo SSL comum ou com o pacote de criptografia.</translation> <translation id="4079302484614802869">A configuração do proxy definida utiliza um URL de script .pac, e não servidores proxy fixos.</translation> @@ -1412,6 +1419,7 @@ <translation id="4840250757394056958">Ver seu histórico do Chrome</translation> <translation id="484462545196658690">Automática</translation> <translation id="484671803914931257">Receba descontos para <ph name="MERCHANT_NAME" /> e mais</translation> +<translation id="484988093836683706">Usar o desbloqueio do dispositivo</translation> <translation id="4850886885716139402">Ver</translation> <translation id="4852429274334674023">Sistemas operacionais</translation> <translation id="485316830061041779">Alemão</translation> @@ -1799,6 +1807,7 @@ <translation id="5921185718311485855">ativado</translation> <translation id="5921639886840618607">Salvar cartão na Conta do Google?</translation> <translation id="5922853866070715753">Quase pronto</translation> +<translation id="5923492272538889093">Usar o desbloqueio do dispositivo em vez do CVC?</translation> <translation id="5928444777041341328">Casa e jardim</translation> <translation id="5932224571077948991">No site, há exibição de anúncios invasivos ou enganosos</translation> <translation id="5937560539988385583">Página traduzida</translation> @@ -1972,6 +1981,7 @@ <translation id="643051589346665201">Mudar senha do Google</translation> <translation id="6433490469411711332">Editar informações de contato</translation> <translation id="6433595998831338502">A conexão com <ph name="HOST_NAME" /> foi recusada.</translation> +<translation id="6433797564277305076">Confirme seus cartões mais rapidamente usando o desbloqueio do dispositivo.</translation> <translation id="6440503408713884761">Ignorada</translation> <translation id="6443406338865242315">quais extensões e plug-ins você instalou;</translation> <translation id="6446163441502663861">Kahu (Envelope)</translation> @@ -2178,6 +2188,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Não é possível salvar esse cartão no momento}one{Não é possível salvar esse cartão no momento}other{Não é possível salvar esses cartões no momento}}</translation> <translation id="7053983685419859001">Bloquear</translation> <translation id="7058163556978339998">O <ph name="BROWSER" /> verificou que <ph name="ISSUER" /> emitiu o certificado deste site.</translation> +<translation id="7058774143982824355">Serviço para análise de um arquivo de senhas CSV</translation> <translation id="7061777300866737982">Segurança doméstica</translation> <translation id="7062635574500127092">Azul-petróleo</translation> <translation id="706295145388601875">Adicione e gerencie endereços nas configurações do Chrome</translation> @@ -2442,6 +2453,7 @@ <translation id="7696089921647603491">Rock clássico e antigo</translation> <translation id="7697066736081121494">Prc8 (Envelope)</translation> <translation id="769721561045429135">No momento, você tem cartões que só podem ser usados neste dispositivo. Clique em "Continuar" para analisá-los.</translation> +<translation id="7698864304447945242">Atualizar o Google Play Services para RA?</translation> <translation id="7699293099605015246">Os artigos não estão disponíveis no momento</translation> <translation id="7701040980221191251">Nenhuma</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Ir para <ph name="SITE" /> (não seguro)<ph name="END_LINK" /></translation> @@ -2454,6 +2466,7 @@ <translation id="7723047071702270851">Edite o Cartão</translation> <translation id="7734285854693414638">Criar rapidamente um novo arquivo no Formulários Google</translation> <translation id="773466115871691567">Sempre traduzir páginas em <ph name="SOURCE_LANGUAGE" /></translation> +<translation id="7736959720849233795">Copiar endereço do link</translation> <translation id="7740996059027112821">Padrão</translation> <translation id="77424286611022110">Este site contém anúncios invasivos ou enganosos. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Conteúdo perigoso bloqueado.</translation>
diff --git a/components/strings/components_strings_sk.xtb b/components/strings/components_strings_sk.xtb index 76c037d..3363707 100644 --- a/components/strings/components_strings_sk.xtb +++ b/components/strings/components_strings_sk.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Čitateľský zoznam</translation> <translation id="1264309058268477500">Alternatívna</translation> <translation id="1264974993859112054">Šport</translation> +<translation id="1266469291454105242">Odomknutie zariadením</translation> <translation id="1269516672602708785">Rýchlo vytvoriť nový web vo Weboch Google</translation> <translation id="1270502636509132238">Spôsob vyzdvihnutia</translation> <translation id="1281476433249504884">Odkladač č. 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Zoznámenia a osobné inzeráty</translation> <translation id="1753706481035618306">Číslo stránky</translation> <translation id="1755621011177747277">Adopcia</translation> +<translation id="1756026472674246267">Otvoriť odkaz na novej karte</translation> <translation id="175656076281618225">Mágia</translation> <translation id="1757773103848038814">Neproporcionálne písmo</translation> <translation id="1763864636252898013">Server nedokáže overiť, či ide o doménu <ph name="DOMAIN" />, operačný systém vášho zariadenia nedôveruje jej bezpečnostnému certifikátu. Môže to byť spôsobené nesprávnou konfiguráciou alebo tým, že vaše pripojenie zachytil útočník.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Zrušiť platbu</translation> <translation id="2148613324460538318">Pridať kartu</translation> <translation id="2149968176347646218">Pripojenie nie je zabezpečené</translation> +<translation id="2153609454945889823">Chcete nainštalovať Služby Google Play pre RR?</translation> <translation id="2154054054215849342">Synchronizácia nie je pre vašu doménu k dispozícii</translation> <translation id="2154484045852737596">Úprava karty</translation> <translation id="2161656808144014275">Text</translation> @@ -829,6 +832,7 @@ <translation id="3229277193950731405">Kopírovať reťazec verzie</translation> <translation id="323107829343500871">Zadajte kód CVC karty <ph name="CREDIT_CARD" /></translation> <translation id="3234666976984236645">Vždy na tomto webe zisťovať dôležitý obsah</translation> +<translation id="3238395604961564389">Otvoriť odkaz v okne inkognito</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, postupným stlačením klávesov Tab a Enter si prispôsobte vzhľad prehliadača</translation> <translation id="3240791268468473923">Hárok s nezodpovedajúcim poverením pre prihlasovací údaj zabezpečenej platby je otvorený</translation> <translation id="324180406144491771">Odkazy na hostiteľa <ph name="HOST_NAME" /> sú blokované</translation> @@ -942,6 +946,7 @@ <translation id="3531780078352352885">Hárky úlohy</translation> <translation id="3532844647053365774">Web <ph name="HOST" /> chce používať mikrofón</translation> <translation id="3533328374079021623">Poštová schránka č. 5</translation> +<translation id="3542768452570884558">Otvoriť odkaz v novom okne</translation> <translation id="3550112004925580947">Turistický priemysel</translation> <translation id="3552297013052089404">Bezpätkové písmo</translation> <translation id="3558573058928565255">Čas dňa</translation> @@ -1111,11 +1116,13 @@ <translation id="4040350669425716613">Vysoké školy a univerzity</translation> <translation id="4056223980640387499">Sépia</translation> <translation id="4058922952496707368">Kľúč <ph name="SUBKEY" />: <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Potvrdzujte karty rýchlejšie pomocou odomknutia zariadením</translation> <translation id="4067098466788473230">Študijné granty a štipendiá</translation> <translation id="4067263367174615723">C1 (obálka)</translation> <translation id="4067947977115446013">Pridanie platnej adresy</translation> <translation id="4072193657607981494">Načítavajú sa pravidlá</translation> <translation id="4072486802667267160">Pri spracovaní vašej objednávky sa vyskytla chyba. Skúste to znova.</translation> +<translation id="4073376909608563327">Odomknutie zariadením sa nepodarilo použiť</translation> <translation id="4073797364926776829">Zobraziť kartu</translation> <translation id="4075732493274867456">Klient a server nepodporujú spoločnú verziu protokolu SSL ani šifrovaciu súpravu.</translation> <translation id="4079302484614802869">Konfigurácia proxy je nastavená na použitie skriptu PAC webovej adresy, nie pevne daných serverov proxy.</translation> @@ -1408,6 +1415,7 @@ <translation id="4840250757394056958">Zobraziť históriu Chromu</translation> <translation id="484462545196658690">Automaticky</translation> <translation id="484671803914931257">Získajte zľavu u obchodníka <ph name="MERCHANT_NAME" /> a ďalších</translation> +<translation id="484988093836683706">Použiť odomknutie zariadením</translation> <translation id="4850886885716139402">Zobraziť</translation> <translation id="4852429274334674023">Operačné systémy</translation> <translation id="485316830061041779">Nemčina</translation> @@ -1795,6 +1803,7 @@ <translation id="5921185718311485855">zapnuté</translation> <translation id="5921639886840618607">Chcete uložiť kartu do účtu Google?</translation> <translation id="5922853866070715753">Takmer dokončené</translation> +<translation id="5923492272538889093">Chcete namiesto overovacieho kódu karty použiť odomknutie zariadením?</translation> <translation id="5928444777041341328">Domov a záhrada</translation> <translation id="5932224571077948991">Web zobrazuje obťažujúce alebo zavádzajúce reklamy</translation> <translation id="5937560539988385583">Stránka je preložená</translation> @@ -1967,6 +1976,7 @@ <translation id="643051589346665201">Zmeniť heslo Google</translation> <translation id="6433490469411711332">Úprava kontaktných informácií</translation> <translation id="6433595998831338502">Web <ph name="HOST_NAME" /> zamietol pripojenie.</translation> +<translation id="6433797564277305076">Odteraz môžete potvrdzovať karty rýchlejšie pomocou odomknutia zariadením</translation> <translation id="6440503408713884761">Ignorované</translation> <translation id="6443406338865242315">Ktoré rozšírenia a doplnky máte nainštalované</translation> <translation id="6446163441502663861">Kahu (obálka)</translation> @@ -2173,6 +2183,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Túto kartu nie je momentálne možné uložiť}few{Tieto karty nie je momentálne možné uložiť}many{Tieto karty nie je momentálne možné uložiť}other{Tieto karty nie je momentálne možné uložiť}}</translation> <translation id="7053983685419859001">Blokovať</translation> <translation id="7058163556978339998">Prehliadač <ph name="BROWSER" /> overil, že certifikát tohto webu bol vydaný spoločnosťou <ph name="ISSUER" />.</translation> +<translation id="7058774143982824355">Služba na analýzu hesiel súboru CSV</translation> <translation id="7061777300866737982">Bezpečnosť a zabezpečenie domácností</translation> <translation id="7062635574500127092">Modrozelená</translation> <translation id="706295145388601875">Pridávajte a spravujte adresy v nastaveniach Chromu</translation> @@ -2437,6 +2448,7 @@ <translation id="7696089921647603491">Klasický rock a staré hity</translation> <translation id="7697066736081121494">Prc8 (obálka)</translation> <translation id="769721561045429135">Momentálne máte karty, ktoré je možné použiť iba v tomto zariadení Ak chcete skontrolovať karty, kliknite na Pokračovať.</translation> +<translation id="7698864304447945242">Chcete aktualizovať Služby Google Play pre RR?</translation> <translation id="7699293099605015246">Články nie sú momentálne k dispozícii</translation> <translation id="7701040980221191251">Žiadne</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Prejsť na stránky <ph name="SITE" /> (nebezpečné)<ph name="END_LINK" /></translation> @@ -2449,6 +2461,7 @@ <translation id="7723047071702270851">Úprava karty</translation> <translation id="7734285854693414638">Rýchlo vytvoriť nový formulár vo Formulároch Google</translation> <translation id="773466115871691567">Vždy prekladať stránky v jazyku <ph name="SOURCE_LANGUAGE" /></translation> +<translation id="7736959720849233795">Kopírovať adresu odkazu</translation> <translation id="7740996059027112821">Štandardne</translation> <translation id="77424286611022110">Tento web zobrazuje obťažujúce alebo zavádzajúce reklamy. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Nebezpečný obsah bol zablokovaný.</translation>
diff --git a/components/strings/components_strings_sl.xtb b/components/strings/components_strings_sl.xtb index 785c2ebd..cd42725 100644 --- a/components/strings/components_strings_sl.xtb +++ b/components/strings/components_strings_sl.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Bralni seznam</translation> <translation id="1264309058268477500">Nadomestni</translation> <translation id="1264974993859112054">Šport</translation> +<translation id="1266469291454105242">Odklepanje naprave</translation> <translation id="1269516672602708785">Hitro ustvarjanje novega spletnega mesta v Google Spletnih mestih</translation> <translation id="1270502636509132238">Način prevzema</translation> <translation id="1281476433249504884">Zlagalnik 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Zmenki in zasebni stiki</translation> <translation id="1753706481035618306">Številka strani</translation> <translation id="1755621011177747277">Posvojitev</translation> +<translation id="1756026472674246267">Odpri povezavo na novem zavihku</translation> <translation id="175656076281618225">Čarovnija</translation> <translation id="1757773103848038814">Pisava s stalno širino</translation> <translation id="1763864636252898013">Strežniku ni uspelo dokazati, da je <ph name="DOMAIN" />; operacijski sistem vaše naprave ne zaupa njegovemu varnostnemu potrdilu. Razlog za to je lahko napačna konfiguracija ali napadalčevo prestrezanje povezave.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Prekliči plačilo</translation> <translation id="2148613324460538318">Dodaj kartico</translation> <translation id="2149968176347646218">Povezava ni varna</translation> +<translation id="2153609454945889823">Želite namestiti aplikacijo Storitve Google Play za RR?</translation> <translation id="2154054054215849342">Sinhronizacija ni na voljo za vašo domeno</translation> <translation id="2154484045852737596">Urejanje kartice</translation> <translation id="2161656808144014275">Besedilo</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">Kopiraj niz različice</translation> <translation id="323107829343500871">Vnesite CVC za <ph name="CREDIT_CARD" /></translation> <translation id="3234666976984236645">Vedno zaznaj pomembno vsebino na tem spletnem mestu</translation> +<translation id="3238395604961564389">Odpri povezavo v anonimnem oknu</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, pritisnite tabulatorko, nato Enter, če želite prilagoditi videz brskalnika.</translation> <translation id="3240791268468473923">Preglednica za neujemanje poverilnic poverilnice za varno plačilo je odprta</translation> <translation id="324180406144491771">Povezave gostitelja »<ph name="HOST_NAME" />« so blokirane</translation> @@ -945,6 +949,7 @@ <translation id="3531780078352352885">Delovni listi</translation> <translation id="3532844647053365774"><ph name="HOST" /> želi uporabiti vaš mikrofon</translation> <translation id="3533328374079021623">Nabiralnik 5</translation> +<translation id="3542768452570884558">Odpri povezavo v novem oknu</translation> <translation id="3550112004925580947">Gostinstvo</translation> <translation id="3552297013052089404">Neserifna pisava</translation> <translation id="3558573058928565255">Dnevni čas</translation> @@ -1115,11 +1120,13 @@ <translation id="4040350669425716613">Visoke šole in univerze</translation> <translation id="4056223980640387499">Sepija</translation> <translation id="4058922952496707368">Ključ »<ph name="SUBKEY" />«: <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Uporabite odklepanje naprave za hitrejše potrjevanje kartic</translation> <translation id="4067098466788473230">Štipendije</translation> <translation id="4067263367174615723">C1 (Envelope)</translation> <translation id="4067947977115446013">Dodajanje veljavnega naslova</translation> <translation id="4072193657607981494">Nalaganje pravilnikov</translation> <translation id="4072486802667267160">Pri obdelavi naročila je prišlo do napake. Poskusite znova.</translation> +<translation id="4073376909608563327">Odklepanja naprave ni bilo mogoče uporabiti</translation> <translation id="4073797364926776829">Ogled kartice</translation> <translation id="4075732493274867456">Odjemalec in strežnik ne podpirata skupne različice protokola SSL ali šifrirne zbirke.</translation> <translation id="4079302484614802869">Konfiguracija strežnika proxy je nastavljena na uporabo URL-ja skripta .pac, ne na stalne strežnike proxy.</translation> @@ -1412,6 +1419,7 @@ <translation id="4840250757394056958">Ogled zgodovine v Chromu</translation> <translation id="484462545196658690">Samodejno</translation> <translation id="484671803914931257">Prejmite popust pri trgovcu <ph name="MERCHANT_NAME" /> in drugo</translation> +<translation id="484988093836683706">Uporabi odklepanje naprave</translation> <translation id="4850886885716139402">Pogled</translation> <translation id="4852429274334674023">Operacijski sistemi</translation> <translation id="485316830061041779">nemščina</translation> @@ -1799,6 +1807,7 @@ <translation id="5921185718311485855">Vklopljeno</translation> <translation id="5921639886840618607">Ali želite kartico shraniti v Google Račun?</translation> <translation id="5922853866070715753">Skoraj končano</translation> +<translation id="5923492272538889093">Želite uporabiti odklepanje naprave namesto kode CVC?</translation> <translation id="5928444777041341328">Dom in vrt</translation> <translation id="5932224571077948991">Spletno mesto prikazuje vsiljive ali zavajajoče oglase</translation> <translation id="5937560539988385583">Stran je prevedena.</translation> @@ -1972,6 +1981,7 @@ <translation id="643051589346665201">Spremeni geslo za Google</translation> <translation id="6433490469411711332">Uredi informacije o stiku</translation> <translation id="6433595998831338502">Spletno mesto <ph name="HOST_NAME" /> ni dovolilo povezave.</translation> +<translation id="6433797564277305076">Od zdaj naprej lahko uporabljate odklepanje naprave in kartice potrjujete hitreje</translation> <translation id="6440503408713884761">Prezrto</translation> <translation id="6443406338865242315">Katere razširitve in vtičnike ste namestili</translation> <translation id="6446163441502663861">Kahu (Envelope)</translation> @@ -2178,6 +2188,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Te kartice trenutno ni mogoče shraniti}one{Teh kartic trenutno ni mogoče shraniti}two{Teh kartic trenutno ni mogoče shraniti}few{Teh kartic trenutno ni mogoče shraniti}other{Teh kartic trenutno ni mogoče shraniti}}</translation> <translation id="7053983685419859001">Blokiraj</translation> <translation id="7058163556978339998">Brskalnik <ph name="BROWSER" /> je preveril, ali je izdajatelj <ph name="ISSUER" /> izdal potrdilo tega spletnega mesta.</translation> +<translation id="7058774143982824355">Storitev razčlenjevanja gesel CSV</translation> <translation id="7061777300866737982">Varovanje doma</translation> <translation id="7062635574500127092">Zelenomodra</translation> <translation id="706295145388601875">Dodajte in upravljajte naslove v Chromovih nastavitvah.</translation> @@ -2442,6 +2453,7 @@ <translation id="7696089921647603491">Klasični rock in stare pesmi</translation> <translation id="7697066736081121494">Prc8 (Envelope)</translation> <translation id="769721561045429135">Trenutno je mogoče nekatere vaše kartice uporabljati samo v tej napravi. Kliknite »Naprej«, če si želite ogledati kartice.</translation> +<translation id="7698864304447945242">Želite posodobiti aplikacijo Storitve Google Play za RR?</translation> <translation id="7699293099605015246">Članki trenutno niso na voljo</translation> <translation id="7701040980221191251">Nič</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Nadaljuj na spletno mesto <ph name="SITE" /> (ni varno)<ph name="END_LINK" /></translation> @@ -2454,6 +2466,7 @@ <translation id="7723047071702270851">Urejanje kartice</translation> <translation id="7734285854693414638">Hitro ustvarjanje novega obrazca v Google Obrazcih</translation> <translation id="773466115871691567">Vedno prevedi strani v jeziku <ph name="SOURCE_LANGUAGE" /></translation> +<translation id="7736959720849233795">Kopiraj naslov povezave</translation> <translation id="7740996059027112821">Standardno</translation> <translation id="77424286611022110">To spletno mesto prikazuje vsiljive ali zavajajoče oglase. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Nevarna vsebina blokirana.</translation>
diff --git a/components/strings/components_strings_ta.xtb b/components/strings/components_strings_ta.xtb index 293894c..f8d2a79 100644 --- a/components/strings/components_strings_ta.xtb +++ b/components/strings/components_strings_ta.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">வாசிப்புப் பட்டியல்</translation> <translation id="1264309058268477500">மாற்று</translation> <translation id="1264974993859112054">விளையாட்டு</translation> +<translation id="1266469291454105242">சாதனத்தில் அன்லாக் செய்தல்</translation> <translation id="1269516672602708785">Google Sitesஸில் புதிய தளத்தை விரைவாக உருவாக்கும்</translation> <translation id="1270502636509132238">பிக்அப் முறை</translation> <translation id="1281476433249504884">ஸ்டேக்கர் 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">டேட்டிங் & பர்சனல்ஸ்</translation> <translation id="1753706481035618306">பக்க எண்</translation> <translation id="1755621011177747277">தத்தெடுத்தல்</translation> +<translation id="1756026472674246267">புதிய பக்கத்தில் இணைப்பைத் திற</translation> <translation id="175656076281618225">மேஜிக்</translation> <translation id="1757773103848038814">Monospace எழுத்துரு</translation> <translation id="1763864636252898013">இது <ph name="DOMAIN" /> தான் என்பதை இந்தச் சேவையகம் உறுதிப்படுத்தவில்லை; இதன் பாதுகாப்புச் சான்றிதழை உங்கள் கம்ப்யூட்டரின் ஆப்ரேட்டிங் சிஸ்டம் நம்பவில்லை. இது தவறான உள்ளமைவால் ஏற்பட்டிருக்கலாம் அல்லது தீங்கிழைப்பவர் உங்கள் இணைப்பில் குறுக்கிட்டிருக்கலாம்.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">பேமண்ட்டை ரத்துசெய்</translation> <translation id="2148613324460538318">கார்டைச் சேர்</translation> <translation id="2149968176347646218">பாதுகாப்பற்ற இணைப்பு</translation> +<translation id="2153609454945889823">Google Play Services for ARரை நிறுவ வேண்டுமா?</translation> <translation id="2154054054215849342">உங்கள் டொமைனுக்கு ஒத்திசைத்தல் சேவை முடக்கப்பட்டுள்ளது</translation> <translation id="2154484045852737596">கார்டைத் திருத்தவும்</translation> <translation id="2161656808144014275">உரை</translation> @@ -829,6 +832,7 @@ <translation id="3229277193950731405">பதிப்பு வார்த்தையை நகலெடு</translation> <translation id="323107829343500871"><ph name="CREDIT_CARD" /> இன் CVC எண்ணை உள்ளிடவும்</translation> <translation id="3234666976984236645">இந்தத் தளத்தின் முக்கிய உள்ளடக்கத்தை எப்போதும் இயக்கவும்</translation> +<translation id="3238395604961564389">மறைநிலைச் சாளரத்தில் இணைப்பைத் திற</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />. உலாவியின் தோற்றத்தைப் பிரத்தியேகமாக்க, Tab பட்டனை அழுத்திவிட்டு Enter பட்டனை அழுத்துங்கள்</translation> <translation id="3240791268468473923">பாதுகாப்பான பேமெண்ட் அனுமதிச் சான்றுகள் பொருந்தவில்லை என்பதற்கான தாள் திறக்கப்பட்டது</translation> <translation id="324180406144491771">“<ph name="HOST_NAME" />” இணைப்புகள் தடுக்கப்பட்டுள்ளன</translation> @@ -941,6 +945,7 @@ <translation id="3531780078352352885">பணித் தாள்கள்</translation> <translation id="3532844647053365774"><ph name="HOST" /> உங்கள் மைக்ரோஃபோனைப் பயன்படுத்த விரும்புகிறது</translation> <translation id="3533328374079021623">அஞ்சல் பெட்டி 5</translation> +<translation id="3542768452570884558">புதிய சாளரத்தில் இணைப்பைத் திற</translation> <translation id="3550112004925580947">விருந்தோம்பல் தொழிற்துறை</translation> <translation id="3552297013052089404">Sans-serif எழுத்துரு</translation> <translation id="3558573058928565255">பகல் நேரம்</translation> @@ -1111,11 +1116,13 @@ <translation id="4040350669425716613">கல்லூரிகள் & பல்கலைக்கழகங்கள்</translation> <translation id="4056223980640387499">செபியா</translation> <translation id="4058922952496707368">விசை "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4063924980214801036">'சாதனத்தில் அன்லாக் செய்தல்' அம்சத்தைப் பயன்படுத்தி கார்டுகளை விரைவாக உறுதிப்படுத்தலாம்</translation> <translation id="4067098466788473230">கல்வி மானியங்கள் & உதவித்தொகைகள்</translation> <translation id="4067263367174615723">C1 (என்வலப்)</translation> <translation id="4067947977115446013">சரியான முகவரியைச் சேர்க்கவும்</translation> <translation id="4072193657607981494">கொள்கைகளை ஏற்றுகிறது</translation> <translation id="4072486802667267160">ஆர்டரைச் செயல்படுத்துவதில் பிழை ஏற்பட்டது. பிறகு முயலவும்.</translation> +<translation id="4073376909608563327">'சாதனத்தில் அன்லாக் செய்தல்' அம்சத்தைப் பயன்படுத்த முடியவில்லை</translation> <translation id="4073797364926776829">கார்டைக் காட்டு</translation> <translation id="4075732493274867456">க்ளையன்ட்டும் சேவையகமும் பொதுவான SSL நெறிமுறைப் பதிப்பையோ சைஃபர் பொதியையோ ஆதரிக்கவில்லை.</translation> <translation id="4079302484614802869">ப்ராக்ஸி உள்ளமைவானது, .pac ஸ்கிரிப்ட் URL ஐப் பயன்படுத்தும்படி அமைக்கப்பட்டிருக்கிறது, நிலையான ப்ராக்ஸி சேவையகங்களுக்கு அல்ல.</translation> @@ -1408,6 +1415,7 @@ <translation id="4840250757394056958">எனது Chrome செயல்பாடுகளைக் காட்டு</translation> <translation id="484462545196658690">தானியங்கு</translation> <translation id="484671803914931257"><ph name="MERCHANT_NAME" />, மேலும் பலவற்றில் தள்ளுபடி பெறுங்கள்</translation> +<translation id="484988093836683706">'சாதனத்தில் அன்லாக் செய்தல்' அம்சத்தைப் பயன்படுத்து</translation> <translation id="4850886885716139402">காட்சி</translation> <translation id="4852429274334674023">ஆப்ரேட்டிங் சிஸ்டங்கள்</translation> <translation id="485316830061041779">ஜெர்மன்</translation> @@ -1795,6 +1803,7 @@ <translation id="5921185718311485855">இயக்கப்பட்டுள்ளது</translation> <translation id="5921639886840618607">Google கணக்கில் கார்டைச் சேமிக்கவா?</translation> <translation id="5922853866070715753">கிட்டத்தட்ட முடிந்துவிட்டது</translation> +<translation id="5923492272538889093">CVCக்குப் பதிலாகச் 'சாதனத்தில் அன்லாக் செய்தல்' அம்சத்தைப் பயன்படுத்தவா?</translation> <translation id="5928444777041341328">வீடு & தோட்டம்</translation> <translation id="5932224571077948991">குறுக்கிடும் அல்லது தவறாக வழிநடத்தும் விளம்பரங்களை தளம் காண்பிக்கிறது</translation> <translation id="5937560539988385583">பக்கம் மொழிபெயர்க்கப்பட்டது</translation> @@ -1967,6 +1976,7 @@ <translation id="643051589346665201">Google கடவுச்சொல்லை மாற்று</translation> <translation id="6433490469411711332">தொடர்புத் தகவலை மாற்று</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> இணைக்க மறுத்தது.</translation> +<translation id="6433797564277305076">இனி 'சாதனத்தில் அன்லாக் செய்தல்' அம்சத்தைப் பயன்படுத்தி உங்கள் கார்டுகளை விரைவாக உறுதிப்படுத்தலாம்</translation> <translation id="6440503408713884761">புறக்கணிக்கப்பட்டது</translation> <translation id="6443406338865242315">நீங்கள் நிறுவியுள்ள நீட்டிப்புகளும் செருகுநிரல்களும்</translation> <translation id="6446163441502663861">Kahu (என்வலப்)</translation> @@ -2173,6 +2183,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{இந்தக் கார்டை இப்போது சேமிக்க முடியவில்லை}other{இந்தக் கார்டுகளை இப்போது சேமிக்க முடியவில்லை}}</translation> <translation id="7053983685419859001">தடு</translation> <translation id="7058163556978339998">இந்த இணையதளத்தின் சான்றிதழை <ph name="ISSUER" /> வழங்கியதா என <ph name="BROWSER" /> சரிபார்த்தது.</translation> +<translation id="7058774143982824355">CSV கடவுச்சொல்லைப் பாகுபடுத்தும் சேவை</translation> <translation id="7061777300866737982">வீட்டுப் பாதுகாப்பு</translation> <translation id="7062635574500127092">பசும் நீலம்</translation> <translation id="706295145388601875">Chrome அமைப்புகளில் இணைய முகவரிகளைச் சேருங்கள் & நிர்வகியுங்கள்</translation> @@ -2437,6 +2448,7 @@ <translation id="7696089921647603491">கிளாசிக் ராக் & பழைய பாடல்கள்</translation> <translation id="7697066736081121494">Prc8 (என்வலப்)</translation> <translation id="769721561045429135">தற்போது, இந்தச் சாதனத்தில் மட்டுமே பயன்படுத்தக்கூடிய கார்டுகள் உள்ளன கார்டுகளைப் பார்க்க, ‘தொடர்க’ என்பதைக் கிளிக் செய்யவும்.</translation> +<translation id="7698864304447945242">Google Play Services for ARரைப் புதுப்பிக்க வேண்டுமா?</translation> <translation id="7699293099605015246">தற்போது கட்டுரைகள் இல்லை</translation> <translation id="7701040980221191251">எதுவுமில்லை</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" /><ph name="SITE" /> (பாதுகாப்பற்ற தளம்) க்குச் செல்லவும்<ph name="END_LINK" /></translation> @@ -2449,6 +2461,7 @@ <translation id="7723047071702270851">கார்டைத் திருத்தவும்</translation> <translation id="7734285854693414638">Google Formsஸில் புதிய படிவத்தை விரைவாக உருவாக்கும்</translation> <translation id="773466115871691567"><ph name="SOURCE_LANGUAGE" /> மொழியில் உள்ள பக்கங்களை எப்போதும் மொழிபெயர்</translation> +<translation id="7736959720849233795">இணைப்பின் முகவரியை நகலெடு</translation> <translation id="7740996059027112821">நிலையானது</translation> <translation id="77424286611022110">குறுக்கிடும் அல்லது தவறாக வழிநடத்தும் விளம்பரங்களை இந்தத் தளம் காட்டுகிறது. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">ஆபத்தான உள்ளடக்கம் தடுக்கப்பட்டது.</translation>
diff --git a/components/strings/components_strings_te.xtb b/components/strings/components_strings_te.xtb index 440010110..c34b89a 100644 --- a/components/strings/components_strings_te.xtb +++ b/components/strings/components_strings_te.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">పఠన లిస్ట్</translation> <translation id="1264309058268477500">ఆల్టర్నేట్</translation> <translation id="1264974993859112054">క్రీడలు</translation> +<translation id="1266469291454105242">పరికర అన్లాక్</translation> <translation id="1269516672602708785">Google Sitesలో కొత్త సైట్ను త్వరగా క్రియేట్ చేయండి</translation> <translation id="1270502636509132238">పికప్ పద్ధతి</translation> <translation id="1281476433249504884">స్టాకర్ 1</translation> @@ -332,6 +333,7 @@ <translation id="1753068535428855445">డేటింగ్ & వ్యక్తిగత యాడ్లు</translation> <translation id="1753706481035618306">పేజీ సంఖ్య</translation> <translation id="1755621011177747277">దత్తత</translation> +<translation id="1756026472674246267">లింక్ను కొత్త ట్యాబ్లో తెరవండి</translation> <translation id="175656076281618225">ఇంద్రజాలం</translation> <translation id="1757773103848038814">మోనోస్పేస్ ఫాంట్</translation> <translation id="1763864636252898013">ఈ సర్వర్ <ph name="DOMAIN" /> అని నిరూపించుకోలేకపోయింది; దీని భద్రతా ప్రమాణపత్రాన్ని మీ పరికర ఆపరేటింగ్ సిస్టమ్ విశ్వసించలేదు. ఇది తప్పుగా కాన్ఫిగర్ చేయడం వలన లేదా దాడిచేసే వ్యక్తి మీ కనెక్షన్కు అంతరాయం కలిగించడం వలన జరిగి ఉండవచ్చు.</translation> @@ -457,6 +459,7 @@ <translation id="214556005048008348">పేమెంట్ను రద్దు చేయి</translation> <translation id="2148613324460538318">కార్డ్ని జోడించు</translation> <translation id="2149968176347646218">కనెక్షన్ సురక్షితంగా లేదు</translation> +<translation id="2153609454945889823">Google Play Services for ARను ఇన్స్టాల్ చేయాలా?</translation> <translation id="2154054054215849342">సింక్ మీ డొమైన్కు అందుబాటులో లేదు</translation> <translation id="2154484045852737596">కార్డ్ను ఎడిట్ చేయండి</translation> <translation id="2161656808144014275">వచనం</translation> @@ -834,6 +837,7 @@ <translation id="3229277193950731405">వెర్షన్ స్ట్రింగ్ను కాపీ చేయండి</translation> <translation id="323107829343500871"><ph name="CREDIT_CARD" /> కార్డ్ CVCని నమోదు చేయండి</translation> <translation id="3234666976984236645">ఈ సైట్లో ఎప్పుడూ ముఖ్యమైన కంటెంట్ను గుర్తించు</translation> +<translation id="3238395604961564389">లింక్ను అజ్ఞాత విండోలో తెరవండి</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, మీ బ్రౌజర్ రూపాన్ని అనుకూలంగా మార్చడానికి 'Tab'ను నొక్కి, ఆపై 'Enter'ను నొక్కండి</translation> <translation id="3240791268468473923">సురక్షితమైన పేమెంట్ ఆధారానికి సంబంధించిన మ్యాచ్ అయ్యే ఆధారాల షీట్ ఏదీ తెరవబడలేదు</translation> <translation id="324180406144491771">“<ph name="HOST_NAME" />” లింక్లు బ్లాక్ చేయబడ్డాయి</translation> @@ -947,6 +951,7 @@ <translation id="3531780078352352885">జాబ్ షీట్లు</translation> <translation id="3532844647053365774"><ph name="HOST" /> మీ మైక్రోఫోన్ను ఉపయోగించాలనుకుంటోంది</translation> <translation id="3533328374079021623">మెయిల్బాక్స్ 5</translation> +<translation id="3542768452570884558">లింక్ను కొత్త విండోలో తెరవండి</translation> <translation id="3550112004925580947">ఆతిథ్య పరిశ్రమ</translation> <translation id="3552297013052089404">Sans-Serif ఫాంట్</translation> <translation id="3558573058928565255">రోజు, సమయం</translation> @@ -1117,11 +1122,13 @@ <translation id="4040350669425716613">కళాశాలలు & విశ్వవిద్యాలయాలు</translation> <translation id="4056223980640387499">సెపియా</translation> <translation id="4058922952496707368">కీ "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4063924980214801036">కార్డ్లను వేగంగా నిర్ధారించడానికి పరికర అన్లాక్ను ఉపయోగించండి</translation> <translation id="4067098466788473230">విద్యా గ్రాంట్లు & స్కాలర్షిప్లు</translation> <translation id="4067263367174615723">C1 (ఎన్వలప్)</translation> <translation id="4067947977115446013">చెల్లుబాటు అయ్యే అడ్రస్ను జోడించండి</translation> <translation id="4072193657607981494">పాలసీలను లోడ్ చేస్తోంది</translation> <translation id="4072486802667267160">మీ ఆర్డర్ను ప్రాసెస్ చేస్తున్నప్పుడు ఎర్రర్ ఏర్పడింది. దయచేసి మళ్లీ ప్రయత్నించండి.</translation> +<translation id="4073376909608563327">పరికర లాక్ను ఉపయోగించడం సాధ్యపడలేదు</translation> <translation id="4073797364926776829">కార్డ్ను చూడండి</translation> <translation id="4075732493274867456">క్లయింట్, సర్వర్- ఒకే SSL ప్రోటోకాల్ వెర్షన్ లేదా సైఫర్ సూట్కు మద్దతు ఇవ్వవు.</translation> <translation id="4079302484614802869">స్థిరమైన ప్రాక్సీ సర్వర్లను కాకుండా, ఒక .pac స్క్రిప్ట్ URLను ఉపయోగించేలా ప్రాక్సీ కాన్ఫిగరేషన్ సెట్ చేయబడింది.</translation> @@ -1414,6 +1421,7 @@ <translation id="4840250757394056958">మీ Chrome హిస్టరీని చూడండి</translation> <translation id="484462545196658690">ఆటో</translation> <translation id="484671803914931257"><ph name="MERCHANT_NAME" />, మరి కొందరి నుండి డిస్కౌంట్ పొందండి</translation> +<translation id="484988093836683706">పరికర అన్లాక్ను ఉపయోగించండి</translation> <translation id="4850886885716139402">వీక్షణ</translation> <translation id="4852429274334674023">ఆపరేటింగ్ సిస్టమ్లు</translation> <translation id="485316830061041779">జర్మన్</translation> @@ -1801,6 +1809,7 @@ <translation id="5921185718311485855">ఆన్ చేయబడ్డాయి</translation> <translation id="5921639886840618607">Google ఖాతాకు కార్డ్ను సేవ్ చేయాలా?</translation> <translation id="5922853866070715753">దాదాపు పూర్తయింది</translation> +<translation id="5923492272538889093">CVCకి బదులుగా పరికర అన్లాక్ను ఉపయోగించాలా?</translation> <translation id="5928444777041341328">ఇల్లు & గార్డెన్</translation> <translation id="5932224571077948991">సైట్ అనుచితమైన లేదా తప్పుదారి పట్టించే ప్రకటనలను చూపుతుంది</translation> <translation id="5937560539988385583">పేజీ అనువదించండి</translation> @@ -1974,6 +1983,7 @@ <translation id="643051589346665201">Google పాస్వర్డ్ను మార్చండి</translation> <translation id="6433490469411711332">సంప్రదింపు సమాచారాన్ని ఎడిట్ చేయండి</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> కనెక్ట్ కావడానికి నిరాకరించింది.</translation> +<translation id="6433797564277305076">ఇప్పటి నుండి, పరికర అన్లాక్ను ఉపయోగించడం ద్వారా మీ కార్డ్లను వేగంగా నిర్ధారించండి</translation> <translation id="6440503408713884761">విస్మరించబడింది</translation> <translation id="6443406338865242315">ఏ ఎక్స్టెన్షన్లు మరియు ప్లగిన్లను మీరు ఇన్స్టాల్ చేశారు</translation> <translation id="6446163441502663861">Kahu (ఎన్వలప్)</translation> @@ -2180,6 +2190,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{ప్రస్తుతం ఈ కార్డ్ని సేవ్ చేయలేరు}other{ప్రస్తుతం ఈ కార్డ్లని సేవ్ చేయలేరు}}</translation> <translation id="7053983685419859001">నిరోధించు</translation> <translation id="7058163556978339998">ఈ వెబ్సైట్ సర్టిఫికెట్ను <ph name="ISSUER" /> జారీ చేసినట్లు <ph name="BROWSER" /> ధృవీకరించింది.</translation> +<translation id="7058774143982824355">CSV పాస్వర్డ్ పార్సర్ సర్వీస్</translation> <translation id="7061777300866737982">ఇంటి భద్రతా & సెక్యూరిటీ</translation> <translation id="7062635574500127092">నీలి పచ్చ రంగు</translation> <translation id="706295145388601875">Chrome సెట్టింగ్లలో అడ్రస్లను జోడించండి, మేనేజ్ చేయండి</translation> @@ -2444,6 +2455,7 @@ <translation id="7696089921647603491">క్లాసిక్ రాక్ & పాత పాటలు</translation> <translation id="7697066736081121494">Prc8 (ఎన్వలప్)</translation> <translation id="769721561045429135">ఇప్పుడు, కేవలం ఈ పరికరంలో మాత్రమే ఉపయోగించగల కార్డ్లు మీ వద్ద ఉన్నాయి. కార్డ్లను సమీక్షించడం కోసం కొనసాగించుని క్లిక్ చేయండి.</translation> +<translation id="7698864304447945242">Google Play Services for ARను అప్డేట్ చేయాలా?</translation> <translation id="7699293099605015246">ప్రస్తుతం కథనాలు అందుబాటులో లేవు</translation> <translation id="7701040980221191251">ఏదీ లేదు</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" /><ph name="SITE" />కి కొనసాగించండి (అసురక్షితం)<ph name="END_LINK" /></translation> @@ -2456,6 +2468,7 @@ <translation id="7723047071702270851">కార్డ్ను ఎడిట్ చేయండి</translation> <translation id="7734285854693414638">Google Formsలో త్వరగా కొత్త ఫారమ్ను క్రియేట్ చేయండి</translation> <translation id="773466115871691567"><ph name="SOURCE_LANGUAGE" />లో ఉన్న పేజీలను ఎల్లప్పుడూ అనువదించు</translation> +<translation id="7736959720849233795">లింక్ అడ్రస్ను కాపీ చేయండి</translation> <translation id="7740996059027112821">ప్రామాణికం</translation> <translation id="77424286611022110">ఈ సైట్ అనుచితమైన లేదా తప్పుదారి పట్టించే యాడ్లను చూపుతుంది. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">హానికరమైన కంటెంట్ బ్లాక్ చేయబడింది.</translation>
diff --git a/components/strings/components_strings_tr.xtb b/components/strings/components_strings_tr.xtb index fb465f85..9bcb1081 100644 --- a/components/strings/components_strings_tr.xtb +++ b/components/strings/components_strings_tr.xtb
@@ -147,7 +147,7 @@ <ph name="LIST_ITEM" />İşvereniniz veya okulunuz <ph name="LIST_ITEM" />İnternet servis sağlayıcınız <ph name="END_LIST" /></translation> -<translation id="1337692097987160377">Bu sekmeyi paylaşın</translation> +<translation id="1337692097987160377">Bu sekmeyi paylaş</translation> <translation id="1339601241726513588">Kayıt alan adı:</translation> <translation id="1340482604681802745">Alınacağı adres</translation> <translation id="1346748346194534595">Sağa</translation> @@ -1986,7 +1986,7 @@ <translation id="646793340882508547">Macera oyunları</translation> <translation id="6468485451923838994">Yazı tipleri</translation> <translation id="647261751007945333">Cihaz politikaları</translation> -<translation id="6476284679642588870">Ödeme yöntemlerini yönetin</translation> +<translation id="6476284679642588870">Ödeme yöntemlerini yönet</translation> <translation id="6486200200930923183">Belgesel filmler</translation> <translation id="6489534406876378309">Kilitlenmeleri yüklemeye başla</translation> <translation id="6493924760403974580">Bu uygulama yalnızca bu boyutu destekler.</translation> @@ -2957,7 +2957,7 @@ <translation id="9213433120051936369">Görünümü özelleştir</translation> <translation id="9215416866750762878">Bir uygulama, Chrome'un bu siteye güvenli bir şekilde bağlanmasını engelliyor</translation> <translation id="9219103736887031265">Resimler</translation> -<translation id="922152298093051471">Chrome'u özelleştirin</translation> +<translation id="922152298093051471">Chrome'u özelleştir</translation> <translation id="933712198907837967">Diners Club</translation> <translation id="935608979562296692">FORMU TEMİZLE</translation> <translation id="936474030629450166">Super-B</translation>
diff --git a/components/strings/components_strings_ur.xtb b/components/strings/components_strings_ur.xtb index 504652c..8b93972 100644 --- a/components/strings/components_strings_ur.xtb +++ b/components/strings/components_strings_ur.xtb
@@ -117,6 +117,7 @@ <translation id="1263231323834454256">پڑھنے کی فہرست</translation> <translation id="1264309058268477500">متبادل</translation> <translation id="1264974993859112054">کھیل</translation> +<translation id="1266469291454105242">آلے کو غیر مقفل کرنے کی خصوصیت</translation> <translation id="1269516672602708785">Google Sites میں تیزی سے نئی سائٹ تخلیق کریں</translation> <translation id="1270502636509132238">پِک اپ کا طریقہ</translation> <translation id="1281476433249504884">اسٹیکر 1</translation> @@ -331,6 +332,7 @@ <translation id="1753068535428855445">ڈیٹنگ اور ذاتیات</translation> <translation id="1753706481035618306">صفحہ نمبر</translation> <translation id="1755621011177747277">گود لینا</translation> +<translation id="1756026472674246267">لنک کو نئے ٹیب میں کھولیں</translation> <translation id="175656076281618225">جادو</translation> <translation id="1757773103848038814">مونو اسپیس فونٹ</translation> <translation id="1763864636252898013">یہ سرور یہ ثابت نہیں کر سکا کہ یہ <ph name="DOMAIN" /> ہے؛ اس کا سیکیورٹی سرٹیفیکیٹ آپ کے آلہ کے آپریٹنگ سسٹم کے ذریعے بھروسہ مند نہیں ہے۔ یہ غلط کنفیگریشن یا آپ کے کنکشن میں مانع بن رہے کسی حملہ آور کی وجہ سے ہو سکتا ہے۔</translation> @@ -456,6 +458,7 @@ <translation id="214556005048008348">ادائیگی منسوخ کریں</translation> <translation id="2148613324460538318">کارڈ شامل کریں</translation> <translation id="2149968176347646218">کنکشن محفوظ نہیں ہے</translation> +<translation id="2153609454945889823">Google Play سروسز برائے AR کو انسٹال کریں؟</translation> <translation id="2154054054215849342">مطابقت پذیری آپ کے ڈومین کیلئے دستیاب نہیں ہے</translation> <translation id="2154484045852737596">کارڈ میں ترمیم کریں</translation> <translation id="2161656808144014275">متن</translation> @@ -834,6 +837,7 @@ <translation id="3229277193950731405">ورژن سٹرنگ کاپی کریں</translation> <translation id="323107829343500871"><ph name="CREDIT_CARD" /> کا CVC درج کریں</translation> <translation id="3234666976984236645">اس سائٹ پر اہم مواد کا ہمیشہ پتا لگائیں</translation> +<translation id="3238395604961564389">لنک کو پوشیدگی ونڈو میں کھولیں</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />، اپنے براؤزر کی شکل کو حسب ضرورت بنانے کیلئے ٹیب پھر Enter دبائیں</translation> <translation id="3240791268468473923">ادائیگی کی اسناد محفوظ کریں کوئی مماثل اسناد نہیں کی شیٹ کھلی ہوئی ہے</translation> <translation id="324180406144491771">“<ph name="HOST_NAME" />” لنکس مسدود ہیں</translation> @@ -947,6 +951,7 @@ <translation id="3531780078352352885">جاب کی شیٹس</translation> <translation id="3532844647053365774"><ph name="HOST" /> آپ کا مائیکروفون استعمال کرنا چاہتا ہے</translation> <translation id="3533328374079021623">میل باکس 5</translation> +<translation id="3542768452570884558">لنک کو نئی ونڈو میں کھولیں</translation> <translation id="3550112004925580947">مہمان نوازی کی انڈسٹری</translation> <translation id="3552297013052089404">Sans Serif فونٹ</translation> <translation id="3558573058928565255">دن کا وقت</translation> @@ -1117,11 +1122,13 @@ <translation id="4040350669425716613">کالجز اور یونیورسٹیاں</translation> <translation id="4056223980640387499">سیپیا</translation> <translation id="4058922952496707368">کلید "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4063924980214801036">تیزی سے کارڈز کی تصدیق کرنے کے لیے آلے کو غیر مقفل کرنے کی خصوصیت کا استعمال کریں</translation> <translation id="4067098466788473230">تعلیمی گرانٹس اور اسکالرشپس</translation> <translation id="4067263367174615723">C1 (Envelope)</translation> <translation id="4067947977115446013">درست پتہ شامل کریں</translation> <translation id="4072193657607981494">پالیسیاں لوڈ ہو رہی ہیں</translation> <translation id="4072486802667267160">آپ کے آرڈر پر کارروائی کرنے میں ایک خرابی پیش آگئی۔ براہ کرم دوبارہ کوشش کریں۔</translation> +<translation id="4073376909608563327">آلے کو غیر مقفل کرنے کی خصوصیت کا استعمال نہیں کیا جا سکا</translation> <translation id="4073797364926776829">کارڈ دیکھیں</translation> <translation id="4075732493274867456">کلائنٹ اور سرور عام SSL پروٹوکول ورژن یا سائفر سوئٹ کا تعاون نہیں کرتے ہیں۔</translation> <translation id="4079302484614802869">پراکسی کنفیگریشن مقررہ پراکسی سرورز نہیں بلکہ ایک .pac اسکرپٹ URL استعمال کرنے کیلئے سیٹ ہے۔</translation> @@ -1414,6 +1421,7 @@ <translation id="4840250757394056958">اپنے Chrome کی سرگزشت دیکھیں</translation> <translation id="484462545196658690">خودکار</translation> <translation id="484671803914931257"><ph name="MERCHANT_NAME" /> اور مزید پر رعایت حاصل کریں</translation> +<translation id="484988093836683706">آلے کو غیر مقفل کرنے کی خصوصیت کا استعمال کریں</translation> <translation id="4850886885716139402">دیکھیں</translation> <translation id="4852429274334674023">آپریٹنگ سسٹمز</translation> <translation id="485316830061041779">جرمن</translation> @@ -1801,6 +1809,7 @@ <translation id="5921185718311485855">آن</translation> <translation id="5921639886840618607">کارڈ کو Google اکاؤنٹ میں محفوظ کریں؟</translation> <translation id="5922853866070715753">تقریباً مکمل ہو گیا</translation> +<translation id="5923492272538889093">CVC کے بجائے آلے کو غیر مقفل کرنے کی خصوصیت کا استعمال کریں؟</translation> <translation id="5928444777041341328">گھر اور باغ</translation> <translation id="5932224571077948991">سائٹ دخل انداز یا گمراہ کن اشتہارات دکھاتی ہے</translation> <translation id="5937560539988385583">صفحہ کا ترجمہ ہو گیا</translation> @@ -1975,6 +1984,7 @@ <translation id="643051589346665201">Google کا پاس ورڈ تبدیل کریں</translation> <translation id="6433490469411711332">رابطہ کی معلومات میں ترمیم کریں</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> نے منسلک ہونے سے منع کر دیا۔</translation> +<translation id="6433797564277305076">اب سے آلے کو غیر مقفل کرنے کی خصوصیت کا استعمال کر کے تیزی سے اپنے کارڈ کی تصدیق کریں</translation> <translation id="6440503408713884761">نظر انداز کردہ</translation> <translation id="6443406338865242315">آپ نے کن ایکسٹینشنز اور پلگ انز کو انسٹال کیا ہے</translation> <translation id="6446163441502663861">Kahu (Envelope)</translation> @@ -2181,6 +2191,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{اس کارڈ کو ابھی محفوظ نہیں کیا جا سکتا}other{ان کارڈز کو ابھی محفوظ نہیں کیا جا سکتا}}</translation> <translation id="7053983685419859001">مسدود کریں</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> نے توثیق کی ہے کہ <ph name="ISSUER" /> نے اس ویب سائٹ کا سرٹیفیکیٹ جاری کیا ہے۔</translation> +<translation id="7058774143982824355">CSV پاس ورڈ پارسر سروس</translation> <translation id="7061777300866737982">گھر کی حفاظت اور سیکیورٹی</translation> <translation id="7062635574500127092">نیلگوں سبز</translation> <translation id="706295145388601875">Chrome ترتیبات میں پتوں کو شامل کریں اور ان کا نظم کریں</translation> @@ -2445,6 +2456,7 @@ <translation id="7696089921647603491">کلاسک راک اور پرانے گانے</translation> <translation id="7697066736081121494">Prc8 (Envelope)</translation> <translation id="769721561045429135">ابھی، آپ کے پاس ایسے کارڈز ہیں جنہیں صرف اس آلہ پر استعمال کیا جا سکتا ہے کارڈز کا جائزہ لینے کیلئے 'جاری رکھیں' پر کلک کریں۔</translation> +<translation id="7698864304447945242">Google Play سروسز برائے AR کو اپ ڈیٹ کریں؟</translation> <translation id="7699293099605015246">مضامین ابھی دستیاب نہیں ہیں</translation> <translation id="7701040980221191251">کوئی نہیں</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" /><ph name="SITE" /> کی طرف بڑھیں (غیر محفوظ)<ph name="END_LINK" /></translation> @@ -2457,6 +2469,7 @@ <translation id="7723047071702270851">کارڈ میں ترمیم کریں</translation> <translation id="7734285854693414638">Google Forms میں تیزی سے ایک نیا فارم تخلیق کریں</translation> <translation id="773466115871691567">ہمیشہ <ph name="SOURCE_LANGUAGE" /> کے صفحات کا ترجمہ کریں</translation> +<translation id="7736959720849233795">لنک کا پتہ کاپی کریں</translation> <translation id="7740996059027112821">معیاری</translation> <translation id="77424286611022110">یہ سائٹ دخل انداز یا گمراہ کن اشتہارات دکھاتی ہے۔ <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">خطرناک مواد مسدود ہے۔</translation>
diff --git a/components/strings/components_strings_vi.xtb b/components/strings/components_strings_vi.xtb index 423f33b4..f584ace2 100644 --- a/components/strings/components_strings_vi.xtb +++ b/components/strings/components_strings_vi.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">Danh sách đọc</translation> <translation id="1264309058268477500">Khay thay thế</translation> <translation id="1264974993859112054">Thể thao</translation> +<translation id="1266469291454105242">Mở khoá thiết bị</translation> <translation id="1269516672602708785">Tạo nhanh một trang web mới trong Google Sites</translation> <translation id="1270502636509132238">Phương thức nhận hàng</translation> <translation id="1281476433249504884">Khay xếp chồng 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">Hẹn hò và cá nhân</translation> <translation id="1753706481035618306">Số trang</translation> <translation id="1755621011177747277">Nhận con nuôi</translation> +<translation id="1756026472674246267">Mở đường liên kết trong thẻ mới</translation> <translation id="175656076281618225">Phép thuật</translation> <translation id="1757773103848038814">Phông chữ giãn cách đơn</translation> <translation id="1763864636252898013">Máy chủ này không chứng minh được rằng đó là <ph name="DOMAIN" />; chứng chỉ bảo mật của máy chủ này không được hệ điều hành thiết bị của bạn tin cậy. Điều này có thể do định cấu hình sai hoặc có kẻ tấn công chặn kết nối của bạn.</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">Hủy thanh toán</translation> <translation id="2148613324460538318">Thêm thẻ</translation> <translation id="2149968176347646218">Đường kết nối không an toàn</translation> +<translation id="2153609454945889823">Cài đặt Dịch vụ Google Play cho Thực tế tăng cường?</translation> <translation id="2154054054215849342">Tính năng đồng bộ hóa không khả dụng cho miền của bạn</translation> <translation id="2154484045852737596">Chỉnh sửa thẻ</translation> <translation id="2161656808144014275">Văn bản</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">Sao chép chuỗi phiên bản</translation> <translation id="323107829343500871">Nhập CVC cho <ph name="CREDIT_CARD" /></translation> <translation id="3234666976984236645">Luôn luôn phát hiện nội dung quan trọng trên trang web này</translation> +<translation id="3238395604961564389">Mở đường liên kết trong cửa sổ ẩn danh</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />, Nhấn phím Tab rồi nhấn phím Enter để tuỳ chỉnh giao diện trình duyệt của bạn</translation> <translation id="3240791268468473923">Đã mở thông tin xác thực thanh toán an toàn không khớp với bảng thông tin xác thực</translation> <translation id="324180406144491771">Đã chặn các đường liên kết đến “<ph name="HOST_NAME" />”</translation> @@ -945,6 +949,7 @@ <translation id="3531780078352352885">Tờ công việc</translation> <translation id="3532844647053365774"><ph name="HOST" /> muốn sử dụng micrô của bạn</translation> <translation id="3533328374079021623">Hộp thư 5</translation> +<translation id="3542768452570884558">Mở đường liên kết trong cửa sổ mới</translation> <translation id="3550112004925580947">Ngành du lịch – khách sạn – nhà hàng</translation> <translation id="3552297013052089404">Phông chữ Sans-serif</translation> <translation id="3558573058928565255">Giờ ban ngày</translation> @@ -1115,11 +1120,13 @@ <translation id="4040350669425716613">Cao đẳng và đại học</translation> <translation id="4056223980640387499">Màu nâu đỏ</translation> <translation id="4058922952496707368">Khóa "<ph name="SUBKEY" />": <ph name="ERROR" /></translation> +<translation id="4063924980214801036">Sử dụng tính năng mở khoá thiết bị để xác nhận thẻ nhanh hơn</translation> <translation id="4067098466788473230">Trợ cấp học tập và học bổng</translation> <translation id="4067263367174615723">C1 (Phong bì)</translation> <translation id="4067947977115446013">Thêm địa chỉ hợp lệ</translation> <translation id="4072193657607981494">Đang tải chính sách</translation> <translation id="4072486802667267160">Đã xảy ra lỗi khi xử lý đơn đặt hàng của bạn. Vui lòng thử lại.</translation> +<translation id="4073376909608563327">Không thể sử dụng tính năng mở khoá thiết bị</translation> <translation id="4073797364926776829">Xem thẻ</translation> <translation id="4075732493274867456">Ứng dụng và máy chủ không hỗ trợ bộ mã hóa hoặc phiên bản giao thức SSL thông thường.</translation> <translation id="4079302484614802869">Cấu hình proxy được đặt để sử dụng URL tập lệnh .pac chứ không phải máy chủ proxy cố định.</translation> @@ -1412,6 +1419,7 @@ <translation id="4840250757394056958">Xem nhật ký duyệt web trên Chrome</translation> <translation id="484462545196658690">Tự động</translation> <translation id="484671803914931257">Nhận chiết khấu tại <ph name="MERCHANT_NAME" /> và nhiều nơi khác</translation> +<translation id="484988093836683706">Sử dụng tính năng mở khoá thiết bị</translation> <translation id="4850886885716139402">Xem</translation> <translation id="4852429274334674023">Hệ điều hành</translation> <translation id="485316830061041779">Tiếng Đức</translation> @@ -1799,6 +1807,7 @@ <translation id="5921185718311485855">Đang bật</translation> <translation id="5921639886840618607">Bạn có muốn lưu thẻ vào Tài khoản Google không?</translation> <translation id="5922853866070715753">Sắp hoàn tất</translation> +<translation id="5923492272538889093">Sử dụng tính năng mở khoá thiết bị thay cho CVC?</translation> <translation id="5928444777041341328">Nhà và vườn</translation> <translation id="5932224571077948991">Trang web hiển thị quảng cáo xâm nhập hoặc quảng cáo gây hiểu nhầm</translation> <translation id="5937560539988385583">Đã dịch trang</translation> @@ -1972,6 +1981,7 @@ <translation id="643051589346665201">Thay đổi mật khẩu Google</translation> <translation id="6433490469411711332">Chỉnh sửa thông tin liên hệ</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> đã từ chối kết nối.</translation> +<translation id="6433797564277305076">Từ giờ trở đi, bạn có thể xác nhận thẻ nhanh hơn bằng tính năng mở khoá thiết bị</translation> <translation id="6440503408713884761">Bị bỏ qua</translation> <translation id="6443406338865242315">Các tiện ích và plugin bạn đã cài đặt</translation> <translation id="6446163441502663861">Kahu (Phong bì)</translation> @@ -2178,6 +2188,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{Không thể lưu thẻ này ngay bây giờ}other{Không thể lưu các thẻ này ngay bây giờ}}</translation> <translation id="7053983685419859001">Chặn</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> đã xác minh rằng trang web này có chứng chỉ do <ph name="ISSUER" /> cấp.</translation> +<translation id="7058774143982824355">Dịch vụ phân tích cú pháp mật khẩu trong tệp CSV</translation> <translation id="7061777300866737982">An toàn và an ninh nhà ở</translation> <translation id="7062635574500127092">Xanh mòng két</translation> <translation id="706295145388601875">Thêm và quản lý các địa chỉ trong phần Cài đặt của Chrome</translation> @@ -2442,6 +2453,7 @@ <translation id="7696089921647603491">Nhạc rock cổ điển và nhạc xưa</translation> <translation id="7697066736081121494">Prc8 (Phong bì)</translation> <translation id="769721561045429135">Bạn hiện có các thẻ chỉ dùng được trên thiết bị này. Nhấp vào Tiếp tục để xem lại các thẻ.</translation> +<translation id="7698864304447945242">Cập nhật Dịch vụ Google Play cho Thực tế tăng cường?</translation> <translation id="7699293099605015246">Không có bài viết nào ngay lúc này</translation> <translation id="7701040980221191251">Không có</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />Tiếp tục truy cập <ph name="SITE" /> (không an toàn)<ph name="END_LINK" /></translation> @@ -2454,6 +2466,7 @@ <translation id="7723047071702270851">Chỉnh sửa thẻ</translation> <translation id="7734285854693414638">Tạo nhanh một biểu mẫu mới trong Google Biểu mẫu</translation> <translation id="773466115871691567">Luôn dịch các trang viết bằng <ph name="SOURCE_LANGUAGE" /></translation> +<translation id="7736959720849233795">Sao chép địa chỉ đường liên kết</translation> <translation id="7740996059027112821">Chuẩn</translation> <translation id="77424286611022110">Trang web này hiện quảng cáo xâm nhập hoặc quảng cáo gây hiểu nhầm. <ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">Đã chặn nội dung nguy hiểm.</translation>
diff --git a/components/strings/components_strings_zh-CN.xtb b/components/strings/components_strings_zh-CN.xtb index f92af3d3..ea59900 100644 --- a/components/strings/components_strings_zh-CN.xtb +++ b/components/strings/components_strings_zh-CN.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">阅读清单</translation> <translation id="1264309058268477500">备用</translation> <translation id="1264974993859112054">体育</translation> +<translation id="1266469291454105242">设备解锁</translation> <translation id="1269516672602708785">在 Google 协作平台中快速创建新网站</translation> <translation id="1270502636509132238">取货方式</translation> <translation id="1281476433249504884">堆叠出纸器 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">约会与交友</translation> <translation id="1753706481035618306">页码</translation> <translation id="1755621011177747277">领养</translation> +<translation id="1756026472674246267">在新标签页中打开链接</translation> <translation id="175656076281618225">魔术</translation> <translation id="1757773103848038814">等宽字体</translation> <translation id="1763864636252898013">此服务器无法证明它是<ph name="DOMAIN" />;您设备的操作系统不信任其安全证书。出现此问题的原因可能是配置有误或您的连接被拦截了。</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">取消付款</translation> <translation id="2148613324460538318">添加支付卡</translation> <translation id="2149968176347646218">连接不安全</translation> +<translation id="2153609454945889823">安装“面向 AR 的 Google Play 服务”?</translation> <translation id="2154054054215849342">您的网域不支持同步</translation> <translation id="2154484045852737596">修改支付卡</translation> <translation id="2161656808144014275">文字</translation> @@ -830,6 +833,7 @@ <translation id="3229277193950731405">复制版本字符串</translation> <translation id="323107829343500871">输入“<ph name="CREDIT_CARD" />”的银行卡验证码 (CVC)</translation> <translation id="3234666976984236645">始终检测此网站上的重要内容</translation> +<translation id="3238395604961564389">在无痕式窗口中打开链接</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />,依次按 Tab 键和 Enter 键即可自定义您的浏览器外观</translation> <translation id="3240791268468473923">“无匹配的安全付款凭据”表单已打开</translation> <translation id="324180406144491771">“<ph name="HOST_NAME" />”链接已被禁用</translation> @@ -942,6 +946,7 @@ <translation id="3531780078352352885">工作表</translation> <translation id="3532844647053365774"><ph name="HOST" /> 想使用您的麦克风</translation> <translation id="3533328374079021623">信箱 5</translation> +<translation id="3542768452570884558">在新窗口中打开链接</translation> <translation id="3550112004925580947">招待行业</translation> <translation id="3552297013052089404">Sans-Serif 字体</translation> <translation id="3558573058928565255">日间</translation> @@ -1111,11 +1116,13 @@ <translation id="4040350669425716613">学院与大学</translation> <translation id="4056223980640387499">棕褐色调</translation> <translation id="4058922952496707368">“<ph name="SUBKEY" />”键:<ph name="ERROR" /></translation> +<translation id="4063924980214801036">使用设备解锁更快速地显示银行卡信息</translation> <translation id="4067098466788473230">助学金与奖学金</translation> <translation id="4067263367174615723">C1 (Envelope)</translation> <translation id="4067947977115446013">添加有效地址</translation> <translation id="4072193657607981494">正在加载政策</translation> <translation id="4072486802667267160">处理您的订单时出错。请重试。</translation> +<translation id="4073376909608563327">无法使用设备解锁</translation> <translation id="4073797364926776829">查看卡</translation> <translation id="4075732493274867456">客户端和服务器不支持一般 SSL 协议版本或加密套件。</translation> <translation id="4079302484614802869">代理配置已设置为使用 .pac 脚本网址,而不是固定的代理服务器。</translation> @@ -1408,6 +1415,7 @@ <translation id="4840250757394056958">查看您的 Chrome 历史记录</translation> <translation id="484462545196658690">自动</translation> <translation id="484671803914931257">获取<ph name="MERCHANT_NAME" />及其他商家的折扣信息</translation> +<translation id="484988093836683706">使用设备解锁</translation> <translation id="4850886885716139402">视图</translation> <translation id="4852429274334674023">操作系统</translation> <translation id="485316830061041779">德语</translation> @@ -1795,6 +1803,7 @@ <translation id="5921185718311485855">已开启</translation> <translation id="5921639886840618607">将银行卡信息保存到 Google 帐号中?</translation> <translation id="5922853866070715753">即将完成</translation> +<translation id="5923492272538889093">不使用银行卡验证码 (CVC),而是改用“设备解锁”?</translation> <translation id="5928444777041341328">家居与园艺</translation> <translation id="5932224571077948991">网站展示过侵扰性或误导性广告</translation> <translation id="5937560539988385583">网页翻译完毕</translation> @@ -1967,6 +1976,7 @@ <translation id="643051589346665201">更改 Google 密码</translation> <translation id="6433490469411711332">修改联系信息</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> 拒绝了我们的连接请求。</translation> +<translation id="6433797564277305076">从现在开始,您只需使用设备解锁便能更快速地显示银行卡信息</translation> <translation id="6440503408713884761">已忽略</translation> <translation id="6443406338865242315">您已安装的扩展程序和插件</translation> <translation id="6446163441502663861">Kahu (Envelope)</translation> @@ -2173,6 +2183,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{此刻无法保存这张卡}other{此刻无法保存这些卡}}</translation> <translation id="7053983685419859001">禁止</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> 已验证,此网站的证书是由 <ph name="ISSUER" /> 签发的。</translation> +<translation id="7058774143982824355">CSV 密码解析器服务</translation> <translation id="7061777300866737982">家居安全与安保</translation> <translation id="7062635574500127092">青色</translation> <translation id="706295145388601875">在 Chrome 设置中添加和管理地址</translation> @@ -2437,6 +2448,7 @@ <translation id="7696089921647603491">经典摇滚与老歌</translation> <translation id="7697066736081121494">Prc8 (Envelope)</translation> <translation id="769721561045429135">此刻,您有一些卡只能在这部设备上使用。点击“继续”即可查看这些卡。</translation> +<translation id="7698864304447945242">更新“面向 AR 的 Google Play 服务”?</translation> <translation id="7699293099605015246">目前没有文章可显示</translation> <translation id="7701040980221191251">无</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />继续前往<ph name="SITE" />(不安全)<ph name="END_LINK" /></translation> @@ -2449,6 +2461,7 @@ <translation id="7723047071702270851">修改支付卡</translation> <translation id="7734285854693414638">在 Google 表单中快速创建新表单</translation> <translation id="773466115871691567">一律翻译<ph name="SOURCE_LANGUAGE" />网页</translation> +<translation id="7736959720849233795">复制链接地址</translation> <translation id="7740996059027112821">标准</translation> <translation id="77424286611022110">此网站展示过侵扰性或误导性广告。<ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">危险内容已被拦截。</translation>
diff --git a/components/strings/components_strings_zh-HK.xtb b/components/strings/components_strings_zh-HK.xtb index b9eb989..267cd60 100644 --- a/components/strings/components_strings_zh-HK.xtb +++ b/components/strings/components_strings_zh-HK.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">閱讀清單</translation> <translation id="1264309058268477500">替用匣</translation> <translation id="1264974993859112054">運動資訊</translation> +<translation id="1266469291454105242">裝置解鎖</translation> <translation id="1269516672602708785">在「Google 協作平台」中快速建立新版網站</translation> <translation id="1270502636509132238">取貨方式</translation> <translation id="1281476433249504884">堆疊器 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">約會和交友</translation> <translation id="1753706481035618306">頁碼</translation> <translation id="1755621011177747277">領養</translation> +<translation id="1756026472674246267">在新分頁中開啟連結</translation> <translation id="175656076281618225">魔術</translation> <translation id="1757773103848038814">等寬字型</translation> <translation id="1763864636252898013">伺服器無法證明其屬於 <ph name="DOMAIN" /> 網域;其安全性憑證未取得您裝置的操作系統的信任。這可能是因為設定錯誤,或有攻擊者攔截您的連線。</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">取消付款</translation> <translation id="2148613324460538318">新增付款卡</translation> <translation id="2149968176347646218">連線不安全</translation> +<translation id="2153609454945889823">安裝「Google Play 服務 - AR 適用」?</translation> <translation id="2154054054215849342">您的網域無法使用同步處理功能</translation> <translation id="2154484045852737596">編輯付款信用卡</translation> <translation id="2161656808144014275">文字</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">複製版本字串</translation> <translation id="323107829343500871">請輸入 <ph name="CREDIT_CARD" /> 的信用卡驗證碼 (CVC)</translation> <translation id="3234666976984236645">一律在這個網站上偵測重要內容</translation> +<translation id="3238395604961564389">在無痕式視窗中開啟連結</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />,㩒一下 Tab 鍵,然後㩒一下 Enter 鍵就可以自訂瀏覽器外觀</translation> <translation id="3240791268468473923">開咗冇相符安全付款憑證工作表</translation> <translation id="324180406144491771">已封鎖「<ph name="HOST_NAME" />」連結</translation> @@ -944,6 +948,7 @@ <translation id="3531780078352352885">工作表</translation> <translation id="3532844647053365774"><ph name="HOST" /> 要求使用麥克風</translation> <translation id="3533328374079021623">出紙槽 5</translation> +<translation id="3542768452570884558">在新視窗中開啟連結</translation> <translation id="3550112004925580947">服務性行業</translation> <translation id="3552297013052089404">Sans-serif 字型</translation> <translation id="3558573058928565255">日間</translation> @@ -1114,11 +1119,13 @@ <translation id="4040350669425716613">大專和大學</translation> <translation id="4056223980640387499">棕褐色</translation> <translation id="4058922952496707368">金鑰「<ph name="SUBKEY" />」:<ph name="ERROR" /></translation> +<translation id="4063924980214801036">使用裝置解鎖功能即可加快確認卡片的速度</translation> <translation id="4067098466788473230">助學金和獎學金</translation> <translation id="4067263367174615723">C1 (信封)</translation> <translation id="4067947977115446013">新增有效的地址</translation> <translation id="4072193657607981494">載入緊政策</translation> <translation id="4072486802667267160">處理您的訂單時發生錯誤,請再試一次。</translation> +<translation id="4073376909608563327">無法使用裝置解鎖功能</translation> <translation id="4073797364926776829">查看虛擬卡</translation> <translation id="4075732493274867456">用戶端和伺服器不支援共通 SSL 通訊協定版本或加密套件。</translation> <translation id="4079302484614802869">Proxy 設定已設為使用 .pac 指令碼網址,而非固定的 Proxy 伺服器。</translation> @@ -1411,6 +1418,7 @@ <translation id="4840250757394056958">查看 Chrome 記錄</translation> <translation id="484462545196658690">自動</translation> <translation id="484671803914931257">取得 <ph name="MERCHANT_NAME" /> 和其他商家的折扣</translation> +<translation id="484988093836683706">使用裝置解鎖功能</translation> <translation id="4850886885716139402">檢視</translation> <translation id="4852429274334674023">作業系統</translation> <translation id="485316830061041779">德文</translation> @@ -1798,6 +1806,7 @@ <translation id="5921185718311485855">開啟</translation> <translation id="5921639886840618607">要將付款卡儲存至 Google 帳戶嗎?</translation> <translation id="5922853866070715753">快將完成</translation> +<translation id="5923492272538889093">要使用裝置解鎖功能取代信用卡驗證碼嗎?</translation> <translation id="5928444777041341328">家居和園藝</translation> <translation id="5932224571077948991">網站顯示滋擾性或誤導廣告</translation> <translation id="5937560539988385583">已翻譯網頁</translation> @@ -1971,6 +1980,7 @@ <translation id="643051589346665201">變更 Google 密碼</translation> <translation id="6433490469411711332">編輯聯絡人資料</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> 已拒絕連線。</translation> +<translation id="6433797564277305076">現在就開始使用裝置解鎖功能,加快確認卡片的速度</translation> <translation id="6440503408713884761">已略過</translation> <translation id="6443406338865242315">您已安裝的擴充程式和外掛程式</translation> <translation id="6446163441502663861">Kahu (信封)</translation> @@ -2177,6 +2187,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{目前無法儲存此卡}other{目前無法儲存這些卡}}</translation> <translation id="7053983685419859001">封鎖</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> 驗證到「<ph name="ISSUER" />」已發出此網站的憑證。</translation> +<translation id="7058774143982824355">CSV 密碼剖析器服務</translation> <translation id="7061777300866737982">家居安全和保安</translation> <translation id="7062635574500127092">藍綠色</translation> <translation id="706295145388601875">在 Chrome 設定中新增並管理地址</translation> @@ -2441,6 +2452,7 @@ <translation id="7696089921647603491">經典搖滾和懷舊音樂</translation> <translation id="7697066736081121494">Prc8 (信封)</translation> <translation id="769721561045429135">目前您有幾張卡只可在此裝置上使用。按一下 [繼續] 即可查看這些卡。</translation> +<translation id="7698864304447945242">更新「Google Play 服務 - AR 適用」?</translation> <translation id="7699293099605015246">目前無法顯示文章</translation> <translation id="7701040980221191251">沒有</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />繼續前往 <ph name="SITE" /> 網站 (不安全) <ph name="END_LINK" /></translation> @@ -2453,6 +2465,7 @@ <translation id="7723047071702270851">編輯付款卡</translation> <translation id="7734285854693414638">在 Google 表格中快速建立新表格</translation> <translation id="773466115871691567">一律翻譯來源語言為<ph name="SOURCE_LANGUAGE" />的網頁</translation> +<translation id="7736959720849233795">複製連結網址</translation> <translation id="7740996059027112821">標準</translation> <translation id="77424286611022110">此網站顯示滋擾性或誤導廣告。<ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">已封鎖危險的內容</translation>
diff --git a/components/strings/components_strings_zh-TW.xtb b/components/strings/components_strings_zh-TW.xtb index c7b513b..3004d1e 100644 --- a/components/strings/components_strings_zh-TW.xtb +++ b/components/strings/components_strings_zh-TW.xtb
@@ -116,6 +116,7 @@ <translation id="1263231323834454256">閱讀清單</translation> <translation id="1264309058268477500">替用匣</translation> <translation id="1264974993859112054">運動資訊</translation> +<translation id="1266469291454105242">裝置解鎖</translation> <translation id="1269516672602708785">在 Google 協作平台中快速建立新網站</translation> <translation id="1270502636509132238">取件方式</translation> <translation id="1281476433249504884">堆疊出紙器 1</translation> @@ -330,6 +331,7 @@ <translation id="1753068535428855445">約會交友</translation> <translation id="1753706481035618306">頁碼</translation> <translation id="1755621011177747277">領養</translation> +<translation id="1756026472674246267">在新分頁中開啟連結</translation> <translation id="175656076281618225">魔術</translation> <translation id="1757773103848038814">等寬字型</translation> <translation id="1763864636252898013">伺服器無法證明其屬於 <ph name="DOMAIN" /> 網域;其安全性憑證未取得你裝置作業系統的信任。這可能是因為設定錯誤,或有攻擊者攔截你的連線所致。</translation> @@ -455,6 +457,7 @@ <translation id="214556005048008348">取消付款</translation> <translation id="2148613324460538318">新增卡片</translation> <translation id="2149968176347646218">連線不安全</translation> +<translation id="2153609454945889823">安裝「Google Play 服務 - AR 適用」?</translation> <translation id="2154054054215849342">你的網域無法使用同步功能</translation> <translation id="2154484045852737596">編輯卡片資訊</translation> <translation id="2161656808144014275">文字</translation> @@ -832,6 +835,7 @@ <translation id="3229277193950731405">複製版本字串</translation> <translation id="323107829343500871">輸入 <ph name="CREDIT_CARD" /> 的信用卡驗證碼</translation> <translation id="3234666976984236645">一律偵測這個網站的重要內容</translation> +<translation id="3238395604961564389">在無痕式視窗中開啟連結</translation> <translation id="3240683217920639535"><ph name="MANAGE_CHROME_THEMES_FOCUSED_FRIENDLY_MATCH_TEXT" />;按下 Tab 鍵再按下 Enter 鍵即可自訂瀏覽器外觀</translation> <translation id="3240791268468473923">無相符安全付款憑證表已開啟</translation> <translation id="324180406144491771">「<ph name="HOST_NAME" />」連結已遭到封鎖</translation> @@ -945,6 +949,7 @@ <translation id="3531780078352352885">工作表</translation> <translation id="3532844647053365774"><ph name="HOST" /> 要求使用麥克風</translation> <translation id="3533328374079021623">出紙槽 5</translation> +<translation id="3542768452570884558">在新視窗中開啟連結</translation> <translation id="3550112004925580947">餐旅業</translation> <translation id="3552297013052089404">Sans Serif 字型</translation> <translation id="3558573058928565255">白天</translation> @@ -1115,11 +1120,13 @@ <translation id="4040350669425716613">學院與大學</translation> <translation id="4056223980640387499">深褐色調</translation> <translation id="4058922952496707368">鍵「<ph name="SUBKEY" />」:<ph name="ERROR" /></translation> +<translation id="4063924980214801036">使用裝置解鎖功能即可加快確認卡片的速度</translation> <translation id="4067098466788473230">研究津貼與獎學金</translation> <translation id="4067263367174615723">C1 (信封)</translation> <translation id="4067947977115446013">新增有效的地址</translation> <translation id="4072193657607981494">正在載入政策</translation> <translation id="4072486802667267160">處理你的訂單時發生錯誤,請再試一次。</translation> +<translation id="4073376909608563327">無法使用裝置解鎖功能</translation> <translation id="4073797364926776829">查看卡片</translation> <translation id="4075732493274867456">用戶端和伺服器不支援一般 SSL 通訊協定版本或加密套件。</translation> <translation id="4079302484614802869">Proxy 設定已設為使用 .pac 指令碼網址,而非固定的 Proxy 伺服器。</translation> @@ -1412,6 +1419,7 @@ <translation id="4840250757394056958">查看 Chrome 歷史記錄</translation> <translation id="484462545196658690">自動</translation> <translation id="484671803914931257">取得 <ph name="MERCHANT_NAME" /> 和其他商家的折扣</translation> +<translation id="484988093836683706">使用裝置解鎖功能</translation> <translation id="4850886885716139402">檢視</translation> <translation id="4852429274334674023">作業系統</translation> <translation id="485316830061041779">德文</translation> @@ -1799,6 +1807,7 @@ <translation id="5921185718311485855">開啟</translation> <translation id="5921639886840618607">要將這張卡片儲存到 Google 帳戶嗎?</translation> <translation id="5922853866070715753">即將完成</translation> +<translation id="5923492272538889093">要使用裝置解鎖功能取代信用卡驗證碼嗎?</translation> <translation id="5928444777041341328">家居與園藝</translation> <translation id="5932224571077948991">網站顯示干擾性或誤導性廣告</translation> <translation id="5937560539988385583">已翻譯網頁</translation> @@ -1972,6 +1981,7 @@ <translation id="643051589346665201">變更 Google 密碼</translation> <translation id="6433490469411711332">編輯聯絡資訊</translation> <translation id="6433595998831338502"><ph name="HOST_NAME" /> 拒絕連線。</translation> +<translation id="6433797564277305076">現在就開始使用裝置解鎖功能,加快確認卡片的速度</translation> <translation id="6440503408713884761">已忽略</translation> <translation id="6443406338865242315">你安裝的擴充功能和外掛程式</translation> <translation id="6446163441502663861">Kahu (信封)</translation> @@ -2178,6 +2188,7 @@ <translation id="705310974202322020">{NUM_CARDS,plural, =1{目前無法儲存這張卡片}other{目前無法儲存這些卡片}}</translation> <translation id="7053983685419859001">封鎖</translation> <translation id="7058163556978339998"><ph name="BROWSER" /> 已驗證這個網站的憑證是由「<ph name="ISSUER" />」所核發。</translation> +<translation id="7058774143982824355">CSV 密碼剖析器服務</translation> <translation id="7061777300866737982">居家安全與保全</translation> <translation id="7062635574500127092">藍綠色</translation> <translation id="706295145388601875">在 Chrome 設定中新增及管理地址</translation> @@ -2442,6 +2453,7 @@ <translation id="7696089921647603491">經典搖滾與懷舊老歌</translation> <translation id="7697066736081121494">Prc8 (信封)</translation> <translation id="769721561045429135">目前你有某些卡片只能在這部裝置上使用。按一下 [繼續] 即可查看卡片。</translation> +<translation id="7698864304447945242">更新「Google Play 服務 - AR 適用」?</translation> <translation id="7699293099605015246">目前無法顯示文章</translation> <translation id="7701040980221191251">無</translation> <translation id="7704050614460855821"><ph name="BEGIN_LINK" />繼續前往 <ph name="SITE" /> 網站 (不安全)<ph name="END_LINK" /></translation> @@ -2454,6 +2466,7 @@ <translation id="7723047071702270851">編輯卡片資訊</translation> <translation id="7734285854693414638">在 Google 表單中快速建立新表單</translation> <translation id="773466115871691567">一律翻譯<ph name="SOURCE_LANGUAGE" />網頁</translation> +<translation id="7736959720849233795">複製連結網址</translation> <translation id="7740996059027112821">標準</translation> <translation id="77424286611022110">這個網站會顯示干擾性或誤導性的廣告。<ph name="LEARN_MORE_LINK_TEXT" /></translation> <translation id="774634243536837715">已封鎖危險內容。</translation>
diff --git a/components/stylus_handwriting/android/java/src/android/widget/directwriting/IDirectWritingService.aidl b/components/stylus_handwriting/android/java/src/android/widget/directwriting/IDirectWritingService.aidl index aef44694..05f04d0 100644 --- a/components/stylus_handwriting/android/java/src/android/widget/directwriting/IDirectWritingService.aidl +++ b/components/stylus_handwriting/android/java/src/android/widget/directwriting/IDirectWritingService.aidl
@@ -145,7 +145,40 @@ boolean onStopRecognition(in Bundle bundle) = 11; /** - * Gets configuration from Remote service after service connected + * When current editing element bounds are changed in view, notify the service. + * + * @param bundle is KEY_BUNDLE_EDIT_RECT, KEY_BUNDLE_ROOT_VIEW_RECT + * KEY_BUNDLE_SERVICE_HOST_SOURCE for browser + * @returns true if onBoundedEditTextChanged successful + */ + boolean onBoundedEditTextChanged(in Bundle bundle) = 12; + + /** + * When window lost focus, notify the service + * + * @param packageName which is currently bound to service. + */ + void onWindowFocusLost(String packageName) = 13; + + /** + * Dispatch Motion Event to service for drawing + * + * @param bundle is KEY_BUNDLE_EVENT, KEY_BUNDLE_ROOT_VIEW_RECT + */ + void onDispatchEvent(in Bundle bundle) = 14; + + /** + * Notify to Direct Writing service when current Editing element's paste popup is shown to hide + * the direct writing service floating toolbar. This API can be used for any use case where we + * wish to hide this toolbar ex: changed focus to another tab, tap with finger instead of stylus, + * and so on. + * + * @param bundle is KEY_BUNDLE_SERVICE_HOST_SOURCE for browser + */ + void onEditTextActionModeStarted(in Bundle bundle) = 15; + + /** + * Gets configuration from Remote service after service is connected. * * @param bundle is for configuration * KEY_BUNDLE_CONFIG_HIDE_DELAY, @@ -155,4 +188,33 @@ * KEY_BUNDLE_CONFIG_TRIGGER_HORIZONTAL_SPACE_DEFAULT */ void getConfiguration(inout Bundle bundle) = 16; + + /** + * Notify to Direct Writing service when Edit field updates ImeOptions + * + * @param imeOptions is ImeOptions + */ + void onUpdateImeOptions(int imeOptions) = 17; + + // { Common Extra + /** + * Extra Command for future use. + * Note: This API is unused by Chromium for now. It is defined as per aidl from Samsung platform. + * + * @param action is for future use + * @param bundle is for future use + */ + void onExtraCommand(String action, inout Bundle bundle) = 900; + // Common Extra } + + // { TextView + /** + * TextView Extra Command for future use. + * Note: This API is unused by Chromium for now. It is defined as per aidl from Samsung platform. + * + * @param action is for future use + * @param bundle is for future use + */ + void onTextViewExtraCommand(String action, inout Bundle bundle) = 901; + // TextView } }
diff --git a/components/stylus_handwriting/android/java/src/android/widget/directwriting/IDirectWritingServiceCallback.aidl b/components/stylus_handwriting/android/java/src/android/widget/directwriting/IDirectWritingServiceCallback.aidl index ccd5ddf6..091ad27 100644 --- a/components/stylus_handwriting/android/java/src/android/widget/directwriting/IDirectWritingServiceCallback.aidl +++ b/components/stylus_handwriting/android/java/src/android/widget/directwriting/IDirectWritingServiceCallback.aidl
@@ -46,6 +46,14 @@ // { EditText Text and Selection Setter /** + * Sets text and cursor in bounded edit text + * Should run on main looper + * + * @param text to set in edit text + * @param index to set cursor position in edit text + */ + void setTextSelection(CharSequence text, int index) = 20; + /** * Same method with EditText * Should run on main looper */ @@ -61,10 +69,22 @@ /** * Same method with EditText */ + int getSelectionStart() = 30; + /** + * Same method with EditText + */ + int getSelectionEnd() = 31; + /** + * Same method with EditText + */ int getOffsetForPosition(float x, float y) = 32; /** * Same method with EditText */ + CharSequence getText() = 33; + /** + * Same method with EditText + */ int length() = 34; // EditText Text and Selection Getter } @@ -100,6 +120,22 @@ /** * Same method with EditText */ + int getRight() = 47; + /** + * Same method with EditText + */ + int getLeft() = 48; + /** + * Same method with EditText + */ + int getTop() = 49; + /** + * Same method with EditText + */ + int getBottom() = 50; + /** + * Same method with EditText + */ int getLineHeight() = 51; /** * Same method with EditText @@ -174,13 +210,67 @@ Rect getTextAreaRect(int line) = 84; // EditText layout Getter } + // { VI + /** + * Gets location of cursor for VI + */ + PointF getCursorLocation(int selectionStart) = 90; + // VI } + + // { EditText EditInfo Getter + /** + * Same method with EditText + */ + String getPrivateImeOptions() = 100; + /** + * Same method with EditText + */ + int getImeOptions() = 101; + /** + * Same method with EditText + */ + int getInputType() = 102; + // EditText EditInfo Getter } + + // { InputMethod + /** + * Same method with EditText + * Should run on main looper + */ + void onEditorAction(int actionCode) = 110; + /** + * Executes INPUT_METHOD_SERVICE sendAppPrivateCommand to send command to Keyboard + * + * @param action to send to keyboard + * @param bundle to send to keyboard + */ + void onAppPrivateCommand(String action, in Bundle bundle) = 111; + /** + * Hides keyboard forcely if it is showing for current input. + */ + void semForceHideSoftInput() = 112; + // InputMethod } + // { Common Extra /** - * Extra Command for furture use + * Extra Command for future use * - * @param action is for furture use - * @param bundle is for furture use + * @param action is for future use + * @param bundle is for future use */ void onExtraCommand(String action, inout Bundle bundle) = 900; // Common Extra } + + // { TextView + /** + * TextView Extra Command for future use. + * Note: This Callback API receives the stylus writing Gesture recognized by service along with + * gesture data bundle containing gesture coordinates, text to insert and alternate text to be + * inserted in case gesture is not done over a valid text position in input. + * + * @param action is for future use + * @param bundle is for future use + */ + void onTextViewExtraCommand(String action, inout Bundle bundle) = 901; + // TextView } }
diff --git a/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/DirectWritingServiceBinder.java b/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/DirectWritingServiceBinder.java index eafe665..4babf79e 100644 --- a/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/DirectWritingServiceBinder.java +++ b/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/DirectWritingServiceBinder.java
@@ -208,15 +208,35 @@ }, "onStopRecognition"); } - // TODO(mahesh.ma): Add implementations to below stub APIs when the direct writing service aidl - // interface is added. - void updateEditorInfo(EditorInfo editorInfo) {} + void updateEditorInfo(EditorInfo editorInfo) { + tryRunOnService((remoteDwService) -> { + remoteDwService.onUpdateImeOptions(editorInfo.imeOptions); + }, "updateEditorInfo"); + } - void updateEditableBounds(Rect editableBounds, View rootView) {} + void updateEditableBounds(Rect editableBounds, View rootView) { + tryRunOnService((remoteDwService) -> { + remoteDwService.onBoundedEditTextChanged( + DirectWritingBundleUtil.buildBundle(editableBounds, rootView)); + }, "updateEditableBounds"); + } - void onDispatchEvent(MotionEvent me, View rootView) {} + void onDispatchEvent(MotionEvent me, View rootView) { + tryRunOnService((remoteDwService) -> { + remoteDwService.onDispatchEvent(DirectWritingBundleUtil.buildBundle(me, rootView)); + }, "onDispatchEvent"); + } - private void onWindowFocusLost(String packageName) {} + private void onWindowFocusLost(String packageName) { + tryRunOnService((remoteDwService) -> { + remoteDwService.onWindowFocusLost(packageName); + }, "onWindowFocusLost"); + } - void hideDWToolbar() {} + void hideDWToolbar() { + tryRunOnService((remoteDwService) -> { + Bundle bundle = DirectWritingBundleUtil.buildBundle(); + remoteDwService.onEditTextActionModeStarted(bundle); + }, "hideDWToolbar"); + } }
diff --git a/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/DirectWritingServiceCallback.java b/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/DirectWritingServiceCallback.java index 22bdd73..b14c3c6 100644 --- a/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/DirectWritingServiceCallback.java +++ b/components/stylus_handwriting/android/java/src/org/chromium/components/stylus_handwriting/DirectWritingServiceCallback.java
@@ -4,12 +4,16 @@ package org.chromium.components.stylus_handwriting; +import android.content.Context; import android.graphics.Point; +import android.graphics.PointF; import android.graphics.Rect; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.view.View; import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; import androidx.annotation.BinderThread; @@ -17,12 +21,13 @@ /** * This class implements the Direct Writing service callback interface that gets registered to the - * service, which would be called on the {@link BinderThread}. + * service, which would be called on the {@link BinderThread}. It also caches information about + * writable element position, cursor position and the text input state to be provided to the service + * when requested on the {@link BinderThread}. */ class DirectWritingServiceCallback extends android.widget.directwriting.IDirectWritingServiceCallback.Stub { - private static final String TAG = "DWCallback"; - + public static final String BUNDLE_KEY_SHOW_KEYBOARD = "showKeyboard"; private EditorInfo mEditorInfo; private int mLastSelectionStart; private int mLastSelectionEnd; @@ -80,6 +85,138 @@ mStylusWritingImeCallback = imeCallback; } + // Implement the methods from IDirectWritingServiceCallback which are of interest for Chromium. + // These are used to commit the recognized text and handle the gestures detected by the service. + // They also provide information about current edit field position, cursor position and the + // text input state. + // HTML input text and selection setter APIs + @BinderThread + @Override + public void setTextSelection(CharSequence text, int index) { + Message msg = mHandler.obtainMessage(DirectWritingConstants.MSG_SEND_SET_TEXT_SELECTION); + msg.obj = text; + msg.arg1 = index; + mHandler.sendMessage(msg); + } + + // HTML input selection getters + @BinderThread + @Override + public int getSelectionStart() { + return mLastSelectionStart; + } + + @BinderThread + @Override + public int getSelectionEnd() { + return mLastSelectionEnd; + } + + @BinderThread + @Override + public CharSequence getText() { + if (mLastText == null) return ""; + return mLastText; + } + + // HTML input field position getters + @BinderThread + @Override + public int getRight() { + return mEditableBounds != null ? mEditableBounds.right : 0; + } + + @BinderThread + @Override + public int getLeft() { + return mEditableBounds != null ? mEditableBounds.left : 0; + } + + @BinderThread + @Override + public int getTop() { + return mEditableBounds != null ? mEditableBounds.top : 0; + } + + @BinderThread + @Override + public int getBottom() { + return mEditableBounds != null ? mEditableBounds.bottom : 0; + } + + // Direct Writing commit VI to Cursor location. + @BinderThread + @Override + public PointF getCursorLocation(int selectionStart) { + PointF cursorLocation = + mCursorPosition == null ? new PointF() : new PointF(mCursorPosition); + return cursorLocation; + } + + // HTML Input EditInfo getters + @BinderThread + @Override + public String getPrivateImeOptions() { + String privateImeOptions = mEditorInfo != null ? mEditorInfo.privateImeOptions : ""; + return privateImeOptions; + } + + @BinderThread + @Override + public int getImeOptions() { + int imeOptions = mEditorInfo != null ? mEditorInfo.imeOptions : 0; + return imeOptions; + } + + @BinderThread + @Override + public int getInputType() { + int inputType = mEditorInfo != null ? mEditorInfo.inputType : 0; + return inputType; + } + + @BinderThread + @Override + public void onEditorAction(int actionCode) { + Message msg = mHandler.obtainMessage(DirectWritingConstants.MSG_PERFORM_EDITOR_ACTION); + msg.arg1 = actionCode; + mHandler.sendMessage(msg); + } + + @BinderThread + @Override + public void onAppPrivateCommand(String action, Bundle bundle) { + if (bundle == null || mStylusWritingImeCallback == null) return; + View currentView = mStylusWritingImeCallback.getContainerView(); + if (currentView == null) return; + InputMethodManager imm = (InputMethodManager) currentView.getContext().getSystemService( + Context.INPUT_METHOD_SERVICE); + if (imm == null) return; + imm.sendAppPrivateCommand(currentView, action, bundle); + boolean showKeyboard = bundle.getBoolean(BUNDLE_KEY_SHOW_KEYBOARD); + if (showKeyboard) { + Message msg = mHandler.obtainMessage(DirectWritingConstants.MSG_PERFORM_SHOW_KEYBOARD); + mHandler.sendMessage(msg); + } + } + + @BinderThread + @Override + public void semForceHideSoftInput() { + Message msg = mHandler.obtainMessage(DirectWritingConstants.MSG_FORCE_HIDE_KEYBOARD); + mHandler.sendMessage(msg); + } + + // This API is used to receive the DW gesture type and gesture co-ordinates. + @BinderThread + @Override + public void onTextViewExtraCommand(String action, Bundle bundle) { + Message msg = mHandler.obtainMessage(DirectWritingConstants.MSG_TEXT_VIEW_EXTRA_COMMAND); + msg.obj = action; + msg.setData(bundle); + mHandler.sendMessage(msg); + } + // All of the below IDirectWritingServiceCallback interface implementations are default or no-op // as they are not applicable to HTML inputs (or) we cannot provide these information in real // time as per current Chromium architecture.
diff --git a/components/user_notes/interfaces/BUILD.gn b/components/user_notes/interfaces/BUILD.gn index 9dcfa68a..d9a0d69 100644 --- a/components/user_notes/interfaces/BUILD.gn +++ b/components/user_notes/interfaces/BUILD.gn
@@ -8,6 +8,7 @@ "user_note_metadata_snapshot.h", "user_note_service_delegate.h", "user_note_storage.h", + "user_notes_ui.cc", "user_notes_ui.h", "user_notes_ui_delegate.h", ]
diff --git a/components/user_notes/interfaces/user_notes_ui.cc b/components/user_notes/interfaces/user_notes_ui.cc new file mode 100644 index 0000000..6bcc29d --- /dev/null +++ b/components/user_notes/interfaces/user_notes_ui.cc
@@ -0,0 +1,13 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "components/user_notes/interfaces/user_notes_ui.h" + +namespace user_notes { + +// UserNotesUI must implement the user data key for its subclasses, to ensure +// their instances can be retrieved in an implementation-agnostic way. +const int UserNotesUI::kUserDataKey; + +} // namespace user_notes
diff --git a/components/user_notes/interfaces/user_notes_ui.h b/components/user_notes/interfaces/user_notes_ui.h index 10c9ca6e..1141dd5 100644 --- a/components/user_notes/interfaces/user_notes_ui.h +++ b/components/user_notes/interfaces/user_notes_ui.h
@@ -5,6 +5,7 @@ #ifndef COMPONENTS_USER_NOTES_INTERFACES_USER_NOTES_UI_H_ #define COMPONENTS_USER_NOTES_INTERFACES_USER_NOTES_UI_H_ +#include "base/supports_user_data.h" #include "base/unguessable_token.h" #include "ui/gfx/geometry/rect.h" @@ -14,12 +15,14 @@ // Interface that the UI layer of User Notes must implement. Used by the // business logic in the service to send commands to the UI. -class UserNotesUI { +class UserNotesUI : public base::SupportsUserData::Data { public: + static const void* UserDataKey() { return &kUserDataKey; } + UserNotesUI() = default; UserNotesUI(const UserNotesUI&) = delete; UserNotesUI& operator=(const UserNotesUI&) = delete; - virtual ~UserNotesUI() = default; + ~UserNotesUI() override = default; // Called when a note in the UI should be scrolled to / brought to the // foreground, and focused. @@ -39,6 +42,9 @@ // Called by the UserNoteService when the user triggers one of the feature's // entry points, indicating the Notes UI should show itself. virtual void Show() = 0; + + private: + static const int kUserDataKey = 0; }; } // namespace user_notes
diff --git a/components/viz/service/display/DEPS b/components/viz/service/display/DEPS index 776fa2bb..ca3f9db 100644 --- a/components/viz/service/display/DEPS +++ b/components/viz/service/display/DEPS
@@ -9,7 +9,6 @@ "+cc/scheduler", "+components/viz/service/performance_hint", "+components/viz/service/surfaces", - "+components/viz/service/display_embedder/buffer_queue.h", "+components/viz/service/display_embedder/overlay_candidate_validator_android.h", "+components/viz/service/display_embedder/overlay_candidate_validator_mac.h", "+components/viz/service/display_embedder/overlay_candidate_validator_ozone.h",
diff --git a/components/viz/service/display/direct_renderer.cc b/components/viz/service/display/direct_renderer.cc index 45a6b99..3f514bb 100644 --- a/components/viz/service/display/direct_renderer.cc +++ b/components/viz/service/display/direct_renderer.cc
@@ -171,11 +171,6 @@ next_frame_needs_full_frame_redraw_ = true; } -void DirectRenderer::Reshape( - const OutputSurface::ReshapeParams& reshape_params) { - output_surface_->Reshape(reshape_params); -} - void DirectRenderer::DecideRenderPassAllocationsForFrame( const AggregatedRenderPassList& render_passes_in_draw_order) { DCHECK(render_pass_bypass_quads_.empty()); @@ -187,8 +182,7 @@ for (const auto& pass : render_passes_in_draw_order) { // If there's a copy request, we need an explicit renderpass backing so // only try to draw directly if there are no copy requests. - bool is_root = pass == root_render_pass; - if (!is_root && pass->copy_requests.empty()) { + if (pass != root_render_pass && pass->copy_requests.empty()) { if (const DrawQuad* quad = CanPassBeDrawnDirectly(pass.get())) { // If the render pass is drawn directly, it will not be drawn from as // a render pass so it's not added to the map. @@ -196,12 +190,8 @@ continue; } } - gfx::Size size = pass->output_rect.size(); - // We should not change the buffer size for the root render pass. - if (!is_root) { - size = CalculateTextureSizeForRenderPass(pass.get()); - } - render_passes_in_frame[pass->id] = {size, pass->generate_mipmap}; + render_passes_in_frame[pass->id] = { + CalculateTextureSizeForRenderPass(pass.get()), pass->generate_mipmap}; } UMA_HISTOGRAM_COUNTS_1000( "Compositing.Display.FlattenedRenderPassCount", @@ -357,7 +347,7 @@ next_frame_needs_full_frame_redraw_ = false; reshape_params_ = reshape_params; reshape_display_transform_ = display_transform; - Reshape(reshape_params); + output_surface_->Reshape(reshape_params); #if BUILDFLAG(IS_APPLE) // For Mac, all render passes will be promoted to CALayer, the redraw full // frame is for the main surface only. @@ -412,12 +402,8 @@ current_frame_valid_ = false; } -gfx::Rect DirectRenderer::GetCurrentFramebufferDamage() const { - return output_surface_->GetCurrentFramebufferDamage(); -} - gfx::Rect DirectRenderer::GetTargetDamageBoundingRect() const { - gfx::Rect bounding_rect = GetCurrentFramebufferDamage(); + gfx::Rect bounding_rect = output_surface_->GetCurrentFramebufferDamage(); if (overlay_processor_) { bounding_rect.Union( overlay_processor_->GetPreviousFrameOverlaysBoundingRect()); @@ -730,14 +716,8 @@ } void DirectRenderer::UseRenderPass(const AggregatedRenderPass* render_pass) { - bool is_root = render_pass == current_frame()->root_render_pass; current_frame()->current_render_pass = render_pass; - // The root render pass will be either bound to the buffer allocated by - // the SkiaOutputSurface, or if the renderer allocatates images then the root - // render pass buffer will be allocated in - // AllocateRenderPassResourceIfNeeded(), and bound in - // BindFramebufferToTexture(). - if (is_root && !output_surface_->capabilities().renderer_allocates_images) { + if (render_pass == current_frame()->root_render_pass) { BindFramebufferToOutputSurface(); if (output_surface_->capabilities().supports_dc_layers) output_surface_->SetDrawRectangle(current_frame()->root_damage_rect); @@ -747,16 +727,12 @@ return; } - gfx::Size size = render_pass->output_rect.size(); - // We should not change the buffer size for the root render pass. - if (!is_root) { - size = CalculateTextureSizeForRenderPass(render_pass); - size.Enlarge(enlarge_pass_texture_amount_.width(), - enlarge_pass_texture_amount_.height()); - } + gfx::Size enlarged_size = CalculateTextureSizeForRenderPass(render_pass); + enlarged_size.Enlarge(enlarge_pass_texture_amount_.width(), + enlarge_pass_texture_amount_.height()); - AllocateRenderPassResourceIfNeeded(render_pass->id, - {size, render_pass->generate_mipmap}); + AllocateRenderPassResourceIfNeeded( + render_pass->id, {enlarged_size, render_pass->generate_mipmap}); // TODO(crbug.com/582554): This change applies only when Vulkan is enabled and // it will be removed once SkiaRenderer has complete support for Vulkan. @@ -779,7 +755,8 @@ // If |frame_buffer_damage|, which is carried over from the previous frame // when we want to preserve buffer content, is not empty, we should add it // to both root and non-root render passes. - gfx::Rect frame_buffer_damage = GetCurrentFramebufferDamage(); + gfx::Rect frame_buffer_damage = + output_surface_->GetCurrentFramebufferDamage(); if (render_pass == root_render_pass) { base::CheckedNumeric<int64_t> display_area =
diff --git a/components/viz/service/display/direct_renderer.h b/components/viz/service/display/direct_renderer.h index ac427d8..8144d55 100644 --- a/components/viz/service/display/direct_renderer.h +++ b/components/viz/service/display/direct_renderer.h
@@ -165,17 +165,6 @@ // Puts the draw time wall in trace file relative to the |ready_timestamp|. virtual void AddCompositeTimeTraces(base::TimeTicks ready_timestamp); - // Returns the current frame buffer damage. - virtual gfx::Rect GetCurrentFramebufferDamage() const; - - // Reshapes the output surface. - virtual void Reshape(const OutputSurface::ReshapeParams& reshape_params); - - // Set the number of frame buffers to use when - // `supports_dynamic_frame_buffer_allocation` is true. `n` must satisfy - // 0 < n <= capabilities_.number_of_buffers. - virtual void EnsureMinNumberOfBuffers(int n) {} - // Return the bounding rect of previously drawn delegated ink trail. gfx::Rect GetDelegatedInkTrailDamageRect();
diff --git a/components/viz/service/display/display.cc b/components/viz/service/display/display.cc index 5e8451c..b6b3bd8 100644 --- a/components/viz/service/display/display.cc +++ b/components/viz/service/display/display.cc
@@ -660,7 +660,10 @@ if (params.max_pending_swaps >= 0 && skia_output_surface_ && skia_output_surface_->capabilities() .supports_dynamic_frame_buffer_allocation) { - renderer_->EnsureMinNumberOfBuffers(params.max_pending_swaps + 1); + if (skia_output_surface_->EnsureMinNumberOfBuffers( + params.max_pending_swaps + 1)) { + renderer_->ReallocatedFrameBuffers(); + } } gfx::OverlayTransform current_display_transform = gfx::OVERLAY_TRANSFORM_NONE;
diff --git a/components/viz/service/display/output_surface.h b/components/viz/service/display/output_surface.h index 1736d3cc..5655794 100644 --- a/components/viz/service/display/output_surface.h +++ b/components/viz/service/display/output_surface.h
@@ -132,9 +132,6 @@ // When enabled, `number_of_buffers` should be interpreted as the maximum // number of buffers to allocate. bool supports_dynamic_frame_buffer_allocation = false; - // True when SkiaRenderer allocates and maintains a buffer queue of images - // for the root render pass. - bool renderer_allocates_images = false; // SkColorType for all supported buffer formats. SkColorType sk_color_types[static_cast<int>(gfx::BufferFormat::LAST) + 1] =
diff --git a/components/viz/service/display/overlay_candidate.h b/components/viz/service/display/overlay_candidate.h index d2df2f57..51ccfa1 100644 --- a/components/viz/service/display/overlay_candidate.h +++ b/components/viz/service/display/overlay_candidate.h
@@ -182,9 +182,6 @@ // surface and have the same |DrawQuad::rect| they will have the same // |tracking_id|. TrackingId tracking_id = kDefaultTrackingId; - - // Whether this overlay candidate represents the root render pass. - bool is_root_render_pass = false; }; using OverlayCandidateList = std::vector<OverlayCandidate>;
diff --git a/components/viz/service/display/skia_output_surface.h b/components/viz/service/display/skia_output_surface.h index c9731e0..49eac33 100644 --- a/components/viz/service/display/skia_output_surface.h +++ b/components/viz/service/display/skia_output_surface.h
@@ -162,9 +162,10 @@ virtual void RemoveRenderPassResource( std::vector<AggregatedRenderPassId> ids) = 0; - // Copy the output of the current frame if the |mailbox| is zero, otherwise - // create an SkSurface for the given |mailbox| and copy the output. - virtual void CopyOutput(const copy_output::RenderPassGeometry& geometry, + // Copy the output of the current frame if the |id| is zero, otherwise copy + // the output of a cached SkSurface for the given |id|. + virtual void CopyOutput(AggregatedRenderPassId id, + const copy_output::RenderPassGeometry& geometry, const gfx::ColorSpace& color_space, std::unique_ptr<CopyOutputRequest> request, const gpu::Mailbox& mailbox) = 0;
diff --git a/components/viz/service/display/skia_renderer.cc b/components/viz/service/display/skia_renderer.cc index bfdfdff..94d62ed 100644 --- a/components/viz/service/display/skia_renderer.cc +++ b/components/viz/service/display/skia_renderer.cc
@@ -794,18 +794,6 @@ current_gpu_commands_completed_fence_.get()); this->resource_provider()->SetReleaseFence(current_release_fence_.get()); - if (output_surface->capabilities().renderer_allocates_images) { - // When using dynamic frame buffer allocation we'll start with 0 buffers and - // let EnsureMinNumberOfBuffers() increase it later. - size_t number_of_buffers = - output_surface->capabilities().supports_dynamic_frame_buffer_allocation - ? 0 - : output_surface->capabilities().number_of_buffers; - buffer_queue_ = std::make_unique<BufferQueue>( - skia_output_surface_->GetSharedImageInterface(), - skia_output_surface_->GetSurfaceHandle(), number_of_buffers); - } - #if OS_ANDROID use_real_color_space_for_stream_video_ = features::UseRealVideoColorSpaceForDisplay(); @@ -833,42 +821,8 @@ // TODO(weiliangc): Remove this once OverlayProcessor schedules overlays. if (current_frame()->output_surface_plane) { - auto& surface_plane = current_frame()->output_surface_plane.value(); - - if (!buffer_queue_) { - skia_output_surface_->ScheduleOutputSurfaceAsOverlay(surface_plane); - } else { -#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_WIN) - // Windows and Mac have different OverlayList types, but those platforms - // aren't supported by buffer_queue_ yet, so this won't be reached. - NOTREACHED(); -#else - auto root_pass_backing = - render_pass_backings_.find(current_frame()->root_render_pass->id); - // The root pass backing should always exist. - DCHECK(root_pass_backing != render_pass_backings_.end()); - - OverlayCandidate surface_candidate; - surface_candidate.mailbox = root_pass_backing->second.mailbox; - surface_candidate.is_root_render_pass = true; - surface_candidate.transform = surface_plane.transform; - surface_candidate.display_rect = surface_plane.display_rect; - surface_candidate.uv_rect = surface_plane.uv_rect; - surface_candidate.resource_size_in_pixels = surface_plane.resource_size; - surface_candidate.format = surface_plane.format; - surface_candidate.color_space = surface_plane.color_space; - surface_candidate.is_opaque = !surface_plane.enable_blending; - surface_candidate.opacity = surface_plane.opacity; - surface_candidate.priority_hint = surface_plane.priority_hint; - surface_candidate.rounded_corners = surface_plane.rounded_corners; - surface_candidate.damage_rect = - gfx::RectF(surface_plane.damage_rect.value_or( - gfx::Rect(surface_plane.resource_size))); - - current_frame()->overlay_list.insert( - current_frame()->overlay_list.begin(), surface_candidate); -#endif // BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_WIN) - } + skia_output_surface_->ScheduleOutputSurfaceAsOverlay( + current_frame()->output_surface_plane.value()); } ScheduleOverlays(); debug_tint_modulate_count_++; @@ -898,13 +852,6 @@ #if BUILDFLAG(IS_MAC) output_frame.ca_layer_error_code = swap_frame_data.ca_layer_error_code; #endif - - if (buffer_queue_) { - gfx::Rect damage_rect = output_frame.sub_buffer_rect.value_or( - gfx::Rect(surface_size_for_swap_buffers())); - buffer_queue_->SwapBuffers(damage_rect); - } - skia_output_surface_->SwapBuffers(std::move(output_frame)); swap_buffer_rect_ = gfx::Rect(); @@ -928,9 +875,6 @@ pending_overlay_locks_.pop_back(); skia_output_surface_->SwapBuffersSkipped(root_pass_damage_rect); - if (buffer_queue_) { - buffer_queue_->SwapBuffersSkipped(root_pass_damage_rect); - } swap_buffer_rect_ = gfx::Rect(); FlushOutputSurface(); @@ -941,9 +885,6 @@ read_lock_release_fence_overlay_locks_.emplace_back(); auto read_fence_lock_iter = committed_overlay_locks_.end(); - if (buffer_queue_) { - buffer_queue_->SwapBuffersComplete(); - } if (!release_fence.is_null()) { // Set release fences to return overlay resources for last frame. for (auto& lock : committed_overlay_locks_) { @@ -1047,20 +988,13 @@ const AggregatedRenderPassId render_pass_id) { auto iter = render_pass_backings_.find(render_pass_id); DCHECK(render_pass_backings_.end() != iter); - - bool is_root = render_pass_id == current_frame()->root_render_pass->id; // This function is called after AllocateRenderPassResourceIfNeeded, so there // should be backing ready. RenderPassBacking& backing = iter->second; current_canvas_ = skia_output_surface_->BeginPaintRenderPass( render_pass_id, backing.size, backing.format, backing.generate_mipmap, - RenderPassBackingSkColorSpace(backing), /*is_overlay=*/is_root, + RenderPassBackingSkColorSpace(backing), /*is_overlay=*/false, backing.mailbox); - - if (is_root && debug_settings_->show_overdraw_feedback) { - DCHECK(buffer_queue_); - current_canvas_ = skia_output_surface_->RecordOverdrawForCurrentPaint(); - } } void SkiaRenderer::SetScissorTestRect(const gfx::Rect& scissor_rect) { @@ -2556,9 +2490,6 @@ // TODO(weiliangc): Remove this when CrOS and Android SurfaceControl switch // to OverlayProcessor as well. for (auto& overlay : current_frame()->overlay_list) { - if (overlay.is_root_render_pass) { - continue; - } // Resources will be unlocked after the next SwapBuffers() is completed. locks.emplace_back(resource_provider(), overlay.resource_id); auto& lock = locks.back(); @@ -2958,16 +2889,19 @@ // TODO(weiliangc): Make copy request work. (crbug.com/644851) TRACE_EVENT0("viz", "SkiaRenderer::CopyDrawnRenderPass"); - // Root framebuffer uses a zero-mailbox in SkiaOutputSurface. + // Root framebuffer uses id 0 in SkiaOutputSurface. + AggregatedRenderPassId render_pass_id; gpu::Mailbox mailbox; const auto* const render_pass = current_frame()->current_render_pass; - AggregatedRenderPassId render_pass_id = render_pass->id; - auto it = render_pass_backings_.find(render_pass_id); - if (it != render_pass_backings_.end()) { + if (render_pass != current_frame()->root_render_pass) { + render_pass_id = render_pass->id; + auto it = render_pass_backings_.find(render_pass_id); + DCHECK(it != render_pass_backings_.end()); mailbox = it->second.mailbox; } - skia_output_surface_->CopyOutput(geometry, CurrentRenderPassColorSpace(), + skia_output_surface_->CopyOutput(render_pass_id, geometry, + CurrentRenderPassColorSpace(), std::move(request), mailbox); } @@ -3040,13 +2974,8 @@ // again. for (size_t i = 0; i < passes_to_delete.size(); ++i) { auto it = render_pass_backings_.find(passes_to_delete[i]); - auto& backing = it->second; - // Buffers for root render pass backings are managed by |buffer_queue_|, not - // DisplayResourceProvider, so we should not destroy them here. - if (!backing.is_root) { - skia_output_surface_->GetSharedImageInterface()->DestroySharedImage( - gpu::SyncToken(), backing.mailbox); - } + skia_output_surface_->GetSharedImageInterface()->DestroySharedImage( + gpu::SyncToken(), it->second.mailbox); render_pass_backings_.erase(it); } @@ -3058,18 +2987,6 @@ void SkiaRenderer::AllocateRenderPassResourceIfNeeded( const AggregatedRenderPassId& render_pass_id, const RenderPassRequirements& requirements) { - if (render_pass_id == current_frame()->root_render_pass->id) { - DCHECK(buffer_queue_); - auto& root_pass_backing = render_pass_backings_[render_pass_id]; - root_pass_backing.is_root = true; - root_pass_backing.mailbox = buffer_queue_->GetCurrentBuffer(); - root_pass_backing.generate_mipmap = false; - root_pass_backing.size = surface_size_for_swap_buffers(); - root_pass_backing.format = GetResourceFormat(reshape_buffer_format()); - root_pass_backing.color_space = reshape_color_space(); - return; - } - auto it = render_pass_backings_.find(render_pass_id); if (it != render_pass_backings_.end()) { DCHECK(gfx::Rect(it->second.size).Contains(gfx::Rect(requirements.size))); @@ -3102,7 +3019,7 @@ render_pass_backings_.emplace( render_pass_id, RenderPassBacking({requirements.size, requirements.generate_mipmap, - color_space, format, mailbox, /*is_root=*/false})); + color_space, format, mailbox})); } void SkiaRenderer::FlushOutputSurface() { @@ -3277,7 +3194,7 @@ kPremul_SkAlphaType, kOverlayUsage, gpu::kNullSurfaceHandle); in_flight_render_pass_overlay_backings_.push_back( RenderPassBacking{buffer_size, /*generate_mipmap=*/false, color_space, - buffer_format, mailbox, /*is_root=*/false}); + buffer_format, mailbox}); overlay->mailbox = std::move(mailbox); } else { overlay->mailbox = std::move(it->mailbox); @@ -3447,32 +3364,6 @@ return delegated_ink_handler_ && delegated_ink_handler_->GetInkRenderer(); } -gfx::Rect SkiaRenderer::GetCurrentFramebufferDamage() const { - if (buffer_queue_) { - return buffer_queue_->CurrentBufferDamage(); - } else { - return skia_output_surface_->GetCurrentFramebufferDamage(); - } -} - -void SkiaRenderer::Reshape(const OutputSurface::ReshapeParams& reshape_params) { - if (buffer_queue_) { - buffer_queue_->Reshape(reshape_params.size, reshape_params.color_space, - reshape_params.format); - } - // Even if we have our own BufferQueue, we still need to forward the Reshape() - // call down to the OutputPresenter. - skia_output_surface_->Reshape(reshape_params); -} - -void SkiaRenderer::EnsureMinNumberOfBuffers(int n) { - if (buffer_queue_) { - buffer_queue_->EnsureMinNumberOfBuffers(n); - } else if (skia_output_surface_->EnsureMinNumberOfBuffers(n)) { - ReallocatedFrameBuffers(); - } -} - SkiaRenderer::OverlayLock::OverlayLock( DisplayResourceProvider* resource_provider, ResourceId resource_id) {
diff --git a/components/viz/service/display/skia_renderer.h b/components/viz/service/display/skia_renderer.h index cd3f27e..29e94c80 100644 --- a/components/viz/service/display/skia_renderer.h +++ b/components/viz/service/display/skia_renderer.h
@@ -17,9 +17,7 @@ #include "cc/cc_export.h" #include "components/viz/service/display/direct_renderer.h" #include "components/viz/service/display/display_resource_provider_skia.h" -#include "components/viz/service/display_embedder/buffer_queue.h" #include "components/viz/service/viz_service_export.h" -#include "gpu/command_buffer/common/mailbox.h" #include "third_party/skia/include/core/SkCanvas.h" #include "ui/gfx/color_conversion_sk_filter_cache.h" #include "ui/latency/latency_info.h" @@ -71,9 +69,6 @@ bool create_if_necessary) override; void SetDelegatedInkMetadata( std::unique_ptr<gfx::DelegatedInkMetadata> metadata) override; - gfx::Rect GetCurrentFramebufferDamage() const override; - void Reshape(const OutputSurface::ReshapeParams& reshape_params) override; - void EnsureMinNumberOfBuffers(int n) override; protected: bool CanPartialSwap() override; @@ -286,7 +281,6 @@ gfx::ColorSpace color_space; ResourceFormat format; gpu::Mailbox mailbox; - bool is_root; }; base::flat_map<AggregatedRenderPassId, RenderPassBacking> render_pass_backings_; @@ -432,10 +426,6 @@ bool UsingSkiaForDelegatedInk() const; uint32_t debug_tint_modulate_count_ = 0; bool use_real_color_space_for_stream_video_ = false; - - // Used to get mailboxes for the root render pass when - // capabilities().renderer_allocates_images = true. - std::unique_ptr<BufferQueue> buffer_queue_; }; } // 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 93b429c..f822f662 100644 --- a/components/viz/service/display_embedder/output_presenter_gl.cc +++ b/components/viz/service/display_embedder/output_presenter_gl.cc
@@ -8,6 +8,7 @@ #include <utility> #include <vector> +#include "base/check.h" #include "base/feature_list.h" #include "base/notreached.h" #include "base/threading/thread_task_runner_handle.h" @@ -427,10 +428,18 @@ absl::optional<SkColor> overlay_plane_data_color; if (overlay_plane_candidate.color) overlay_plane_data_color = overlay_plane_candidate.color->toSkColor(); + + // Access fence takes priority over composite fence iff it exists. + if (access) { + auto access_fence = TakeGpuFence(access->TakeAcquireFence()); + if (access_fence) { + DCHECK(!acquire_fence); + acquire_fence = std::move(access_fence); + } + } + gl_surface_->ScheduleOverlayPlane( - gl_image, - (access ? TakeGpuFence(access->TakeAcquireFence()) - : std::move(acquire_fence)), + gl_image, std::move(acquire_fence), gfx::OverlayPlaneData( overlay_plane_candidate.plane_z_order, overlay_plane_candidate.transform,
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 f70cc62b..f22da5c0 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
@@ -151,7 +151,6 @@ capabilities_.only_invalidates_damage_rect = false; capabilities_.number_of_buffers = 3; #if BUILDFLAG(IS_ANDROID) - capabilities_.renderer_allocates_images = true; if (::features::IncreaseBufferCountForHighFrameRate()) { capabilities_.number_of_buffers = 5; } @@ -210,7 +209,6 @@ } OutputPresenter::Image* SkiaOutputDeviceBufferQueue::GetNextImage() { - DCHECK(!capabilities_.renderer_allocates_images); CHECK(!available_images_.empty()); auto* image = available_images_.front(); available_images_.pop_front(); @@ -221,7 +219,6 @@ OutputPresenter::Image* image, gfx::GpuFenceHandle release_fence) { if (displayed_image_) { - DCHECK(!capabilities_.renderer_allocates_images); DCHECK_EQ(displayed_image_->skia_representation()->size(), image_size_); DCHECK_EQ(displayed_image_->GetPresentCount() > 1, displayed_image_ == image); @@ -265,7 +262,6 @@ MaybeScheduleBackgroundImage(); if (plane) { - DCHECK(!capabilities_.renderer_allocates_images); // 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. auto* image = @@ -435,7 +431,7 @@ pending_overlay_mailboxes_.emplace_back(mailbox); } - gfx::GpuFenceHandle acquire_fence; + std::unique_ptr<gfx::GpuFence> acquire_fence; if (context_state_->GrContextIsGL() && access && (access->representation()->usage() & gpu::SHARED_IMAGE_USAGE_RASTER_DELEGATED_COMPOSITING) && @@ -451,12 +447,11 @@ // Dup the fence - it must be inserted into each shared image before // ScopedReadAccess is created. - acquire_fence = current_frame_fence->GetGpuFenceHandle().Clone(); + acquire_fence = std::make_unique<gfx::GpuFence>( + current_frame_fence->GetGpuFenceHandle().Clone()); } - presenter_->ScheduleOverlayPlane( - overlay, access, - std::make_unique<gfx::GpuFence>(std::move(acquire_fence))); + presenter_->ScheduleOverlayPlane(overlay, access, std::move(acquire_fence)); } } @@ -721,9 +716,6 @@ } bool SkiaOutputDeviceBufferQueue::RecreateImages() { - if (capabilities_.renderer_allocates_images) { - return true; - } FreeAllSurfaces(); size_t number_to_allocate = capabilities_.supports_dynamic_frame_buffer_allocation @@ -774,7 +766,6 @@ SkSurface* SkiaOutputDeviceBufferQueue::BeginPaint( std::vector<GrBackendSemaphore>* end_semaphores) { - DCHECK(!capabilities_.renderer_allocates_images); primary_plane_waiting_on_paint_ = false; if (!current_image_) { @@ -788,13 +779,11 @@ } void SkiaOutputDeviceBufferQueue::EndPaint() { - DCHECK(!capabilities_.renderer_allocates_images); DCHECK(current_image_); current_image_->EndWriteSkia(); } bool SkiaOutputDeviceBufferQueue::EnsureMinNumberOfBuffers(size_t n) { - DCHECK(!capabilities_.renderer_allocates_images); DCHECK(capabilities_.supports_dynamic_frame_buffer_allocation); DCHECK_GT(n, 0u); DCHECK_LE(n, static_cast<size_t>(capabilities_.number_of_buffers));
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 604d3ff8..4299e06 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
@@ -224,10 +224,6 @@ return true; } - bool ScheduleCALayer(const ui::CARendererLayerParams& params) override { - return true; - } - gfx::SurfaceOrigin GetOrigin() const override { return gfx::SurfaceOrigin::kTopLeft; } @@ -338,7 +334,6 @@ void TearDownOnGpu() override { output_device_.reset(); shared_image_representation_factory_.reset(); - shared_image_factory_->DestroyAllSharedImages(true); shared_image_factory_.reset(); memory_tracker_.reset(); gl_surface_.reset(); @@ -360,14 +355,6 @@ Image* displayed_image() { return output_device_->displayed_image_; } - std::vector<gpu::Mailbox> pending_overlay_mailboxes() { - return output_device_->pending_overlay_mailboxes_; - } - - std::vector<gpu::Mailbox> committed_overlay_mailboxes() { - return output_device_->committed_overlay_mailboxes_; - } - base::circular_deque<std::unique_ptr< SkiaOutputDeviceBufferQueue::CancelableSwapCompletionCallback>>& swap_completion_callbacks() { @@ -457,11 +444,8 @@ } void FirstReshape() { - // If the renderer allocates images we shouldn't call - // EnsureMinNumberOfBuffers. if (output_device_->capabilities() - .supports_dynamic_frame_buffer_allocation && - !output_device_->capabilities().renderer_allocates_images) { + .supports_dynamic_frame_buffer_allocation) { output_device_->EnsureMinNumberOfBuffers( output_device_->capabilities().number_of_buffers); } @@ -469,20 +453,6 @@ gfx::OVERLAY_TRANSFORM_NONE); } - gpu::Mailbox MakeOverlayMailbox() { - gpu::Mailbox mailbox = gpu::Mailbox::GenerateForSharedImage(); - bool success = shared_image_factory_->CreateSharedImage( - mailbox, ResourceFormat::RGBA_8888, gfx::Size(1000, 1000), - gfx::ColorSpace::CreateSRGB(), - GrSurfaceOrigin::kTopLeft_GrSurfaceOrigin, - SkAlphaType::kPremul_SkAlphaType, gpu::kNullSurfaceHandle, - gpu::SHARED_IMAGE_USAGE_SCANOUT); - CHECK(success); - - shared_image_representation_factory_->ProduceOverlay(mailbox)->SetCleared(); - return mailbox; - } - protected: std::unique_ptr<SkiaOutputSurfaceDependency> dependency_; scoped_refptr<MockGLSurfaceAsync> gl_surface_; @@ -497,12 +467,6 @@ namespace { TEST_F_GPU(SkiaOutputDeviceBufferQueueTest, MultipleGetCurrentBufferCalls) { - if (output_device_->capabilities().renderer_allocates_images) { - GTEST_SKIP_( - "Tests behaviour not exercised when the renderer allocates the " - "images."); - } - // Check that multiple bind calls do not create or change surfaces. FirstReshape(); @@ -519,12 +483,6 @@ } TEST_F_GPU(SkiaOutputDeviceBufferQueueTest, CheckDoubleBuffering) { - if (output_device_->capabilities().renderer_allocates_images) { - GTEST_SKIP_( - "Tests behaviour not exercised when the renderer allocates the " - "images."); - } - // Check buffer flow through double buffering path. FirstReshape(); const int kNumBuffers = CountBuffers(); @@ -566,12 +524,6 @@ } TEST_F_GPU(SkiaOutputDeviceBufferQueueTest, CheckTripleBuffering) { - if (output_device_->capabilities().renderer_allocates_images) { - GTEST_SKIP_( - "Tests behaviour not exercised when the renderer allocates the " - "images."); - } - // Check buffer flow through triple buffering path. FirstReshape(); const int kNumBuffers = CountBuffers(); @@ -607,12 +559,6 @@ } TEST_F_GPU(SkiaOutputDeviceBufferQueueTest, CheckEmptySwap) { - if (output_device_->capabilities().renderer_allocates_images) { - GTEST_SKIP_( - "Tests behaviour not exercised when the renderer allocates the " - "images."); - } - // Check empty swap flow, in which the damage is empty and BindFramebuffer // might not be called. FirstReshape(); @@ -654,12 +600,6 @@ } TEST_F_GPU(SkiaOutputDeviceBufferQueueTest, NoPrimaryPlane) { - if (output_device_->capabilities().renderer_allocates_images) { - GTEST_SKIP_( - "Tests behaviour not exercised when the renderer allocates the " - "images."); - } - // Check empty swap flow, in which the damage is empty and BindFramebuffer // might not be called. FirstReshape(); @@ -708,12 +648,6 @@ } TEST_F_GPU(SkiaOutputDeviceBufferQueueTest, CheckCorrectBufferOrdering) { - if (output_device_->capabilities().renderer_allocates_images) { - GTEST_SKIP_( - "Tests behaviour not exercised when the renderer allocates the " - "images."); - } - FirstReshape(); const int kNumBuffers = CountBuffers(); const int kSwapCount = kNumBuffers * 2; @@ -740,12 +674,6 @@ } TEST_F_GPU(SkiaOutputDeviceBufferQueueTest, ReshapeWithInFlightSurfaces) { - if (output_device_->capabilities().renderer_allocates_images) { - GTEST_SKIP_( - "Tests behaviour not exercised when the renderer allocates the " - "images."); - } - FirstReshape(); const size_t kNumBuffers = available_images().size(); @@ -782,12 +710,6 @@ } TEST_F_GPU(SkiaOutputDeviceBufferQueueTest, BufferIsInOrder) { - if (output_device_->capabilities().renderer_allocates_images) { - GTEST_SKIP_( - "Tests behaviour not exercised when the renderer allocates the " - "images."); - } - FirstReshape(); int kNumBuffers = available_images().size(); @@ -871,58 +793,6 @@ : images()[displayed_index % kNumBuffers].get()); } -SkiaOutputSurface::OverlayList MakeOverlayList( - std::vector<gpu::Mailbox> mailboxes) { - SkiaOutputSurface::OverlayList overlay_list; - for (auto& mailbox : mailboxes) { - OutputPresenter::OverlayPlaneCandidate overlay; - overlay.mailbox = mailbox; -#if BUILDFLAG(IS_APPLE) - overlay.shared_state = base::MakeRefCounted<CALayerOverlaySharedState>(); -#endif // BUILDFLAG(IS_APPLE) - overlay_list.push_back(overlay); - } - return overlay_list; -} - -TEST_F_GPU(SkiaOutputDeviceBufferQueueTest, ScheduleOverlaysNoPrimaryPlane) { - FirstReshape(); - - // Make 3 primary plane buffers - std::vector<gpu::Mailbox> mailboxes; - for (int i = 0; i < 3; ++i) { - gpu::Mailbox mailbox = MakeOverlayMailbox(); - mailboxes.push_back(mailbox); - } - - // Do a swap and commit overlay planes with no primary plane. - for (size_t i = 0; i < 6; ++i) { - // Repeat each mailbox for 2 frames. - auto mailbox = mailboxes[i / 2]; - - ScheduleNoPrimaryPlane(); - output_device_->ScheduleOverlays(MakeOverlayList({mailbox})); - - EXPECT_EQ(current_image(), nullptr); - EXPECT_EQ(displayed_image(), nullptr); - EXPECT_THAT(pending_overlay_mailboxes(), testing::ElementsAre(mailbox)); - - // Do a swap then a commit for each overlay mailbox. - if ((i % 2) == 0) { - SwapBuffers(); - } else if ((i % 2) == 1) { - CommitOverlayPlanes(); - } - - EXPECT_EQ(current_image(), nullptr); - EXPECT_EQ(displayed_image(), nullptr); - EXPECT_THAT(pending_overlay_mailboxes(), testing::IsEmpty()); - EXPECT_THAT(committed_overlay_mailboxes(), testing::ElementsAre(mailbox)); - - PageFlipComplete(); - } -} - } // namespace class SkiaOutputDeviceSwapSkippedTest : public SkiaOutputDeviceBufferQueueTest { @@ -959,12 +829,6 @@ } TEST_F_GPU(SkiaOutputDeviceSwapSkippedTest, SkipWithoutPending) { - if (output_device_->capabilities().renderer_allocates_images) { - GTEST_SKIP_( - "Tests behaviour not exercised when the renderer allocates the " - "images."); - } - // Check that skipping a SwapBuffers without any pending swaps immediately // invokes the complete/presented callbacks. FirstReshape(); @@ -977,12 +841,6 @@ } TEST_F_GPU(SkiaOutputDeviceSwapSkippedTest, SkipWithPending) { - if (output_device_->capabilities().renderer_allocates_images) { - GTEST_SKIP_( - "Tests behaviour not exercised when the renderer allocates the " - "images."); - } - // Check that skipping a SwapBuffers with existing pending swaps waits for // the pending swaps to complete before invoking the complete/presented // callbacks.
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl.cc b/components/viz/service/display_embedder/skia_output_surface_impl.cc index 10dd556..d51fd17 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl.cc +++ b/components/viz/service/display_embedder/skia_output_surface_impl.cc
@@ -504,11 +504,8 @@ void SkiaOutputSurfaceImpl::SwapBuffers(OutputSurfaceFrame frame) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK(!current_paint_); - // If the renderer allocates images then `current_buffer_modified_` isn't - // updated, and we can't make this check. - DCHECK(capabilities_.renderer_allocates_images || - ((!frame.sub_buffer_rect || !frame.sub_buffer_rect->IsEmpty()) == - current_buffer_modified_)); + DCHECK_EQ(!frame.sub_buffer_rect || !frame.sub_buffer_rect->IsEmpty(), + current_buffer_modified_); has_set_draw_rectangle_for_frame_ = false; @@ -590,7 +587,7 @@ ResourceFormatToClosestSkColorType(/*gpu_compositing=*/true, format); SkSurfaceCharacterization characterization = CreateSkSurfaceCharacterization( surface_size, color_type, mipmap, std::move(color_space), - /*is_root_render_pass=*/false, is_overlay); + /*is_root_render_pass=*/false, /*is_overlay=*/is_overlay); if (!characterization.isValid()) return nullptr; @@ -749,6 +746,7 @@ } void SkiaOutputSurfaceImpl::CopyOutput( + AggregatedRenderPassId id, const copy_output::RenderPassGeometry& geometry, const gfx::ColorSpace& color_space, std::unique_ptr<CopyOutputRequest> request, @@ -763,11 +761,12 @@ } } - auto callback = base::BindOnce(&SkiaOutputSurfaceImplOnGpu::CopyOutput, - base::Unretained(impl_on_gpu_.get()), geometry, - color_space, std::move(request), mailbox); + auto callback = + base::BindOnce(&SkiaOutputSurfaceImplOnGpu::CopyOutput, + base::Unretained(impl_on_gpu_.get()), id, geometry, + color_space, std::move(request), mailbox); EnqueueGpuTask(std::move(callback), std::move(resource_sync_tokens_), - /*make_current=*/true, /*need_framebuffer=*/mailbox.IsZero()); + /*make_current=*/true, /*need_framebuffer=*/!id); } void SkiaOutputSurfaceImpl::ScheduleOverlays( @@ -843,9 +842,7 @@ capabilities_.damage_area_from_skia_output_device) { use_damage_area_from_skia_output_device_ = true; damage_of_current_buffer_ = gfx::Rect(); - } else if (!capabilities_.renderer_allocates_images) { - // We don't need a damage tracker if SkiaRenderer allocates the images, - // because it will keep track of the damage as well. + } else { frame_buffer_damage_tracker_.emplace(capabilities_.number_of_buffers); } }
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl.h b/components/viz/service/display_embedder/skia_output_surface_impl.h index 52eea9d..f7ae89f 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl.h +++ b/components/viz/service/display_embedder/skia_output_surface_impl.h
@@ -136,7 +136,8 @@ void ScheduleOverlays(OverlayList overlays, std::vector<gpu::SyncToken> sync_tokens) override; - void CopyOutput(const copy_output::RenderPassGeometry& geometry, + void CopyOutput(AggregatedRenderPassId id, + const copy_output::RenderPassGeometry& geometry, const gfx::ColorSpace& color_space, std::unique_ptr<CopyOutputRequest> request, const gpu::Mailbox& mailbox) 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 e02e644..748baec 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
@@ -1379,6 +1379,7 @@ } void SkiaOutputSurfaceImplOnGpu::CopyOutput( + AggregatedRenderPassId id, const copy_output::RenderPassGeometry& geometry, const gfx::ColorSpace& color_space, std::unique_ptr<CopyOutputRequest> request, @@ -1391,7 +1392,7 @@ if (context_is_lost_) return; - bool from_framebuffer = mailbox.IsZero(); + bool from_framebuffer = !id; DCHECK(scoped_output_device_paint_ || !from_framebuffer); SkSurface* surface;
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h index b6dc73fe..47a81e17 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h +++ b/components/viz/service/display_embedder/skia_output_surface_impl_on_gpu.h
@@ -182,7 +182,8 @@ void RemoveRenderPassResource( std::vector<AggregatedRenderPassId> ids, std::vector<std::unique_ptr<ImageContextImpl>> image_contexts); - void CopyOutput(const copy_output::RenderPassGeometry& geometry, + void CopyOutput(AggregatedRenderPassId id, + const copy_output::RenderPassGeometry& geometry, const gfx::ColorSpace& color_space, std::unique_ptr<CopyOutputRequest> request, const gpu::Mailbox& mailbox);
diff --git a/components/viz/service/display_embedder/skia_output_surface_impl_unittest.cc b/components/viz/service/display_embedder/skia_output_surface_impl_unittest.cc index 2b94bff..8d69440 100644 --- a/components/viz/service/display_embedder/skia_output_surface_impl_unittest.cc +++ b/components/viz/service/display_embedder/skia_output_surface_impl_unittest.cc
@@ -173,8 +173,8 @@ geometry.sampling_bounds = output_rect; geometry.readback_offset = gfx::Vector2d(0, 0); - output_surface_->CopyOutput(geometry, color_space, std::move(request), - gpu::Mailbox()); + output_surface_->CopyOutput(AggregatedRenderPassId{0}, geometry, color_space, + std::move(request), gpu::Mailbox()); output_surface_->SwapBuffersSkipped(kSurfaceRect); output_surface_->Flush(); BlockMainThread(); @@ -248,8 +248,8 @@ geometry.readback_offset = gfx::Vector2d(0, 0); PaintRootRenderPass(kSurfaceRect, base::DoNothing(), base::DoNothing()); - output_surface_->CopyOutput(geometry, color_space, std::move(request), - gpu::Mailbox()); + output_surface_->CopyOutput(AggregatedRenderPassId{0}, geometry, color_space, + std::move(request), gpu::Mailbox()); output_surface_->SwapBuffersSkipped(kSurfaceRect); output_surface_->Flush(); run_loop.Run(); @@ -289,8 +289,8 @@ geometry.readback_offset = gfx::Vector2d(0, 0); PaintRootRenderPass(kSurfaceRect, base::DoNothing(), base::DoNothing()); - output_surface_->CopyOutput(geometry, color_space, std::move(request), - gpu::Mailbox()); + output_surface_->CopyOutput(AggregatedRenderPassId{0}, geometry, color_space, + std::move(request), gpu::Mailbox()); output_surface_->SwapBuffersSkipped(kSurfaceRect); output_surface_->Flush(); run_loop.Run();
diff --git a/components/viz/test/fake_skia_output_surface.cc b/components/viz/test/fake_skia_output_surface.cc index eca65b9..eea760d 100644 --- a/components/viz/test/fake_skia_output_surface.cc +++ b/components/viz/test/fake_skia_output_surface.cc
@@ -171,8 +171,6 @@ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); // Make sure there is no unsubmitted PaintFrame or PaintRenderPass. DCHECK_EQ(current_render_pass_id_, AggregatedRenderPassId{0u}); - - mailbox_pass_ids_.insert_or_assign(mailbox, id); auto& sk_surface = sk_surfaces_[id]; if (!sk_surface) { @@ -229,30 +227,16 @@ DCHECK(it != sk_surfaces_.end()); sk_surfaces_.erase(it); } - - // Erase mailbox mappings that exist for these ids. - base::EraseIf(mailbox_pass_ids_, [&ids](auto& entry) { - for (auto& id : ids) { - if (id == entry.second) { - return true; - } - } - return false; - }); } void FakeSkiaOutputSurface::CopyOutput( + AggregatedRenderPassId id, const copy_output::RenderPassGeometry& geometry, const gfx::ColorSpace& color_space, std::unique_ptr<CopyOutputRequest> request, const gpu::Mailbox& mailbox) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - auto it = mailbox_pass_ids_.find(mailbox); - DCHECK(mailbox.IsZero() || it != mailbox_pass_ids_.end()); - AggregatedRenderPassId id = - mailbox.IsZero() ? AggregatedRenderPassId(0) : it->second; - DCHECK(sk_surfaces_.find(id) != sk_surfaces_.end()); auto* surface = sk_surfaces_[id].get(); if (request->result_format() != CopyOutputResult::Format::RGBA ||
diff --git a/components/viz/test/fake_skia_output_surface.h b/components/viz/test/fake_skia_output_surface.h index accc3aa2..71bfd0c 100644 --- a/components/viz/test/fake_skia_output_surface.h +++ b/components/viz/test/fake_skia_output_surface.h
@@ -91,7 +91,8 @@ #if BUILDFLAG(IS_WIN) void SetEnableDCLayers(bool enable) override {} #endif - void CopyOutput(const copy_output::RenderPassGeometry& geometry, + void CopyOutput(AggregatedRenderPassId id, + const copy_output::RenderPassGeometry& geometry, const gfx::ColorSpace& color_space, std::unique_ptr<CopyOutputRequest> request, const gpu::Mailbox& mailbox) override; @@ -168,9 +169,6 @@ // SkSurfaces for render passes, sk_surfaces_[0] is the root surface. base::flat_map<AggregatedRenderPassId, sk_sp<SkSurface>> sk_surfaces_; - // Map from mailboxes to render pass ids. - base::flat_map<gpu::Mailbox, AggregatedRenderPassId> mailbox_pass_ids_; - // Most recent delegated ink metadata to have arrived via a SwapBuffers call. std::unique_ptr<gfx::DelegatedInkMetadata> last_delegated_ink_metadata_;
diff --git a/components/webrtc/thread_wrapper.cc b/components/webrtc/thread_wrapper.cc index f35c3d41..590fc0f 100644 --- a/components/webrtc/thread_wrapper.cc +++ b/components/webrtc/thread_wrapper.cc
@@ -159,6 +159,10 @@ coalesced_tasks_.Clear(); } +rtc::SocketServer* ThreadWrapper::SocketServer() { + return rtc::Thread::socketserver(); +} + void ThreadWrapper::WillDestroyCurrentMessageLoop() { delete this; }
diff --git a/components/webrtc/thread_wrapper.h b/components/webrtc/thread_wrapper.h index 86ef52aa..d94adfa 100644 --- a/components/webrtc/thread_wrapper.h +++ b/components/webrtc/thread_wrapper.h
@@ -86,6 +86,8 @@ // need to call Send() for other threads. void set_send_allowed(bool allowed) { send_allowed_ = allowed; } + rtc::SocketServer* SocketServer(); + // CurrentThread::DestructionObserver implementation. void WillDestroyCurrentMessageLoop() override;
diff --git a/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.cc b/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.cc index f457832..1d04457 100644 --- a/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.cc +++ b/content/browser/aggregation_service/aggregation_service_network_fetcher_impl.cc
@@ -224,14 +224,13 @@ base::Time fetch_time, base::Time expiry_time, data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { + if (!result.has_value()) { OnError(url, std::move(callback), FetchStatus::kJsonParseError, - /*error_msg=*/*result.error); + /*error_msg=*/result.error()); return; } - std::vector<PublicKey> keys = - aggregation_service::GetPublicKeys(result.value.value()); + std::vector<PublicKey> keys = aggregation_service::GetPublicKeys(*result); if (keys.empty()) { OnError(url, std::move(callback), FetchStatus::kInvalidKeyError, /*error_msg=*/"Public key parsing failed");
diff --git a/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc b/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc index 0effeead..ef5b212 100644 --- a/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc +++ b/content/browser/attribution_reporting/attribution_data_host_manager_impl.cc
@@ -719,9 +719,9 @@ registrations.pending_source_data--; absl::optional<StorableSource> source; - if (result.value && result.value->is_dict()) { + if (result.has_value() && result->is_dict()) { source = ParseSourceRegistration( - std::move(result.value->GetDict()), /*source_time=*/base::Time::Now(), + std::move(result->GetDict()), /*source_time=*/base::Time::Now(), std::move(reporting_origin), registrations.source_origin, AttributionSourceType::kNavigation); }
diff --git a/content/browser/data_decoder_browsertest.cc b/content/browser/data_decoder_browsertest.cc index 5ba0d868..8bd04564 100644 --- a/content/browser/data_decoder_browsertest.cc +++ b/content/browser/data_decoder_browsertest.cc
@@ -317,8 +317,9 @@ {{0x1, 0x1, 0x1, 0x1, 0x1, 0x1}}, base::BindOnce( [](bool* got_callback, base::ScopedClosureRunner quit_closure_runner, - data_decoder::DataDecoder::ResultOrError<mojo_base::BigBuffer> - result) { *got_callback = true; }, + base::expected<mojo_base::BigBuffer, std::string> result) { + *got_callback = true; + }, // Pass the quit closure as a ScopedClosureRunner, so that the loop // is quit if the callback is destroyed un-run or after it runs. &got_callback, base::ScopedClosureRunner(run_loop.QuitClosure())));
diff --git a/content/browser/devtools/protocol/page_handler.cc b/content/browser/devtools/protocol/page_handler.cc index a479ebe..0bc2a5a 100644 --- a/content/browser/devtools/protocol/page_handler.cc +++ b/content/browser/devtools/protocol/page_handler.cc
@@ -1499,8 +1499,6 @@ case PrerenderHost::FinalStatus::kEmbedderTriggeredAndSameOriginRedirected: return Page::PrerenderFinalStatusEnum:: EmbedderTriggeredAndSameOriginRedirected; - case PrerenderHost::FinalStatus::kFailToGetMemoryUsage: - return Page::PrerenderFinalStatusEnum::FailToGetMemoryUsage; case PrerenderHost::FinalStatus::kInProgressNavigation: return Page::PrerenderFinalStatusEnum::InProgressNavigation; case PrerenderHost::FinalStatus::kInvalidSchemeNavigation: @@ -1515,8 +1513,6 @@ return Page::PrerenderFinalStatusEnum::MainFrameNavigation; case PrerenderHost::FinalStatus::kMaxNumOfRunningPrerendersExceeded: return Page::PrerenderFinalStatusEnum::MaxNumOfRunningPrerendersExceeded; - case PrerenderHost::FinalStatus::kMemoryLimitExceeded: - return Page::PrerenderFinalStatusEnum::MemoryLimitExceeded; case PrerenderHost::FinalStatus::kMixedContent: return Page::PrerenderFinalStatusEnum::MixedContent; case PrerenderHost::FinalStatus::kMojoBinderPolicy:
diff --git a/content/browser/interest_group/auction_runner.cc b/content/browser/interest_group/auction_runner.cc index 4e7fa9ab..290d6a3a 100644 --- a/content/browser/interest_group/auction_runner.cc +++ b/content/browser/interest_group/auction_runner.cc
@@ -617,15 +617,17 @@ // Randomize order of interest groups with lowest allowed priority. This // effectively performs a random sample among interest groups with the same // priority. - double min_priority = - interest_groups.back().interest_group.priority.value(); - auto rand_begin = std::lower_bound( - interest_groups.begin(), interest_groups.end(), min_priority, cmp); - auto rand_end = - std::upper_bound(rand_begin, interest_groups.end(), min_priority, cmp); - base::RandomShuffle(rand_begin, rand_end); - interest_groups.resize(std::min(interest_groups.size(), size_limit)); - + size_limit = std::min(interest_groups.size(), size_limit); + if (size_limit > 0) { + double min_priority = + interest_groups[size_limit - 1].interest_group.priority.value(); + auto rand_begin = std::lower_bound( + interest_groups.begin(), interest_groups.end(), min_priority, cmp); + auto rand_end = std::upper_bound(rand_begin, interest_groups.end(), + min_priority, cmp); + base::RandomShuffle(rand_begin, rand_end); + } + interest_groups.resize(size_limit); for (auto& bidder : interest_groups) { // Report freshness metrics. if (bidder.interest_group.daily_update_url.has_value()) {
diff --git a/content/browser/interest_group/interest_group_browsertest.cc b/content/browser/interest_group/interest_group_browsertest.cc index d943c5a..1ee19a7 100644 --- a/content/browser/interest_group/interest_group_browsertest.cc +++ b/content/browser/interest_group/interest_group_browsertest.cc
@@ -858,11 +858,22 @@ } bool HasServerSeenUrl(const GURL& url) { + GURL::Replacements replacements; + replacements.SetHostStr("127.0.0.1"); + GURL look_for_url = url.ReplaceComponents(replacements); base::AutoLock auto_lock(requests_lock_); - return received_https_test_server_requests_.find(url) != + return received_https_test_server_requests_.find(look_for_url) != received_https_test_server_requests_.end(); } + bool HasServerSeenUrls(const std::vector<GURL>& urls) { + for (const auto& url : urls) { + if (!HasServerSeenUrl(url)) + return false; + } + return true; + } + void ExpectNotAllowedToJoinOrUpdateInterestGroup( const url::Origin& origin, RenderFrameHost* execution_target) { EXPECT_EQ( @@ -4330,8 +4341,8 @@ // Seller and winning bidder should get reports, and other bidders shouldn't // get reports. WaitForURL(https_server_->GetURL("/echoall?report_seller")); - WaitForURL( - https_server_->GetURL("/echoall?report_bidder_stop_bidding_after_win")); + WaitForURL(https_server_->GetURL( + "/echoall?report_bidder_stop_bidding_after_win&cars")); base::AutoLock auto_lock(requests_lock_); EXPECT_FALSE(base::Contains(received_https_test_server_requests_, https_server_->GetURL("/echoall?report_bidder"))); @@ -4731,6 +4742,69 @@ }); } +IN_PROC_BROWSER_TEST_F(InterestGroupBrowserTest, + RunAdAuctionGroupLimitRandomized) { + GURL test_url = https_server_->GetURL("a.test", "/page_with_iframe.html"); + ASSERT_TRUE(NavigateToURL(shell(), test_url)); + url::Origin test_origin = url::Origin::Create(test_url); + GURL ad_url = https_server_->GetURL("c.test", "/echo?render_ad"); + + std::vector<std::pair<std::string, double>> interest_groups = { + {"cars", 3}, + {"motorcycles", 2}, + {"bikes", 2}, + {"shoes", 1}, + {"scooters", 2}}; + for (const auto& g : interest_groups) { + EXPECT_EQ( + kSuccess, + JoinInterestGroupAndVerify(blink::InterestGroup( + /*expiry=*/base::Time(), + /*owner=*/test_origin, + /*name=*/g.first, + /*priority=*/g.second, + /*execution_mode=*/ + blink::InterestGroup::ExecutionMode::kCompatibilityMode, + /*bidding_url=*/ + https_server_->GetURL( + "a.test", + "/interest_group/bidding_logic_stop_bidding_after_win.js"), + /*bidding_wasm_helper_url=*/absl::nullopt, + /*daily_update_url=*/absl::nullopt, + /*trusted_bidding_signals_url=*/absl::nullopt, + /*trusted_bidding_signals_keys=*/absl::nullopt, + /*user_bidding_signals=*/absl::nullopt, + /*ads=*/{{{ad_url, /*metadata=*/absl::nullopt}}}, + /*ad_components=*/absl::nullopt))); + } + std::string auction_config = JsReplace( + R"({ + seller: $1, + decisionLogicUrl: $2, + interestGroupBuyers: [$1], + perBuyerGroupLimits: {'*': 3}, + })", + test_origin, + https_server_->GetURL("a.test", "/interest_group/decision_logic.js")); + + std::vector<GURL> expected_urls = { + https_server_->GetURL( + "a.test", "/echoall?report_bidder_stop_bidding_after_win&cars"), + https_server_->GetURL( + "a.test", + "/echoall?report_bidder_stop_bidding_after_win&motorcycles"), + https_server_->GetURL( + "a.test", "/echoall?report_bidder_stop_bidding_after_win&bikes"), + https_server_->GetURL( + "a.test", "/echoall?report_bidder_stop_bidding_after_win&scooters"), + }; + while (!HasServerSeenUrls(expected_urls)) { + EvalJsResult ignored = RunAuctionAndWait(auction_config); + } + EXPECT_FALSE(HasServerSeenUrl(https_server_->GetURL( + "a.test", "/echoall?report_bidder_stop_bidding_after_win&shoes"))); +} + IN_PROC_BROWSER_TEST_F(InterestGroupBrowserTest, RunAdAuctionMultipleAuctions) { GURL test_url = https_server_->GetURL("a.test", "/echo"); ASSERT_TRUE(NavigateToURL(shell(), test_url)); @@ -5031,8 +5105,8 @@ // First auction's seller's ReportResult() URL. {https_server_->GetURL("b.test", "/echoall?report_seller"), origin_b}, // First auction's winning bidder's ReportWin() URL. - {https_server_->GetURL("a.test", - "/echoall?report_bidder_stop_bidding_after_win"), + {https_server_->GetURL( + "a.test", "/echoall?report_bidder_stop_bidding_after_win&cars"), origin_b}, // First auction's debugging loss report URL from bidder. {https_server_->GetURL("b.test", "/echo?bidder_debug_report_loss/shoes"),
diff --git a/content/browser/interest_group/interest_group_permissions_checker.cc b/content/browser/interest_group/interest_group_permissions_checker.cc index be4fe7f..f40bd72 100644 --- a/content/browser/interest_group/interest_group_permissions_checker.cc +++ b/content/browser/interest_group/interest_group_permissions_checker.cc
@@ -186,15 +186,15 @@ void InterestGroupPermissionsChecker::OnJsonParsed( ActiveRequestMap::iterator active_request, data_decoder::DataDecoder::ValueOrError result) { - if (result.error || !result.value->is_dict()) { + if (!result.has_value() || !result->is_dict()) { OnActiveRequestComplete(active_request, Permissions()); return; } absl::optional<bool> can_join = - result.value->GetDict().FindBool("joinAdInterestGroup"); + result->GetDict().FindBool("joinAdInterestGroup"); absl::optional<bool> can_leave = - result.value->GetDict().FindBool("leaveAdInterestGroup"); + result->GetDict().FindBool("leaveAdInterestGroup"); Permissions permissions{/*can_join=*/can_join.value_or(false), /*can_leave=*/can_leave.value_or(false)}; OnActiveRequestComplete(active_request, permissions);
diff --git a/content/browser/interest_group/interest_group_update_manager.cc b/content/browser/interest_group/interest_group_update_manager.cc index 399b444..5cb38c4 100644 --- a/content/browser/interest_group/interest_group_update_manager.cc +++ b/content/browser/interest_group/interest_group_update_manager.cc
@@ -200,10 +200,10 @@ const std::string& name, const data_decoder::DataDecoder::ValueOrError& result) { // TODO(crbug.com/1186444): Report to devtools. - if (result.error) { + if (!result.has_value()) { return absl::nullopt; } - const base::Value::Dict* dict = result.value->GetIfDict(); + const base::Value::Dict* dict = result->GetIfDict(); if (!dict) { return absl::nullopt; }
diff --git a/content/browser/preloading/prerender/prerender_browsertest.cc b/content/browser/preloading/prerender/prerender_browsertest.cc index 3b05b52..66929c2 100644 --- a/content/browser/preloading/prerender/prerender_browsertest.cc +++ b/content/browser/preloading/prerender/prerender_browsertest.cc
@@ -4859,132 +4859,31 @@ PrerenderHost::FinalStatus::kTriggerDestroyed); } -class MultiplePrerendersBrowserTest : public PrerenderBrowserTest { - public: - MultiplePrerendersBrowserTest() { - feature_list_.InitWithFeaturesAndParameters( - {{blink::features::kPrerender2, - {{"max_num_of_running_prerenders", - base::NumberToString(MaxNumOfRunningPrerenders())}}}, - {blink::features::kPrerender2MemoryControls, - // A value 100 allows prerenderings regardless of the current memory - // usage. - {{"acceptable_percent_of_system_memory", "100"}, - // Allow prerendering on low-end trybot devices so that the test can - // run on any bots. - {"memory_threshold_in_mb", "0"}}}}, - {}); - } - - int MaxNumOfRunningPrerenders() const { return 4; } - - private: - base::test::ScopedFeatureList feature_list_; -}; - -class MultiplePrerendersWithLimitedMemoryBrowserTest - : public MultiplePrerendersBrowserTest { - public: - MultiplePrerendersWithLimitedMemoryBrowserTest() { - feature_list_.InitWithFeaturesAndParameters( - {{blink::features::kPrerender2, - {{"max_num_of_running_prerenders", - base::NumberToString(MaxNumOfRunningPrerenders())}}}, - {blink::features::kPrerender2MemoryControls, - // A value 0 doesn't allow any prerendering. - {{"acceptable_percent_of_system_memory", "0"}}}}, - {}); - } - - private: - base::test::ScopedFeatureList feature_list_; -}; - -// Tests that PrerenderHostRegistry only starts prerender speculation rules -// up to `max_num_of_running_prerenders` defined by a Finch param. -IN_PROC_BROWSER_TEST_F(MultiplePrerendersBrowserTest, - AddSpeculationRulesMultipleTimes) { +// Tests that PrerenderHostRegistry only starts prerendering for the first +// prerender speculation rule it receives. +IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, AddSpeculationRulesMultipleTimes) { + base::HistogramTester histogram_tester; const GURL kInitialUrl = GetUrl("/empty.html"); + const GURL kFirstPrerenderingUrl = GetUrl("/empty.html?prerender1"); + const GURL kSecondPrerenderingUrl = GetUrl("/empty.html?prerender2"); + + // Add the first prerender speculation rule; it should trigger prerendering + // successfully. ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl)); - - for (int i = 0; i < MaxNumOfRunningPrerenders(); i++) { - GURL prerendering_url = - GetUrl("/empty.html?prerender" + base::NumberToString(i)); - - // Add a prerender speculation rule; it should trigger prerendering - // successfully. - AddPrerender(prerendering_url); - } + AddPrerender(kFirstPrerenderingUrl); + histogram_tester.ExpectBucketCount( + "Prerender.Experimental.PrerenderHostFinalStatus.SpeculationRule", + PrerenderHost::FinalStatus::kMaxNumOfRunningPrerendersExceeded, 0); test::PrerenderHostRegistryObserver registry_observer(*web_contents_impl()); - const GURL kExceededPrerenderingUrl = - GetUrl("/empty.html?exceeded-prerender"); // Add a new prerender speculation rule. Since PrerenderHostRegistry limits - // the number of running prerenders to `max_num_of_running_prerenders` defined - // by a Finch param, this rule should not be applied. - AddPrerenderAsync(kExceededPrerenderingUrl); - registry_observer.WaitForTrigger(kExceededPrerenderingUrl); - EXPECT_FALSE(HasHostForUrl(kExceededPrerenderingUrl)); - + // the number of running prerenders to one, this rule should not be applied. + AddPrerenderAsync(kSecondPrerenderingUrl); + registry_observer.WaitForTrigger(kSecondPrerenderingUrl); + EXPECT_FALSE(HasHostForUrl(kSecondPrerenderingUrl)); ExpectFinalStatusForSpeculationRule( PrerenderHost::FinalStatus::kMaxNumOfRunningPrerendersExceeded); - - const GURL kEmbedderTriggeredPrerenderingUrl = - GetUrl("/empty.html?embedder-triggered-prerender"); - // Start an embedder triggered prerendering; this should be triggered - // successfully because its limitation is independent from speculation rules. - std::unique_ptr<PrerenderHandle> prerender_handle = - web_contents_impl()->StartPrerendering( - kEmbedderTriggeredPrerenderingUrl, PrerenderTriggerType::kEmbedder, - "EmbedderSuffixForTest", - ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | - ui::PAGE_TRANSITION_FROM_ADDRESS_BAR)); - EXPECT_TRUE(prerender_handle); -} - -// Tests that PrerenderHostRegistry can't start any prerenderings if the -// acceptable percent of the system memory is set to 0. -IN_PROC_BROWSER_TEST_F(MultiplePrerendersWithLimitedMemoryBrowserTest, - AddSpeculationRulesMultipleTimes) { - base::HistogramTester histogram_tester; - const GURL kInitialUrl = GetUrl("/empty.html"); - ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl)); - - for (int i = 0; i < MaxNumOfRunningPrerenders(); i++) { - const GURL kPrerenderingUrl = - GetUrl("/empty.html?prerender" + base::NumberToString(i)); - test::PrerenderHostObserver host_observer(*web_contents(), - kPrerenderingUrl); - - // Add a prerender speculation rule; it should be destroyed due to the - // limited memory resource. - AddPrerenderAsync(kPrerenderingUrl); - host_observer.WaitForDestroyed(); - } - - int count_of_memory_limit_exceeded = histogram_tester.GetBucketCount( - "Prerender.Experimental.PrerenderHostFinalStatus.SpeculationRule", - PrerenderHost::FinalStatus::kMemoryLimitExceeded); - // For an unknown reason, requesting the private memory footprint can fail. - // This test allows the failure of getting the memory dump. - int count_of_no_memory_dump = histogram_tester.GetBucketCount( - "Prerender.Experimental.PrerenderHostFinalStatus.SpeculationRule", - PrerenderHost::FinalStatus::kFailToGetMemoryUsage); - EXPECT_EQ(MaxNumOfRunningPrerenders(), - count_of_memory_limit_exceeded + count_of_no_memory_dump); - - const GURL kEmbedderTriggeredPrerenderingUrl = - GetUrl("/empty.html?embedder-triggered-prerender"); - // Start an embedder triggered prerendering; this should be triggered - // successfully because its limitation is independent from speculation rules. - std::unique_ptr<PrerenderHandle> prerender_handle = - web_contents_impl()->StartPrerendering( - kEmbedderTriggeredPrerenderingUrl, PrerenderTriggerType::kEmbedder, - "EmbedderSuffixForTest", - ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | - ui::PAGE_TRANSITION_FROM_ADDRESS_BAR)); - EXPECT_TRUE(prerender_handle); } // Tests that PrerenderHostRegistry can hold up to two prerendering for the @@ -4997,8 +4896,8 @@ const GURL kThirdPrerenderingUrl = GetUrl("/empty.html?prerender3"); ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl)); - // Start an embedder triggered prerendering; this should be triggered - // successfully. + // Start prerendering by embedder triggered prerendering; this should be + // trigger successfully. std::unique_ptr<PrerenderHandle> prerender_handle1 = web_contents_impl()->StartPrerendering( kFirstPrerenderingUrl, PrerenderTriggerType::kEmbedder, @@ -5012,8 +4911,8 @@ "EmbedderSuffixForTest", PrerenderHost::FinalStatus::kMaxNumOfRunningPrerendersExceeded, 0); - // Start an embedder triggered prerendering; this should be triggered - // successfully. + // Start prerendering by embedder triggered prerendering; this should be + // trigger successfully. std::unique_ptr<PrerenderHandle> prerender_handle2 = web_contents_impl()->StartPrerendering( kSecondPrerenderingUrl, PrerenderTriggerType::kEmbedder, @@ -5027,7 +4926,8 @@ "EmbedderSuffixForTest", PrerenderHost::FinalStatus::kMaxNumOfRunningPrerendersExceeded, 0); - // Start an embedder triggered prerendering; this should hit the limit. + // Start prerendering by embedder triggered prerendering; this should hit the + // limit. std::unique_ptr<PrerenderHandle> prerender_handle3 = web_contents_impl()->StartPrerendering( kThirdPrerenderingUrl, PrerenderTriggerType::kEmbedder, @@ -5042,21 +4942,20 @@ PrerenderHost::FinalStatus::kMaxNumOfRunningPrerendersExceeded, 1); } -// Tests that PrerenderHostRegistry can hold up to one prerendering for the -// speculation rules and two prerendering for embedders. +// Tests that PrerenderHostRegistry can hold up to two prerendering for the +// prerender speculation rule and prerender embedders in total. IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, StartByEmbeddersAndSpeculationRulesMultipleTimes) { base::HistogramTester histogram_tester; const GURL kInitialUrl = GetUrl("/empty.html"); - const GURL kSpeculationRulesPrerenderingUrl = - GetUrl("/empty.html?prerender1"); - const GURL kEmbedderPrerenderingUrl1 = GetUrl("/empty.html?prerender2"); - const GURL kEmbedderPrerenderingUrl2 = GetUrl("/empty.html?prerender3"); - const GURL kEmbedderPrerenderingUrl3 = GetUrl("/empty.html?prerender4"); + const GURL kFirstPrerenderingUrl = GetUrl("/empty.html?prerender1"); + const GURL kSecondPrerenderingUrl = GetUrl("/empty.html?prerender2"); + const GURL kThirdPrerenderingUrl = GetUrl("/empty.html?prerender3"); ASSERT_TRUE(NavigateToURL(shell(), kInitialUrl)); - // Add a prerender speculation rule; this should be triggered successfully. - AddPrerender(kSpeculationRulesPrerenderingUrl); + // Add the first prerender speculation rule; it should trigger prerendering + // successfully. + AddPrerender(kFirstPrerenderingUrl); histogram_tester.ExpectBucketCount( "Prerender.Experimental.PrerenderHostFinalStatus.SpeculationRule", PrerenderHost::FinalStatus::kMaxNumOfRunningPrerendersExceeded, 0); @@ -5066,23 +4965,13 @@ "EmbedderSuffixForTest", PrerenderHost::FinalStatus::kMaxNumOfRunningPrerendersExceeded, 0); - // Start the first embedder triggered prerendering; this should be triggered - // successfully. - std::unique_ptr<PrerenderHandle> prerender_handle1 = - web_contents_impl()->StartPrerendering( - kEmbedderPrerenderingUrl1, PrerenderTriggerType::kEmbedder, - "EmbedderSuffixForTest", - ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | - ui::PAGE_TRANSITION_FROM_ADDRESS_BAR)); - EXPECT_TRUE(prerender_handle1); - - // Start the second embedder triggered prerendering; this should be triggered - // successfully. + // Start prerendering by embedder triggered prerendering; this should be + // trigger successfully. std::unique_ptr<PrerenderHandle> prerender_handle2 = web_contents_impl()->StartPrerendering( - kEmbedderPrerenderingUrl2, PrerenderTriggerType::kEmbedder, + kSecondPrerenderingUrl, PrerenderTriggerType::kEmbedder, "EmbedderSuffixForTest", - ui::PageTransitionFromInt(ui::PAGE_TRANSITION_GENERATED | + ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR)); EXPECT_TRUE(prerender_handle2); @@ -5091,10 +4980,11 @@ "EmbedderSuffixForTest", PrerenderHost::FinalStatus::kMaxNumOfRunningPrerendersExceeded, 0); - // Start the third embedder triggered prerendering; this should hit the limit. + // Start prerendering by embedder triggered prerendering; this should hit the + // limit. std::unique_ptr<PrerenderHandle> prerender_handle3 = web_contents_impl()->StartPrerendering( - kEmbedderPrerenderingUrl3, PrerenderTriggerType::kEmbedder, + kThirdPrerenderingUrl, PrerenderTriggerType::kEmbedder, "EmbedderSuffixForTest", ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR)); @@ -5105,11 +4995,11 @@ "EmbedderSuffixForTest", PrerenderHost::FinalStatus::kMaxNumOfRunningPrerendersExceeded, 1); - // Cancel the second embedder triggered prerendering and start a new one; - // this should succeed as one of the prerenders is freed. + // Start prerendering by embedder triggered prerendering; this should be + // trigger successfully as one of the prerenders is freed. prerender_handle2.reset(); prerender_handle3 = web_contents_impl()->StartPrerendering( - kEmbedderPrerenderingUrl3, PrerenderTriggerType::kEmbedder, + kThirdPrerenderingUrl, PrerenderTriggerType::kEmbedder, "EmbedderSuffixForTest", ui::PageTransitionFromInt(ui::PAGE_TRANSITION_TYPED | ui::PAGE_TRANSITION_FROM_ADDRESS_BAR));
diff --git a/content/browser/preloading/prerender/prerender_host.h b/content/browser/preloading/prerender/prerender_host.h index b027c60d..6167c41 100644 --- a/content/browser/preloading/prerender/prerender_host.h +++ b/content/browser/preloading/prerender/prerender_host.h
@@ -91,9 +91,7 @@ kEmbedderTriggeredAndSameOriginRedirected = 33, kEmbedderTriggeredAndCrossOriginRedirected = 34, kEmbedderTriggeredAndDestroyed = 35, - kMemoryLimitExceeded = 36, - kFailToGetMemoryUsage = 37, - kMaxValue = kFailToGetMemoryUsage, + kMaxValue = kEmbedderTriggeredAndDestroyed, }; PrerenderHost(const PrerenderAttributes& attributes,
diff --git a/content/browser/preloading/prerender/prerender_host_registry.cc b/content/browser/preloading/prerender/prerender_host_registry.cc index 5a39b57..a95512b 100644 --- a/content/browser/preloading/prerender/prerender_host_registry.cc +++ b/content/browser/preloading/prerender/prerender_host_registry.cc
@@ -22,7 +22,6 @@ #include "content/public/browser/browser_thread.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents_delegate.h" -#include "services/resource_coordinator/public/cpp/memory_instrumentation/memory_instrumentation.h" #include "third_party/blink/public/common/features.h" namespace content { @@ -165,18 +164,6 @@ return RenderFrameHost::kNoFrameTreeNodeId; } - // Check the current memory usage and destroy a prerendering if the entire - // browser uses excessive memory. This occurs asynchronously. - switch (attributes.trigger_type) { - case PrerenderTriggerType::kSpeculationRule: - DestroyWhenUsingExcessiveMemory(frame_tree_node_id); - break; - case PrerenderTriggerType::kEmbedder: - // We don't check the memory usage for embedder triggered prerenderings - // for now. - break; - } - RecordPrerenderTriggered(attributes.initiator_ukm_id); return frame_tree_node_id; @@ -493,7 +480,16 @@ bool PrerenderHostRegistry::IsAllowedToStartPrerenderingForTrigger( PrerenderTriggerType trigger_type) { + // Currently the number prerenders is limited to two per WebContentsImpl. + const size_t kMaxNumOfRunningPrerenders = 2; + + if (prerender_host_by_frame_tree_node_id_.size() == + kMaxNumOfRunningPrerenders) + return false; + int trigger_type_count = 0; + DCHECK_LT(prerender_host_by_frame_tree_node_id_.size(), + kMaxNumOfRunningPrerenders); for (const auto& host_by_id : prerender_host_by_frame_tree_node_id_) { if (host_by_id.second->trigger_type() == trigger_type) ++trigger_type_count; @@ -501,69 +497,13 @@ switch (trigger_type) { case PrerenderTriggerType::kSpeculationRule: - // The number of prerenders triggered by speculation rules is limited to a - // Finch config param. - return trigger_type_count < - base::GetFieldTrialParamByFeatureAsInt( - blink::features::kPrerender2, - blink::features:: - kPrerender2MaxNumOfRunningPrerendersForSpeculationRules, - 1); + // Speculation Rules trigger is allowed to start only one prerender. + return trigger_type_count < 1; case PrerenderTriggerType::kEmbedder: - // Currently the number of prerenders triggered by an embedder is limited - // to two. + // Embedder triggers are allowed to start at most 2 concurrent + // prerenders. return trigger_type_count < 2; } } -void PrerenderHostRegistry::DestroyWhenUsingExcessiveMemory( - int frame_tree_node_id) { - if (!base::FeatureList::IsEnabled(blink::features::kPrerender2MemoryControls)) - return; - - memory_instrumentation::MemoryInstrumentation::GetInstance() - ->RequestPrivateMemoryFootprint( - base::kNullProcessId, - base::BindOnce(&PrerenderHostRegistry::DidReceiveMemoryDump, - weak_factory_.GetWeakPtr(), frame_tree_node_id)); -} - -void PrerenderHostRegistry::DidReceiveMemoryDump( - int frame_tree_node_id, - bool success, - std::unique_ptr<memory_instrumentation::GlobalMemoryDump> dump) { - DCHECK( - base::FeatureList::IsEnabled(blink::features::kPrerender2MemoryControls)); - // Stop a prerendering when we can't get the current memory usage. - if (!success) { - CancelHost(frame_tree_node_id, - PrerenderHost::FinalStatus::kFailToGetMemoryUsage); - return; - } - - int64_t private_footprint_total_kb = 0; - for (const auto& pmd : dump->process_dumps()) { - private_footprint_total_kb += pmd.os_dump().private_footprint_kb; - } - - // TODO(crbug.com/1273341): Finalize the threshold after the experiment - // completes. The default acceptable percent is 20% of the system memory. - int acceptable_percent_of_system_memory = - base::GetFieldTrialParamByFeatureAsInt( - blink::features::kPrerender2MemoryControls, - blink::features:: - kPrerender2MemoryAcceptablePercentOfSystemMemoryParamName, - 20); - - // When the current memory usage is higher than - // `acceptable_percent_of_system_memory` % of the system memory, cancel a - // prerendering with `frame_tree_node_id`. - if (private_footprint_total_kb * 1024 >= - acceptable_percent_of_system_memory * 0.01 * - base::SysInfo::AmountOfPhysicalMemory()) { - CancelHost(frame_tree_node_id, - PrerenderHost::FinalStatus::kMemoryLimitExceeded); - } -} - } // namespace content
diff --git a/content/browser/preloading/prerender/prerender_host_registry.h b/content/browser/preloading/prerender/prerender_host_registry.h index 8bb0067..aa2590a 100644 --- a/content/browser/preloading/prerender/prerender_host_registry.h +++ b/content/browser/preloading/prerender/prerender_host_registry.h
@@ -17,7 +17,6 @@ #include "content/browser/preloading/prerender/prerender_host.h" #include "content/browser/renderer_host/back_forward_cache_impl.h" #include "content/common/content_export.h" -#include "services/resource_coordinator/public/cpp/memory_instrumentation/global_memory_dump.h" #include "third_party/blink/public/common/tokens/tokens.h" #include "url/gurl.h" #include "url/origin.h" @@ -179,14 +178,6 @@ bool IsAllowedToStartPrerenderingForTrigger( PrerenderTriggerType trigger_type); - // Destroys a host when the current memory usage is higher than a certain - // threshold. - void DestroyWhenUsingExcessiveMemory(int frame_tree_node_id); - void DidReceiveMemoryDump( - int frame_tree_node_id, - bool success, - std::unique_ptr<memory_instrumentation::GlobalMemoryDump> dump); - // Hosts that are not reserved for activation yet. // TODO(https://crbug.com/1132746): Expire prerendered contents if they are // not used for a while.
diff --git a/content/browser/preloading/prerender/prerender_internals_handler_impl.cc b/content/browser/preloading/prerender/prerender_internals_handler_impl.cc index d3e5bdbd..5f2fb2f 100644 --- a/content/browser/preloading/prerender/prerender_internals_handler_impl.cc +++ b/content/browser/preloading/prerender/prerender_internals_handler_impl.cc
@@ -78,10 +78,6 @@ return "EmbedderTriggeredAndCrossOriginRedirected"; case PrerenderHost::FinalStatus::kEmbedderTriggeredAndDestroyed: return "EmbedderTriggeredAndDestroyed"; - case PrerenderHost::FinalStatus::kMemoryLimitExceeded: - return "MemoryLimitExceeded"; - case PrerenderHost::FinalStatus::kFailToGetMemoryUsage: - return "FailToGetMemoryUsage"; } NOTREACHED(); return "";
diff --git a/content/browser/renderer_host/media/media_stream_manager.cc b/content/browser/renderer_host/media/media_stream_manager.cc index 7656eda..4052cab 100644 --- a/content/browser/renderer_host/media/media_stream_manager.cc +++ b/content/browser/renderer_host/media/media_stream_manager.cc
@@ -706,8 +706,11 @@ controls(controls), salt_and_origin(std::move(salt_and_origin)), device_stopped_cb(std::move(device_stopped_cb)), - state_(static_cast<size_t>(MediaStreamType::NUM_MEDIA_TYPES), - MEDIA_REQUEST_STATE_NOT_REQUESTED), + state_(/*size=*/static_cast<size_t>(MediaStreamType::NUM_MEDIA_TYPES), + /*value=*/MEDIA_REQUEST_STATE_NOT_REQUESTED), + devices_opened_count_( + /*size=*/static_cast<size_t>(MediaStreamType::NUM_MEDIA_TYPES), + /*value=*/0u), request_type_(request_type), audio_type_(MediaStreamType::NO_SERVICE), video_type_(MediaStreamType::NO_SERVICE), @@ -825,6 +828,18 @@ return state_[static_cast<int>(stream_type)]; } + void ResetDevicesOpened(MediaStreamType stream_type) { + devices_opened_count_[static_cast<int>(stream_type)] = 0; + } + + void SetDeviceOpened(MediaStreamType stream_type) { + devices_opened_count_[static_cast<int>(stream_type)]++; + } + + size_t devices_opened_count(MediaStreamType stream_type) const { + return devices_opened_count_[static_cast<int>(stream_type)]; + } + void SetCapturingLinkSecured(bool is_secure) { MediaObserver* media_observer = GetContentClient()->browser()->GetMediaObserver(); @@ -935,6 +950,9 @@ private: std::vector<MediaRequestState> state_; + // This vector keeps track of how many devices of a specific |MediaStreamType| + // were already opened for this request. + std::vector<size_t> devices_opened_count_; std::unique_ptr<MediaStreamRequest> ui_request_; MediaStreamRequestType request_type_; MediaStreamType audio_type_; @@ -2700,52 +2718,63 @@ if (request->stream_devices_set.stream_devices.empty()) continue; - // TODO(crbug.com/1300883): Generalize to multiple streams. - DCHECK_EQ(1u, request->stream_devices_set.stream_devices.size()); - blink::mojom::StreamDevices& stream_devices = - *request->stream_devices_set.stream_devices[0]; - for (absl::optional<blink::MediaStreamDevice>* device_ptr : { - &stream_devices.audio_device, - &stream_devices.video_device, - }) { - if (!device_ptr->has_value()) { - continue; - } + // It can happen that a previous stream already failed and set an error, + // in which case this streams request does not need to be handled further. + if (request->state(stream_type) == MEDIA_REQUEST_STATE_ERROR) { + continue; + } - blink::MediaStreamDevice& device = device_ptr->value(); - if (device.type == stream_type && - device.session_id() == capture_session_id) { - if (request->state(device.type) == MEDIA_REQUEST_STATE_DONE) { + for (blink::mojom::StreamDevicesPtr& stream_devices_ptr : + request->stream_devices_set.stream_devices) { + blink::mojom::StreamDevices& stream_devices = *stream_devices_ptr; + for (absl::optional<blink::MediaStreamDevice>* device_ptr : { + &stream_devices.audio_device, + &stream_devices.video_device, + }) { + if (!device_ptr->has_value()) { continue; } - CHECK_EQ(request->state(device.type), MEDIA_REQUEST_STATE_OPENING); - // We've found a matching request. - request->SetState(device.type, MEDIA_REQUEST_STATE_DONE); - - if (blink::IsAudioInputMediaType(device.type)) { - // Store the native audio parameters in the device struct. - // TODO(xians): Handle the tab capture sample rate/channel layout - // in AudioInputDeviceManager::Open(). - if (device.type != MediaStreamType::GUM_TAB_AUDIO_CAPTURE) { - const MediaStreamDevice* opened_device = - audio_input_device_manager_->GetOpenedDeviceById( - device.session_id()); - device.input = opened_device->input; - - // Since the audio input device manager will set the input - // parameters to the default settings (including supported effects), - // we need to adjust those settings here according to what the - // request asks for. - int effects = device.input.effects(); - FilterAudioEffects(request->controls, &effects); - EnableHotwordEffect(request->controls, &effects); - device.input.set_effects(effects); + blink::MediaStreamDevice& device = device_ptr->value(); + if (device.type == stream_type && + device.session_id() == capture_session_id) { + if (request->state(device.type) == MEDIA_REQUEST_STATE_DONE) { + continue; } + + // We've found a matching request. + CHECK_EQ(request->state(device.type), MEDIA_REQUEST_STATE_OPENING); + request->SetDeviceOpened(device.type); + if (request->devices_opened_count(device.type) == + request->stream_devices_set.stream_devices.size()) { + request->SetState(device.type, MEDIA_REQUEST_STATE_DONE); + request->ResetDevicesOpened(device.type); + } + + if (blink::IsAudioInputMediaType(device.type)) { + // Store the native audio parameters in the device struct. + // TODO(xians): Handle the tab capture sample rate/channel layout + // in AudioInputDeviceManager::Open(). + if (device.type != MediaStreamType::GUM_TAB_AUDIO_CAPTURE) { + const MediaStreamDevice* opened_device = + audio_input_device_manager_->GetOpenedDeviceById( + device.session_id()); + device.input = opened_device->input; + + // Since the audio input device manager will set the input + // parameters to the default settings (including supported + // effects), we need to adjust those settings here according to + // what the request asks for. + int effects = device.input.effects(); + FilterAudioEffects(request->controls, &effects); + EnableHotwordEffect(request->controls, &effects); + device.input.set_effects(effects); + } + } + if (RequestDone(*request)) + HandleRequestDone(label, request); + break; } - if (RequestDone(*request)) - HandleRequestDone(label, request); - break; } } } @@ -3016,7 +3045,11 @@ TranslateDeviceIdToSourceId(request, &device); SetRequestDevice( *request->stream_devices_set.stream_devices[stream_index], device); - request->SetState(device.type, MEDIA_REQUEST_STATE_OPENING); + const MediaRequestState current_state = request->state(device.type); + if (current_state != MEDIA_REQUEST_STATE_OPENING && + current_state != MEDIA_REQUEST_STATE_ERROR) { + request->SetState(device.type, MEDIA_REQUEST_STATE_OPENING); + } SendLogMessage( base::StringPrintf("HandleAccessRequestResponse([label=%s]) => " "(opening device: [id: %s, session_id: %s])", @@ -3437,6 +3470,16 @@ } } +void MediaStreamManager::SetStateForTesting( + size_t request_index, + blink::mojom::MediaStreamType stream_type, + MediaRequestState new_state) { + DCHECK_LT(request_index, requests_.size()); + auto requests_iterator = requests_.begin(); + std::advance(requests_iterator, request_index); + requests_iterator->second->SetState(stream_type, new_state); +} + void MediaStreamManager::SetGenerateStreamsCallbackForTesting( GenerateStreamTestCallback test_callback) { generate_stream_test_callback_ = std::move(test_callback);
diff --git a/content/browser/renderer_host/media/media_stream_manager.h b/content/browser/renderer_host/media/media_stream_manager.h index 88ace799..b93ba68 100644 --- a/content/browser/renderer_host/media/media_stream_manager.h +++ b/content/browser/renderer_host/media/media_stream_manager.h
@@ -411,6 +411,10 @@ void SetGenerateStreamsCallbackForTesting( GenerateStreamTestCallback test_callback); + void SetStateForTesting(size_t request_index, + blink::mojom::MediaStreamType stream_type, + MediaRequestState new_state); + // This method is called when all tracks are started. void OnStreamStarted(const std::string& label); @@ -436,10 +440,17 @@ #endif private: + friend class MediaStreamManagerTest; FRIEND_TEST_ALL_PREFIXES(MediaStreamManagerTest, DesktopCaptureDeviceStopped); FRIEND_TEST_ALL_PREFIXES(MediaStreamManagerTest, DesktopCaptureDeviceChanged); FRIEND_TEST_ALL_PREFIXES(MediaStreamManagerTest, MultiCaptureOnMediaStreamUIWindowId); + FRIEND_TEST_ALL_PREFIXES(MediaStreamManagerTest, + MultiCaptureAllDevicesOpened); + FRIEND_TEST_ALL_PREFIXES(MediaStreamManagerTest, + MultiCaptureNotAllDevicesOpened); + FRIEND_TEST_ALL_PREFIXES(MediaStreamManagerTest, + MultiCaptureIntermediateErrorOnOpening); // Contains all data needed to keep track of requests. class DeviceRequest;
diff --git a/content/browser/renderer_host/media/media_stream_manager_unittest.cc b/content/browser/renderer_host/media/media_stream_manager_unittest.cc index a98f57e..485f1770 100644 --- a/content/browser/renderer_host/media/media_stream_manager_unittest.cc +++ b/content/browser/renderer_host/media/media_stream_manager_unittest.cc
@@ -4,6 +4,7 @@ #include <stddef.h> +#include <memory> #include <string> #include <utility> @@ -12,6 +13,7 @@ #include "base/location.h" #include "base/memory/raw_ptr.h" #include "base/run_loop.h" +#include "base/strings/strcat.h" #include "base/strings/string_number_conversions.h" #include "base/strings/string_util.h" #include "base/test/bind.h" @@ -26,6 +28,7 @@ #include "content/browser/renderer_host/media/video_capture_manager.h" #include "content/public/browser/content_browser_client.h" #include "content/public/browser/media_observer.h" +#include "content/public/browser/media_request_state.h" #include "content/public/common/content_client.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" @@ -35,8 +38,10 @@ #include "media/audio/fake_audio_log_factory.h" #include "media/audio/test_audio_thread.h" #include "media/base/media_switches.h" +#include "media/capture/content/screen_enumerator.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" +#include "third_party/blink/public/common/mediastream/media_stream_request.h" #include "third_party/blink/public/mojom/mediastream/media_stream.mojom.h" #include "ui/gfx/native_widget_types.h" #include "url/gurl.h" @@ -165,15 +170,73 @@ void(int, int, int, blink::mojom::MediaStreamType, bool)); }; +class ScreenEnumeratorMock : public media::ScreenEnumerator { + public: + explicit ScreenEnumeratorMock(const size_t* screen_count) + : screen_count_(screen_count){}; + ~ScreenEnumeratorMock() override = default; + + void EnumerateScreens( + blink::mojom::MediaStreamType stream_type, + base::OnceCallback< + void(const blink::mojom::StreamDevicesSet& stream_devices_set, + blink::mojom::MediaStreamRequestResult result)> screens_callback) + const override { + blink::mojom::StreamDevicesSet stream_devices_set; + for (size_t screen_idx = 0; screen_idx < *screen_count_; ++screen_idx) { + stream_devices_set.stream_devices.push_back( + blink::mojom::StreamDevices::New( + /*audio_device=*/absl::nullopt, + /*video_device=*/blink::MediaStreamDevice( + blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET, + base::StrCat({"id_", base::NumberToString(screen_idx)}), + base::StrCat({"name_", base::NumberToString(screen_idx)})))); + } + std::move(screens_callback) + .Run(stream_devices_set, blink::mojom::MediaStreamRequestResult::OK); + } + + private: + const size_t* screen_count_; +}; + +class MediaStreamProviderListenerMock + : public content::MediaStreamProviderListener { + public: + void Opened(blink::mojom::MediaStreamType stream_type, + const base::UnguessableToken& capture_session_id) override { + capture_session_ids_.push_back(capture_session_id); + } + + void Closed(blink::mojom::MediaStreamType stream_type, + const base::UnguessableToken& capture_session_id) override {} + + void Aborted(blink::mojom::MediaStreamType stream_type, + const base::UnguessableToken& capture_session_id) override {} + + const std::vector<base::UnguessableToken>& capture_session_ids() { + return capture_session_ids_; + } + + private: + std::vector<base::UnguessableToken> capture_session_ids_; +}; + class TestBrowserClient : public ContentBrowserClient { public: - explicit TestBrowserClient(MediaObserver* media_observer) - : media_observer_(media_observer) {} - ~TestBrowserClient() override {} + explicit TestBrowserClient(MediaObserver* media_observer, + const size_t* screen_count) + : media_observer_(media_observer), screen_count_(screen_count) {} + ~TestBrowserClient() override = default; MediaObserver* GetMediaObserver() override { return media_observer_; } + std::unique_ptr<media::ScreenEnumerator> CreateScreenEnumerator() + const override { + return std::make_unique<ScreenEnumeratorMock>(screen_count_); + } private: raw_ptr<MediaObserver> media_observer_; + const size_t* screen_count_; }; class MockMediaStreamUIProxy : public FakeMediaStreamUIProxy { @@ -205,8 +268,8 @@ audio_system_.get(), audio_manager_->GetTaskRunner(), std::move(video_capture_provider)); media_observer_ = std::make_unique<MockMediaObserver>(); - browser_content_client_ = - std::make_unique<TestBrowserClient>(media_observer_.get()); + browser_content_client_ = std::make_unique<TestBrowserClient>( + media_observer_.get(), &screen_count_); SetBrowserClientForTesting(browser_content_client_.get()); base::RunLoop().RunUntilIdle(); @@ -249,6 +312,45 @@ controls, security_origin, std::move(callback)); } + void RequestMultiScreenCapture(size_t screen_count, + const base::UnguessableToken& session) { + screen_count_ = screen_count; + const int render_process_id = 0; + const int render_frame_id = 0; + const int requester_id = 0; + const int page_request_id = 0; + blink::StreamControls controls(/*request_audio=*/false, + /*request_video=*/true); + controls.request_all_screens = true; + controls.video.stream_type = + blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET; + EXPECT_CALL(*media_observer_, + OnMediaRequestStateChanged( + _, _, _, _, + blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET, + MEDIA_REQUEST_STATE_OPENING)); + stream_provider_listener_ = + std::make_unique<MediaStreamProviderListenerMock>(); + media_stream_manager_->video_capture_manager_->RegisterListener( + stream_provider_listener_.get()); + media_stream_manager_->video_capture_manager_->UnregisterListener( + media_stream_manager_.get()); + media_stream_manager_->GenerateStreams( + render_process_id, render_frame_id, requester_id, page_request_id, + controls, MediaDeviceSaltAndOrigin(), /*user_gesture=*/false, + /*audio_stream_selection_info_ptr=*/ + blink::mojom::StreamSelectionInfo::New( + /*strategy=*/blink::mojom::StreamSelectionStrategy:: + FORCE_NEW_STREAM, + /*session_id=*/session), + /*generate_stream_cb=*/base::DoNothing(), + /*device_stopped_cb=*/base::DoNothing(), + /*device_changed_cb=*/base::DoNothing(), + /*device_request_state_change_cb=*/base::DoNothing(), + /*device_capture_handle_change_cb=*/base::DoNothing()); + base::RunLoop().RunUntilIdle(); + } + void RequestAndStopGetDisplayMedia(bool request_audio) { media_stream_manager_->UseFakeUIFactoryForTests(base::BindRepeating([]() { return std::make_unique<FakeMediaStreamUIProxy>( @@ -434,6 +536,8 @@ std::unique_ptr<MockAudioManager> audio_manager_; std::unique_ptr<media::AudioSystem> audio_system_; raw_ptr<MockVideoCaptureProvider> video_capture_provider_; + std::unique_ptr<MediaStreamProviderListenerMock> stream_provider_listener_; + size_t screen_count_ = 0; base::RunLoop run_loop_; }; @@ -1048,6 +1152,82 @@ ASSERT_EQ(session_id_1, session_ids[1]); } +TEST_F(MediaStreamManagerTest, MultiCaptureAllDevicesOpened) { + base::UnguessableToken session = base::UnguessableToken::Create(); + RequestMultiScreenCapture(/*screen_count=*/3u, session); + + const std::vector<base::UnguessableToken>& session_ids = + stream_provider_listener_->capture_session_ids(); + EXPECT_EQ(3u, session_ids.size()); + + media_stream_manager_->Opened( + blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET, session_ids[0]); + media_stream_manager_->Opened( + blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET, session_ids[1]); + + EXPECT_CALL( + *media_observer_, + OnMediaRequestStateChanged( + _, _, _, _, blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET, + MEDIA_REQUEST_STATE_DONE)); + media_stream_manager_->Opened( + blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET, session_ids[2]); +} + +TEST_F(MediaStreamManagerTest, MultiCaptureNotAllDevicesOpened) { + base::UnguessableToken session = base::UnguessableToken::Create(); + RequestMultiScreenCapture(/*screen_count=*/3u, session); + + const std::vector<base::UnguessableToken>& session_ids = + stream_provider_listener_->capture_session_ids(); + EXPECT_EQ(3u, session_ids.size()); + + media_stream_manager_->Opened( + blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET, session_ids[0]); + media_stream_manager_->Opened( + blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET, session_ids[1]); + + EXPECT_CALL( + *media_observer_, + OnMediaRequestStateChanged( + _, _, _, _, blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET, + MEDIA_REQUEST_STATE_DONE)) + .Times(0); +} + +TEST_F(MediaStreamManagerTest, MultiCaptureIntermediateErrorOnOpening) { + base::UnguessableToken session = base::UnguessableToken::Create(); + RequestMultiScreenCapture(/*screen_count=*/3u, session); + + const std::vector<base::UnguessableToken>& session_ids = + stream_provider_listener_->capture_session_ids(); + EXPECT_EQ(3u, session_ids.size()); + + EXPECT_CALL( + *media_observer_, + OnMediaRequestStateChanged( + _, _, _, _, blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET, + MEDIA_REQUEST_STATE_ERROR)); + + media_stream_manager_->Opened( + blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET, session_ids[0]); + media_stream_manager_->SetStateForTesting( + /*request_index=*/0u, + blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET, + MEDIA_REQUEST_STATE_ERROR); + media_stream_manager_->Opened( + blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET, session_ids[1]); + media_stream_manager_->Opened( + blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET, session_ids[2]); + + EXPECT_CALL( + *media_observer_, + OnMediaRequestStateChanged( + _, _, _, _, blink::mojom::MediaStreamType::DISPLAY_VIDEO_CAPTURE_SET, + MEDIA_REQUEST_STATE_DONE)) + .Times(0); +} + // TODO(crbug.com/1300883): Add test cases for multi stream generation. } // namespace content
diff --git a/content/browser/speech/tts_controller_impl.cc b/content/browser/speech/tts_controller_impl.cc index 644dcef..1f35ba94 100644 --- a/content/browser/speech/tts_controller_impl.cc +++ b/content/browser/speech/tts_controller_impl.cc
@@ -705,13 +705,13 @@ data_decoder::DataDecoder::ValueOrError result) { // Error checks. // If invalid xml, return original utterance text. - if (!result.value) { + if (!result.has_value()) { std::move(on_ssml_parsed).Run(utterance); return; } std::string root_tag_name; - data_decoder::GetXmlElementTagName(*result.value, &root_tag_name); + data_decoder::GetXmlElementTagName(*result, &root_tag_name); // Root element must be <speak>. if (root_tag_name.compare("speak") != 0) { std::move(on_ssml_parsed).Run(utterance); @@ -720,7 +720,7 @@ std::string parsed_text; // Change from unique_ptr to base::Value* so recursion will work. - PopulateParsedText(&parsed_text, &(*result.value)); + PopulateParsedText(&parsed_text, &*result); // Run with parsed_text. std::move(on_ssml_parsed).Run(parsed_text);
diff --git a/content/browser/web_package/signed_exchange_cert_fetcher.h b/content/browser/web_package/signed_exchange_cert_fetcher.h index e26aa0ed..33d33fd 100644 --- a/content/browser/web_package/signed_exchange_cert_fetcher.h +++ b/content/browser/web_package/signed_exchange_cert_fetcher.h
@@ -128,7 +128,7 @@ std::string body_string_; // This is owned by SignedExchangeHandler which is the owner of |this|. - raw_ptr<SignedExchangeDevToolsProxy, DanglingUntriaged> devtools_proxy_; + raw_ptr<SignedExchangeDevToolsProxy> devtools_proxy_; bool has_notified_completion_to_devtools_ = false; absl::optional<base::UnguessableToken> cert_request_id_;
diff --git a/content/browser/web_package/signed_exchange_handler.cc b/content/browser/web_package/signed_exchange_handler.cc index 60fc93a..688c811 100644 --- a/content/browser/web_package/signed_exchange_handler.cc +++ b/content/browser/web_package/signed_exchange_handler.cc
@@ -186,12 +186,12 @@ headers_callback_(std::move(headers_callback)), source_(std::move(body)), cert_fetcher_factory_(std::move(cert_fetcher_factory)), + devtools_proxy_(std::move(devtools_proxy)), network_isolation_key_(network_isolation_key), outer_request_isolation_info_(std::move(outer_request_isolation_info)), load_flags_(load_flags), remote_endpoint_(remote_endpoint), request_matcher_(std::move(request_matcher)), - devtools_proxy_(std::move(devtools_proxy)), reporter_(reporter), frame_tree_node_id_(frame_tree_node_id) { TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("loading"),
diff --git a/content/browser/web_package/signed_exchange_handler.h b/content/browser/web_package/signed_exchange_handler.h index 4959d38..537b7a8 100644 --- a/content/browser/web_package/signed_exchange_handler.h +++ b/content/browser/web_package/signed_exchange_handler.h
@@ -185,6 +185,11 @@ absl::optional<SignedExchangeEnvelope> envelope_; std::unique_ptr<SignedExchangeCertFetcherFactory> cert_fetcher_factory_; + + std::unique_ptr<SignedExchangeDevToolsProxy> devtools_proxy_; + + // `cert_fetcher_` borrows reference from `devtools_proxy_`, so it needs to be + // declared last, so that it is destroyed first. std::unique_ptr<SignedExchangeCertFetcher> cert_fetcher_; const net::NetworkIsolationKey network_isolation_key_; absl::optional<net::IsolationInfo> outer_request_isolation_info_; @@ -196,10 +201,8 @@ std::unique_ptr<blink::WebPackageRequestMatcher> request_matcher_; mojo::Remote<network::mojom::RestrictedCookieManager> cookie_manager_; - std::unique_ptr<SignedExchangeDevToolsProxy> devtools_proxy_; - // This is owned by SignedExchangeLoader which is the owner of |this|. - raw_ptr<SignedExchangeReporter, DanglingUntriaged> reporter_; + raw_ptr<SignedExchangeReporter> reporter_; const int frame_tree_node_id_;
diff --git a/content/browser/web_package/signed_exchange_loader.cc b/content/browser/web_package/signed_exchange_loader.cc index 461ef62b..febc523a 100644 --- a/content/browser/web_package/signed_exchange_loader.cc +++ b/content/browser/web_package/signed_exchange_loader.cc
@@ -69,10 +69,10 @@ : outer_request_(outer_request), outer_response_head_(std::move(outer_response_head)), forwarding_client_(std::move(forwarding_client)), + reporter_(std::move(reporter)), url_loader_options_(url_loader_options), should_redirect_on_failure_(should_redirect_on_failure), devtools_proxy_(std::move(devtools_proxy)), - reporter_(std::move(reporter)), url_loader_factory_(std::move(url_loader_factory)), url_loader_throttles_getter_(std::move(url_loader_throttles_getter)), network_isolation_key_(network_isolation_key),
diff --git a/content/browser/web_package/signed_exchange_loader.h b/content/browser/web_package/signed_exchange_loader.h index 9c7c64c..5b94952 100644 --- a/content/browser/web_package/signed_exchange_loader.h +++ b/content/browser/web_package/signed_exchange_loader.h
@@ -169,13 +169,16 @@ mojo::PendingReceiver<network::mojom::URLLoaderClient> pending_client_receiver_; + std::unique_ptr<SignedExchangeReporter> reporter_; + + // `signed_exchange_handler_` borrows reference from `reporter_`, so it needs + // to be declared last, so that it is destroyed first. std::unique_ptr<SignedExchangeHandler> signed_exchange_handler_; std::unique_ptr<network::SourceStreamToDataPipe> body_data_pipe_adapter_; const uint32_t url_loader_options_; const bool should_redirect_on_failure_; std::unique_ptr<SignedExchangeDevToolsProxy> devtools_proxy_; - std::unique_ptr<SignedExchangeReporter> reporter_; scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; URLLoaderThrottlesGetter url_loader_throttles_getter_; const net::NetworkIsolationKey network_isolation_key_;
diff --git a/content/browser/webauth/authenticator_common.cc b/content/browser/webauth/authenticator_common.cc index 4c80888..6e3c3da 100644 --- a/content/browser/webauth/authenticator_common.cc +++ b/content/browser/webauth/authenticator_common.cc
@@ -513,22 +513,26 @@ void AuthenticatorCommon::OnLargeBlobCompressed( uint64_t original_size, - data_decoder::DataDecoder::ResultOrError<mojo_base::BigBuffer> result) { - if (result.value) { + base::expected<mojo_base::BigBuffer, std::string> result) { + if (result.has_value()) { ctap_get_assertion_request_->large_blob_write = device::LargeBlob( - device::fido_parsing_utils::Materialize(*result.value), original_size); + device::fido_parsing_utils::Materialize(*result), original_size); } StartGetAssertionRequest(/*allow_skipping_pin_touch=*/true); } void AuthenticatorCommon::OnLargeBlobUncompressed( device::AuthenticatorGetAssertionResponse response, - data_decoder::DataDecoder::ResultOrError<mojo_base::BigBuffer> result) { + base::expected<mojo_base::BigBuffer, std::string> result) { + absl::optional<mojo_base::BigBuffer> value; + if (result.has_value()) + value = std::move(*result); + CompleteGetAssertionRequest( blink::mojom::AuthenticatorStatus::SUCCESS, CreateGetAssertionResponse( std::move(response), - device::fido_parsing_utils::MaterializeOrNull(result.value))); + device::fido_parsing_utils::MaterializeOrNull(value))); } // mojom::Authenticator
diff --git a/content/browser/webauth/authenticator_common.h b/content/browser/webauth/authenticator_common.h index 3be0e11..6a0fd01 100644 --- a/content/browser/webauth/authenticator_common.h +++ b/content/browser/webauth/authenticator_common.h
@@ -155,13 +155,13 @@ // start a request. void OnLargeBlobCompressed( uint64_t original_size, - data_decoder::DataDecoder::ResultOrError<mojo_base::BigBuffer> result); + base::expected<mojo_base::BigBuffer, std::string> result); // Callback to handle the large blob being uncompressed before completing a // request. void OnLargeBlobUncompressed( device::AuthenticatorGetAssertionResponse response, - data_decoder::DataDecoder::ResultOrError<mojo_base::BigBuffer> result); + base::expected<mojo_base::BigBuffer, std::string> result); // Callback to handle the async response from a U2fDevice. void OnRegisterResponse(
diff --git a/content/browser/webauth/virtual_authenticator.cc b/content/browser/webauth/virtual_authenticator.cc index ee443432..b5527c39 100644 --- a/content/browser/webauth/virtual_authenticator.cc +++ b/content/browser/webauth/virtual_authenticator.cc
@@ -215,28 +215,31 @@ void VirtualAuthenticator::OnLargeBlobUncompressed( GetLargeBlobCallback callback, - data_decoder::DataDecoder::ResultOrError<mojo_base::BigBuffer> result) { - std::move(callback).Run( - device::fido_parsing_utils::MaterializeOrNull(result.value)); + base::expected<mojo_base::BigBuffer, std::string> result) { + absl::optional<mojo_base::BigBuffer> value; + if (result.has_value()) + value = std::move(*result); + + std::move(callback).Run(device::fido_parsing_utils::MaterializeOrNull(value)); } void VirtualAuthenticator::OnLargeBlobCompressed( base::span<const uint8_t> key_handle, uint64_t original_size, SetLargeBlobCallback callback, - data_decoder::DataDecoder::ResultOrError<mojo_base::BigBuffer> result) { + base::expected<mojo_base::BigBuffer, std::string> result) { auto registration = state_->registrations.find(key_handle); if (registration == state_->registrations.end()) { std::move(callback).Run(false); return; } - if (!result.value) { + if (!result.has_value()) { std::move(callback).Run(false); return; } state_->InjectLargeBlob( ®istration->second, - device::LargeBlob(device::fido_parsing_utils::Materialize(*result.value), + device::LargeBlob(device::fido_parsing_utils::Materialize(*result), original_size)); std::move(callback).Run(true); }
diff --git a/content/browser/webauth/virtual_authenticator.h b/content/browser/webauth/virtual_authenticator.h index ad1fe86c..e9cdc226 100644 --- a/content/browser/webauth/virtual_authenticator.h +++ b/content/browser/webauth/virtual_authenticator.h
@@ -118,12 +118,12 @@ private: void OnLargeBlobUncompressed( GetLargeBlobCallback callback, - data_decoder::DataDecoder::ResultOrError<mojo_base::BigBuffer> result); + base::expected<mojo_base::BigBuffer, std::string> result); void OnLargeBlobCompressed( base::span<const uint8_t> key_handle, uint64_t original_size, SetLargeBlobCallback callback, - data_decoder::DataDecoder::ResultOrError<mojo_base::BigBuffer> result); + base::expected<mojo_base::BigBuffer, std::string> result); const device::ProtocolVersion protocol_; const device::Ctap2Version ctap2_version_;
diff --git a/content/browser/webid/idp_network_request_manager.cc b/content/browser/webid/idp_network_request_manager.cc index e06028b..43df879 100644 --- a/content/browser/webid/idp_network_request_manager.cc +++ b/content/browser/webid/idp_network_request_manager.cc
@@ -302,16 +302,7 @@ } using FetchStatus = content::IdpNetworkRequestManager::FetchStatus; -FetchStatus GetResponseError(network::SimpleURLLoader* url_loader, - std::string* response_body) { - if (!url_loader) - return FetchStatus::kHttpNotFoundError; - - int response_code = -1; - auto* response_info = url_loader->ResponseInfo(); - if (response_info && response_info->headers) - response_code = response_info->headers->response_code(); - +FetchStatus GetResponseError(std::string* response_body, int response_code) { if (response_code == net::HTTP_NOT_FOUND) return FetchStatus::kHttpNotFoundError; @@ -323,30 +314,68 @@ FetchStatus GetParsingError( const data_decoder::DataDecoder::ValueOrError& result) { - if (!result.value) + if (!result.has_value()) return FetchStatus::kInvalidResponseError; - auto& response = *result.value; + auto& response = *result; if (!response.is_dict()) return FetchStatus::kInvalidResponseError; return FetchStatus::kSuccess; } +void OnJsonParsed( + IdpNetworkRequestManager::ParseJsonCallback parse_json_callback, + data_decoder::DataDecoder::ValueOrError result) { + FetchStatus parsing_error = GetParsingError(result); + std::move(parse_json_callback).Run(parsing_error, std::move(result)); +} + +void OnDownloadedUrl(std::unique_ptr<network::SimpleURLLoader> url_loader, + IdpNetworkRequestManager::DownloadCallback callback, + std::unique_ptr<std::string> response_body) { + auto* response_info = url_loader->ResponseInfo(); + int response_code = response_info && response_info->headers + ? response_info->headers->response_code() + : -1; + + url_loader.reset(); + std::move(callback).Run(std::move(response_body), response_code); +} + +void OnDownloadedJson( + IdpNetworkRequestManager::ParseJsonCallback parse_json_callback, + std::unique_ptr<std::string> response_body, + int response_code) { + FetchStatus response_error = + GetResponseError(response_body.get(), response_code); + + if (response_error != FetchStatus::kSuccess) { + std::move(parse_json_callback) + .Run(response_error, data_decoder::DataDecoder::ValueOrError()); + return; + } + + data_decoder::DataDecoder::ParseJsonIsolated( + *response_body, + base::BindOnce(&OnJsonParsed, std::move(parse_json_callback))); +} + void OnManifestListParsed( IdpNetworkRequestManager::FetchManifestListCallback callback, + FetchStatus fetch_status, data_decoder::DataDecoder::ValueOrError result) { if (callback.IsCancelled()) return; std::set<GURL> urls; - if (GetParsingError(result) == FetchStatus::kInvalidResponseError) { - std::move(callback).Run(FetchStatus::kInvalidResponseError, urls); + if (fetch_status != FetchStatus::kSuccess) { + std::move(callback).Run(fetch_status, urls); return; } - const base::Value::Dict* dict = result.value->GetIfDict(); + const base::Value::Dict* dict = result->GetIfDict(); if (!dict) { std::move(callback).Run(FetchStatus::kInvalidResponseError, urls); return; @@ -371,27 +400,6 @@ std::move(callback).Run(FetchStatus::kSuccess, urls); } -void OnManifestListLoaded( - std::unique_ptr<network::SimpleURLLoader> url_loader, - IdpNetworkRequestManager::FetchManifestListCallback callback, - std::unique_ptr<std::string> response_body) { - if (callback.IsCancelled()) - return; - - FetchStatus response_error = - GetResponseError(url_loader.get(), response_body.get()); - url_loader.reset(); - - if (response_error != FetchStatus::kSuccess) { - std::move(callback).Run(response_error, std::set<GURL>()); - return; - } - - data_decoder::DataDecoder::ParseJsonIsolated( - *response_body, - base::BindOnce(&OnManifestListParsed, std::move(callback))); -} - } // namespace IdpNetworkRequestManager::Endpoints::Endpoints() = default; @@ -470,7 +478,8 @@ IdpNetworkRequestManager::ComputeManifestListUrl(provider_); if (!manifest_list_url) { - OnManifestListLoaded(nullptr, std::move(callback), nullptr); + OnManifestListParsed(std::move(callback), FetchStatus::kHttpNotFoundError, + data_decoder::DataDecoder::ValueOrError()); return; } @@ -478,11 +487,9 @@ CreateUncredentialedUrlLoader(*manifest_list_url, /* send_referrer= */ false, /* follow_redirects= */ true); - network::SimpleURLLoader* url_loader_ptr = url_loader.get(); - url_loader_ptr->DownloadToString( - loader_factory_.get(), - base::BindOnce(&OnManifestListLoaded, std::move(url_loader), - std::move(callback)), + DownloadJsonAndParse( + std::move(url_loader), + base::BindOnce(&OnManifestListParsed, std::move(callback)), maxResponseSizeInKiB * 1024); } @@ -490,22 +497,16 @@ absl::optional<int> idp_brand_icon_ideal_size, absl::optional<int> idp_brand_icon_minimum_size, FetchManifestCallback callback) { - DCHECK(!url_loader_); - DCHECK(!idp_manifest_callback_); - - idp_manifest_callback_ = std::move(callback); - GURL target_url = provider_.Resolve(IdpNetworkRequestManager::kManifestFilePath); - url_loader_ = + std::unique_ptr<network::SimpleURLLoader> url_loader = CreateUncredentialedUrlLoader(target_url, /* send_referrer= */ false); - - url_loader_->DownloadToString( - loader_factory_.get(), - base::BindOnce(&IdpNetworkRequestManager::OnManifestLoaded, + DownloadJsonAndParse( + std::move(url_loader), + base::BindOnce(&IdpNetworkRequestManager::OnManifestParsed, weak_ptr_factory_.GetWeakPtr(), idp_brand_icon_ideal_size, - idp_brand_icon_minimum_size), + idp_brand_icon_minimum_size, std::move(callback)), maxResponseSizeInKiB * 1024); } @@ -513,16 +514,13 @@ const GURL& accounts_url, const std::string& client_id, AccountsRequestCallback callback) { - DCHECK(!url_loader_); - - url_loader_ = + std::unique_ptr<network::SimpleURLLoader> url_loader = CreateCredentialedUrlLoader(accounts_url, /* send_referrer= */ false); - - url_loader_->DownloadToString( - loader_factory_.get(), - base::BindOnce(&IdpNetworkRequestManager::OnAccountsRequestResponse, - weak_ptr_factory_.GetWeakPtr(), std::move(callback), - client_id), + DownloadJsonAndParse( + std::move(url_loader), + base::BindOnce(&IdpNetworkRequestManager::OnAccountsRequestParsed, + weak_ptr_factory_.GetWeakPtr(), client_id, + std::move(callback)), maxResponseSizeInKiB * 1024); } @@ -530,23 +528,18 @@ const std::string& account, const std::string& request, TokenRequestCallback callback) { - DCHECK(!url_loader_); - DCHECK(!token_request_callback_); - - token_request_callback_ = std::move(callback); if (request.empty()) { - std::move(token_request_callback_) - .Run(FetchStatus::kInvalidRequestError, std::string()); + std::move(callback).Run(FetchStatus::kInvalidRequestError, std::string()); return; } - url_loader_ = CreateCredentialedUrlLoader(token_url, - /* send_referrer= */ true, request); - - url_loader_->DownloadToString( - loader_factory_.get(), - base::BindOnce(&IdpNetworkRequestManager::OnTokenRequestResponse, - weak_ptr_factory_.GetWeakPtr()), + std::unique_ptr<network::SimpleURLLoader> url_loader = + CreateCredentialedUrlLoader(token_url, + /* send_referrer= */ true, request); + DownloadJsonAndParse( + std::move(url_loader), + base::BindOnce(&IdpNetworkRequestManager::OnTokenRequestParsed, + weak_ptr_factory_.GetWeakPtr(), std::move(callback)), maxResponseSizeInKiB * 1024); } @@ -579,30 +572,25 @@ const std::string& client_id, const std::string& hint, RevokeCallback callback) { - DCHECK(!url_loader_); - DCHECK(!token_request_callback_); - - revoke_callback_ = std::move(callback); - std::string revoke_request_body; if (!client_id.empty()) revoke_request_body += "client_id=" + client_id; if (hint.empty()) { - std::move(revoke_callback_).Run(RevokeResponse::kError); + std::move(callback).Run(RevokeResponse::kError); return; } if (!revoke_request_body.empty()) revoke_request_body += "&"; revoke_request_body += "hint=" + hint; - url_loader_ = CreateCredentialedUrlLoader( - revoke_url, /* send_referrer= */ true, revoke_request_body); - - url_loader_->DownloadToString( - loader_factory_.get(), + std::unique_ptr<network::SimpleURLLoader> url_loader = + CreateCredentialedUrlLoader(revoke_url, /* send_referrer= */ true, + revoke_request_body); + DownloadUrl( + std::move(url_loader), base::BindOnce(&IdpNetworkRequestManager::OnRevokeResponse, - weak_ptr_factory_.GetWeakPtr()), + weak_ptr_factory_.GetWeakPtr(), std::move(callback)), maxResponseSizeInKiB * 1024); } @@ -610,10 +598,6 @@ LogoutCallback callback) { // TODO(kenrb): Add browser test verifying that the response to this can // clear cookies. https://crbug.com/1155312. - DCHECK(!url_loader_); - DCHECK(!logout_callback_); - - logout_callback_ = std::move(callback); auto resource_request = CreateCredentialedResourceRequest( logout_url, /* send_referrer= */ false, relying_party_origin_, @@ -622,49 +606,50 @@ auto traffic_annotation = CreateTrafficAnnotation(); - url_loader_ = network::SimpleURLLoader::Create(std::move(resource_request), - traffic_annotation); - - url_loader_->DownloadToString( - loader_factory_.get(), + std::unique_ptr<network::SimpleURLLoader> url_loader = + network::SimpleURLLoader::Create(std::move(resource_request), + traffic_annotation); + DownloadUrl( + std::move(url_loader), base::BindOnce(&IdpNetworkRequestManager::OnLogoutCompleted, - weak_ptr_factory_.GetWeakPtr()), + weak_ptr_factory_.GetWeakPtr(), std::move(callback)), maxResponseSizeInKiB * 1024); } -void IdpNetworkRequestManager::OnManifestLoaded( - absl::optional<int> idp_brand_icon_ideal_size, - absl::optional<int> idp_brand_icon_minimum_size, - std::unique_ptr<std::string> response_body) { - FetchStatus response_error = - GetResponseError(url_loader_.get(), response_body.get()); - url_loader_.reset(); +void IdpNetworkRequestManager::DownloadJsonAndParse( + std::unique_ptr<network::SimpleURLLoader> url_loader, + ParseJsonCallback parse_json_callback, + size_t max_download_size) { + DownloadUrl(std::move(url_loader), + base::BindOnce(&OnDownloadedJson, std::move(parse_json_callback)), + max_download_size); +} - if (response_error != FetchStatus::kSuccess) { - std::move(idp_manifest_callback_) - .Run(response_error, Endpoints(), IdentityProviderMetadata()); - return; - } - - data_decoder::DataDecoder::ParseJsonIsolated( - *response_body, - base::BindOnce(&IdpNetworkRequestManager::OnManifestParsed, - weak_ptr_factory_.GetWeakPtr(), idp_brand_icon_ideal_size, - idp_brand_icon_minimum_size)); +void IdpNetworkRequestManager::DownloadUrl( + std::unique_ptr<network::SimpleURLLoader> url_loader, + DownloadCallback callback, + size_t max_download_size) { + network::SimpleURLLoader* url_loader_ptr = url_loader.get(); + url_loader_ptr->DownloadToString( + loader_factory_.get(), + base::BindOnce(&OnDownloadedUrl, std::move(url_loader), + std::move(callback)), + max_download_size); } void IdpNetworkRequestManager::OnManifestParsed( absl::optional<int> idp_brand_icon_ideal_size, absl::optional<int> idp_brand_icon_minimum_size, + FetchManifestCallback callback, + FetchStatus fetch_status, data_decoder::DataDecoder::ValueOrError result) { - if (GetParsingError(result) == FetchStatus::kInvalidResponseError) { - std::move(idp_manifest_callback_) - .Run(FetchStatus::kInvalidResponseError, Endpoints(), - IdentityProviderMetadata()); + if (fetch_status != FetchStatus::kSuccess) { + std::move(callback).Run(fetch_status, Endpoints(), + IdentityProviderMetadata()); return; } - auto& response = *result.value; + auto& response = *result; auto ExtractEndpoint = [&](const char* key) { const base::Value* endpoint = response.FindKey(key); if (!endpoint || !endpoint->is_string()) { @@ -687,160 +672,97 @@ idp_brand_icon_minimum_size, idp_metadata); } - std::move(idp_manifest_callback_) - .Run(FetchStatus::kSuccess, endpoints, std::move(idp_metadata)); -} - -void IdpNetworkRequestManager::OnAccountsRequestResponse( - AccountsRequestCallback callback, - std::string client_id, - std::unique_ptr<std::string> response_body) { - FetchStatus response_error = - GetResponseError(url_loader_.get(), response_body.get()); - url_loader_.reset(); - - if (response_error != FetchStatus::kSuccess) { - std::move(callback).Run(response_error, AccountList()); - return; - } - - data_decoder::DataDecoder::ParseJsonIsolated( - *response_body, - base::BindOnce(&IdpNetworkRequestManager::OnAccountsRequestParsed, - weak_ptr_factory_.GetWeakPtr(), std::move(callback), - client_id)); + std::move(callback).Run(FetchStatus::kSuccess, endpoints, + std::move(idp_metadata)); } void IdpNetworkRequestManager::OnAccountsRequestParsed( - AccountsRequestCallback callback, std::string client_id, + AccountsRequestCallback callback, + FetchStatus fetch_status, data_decoder::DataDecoder::ValueOrError result) { - auto Fail = [&]() { - std::move(callback).Run(FetchStatus::kInvalidResponseError, AccountList()); - }; - - if (GetParsingError(result) == FetchStatus::kInvalidResponseError) { - Fail(); + if (fetch_status != FetchStatus::kSuccess) { + std::move(callback).Run(fetch_status, AccountList()); return; } AccountList account_list; - auto& response = *result.value; + auto& response = *result; const base::Value* accounts = response.FindKey(kAccountsKey); bool accounts_present = accounts && ParseAccounts(accounts, account_list, client_id); if (!accounts_present) { - Fail(); + std::move(callback).Run(FetchStatus::kInvalidResponseError, AccountList()); return; } std::move(callback).Run(FetchStatus::kSuccess, std::move(account_list)); } -void IdpNetworkRequestManager::OnTokenRequestResponse( - std::unique_ptr<std::string> response_body) { - FetchStatus response_error = - GetResponseError(url_loader_.get(), response_body.get()); - url_loader_.reset(); - - if (response_error != FetchStatus::kSuccess) { - std::move(token_request_callback_).Run(response_error, std::string()); - return; - } - - data_decoder::DataDecoder::ParseJsonIsolated( - *response_body, - base::BindOnce(&IdpNetworkRequestManager::OnTokenRequestParsed, - weak_ptr_factory_.GetWeakPtr())); -} - void IdpNetworkRequestManager::OnTokenRequestParsed( + TokenRequestCallback callback, + FetchStatus fetch_status, data_decoder::DataDecoder::ValueOrError result) { - auto Fail = [&]() { - std::move(token_request_callback_) - .Run(FetchStatus::kInvalidResponseError, std::string()); - }; - - if (GetParsingError(result) == FetchStatus::kInvalidResponseError) { - Fail(); + if (fetch_status != FetchStatus::kSuccess) { + std::move(callback).Run(fetch_status, std::string()); return; } - auto& response = *result.value; + auto& response = *result; const base::Value* token = response.FindKey(kTokenKey); bool token_present = token && token->is_string(); if (!token_present) { - Fail(); + std::move(callback).Run(FetchStatus::kInvalidResponseError, std::string()); return; } - std::move(token_request_callback_) - .Run(FetchStatus::kSuccess, token->GetString()); + std::move(callback).Run(FetchStatus::kSuccess, token->GetString()); } void IdpNetworkRequestManager::OnRevokeResponse( - std::unique_ptr<std::string> response_body) { - url_loader_.reset(); + RevokeCallback callback, + std::unique_ptr<std::string> response_body, + int response_code) { RevokeResponse status = response_body ? RevokeResponse::kSuccess : RevokeResponse::kError; - std::move(revoke_callback_).Run(status); + std::move(callback).Run(status); } void IdpNetworkRequestManager::OnLogoutCompleted( - std::unique_ptr<std::string> response_body) { - url_loader_.reset(); - std::move(logout_callback_).Run(); + LogoutCallback callback, + std::unique_ptr<std::string> response_body, + int response_code) { + std::move(callback).Run(); } void IdpNetworkRequestManager::FetchClientMetadata( const GURL& endpoint, const std::string& client_id, FetchClientMetadataCallback callback) { - DCHECK(!url_loader_); - DCHECK(!client_metadata_callback_); - - client_metadata_callback_ = std::move(callback); - GURL target_url = endpoint.Resolve( "?client_id=" + base::EscapeQueryParamValue(client_id, true)); - url_loader_ = + std::unique_ptr<network::SimpleURLLoader> url_loader = CreateUncredentialedUrlLoader(target_url, /* send_referrer= */ true); - url_loader_->DownloadToString( - loader_factory_.get(), - base::BindOnce(&IdpNetworkRequestManager::OnClientMetadataLoaded, - weak_ptr_factory_.GetWeakPtr()), + DownloadJsonAndParse( + std::move(url_loader), + base::BindOnce(&IdpNetworkRequestManager::OnClientMetadataParsed, + weak_ptr_factory_.GetWeakPtr(), std::move(callback)), maxResponseSizeInKiB * 1024); } -void IdpNetworkRequestManager::OnClientMetadataLoaded( - std::unique_ptr<std::string> response_body) { - FetchStatus response_error = - GetResponseError(url_loader_.get(), response_body.get()); - url_loader_.reset(); - - if (response_error != FetchStatus::kSuccess) { - std::move(client_metadata_callback_).Run(response_error, ClientMetadata()); - return; - } - - data_decoder::DataDecoder::ParseJsonIsolated( - *response_body, - base::BindOnce(&IdpNetworkRequestManager::OnClientMetadataParsed, - weak_ptr_factory_.GetWeakPtr())); -} - void IdpNetworkRequestManager::OnClientMetadataParsed( + FetchClientMetadataCallback callback, + FetchStatus fetch_status, data_decoder::DataDecoder::ValueOrError result) { - if (GetParsingError(result) == FetchStatus::kInvalidResponseError) { - std::move(client_metadata_callback_) - .Run(FetchStatus::kInvalidResponseError, ClientMetadata()); + if (fetch_status != FetchStatus::kSuccess) { + std::move(callback).Run(fetch_status, ClientMetadata()); return; } - auto& response = *result.value; + auto& response = *result; auto ExtractUrl = [&](const char* key) { const base::Value* endpoint = response.FindKey(key); if (!endpoint || !endpoint->is_string()) { @@ -853,7 +775,7 @@ data.privacy_policy_url = ExtractUrl(kPrivacyPolicyKey); data.terms_of_service_url = ExtractUrl(kTermsOfServiceKey); - std::move(client_metadata_callback_).Run(FetchStatus::kSuccess, data); + std::move(callback).Run(FetchStatus::kSuccess, data); } std::unique_ptr<network::SimpleURLLoader>
diff --git a/content/browser/webid/idp_network_request_manager.h b/content/browser/webid/idp_network_request_manager.h index fd2390e..9b03e014e 100644 --- a/content/browser/webid/idp_network_request_manager.h +++ b/content/browser/webid/idp_network_request_manager.h
@@ -99,18 +99,24 @@ static constexpr char kManifestFilePath[] = "fedcm.json"; using AccountList = std::vector<content::IdentityRequestAccount>; + using AccountsRequestCallback = + base::OnceCallback<void(FetchStatus, AccountList)>; + using DownloadCallback = + base::OnceCallback<void(std::unique_ptr<std::string> response_body, + int response_code)>; using FetchManifestListCallback = base::OnceCallback<void(FetchStatus, const std::set<GURL>&)>; using FetchManifestCallback = base::OnceCallback< void(FetchStatus, Endpoints, IdentityProviderMetadata)>; using FetchClientMetadataCallback = base::OnceCallback<void(FetchStatus, ClientMetadata)>; - using AccountsRequestCallback = - base::OnceCallback<void(FetchStatus, AccountList)>; + using LogoutCallback = base::OnceCallback<void()>; + using ParseJsonCallback = + base::OnceCallback<void(FetchStatus fetch_status, + data_decoder::DataDecoder::ValueOrError)>; + using RevokeCallback = base::OnceCallback<void(RevokeResponse)>; using TokenRequestCallback = base::OnceCallback<void(FetchStatus, const std::string&)>; - using RevokeCallback = base::OnceCallback<void(RevokeResponse)>; - using LogoutCallback = base::OnceCallback<void()>; static std::unique_ptr<IdpNetworkRequestManager> Create( const GURL& provider, @@ -165,24 +171,40 @@ virtual void SendLogout(const GURL& logout_url, LogoutCallback); private: - void OnManifestLoaded(absl::optional<int> idp_brand_icon_ideal_size, - absl::optional<int> idp_brand_icon_minimum_size, - std::unique_ptr<std::string> response_body); + // Starts download request using `url_loader`. Calls `parse_json_callback` + // when the download result has been parsed. + void DownloadJsonAndParse( + std::unique_ptr<network::SimpleURLLoader> url_loader, + ParseJsonCallback parse_json_callback, + size_t max_download_size); + + // Starts download result using `url_loader`. Calls `download_callback` when + // the download completes. + void DownloadUrl(std::unique_ptr<network::SimpleURLLoader> url_loader, + DownloadCallback download_callback, + size_t max_download_size); + void OnManifestParsed(absl::optional<int> idp_brand_icon_ideal_size, absl::optional<int> idp_brand_icon_minimum_size, + FetchManifestCallback callback, + FetchStatus fetch_status, data_decoder::DataDecoder::ValueOrError result); - void OnClientMetadataLoaded(std::unique_ptr<std::string> response_body); - void OnClientMetadataParsed(data_decoder::DataDecoder::ValueOrError result); - void OnAccountsRequestResponse(AccountsRequestCallback callback, - std::string client_id, - std::unique_ptr<std::string> response_body); - void OnAccountsRequestParsed(AccountsRequestCallback callback, - std::string client_id, + void OnClientMetadataParsed(FetchClientMetadataCallback callback, + FetchStatus fetch_status, + data_decoder::DataDecoder::ValueOrError result); + void OnAccountsRequestParsed(std::string client_id, + AccountsRequestCallback callback, + FetchStatus fetch_status, data_decoder::DataDecoder::ValueOrError result); - void OnTokenRequestResponse(std::unique_ptr<std::string> response_body); - void OnTokenRequestParsed(data_decoder::DataDecoder::ValueOrError result); - void OnRevokeResponse(std::unique_ptr<std::string> response_body); - void OnLogoutCompleted(std::unique_ptr<std::string> response_body); + void OnTokenRequestParsed(TokenRequestCallback callback, + FetchStatus fetch_status, + data_decoder::DataDecoder::ValueOrError result); + void OnRevokeResponse(RevokeCallback callback, + std::unique_ptr<std::string> response_body, + int response_code); + void OnLogoutCompleted(LogoutCallback callback, + std::unique_ptr<std::string> response_body, + int response_code); std::unique_ptr<network::SimpleURLLoader> CreateUncredentialedUrlLoader( const GURL& url, @@ -200,18 +222,6 @@ scoped_refptr<network::SharedURLLoaderFactory> loader_factory_; - FetchManifestCallback idp_manifest_callback_; - FetchClientMetadataCallback client_metadata_callback_; - TokenRequestCallback token_request_callback_; - RevokeCallback revoke_callback_; - LogoutCallback logout_callback_; - - // url_loader_ is used for all loads except for the manifest list, which uses - // a different SimpleURLLoader. This is so we can fetch the manifest list in - // parallel with the other requests. - // TODO(cbiesinger): Also allow fetching the client metadata file in - // parallel with the account list. - std::unique_ptr<network::SimpleURLLoader> url_loader_; network::mojom::ClientSecurityStatePtr client_security_state_; base::WeakPtrFactory<IdpNetworkRequestManager> weak_ptr_factory_{this};
diff --git a/content/public/android/java/src/org/chromium/content_public/browser/NavigationHandle.java b/content/public/android/java/src/org/chromium/content_public/browser/NavigationHandle.java index b961b68..fd38b62 100644 --- a/content/public/android/java/src/org/chromium/content_public/browser/NavigationHandle.java +++ b/content/public/android/java/src/org/chromium/content_public/browser/NavigationHandle.java
@@ -304,14 +304,6 @@ } /** - * TODO(https://crbug.com/1310013): This is a hack, restoring M99 Chrome behavior for gesture - * carryover on resource requests. To be deleted as soon as a better alternative is agreed upon. - */ - public void setUserGestureForCarryover(boolean hasUserGesture) { - mHasUserGesture = hasUserGesture; - } - - /** * Whether this navigation was initiated by a page reload. */ public boolean isReload() {
diff --git a/content/test/data/attribution_reporting/interop/event_level_trigger_priority.json b/content/test/data/attribution_reporting/interop/event_level_trigger_priority.json new file mode 100644 index 0000000..52dc80b --- /dev/null +++ b/content/test/data/attribution_reporting/interop/event_level_trigger_priority.json
@@ -0,0 +1,183 @@ +{ + "description": "Trigger priority for event-level reports", + "input": { + "sources": [ + { + "timestamp": "1643235573000", + "registration_request": { + "source_origin": "https://source.test", + "attribution_src_url": "https://reporter.test/register-source", + "source_type": "navigation" + }, + "responses": [{ + "url": "https://reporter.test/register-source", + "response": { + "Attribution-Reporting-Register-Source": { + "destination": "https://destination.test", + "source_event_id": "123" + } + } + }] + } + ], + "triggers": [ + { + "timestamp": "1643235574000", + "registration_request": { + "attribution_src_url": "https://reporter.test/register-trigger", + "destination_origin": "https://destination.test" + }, + "responses": [{ + "url": "https://reporter.test/register-trigger", + "response": { + "Attribution-Reporting-Register-Trigger": { + "event_trigger_data": [ + { + "trigger_data": "1", + "priority": "1" + } + ] + } + } + }] + }, + { + "timestamp": "1643235575000", + "registration_request": { + "attribution_src_url": "https://reporter.test/register-trigger", + "destination_origin": "https://destination.test" + }, + "responses": [{ + "url": "https://reporter.test/register-trigger", + "response": { + "Attribution-Reporting-Register-Trigger": { + "event_trigger_data": [ + { + "trigger_data": "2", + "priority": "1" + } + ] + } + } + }] + }, + { + "timestamp": "1643235576000", + "registration_request": { + "attribution_src_url": "https://reporter.test/register-trigger", + "destination_origin": "https://destination.test" + }, + "responses": [{ + "url": "https://reporter.test/register-trigger", + "response": { + "Attribution-Reporting-Register-Trigger": { + "event_trigger_data": [ + { + "trigger_data": "3", + "priority": "1" + } + ] + } + } + }] + }, + { + "timestamp": "1643235577000", + "registration_request": { + "attribution_src_url": "https://reporter.test/register-trigger", + "destination_origin": "https://destination.test" + }, + "responses": [{ + "url": "https://reporter.test/register-trigger", + "response": { + "Attribution-Reporting-Register-Trigger": { + "event_trigger_data": [ + { + "trigger_data": "4", + "priority": "1" + } + ] + } + } + }] + }, + { + "timestamp": "1643235578000", + "registration_request": { + "attribution_src_url": "https://reporter.test/register-trigger", + "destination_origin": "https://destination.test" + }, + "responses": [{ + "url": "https://reporter.test/register-trigger", + "response": { + "Attribution-Reporting-Register-Trigger": { + "event_trigger_data": [ + { + "trigger_data": "5", + "priority": "2" + } + ] + } + } + }] + }, + { + "timestamp": "1643404774000", + "registration_request": { + "attribution_src_url": "https://reporter.test/register-trigger", + "destination_origin": "https://destination.test" + }, + "responses": [{ + "url": "https://reporter.test/register-trigger", + "response": { + "Attribution-Reporting-Register-Trigger": { + "event_trigger_data": [ + { + "trigger_data": "6", + "priority": "3" + } + ] + } + } + }] + } + ] + }, + "output": { + "event_level_results": [ + { + "payload": { + "attribution_destination": "https://destination.test", + "randomized_trigger_rate": 0.0024, + "source_event_id": "123", + "source_type": "navigation", + "trigger_data": "1" + }, + "report_url": "https://reporter.test/.well-known/attribution-reporting/report-event-attribution", + "report_time": "1643408373000" + }, + { + "payload": { + "attribution_destination": "https://destination.test", + "randomized_trigger_rate": 0.0024, + "source_event_id": "123", + "source_type": "navigation", + "trigger_data": "2" + }, + "report_url": "https://reporter.test/.well-known/attribution-reporting/report-event-attribution", + "report_time": "1643408373000" + }, + { + "payload": { + "attribution_destination": "https://destination.test", + "randomized_trigger_rate": 0.0024, + "source_event_id": "123", + "source_type": "navigation", + "trigger_data": "5" + }, + "report_url": "https://reporter.test/.well-known/attribution-reporting/report-event-attribution", + "report_time": "1643408373000" + } + ] + } +}
diff --git a/content/test/data/attribution_reporting/interop/rate_limit_max_attribution_reporting_endpoints.json b/content/test/data/attribution_reporting/interop/rate_limit_max_attribution_reporting_endpoints.json new file mode 100644 index 0000000..67fe774 --- /dev/null +++ b/content/test/data/attribution_reporting/interop/rate_limit_max_attribution_reporting_endpoints.json
@@ -0,0 +1,223 @@ +{ + "description": "Max attribution reporting endpoints per rate-limit window", + "api_config": { + "rate_limit_max_attribution_reporting_origins": "1" + }, + "input": { + "sources": [ + { + "timestamp": "1643235573000", + "registration_request": { + "source_origin": "https://source.test", + "attribution_src_url": "https://reporter.test/register-source", + "source_type": "navigation" + }, + "responses": [{ + "url": "https://reporter.test/register-source", + "response": { + "Attribution-Reporting-Register-Source": { + "destination": "https://destination.test", + "source_event_id": "123" + } + } + }] + }, + { + "timestamp": "1643235575000", + "registration_request": { + "source_origin": "https://another-source.test", + "attribution_src_url": "https://another-reporter.test/register-source", + "source_type": "navigation" + }, + "responses": [{ + "url": "https://another-reporter.test/register-source", + "response": { + "Attribution-Reporting-Register-Source": { + "destination": "https://destination.test", + "source_event_id": "123" + } + } + }] + }, + { + "timestamp": "1643235577000", + "registration_request": { + "source_origin": "https://source.test", + "attribution_src_url": "https://another-reporter.test/register-source", + "source_type": "navigation" + }, + "responses": [{ + "url": "https://another-reporter.test/register-source", + "response": { + "Attribution-Reporting-Register-Source": { + "destination": "https://another-destination.test", + "source_event_id": "123" + } + } + }] + }, + { + "timestamp": "1643235579000", + "registration_request": { + "source_origin": "https://source.test", + "attribution_src_url": "https://another-reporter.test/register-source", + "source_type": "event" + }, + "responses": [{ + "url": "https://another-reporter.test/register-source", + "response": { + "Attribution-Reporting-Register-Source": { + "destination": "https://destination.test", + "source_event_id": "123" + } + } + }] + } + ], + "triggers": [ + { + "timestamp": "1643235574000", + "registration_request": { + "attribution_src_url": "https://reporter.test/register-trigger", + "destination_origin": "https://destination.test" + }, + "responses": [{ + "url": "https://reporter.test/register-trigger", + "response": { + "Attribution-Reporting-Register-Trigger": { + "event_trigger_data": [ + { + "trigger_data": "7" + } + ] + } + } + }] + }, + { + "timestamp": "1643235576000", + "registration_request": { + "attribution_src_url": "https://another-reporter.test/register-trigger", + "destination_origin": "https://destination.test" + }, + "responses": [{ + "url": "https://another-reporter.test/register-trigger", + "response": { + "Attribution-Reporting-Register-Trigger": { + "event_trigger_data": [ + { + "trigger_data": "6" + } + ] + } + } + }] + }, + { + "timestamp": "1643235578000", + "registration_request": { + "attribution_src_url": "https://another-reporter.test/register-trigger", + "destination_origin": "https://another-destination.test" + }, + "responses": [{ + "url": "https://another-reporter.test/register-trigger", + "response": { + "Attribution-Reporting-Register-Trigger": { + "event_trigger_data": [ + { + "trigger_data": "5" + } + ] + } + } + }] + }, + { + "timestamp": "1643235580000", + "registration_request": { + "attribution_src_url": "https://another-reporter.test/register-trigger", + "destination_origin": "https://destination.test" + }, + "responses": [{ + "url": "https://another-reporter.test/register-trigger", + "response": { + "Attribution-Reporting-Register-Trigger": { + "event_trigger_data": [ + { + "trigger_data": "4" + } + ] + } + } + }] + }, + { + "timestamp": "1645827574000", + "registration_request": { + "attribution_src_url": "https://another-reporter.test/register-trigger", + "destination_origin": "https://destination.test" + }, + "responses": [{ + "url": "https://another-reporter.test/register-trigger", + "response": { + "Attribution-Reporting-Register-Trigger": { + "event_trigger_data": [ + { + "trigger_data": "3" + } + ] + } + } + }] + } + ] + }, + "output": { + "event_level_results": [ + { + "payload": { + "attribution_destination": "https://destination.test", + "randomized_trigger_rate": 0.0024, + "source_event_id": "123", + "source_type": "navigation", + "trigger_data": "7" + }, + "report_url": "https://reporter.test/.well-known/attribution-reporting/report-event-attribution", + "report_time": "1643408373000" + }, + { + "payload": { + "attribution_destination": "https://destination.test", + "randomized_trigger_rate": 0.0024, + "source_event_id": "123", + "source_type": "navigation", + "trigger_data": "6" + }, + "report_url": "https://another-reporter.test/.well-known/attribution-reporting/report-event-attribution", + "report_time": "1643408375000" + }, + { + "payload": { + "attribution_destination": "https://another-destination.test", + "randomized_trigger_rate": 0.0024, + "source_event_id": "123", + "source_type": "navigation", + "trigger_data": "5" + }, + "report_url": "https://another-reporter.test/.well-known/attribution-reporting/report-event-attribution", + "report_time": "1643408377000" + }, + { + "payload": { + "attribution_destination": "https://destination.test", + "randomized_trigger_rate": 0.0000025, + "source_event_id": "123", + "source_type": "event", + "trigger_data": "1" + }, + "report_url": "https://another-reporter.test/.well-known/attribution-reporting/report-event-attribution", + "report_time": "1645831179000" + } + ] + } +}
diff --git a/content/test/data/attribution_reporting/interop/rate_limit_max_attributions.json b/content/test/data/attribution_reporting/interop/rate_limit_max_attributions.json new file mode 100644 index 0000000..d5b4487 --- /dev/null +++ b/content/test/data/attribution_reporting/interop/rate_limit_max_attributions.json
@@ -0,0 +1,271 @@ +{ + "description": "Max attributions per rate-limit window", + "api_config": { + "rate_limit_max_attributions": "1" + }, + "input": { + "sources": [ + { + "timestamp": "1643235573000", + "registration_request": { + "source_origin": "https://source.test", + "attribution_src_url": "https://reporter.test/register-source", + "source_type": "navigation" + }, + "responses": [{ + "url": "https://reporter.test/register-source", + "response": { + "Attribution-Reporting-Register-Source": { + "destination": "https://destination.test", + "source_event_id": "123", + "expiry": "86400" + } + } + }] + }, + { + "timestamp": "1643235575000", + "registration_request": { + "source_origin": "https://another-source.test", + "attribution_src_url": "https://reporter.test/register-source", + "source_type": "navigation" + }, + "responses": [{ + "url": "https://reporter.test/register-source", + "response": { + "Attribution-Reporting-Register-Source": { + "destination": "https://destination.test", + "source_event_id": "123" + } + } + }] + }, + { + "timestamp": "1643235577000", + "registration_request": { + "source_origin": "https://source.test", + "attribution_src_url": "https://reporter.test/register-source", + "source_type": "navigation" + }, + "responses": [{ + "url": "https://reporter.test/register-source", + "response": { + "Attribution-Reporting-Register-Source": { + "destination": "https://another-destination.test", + "source_event_id": "123" + } + } + }] + }, + { + "timestamp": "1643235579000", + "registration_request": { + "source_origin": "https://source.test", + "attribution_src_url": "https://another-reporter.test/register-source", + "source_type": "navigation" + }, + "responses": [{ + "url": "https://another-reporter.test/register-source", + "response": { + "Attribution-Reporting-Register-Source": { + "destination": "https://destination.test", + "source_event_id": "123" + } + } + }] + }, + { + "timestamp": "1643235581000", + "registration_request": { + "source_origin": "https://source.test", + "attribution_src_url": "https://reporter.test/register-source", + "source_type": "event" + }, + "responses": [{ + "url": "https://reporter.test/register-source", + "response": { + "Attribution-Reporting-Register-Source": { + "destination": "https://destination.test", + "source_event_id": "123" + } + } + }] + } + ], + "triggers": [ + { + "timestamp": "1643235574000", + "registration_request": { + "attribution_src_url": "https://reporter.test/register-trigger", + "destination_origin": "https://destination.test" + }, + "responses": [{ + "url": "https://reporter.test/register-trigger", + "response": { + "Attribution-Reporting-Register-Trigger": { + "event_trigger_data": [ + { + "trigger_data": "1" + } + ] + } + } + }] + }, + { + "timestamp": "1643235576000", + "registration_request": { + "attribution_src_url": "https://reporter.test/register-trigger", + "destination_origin": "https://destination.test" + }, + "responses": [{ + "url": "https://reporter.test/register-trigger", + "response": { + "Attribution-Reporting-Register-Trigger": { + "event_trigger_data": [ + { + "trigger_data": "2" + } + ] + } + } + }] + }, + { + "timestamp": "1643235578000", + "registration_request": { + "attribution_src_url": "https://reporter.test/register-trigger", + "destination_origin": "https://another-destination.test" + }, + "responses": [{ + "url": "https://reporter.test/register-trigger", + "response": { + "Attribution-Reporting-Register-Trigger": { + "event_trigger_data": [ + { + "trigger_data": "3" + } + ] + } + } + }] + }, + { + "timestamp": "1643235580000", + "registration_request": { + "attribution_src_url": "https://another-reporter.test/register-trigger", + "destination_origin": "https://destination.test" + }, + "responses": [{ + "url": "https://another-reporter.test/register-trigger", + "response": { + "Attribution-Reporting-Register-Trigger": { + "event_trigger_data": [ + { + "trigger_data": "4" + } + ] + } + } + }] + }, + { + "timestamp": "1643235582000", + "registration_request": { + "attribution_src_url": "https://reporter.test/register-trigger", + "destination_origin": "https://destination.test" + }, + "responses": [{ + "url": "https://reporter.test/register-trigger", + "response": { + "Attribution-Reporting-Register-Trigger": { + "event_trigger_data": [ + { + "trigger_data": "5" + } + ] + } + } + }] + }, + { + "timestamp": "1645827574000", + "registration_request": { + "attribution_src_url": "https://reporter.test/register-trigger", + "destination_origin": "https://destination.test" + }, + "responses": [{ + "url": "https://reporter.test/register-trigger", + "response": { + "Attribution-Reporting-Register-Trigger": { + "event_trigger_data": [ + { + "trigger_data": "6" + } + ] + } + } + }] + } + ] + }, + "output": { + "event_level_results": [ + { + "payload": { + "attribution_destination": "https://destination.test", + "randomized_trigger_rate": 0.0024, + "source_event_id": "123", + "source_type": "navigation", + "trigger_data": "1" + }, + "report_url": "https://reporter.test/.well-known/attribution-reporting/report-event-attribution", + "report_time": "1643408373000" + }, + { + "payload": { + "attribution_destination": "https://destination.test", + "randomized_trigger_rate": 0.0024, + "source_event_id": "123", + "source_type": "navigation", + "trigger_data": "2" + }, + "report_url": "https://reporter.test/.well-known/attribution-reporting/report-event-attribution", + "report_time": "1643408375000" + }, + { + "payload": { + "attribution_destination": "https://another-destination.test", + "randomized_trigger_rate": 0.0024, + "source_event_id": "123", + "source_type": "navigation", + "trigger_data": "3" + }, + "report_url": "https://reporter.test/.well-known/attribution-reporting/report-event-attribution", + "report_time": "1643408377000" + }, + { + "payload": { + "attribution_destination": "https://destination.test", + "randomized_trigger_rate": 0.0024, + "source_event_id": "123", + "source_type": "navigation", + "trigger_data": "4" + }, + "report_url": "https://another-reporter.test/.well-known/attribution-reporting/report-event-attribution", + "report_time": "1643408379000" + }, + { + "payload": { + "attribution_destination": "https://destination.test", + "randomized_trigger_rate": 0.0000025, + "source_event_id": "123", + "source_type": "event", + "trigger_data": "0" + }, + "report_url": "https://reporter.test/.well-known/attribution-reporting/report-event-attribution", + "report_time": "1645831181000" + } + ] + } +}
diff --git a/content/test/data/interest_group/bidding_logic_stop_bidding_after_win.js b/content/test/data/interest_group/bidding_logic_stop_bidding_after_win.js index 90b2c44..0f446440 100644 --- a/content/test/data/interest_group/bidding_logic_stop_bidding_after_win.js +++ b/content/test/data/interest_group/bidding_logic_stop_bidding_after_win.js
@@ -17,5 +17,6 @@ auctionSignals, perBuyerSignals, sellerSignals, browserSignals) { sendReportTo( browserSignals.interestGroupOwner + - '/echoall?report_bidder_stop_bidding_after_win'); + '/echoall?report_bidder_stop_bidding_after_win&' + + browserSignals.interestGroupName); }
diff --git a/device/bluetooth/bluetooth_adapter_mac_unittest.mm b/device/bluetooth/bluetooth_adapter_mac_unittest.mm index b236108d..bceca7a1 100644 --- a/device/bluetooth/bluetooth_adapter_mac_unittest.mm +++ b/device/bluetooth/bluetooth_adapter_mac_unittest.mm
@@ -234,7 +234,14 @@ // Test if private IOBluetooth APIs are callable on all supported macOS // versions. -TEST_F(BluetoothAdapterMacTest, IOBluetoothPrivateAPIs) { +// TODO(crbug.com/1344137): This test is flaky on all Mac builders and timing +// out frequently on Mac11. +#if BUILDFLAG(IS_MAC) +#define MAYBE_IOBluetoothPrivateAPIs DISABLED_IOBluetoothPrivateAPIs +#else +#define MAYBE_IOBluetoothPrivateAPIs IOBluetoothPrivateAPIs +#endif +TEST_F(BluetoothAdapterMacTest, MAYBE_IOBluetoothPrivateAPIs) { // Obtain current power state, toggle it, and reset it to it's original value. int previous_state = IOBluetoothPreferenceGetControllerPowerState(); IOBluetoothPreferenceSetControllerPowerState(!previous_state);
diff --git a/extensions/browser/api/declarative_net_request/file_backed_ruleset_source.cc b/extensions/browser/api/declarative_net_request/file_backed_ruleset_source.cc index 872ac0f..46acdb3 100644 --- a/extensions/browser/api/declarative_net_request/file_backed_ruleset_source.cc +++ b/extensions/browser/api/declarative_net_request/file_backed_ruleset_source.cc
@@ -218,15 +218,15 @@ uint8_t parse_flags, FileBackedRulesetSource::IndexAndPersistJSONRulesetCallback callback, data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { + if (!result.has_value()) { std::move(callback).Run(IndexAndPersistJSONRulesetResult::CreateErrorResult( - GetErrorWithFilename(json_path, *result.error))); + GetErrorWithFilename(json_path, result.error()))); return; } base::ElapsedTimer timer; ReadJSONRulesResult read_result = ParseRulesFromJSON( - source.id(), json_path, *result.value, source.rule_count_limit(), + source.id(), json_path, *result, source.rule_count_limit(), source.is_dynamic_ruleset()); std::move(callback).Run(IndexAndPersistRuleset(source, std::move(read_result),
diff --git a/extensions/browser/api/management/management_api.cc b/extensions/browser/api/management/management_api.cc index 7f501cd6..edb0f1c 100644 --- a/extensions/browser/api/management/management_api.cc +++ b/extensions/browser/api/management/management_api.cc
@@ -347,8 +347,8 @@ } void ManagementGetPermissionWarningsByManifestFunction::OnParse( data_decoder::DataDecoder::ValueOrError result) { - if (!result.value) { - Respond(Error(*result.error)); + if (!result.has_value()) { + Respond(Error(result.error())); // Matched with AddRef() in Run(). Release(); @@ -356,7 +356,7 @@ } const base::DictionaryValue* parsed_manifest; - if (!result.value->GetAsDictionary(&parsed_manifest)) { + if (!result->GetAsDictionary(&parsed_manifest)) { Respond(Error(keys::kManifestParseError)); Release(); return;
diff --git a/extensions/browser/extension_prefs.cc b/extensions/browser/extension_prefs.cc index 8f3a0d2a..5efa4e100 100644 --- a/extensions/browser/extension_prefs.cc +++ b/extensions/browser/extension_prefs.cc
@@ -1225,6 +1225,20 @@ permissions); } +void ExtensionPrefs::AddDesiredActivePermissions( + const ExtensionId& extension_id, + const PermissionSet& permissions) { + AddToPrefPermissionSet(extension_id, permissions, + kPrefDesiredActivePermissions); +} + +void ExtensionPrefs::RemoveDesiredActivePermissions( + const ExtensionId& extension_id, + const PermissionSet& permissions) { + RemoveFromPrefPermissionSet(extension_id, permissions, + kPrefDesiredActivePermissions); +} + void ExtensionPrefs::SetWithholdingPermissions(const ExtensionId& extension_id, bool should_withhold) { UpdateExtensionPref(extension_id, kPrefWithholdingPermissions,
diff --git a/extensions/browser/extension_prefs.h b/extensions/browser/extension_prefs.h index 8ce2c3f..0148db6c 100644 --- a/extensions/browser/extension_prefs.h +++ b/extensions/browser/extension_prefs.h
@@ -497,6 +497,16 @@ void SetDesiredActivePermissions(const std::string& extension_id, const PermissionSet& permissions); + // Adds `permissions` to the set of permissions the extension desires to be + // active. + void AddDesiredActivePermissions(const ExtensionId& extension_id, + const PermissionSet& permissions); + + // Removes `permissions` to the set of permissions the extension desires to be + // active. + void RemoveDesiredActivePermissions(const ExtensionId& extension_id, + const PermissionSet& permissions); + // Sets/Gets the value indicating if an extension should be granted all the // requested host permissions without requiring explicit runtime-granted // permissions from the user.
diff --git a/extensions/browser/permissions_manager.cc b/extensions/browser/permissions_manager.cc index fd995f9..b850c9e 100644 --- a/extensions/browser/permissions_manager.cc +++ b/extensions/browser/permissions_manager.cc
@@ -246,31 +246,20 @@ PermissionSet::CreateUnion(user_permitted_set, *GetRuntimePermissionsFromPrefs(extension)); - // 2) Calculate the set of all permissions the extension requests. This is the - // union of optional and required permissions in the extension's manifest. - const PermissionSet& required_permissions = - PermissionsParser::GetRequiredPermissions(&extension); - std::unique_ptr<const PermissionSet> requested_permissions = - PermissionSet::CreateUnion( - required_permissions, - PermissionsParser::GetOptionalPermissions(&extension)); - - // 3) Determine the active permissions, within the bounds of requested - // permissions. "Active permissions" here are the permissions the extension - // most recently set for itself, as extensions can revoke their own - // permissions via chrome.permissions.remove() (which removes the + // 2) Calculate the set of extension-desired permissions, which is the set of + // permissions the extension most recently set for itself (this may be + // different than granted, as extensions can remove permissions from + // themselves via chrome.permissions.remove() (which removes the // permission from the active set, but not the granted set). - std::unique_ptr<const PermissionSet> stored_desired_active_permissions = - extension_prefs_->GetDesiredActivePermissions(extension.id()); - std::unique_ptr<const PermissionSet> bounded_active = - PermissionSet::CreateIntersection(*stored_desired_active_permissions, - *requested_permissions); - // Since we don't allow withholding of API and manifest permissions, the - // allowed set always contains all (bounded) requested API and manifest - // permissions. + std::unique_ptr<const PermissionSet> bounded_desired = + GetBoundedExtensionDesiredPermissions(extension); + + // 3) Finalize the allowed set. Since we don't allow withholding of API and + // manifest permissions, the allowed set always contains all (bounded) + // requested API and manifest permissions. allowed_permissions = std::make_unique<const PermissionSet>( - bounded_active->apis().Clone(), - bounded_active->manifest_permissions().Clone(), + bounded_desired->apis().Clone(), + bounded_desired->manifest_permissions().Clone(), allowed_permissions->explicit_hosts().Clone(), allowed_permissions->scriptable_hosts().Clone()); @@ -283,10 +272,11 @@ // new active set. std::unique_ptr<const PermissionSet> new_active = PermissionSet::CreateIntersection( - *allowed_permissions, *bounded_active, + *allowed_permissions, *bounded_desired, URLPatternSet::IntersectionBehavior::kDetailed); std::unique_ptr<const PermissionSet> new_withheld = - PermissionSet::CreateDifference(required_permissions, *new_active); + PermissionSet::CreateDifference( + PermissionsParser::GetRequiredPermissions(&extension), *new_active); // Set the new permissions on the extension. extension.permissions_data()->SetPermissions(std::move(new_active), @@ -452,7 +442,7 @@ } std::unique_ptr<const PermissionSet> -PermissionsManager::GetExtensionDesiredPermissionsFromPrefs( +PermissionsManager::GetBoundedExtensionDesiredPermissions( const Extension& extension) const { // Determine the extension's "required" permissions (though even these can // be withheld).
diff --git a/extensions/browser/permissions_manager.h b/extensions/browser/permissions_manager.h index 14fac59..fc548289 100644 --- a/extensions/browser/permissions_manager.h +++ b/extensions/browser/permissions_manager.h
@@ -176,10 +176,7 @@ // Returns the set of permissions that the `extension` wants to have active at // this time. This does *not* take into account user-granted or runtime- // withheld permissions. - // TODO(https://crbug.com/1268198): This should be a private method once we - // refactor a bit more and have PermissionsManager handle more of permission - // initialization. - std::unique_ptr<const PermissionSet> GetExtensionDesiredPermissionsFromPrefs( + std::unique_ptr<const PermissionSet> GetBoundedExtensionDesiredPermissions( const Extension& extension) const; // Returns the set of permissions that should be granted to the given
diff --git a/extensions/browser/sandboxed_unpacker.cc b/extensions/browser/sandboxed_unpacker.cc index 92ed57f..ea5fa4e 100644 --- a/extensions/browser/sandboxed_unpacker.cc +++ b/extensions/browser/sandboxed_unpacker.cc
@@ -384,9 +384,9 @@ void SandboxedUnpacker::OnVerifiedContentsUncompressed( const base::FilePath& unzip_dir, - data_decoder::DataDecoder::ResultOrError<mojo_base::BigBuffer> result) { + base::expected<mojo_base::BigBuffer, std::string> result) { DCHECK(unpacker_io_task_runner_->RunsTasksInCurrentSequence()); - if (!result.value) { + if (!result.has_value()) { ReportFailure(SandboxedUnpackerFailureReason:: CRX_HEADER_VERIFIED_CONTENTS_UNCOMPRESSING_FAILURE, l10n_util::GetStringFUTF16( @@ -396,9 +396,8 @@ } // Make a copy, since |result| may store data in shared memory, accessible by // some other processes. - std::vector<uint8_t> verified_contents( - result.value.value().data(), - result.value.value().data() + result.value.value().size()); + std::vector<uint8_t> verified_contents(result->data(), + result->data() + result->size()); client_->GetContentVerifierKey( base::BindOnce(&SandboxedUnpacker::StoreVerifiedContentsInExtensionDir,
diff --git a/extensions/browser/sandboxed_unpacker.h b/extensions/browser/sandboxed_unpacker.h index cdd4e0c..c774dd2 100644 --- a/extensions/browser/sandboxed_unpacker.h +++ b/extensions/browser/sandboxed_unpacker.h
@@ -187,7 +187,7 @@ // Callback which is called after the verified contents are uncompressed. void OnVerifiedContentsUncompressed( const base::FilePath& unzip_dir, - data_decoder::DataDecoder::ResultOrError<mojo_base::BigBuffer> result); + base::expected<mojo_base::BigBuffer, std::string> result); // Verifies the decompressed verified contents fetched from the header of CRX // and stores them if the verification of these contents is successful.
diff --git a/extensions/browser/updater/safe_manifest_parser.cc b/extensions/browser/updater/safe_manifest_parser.cc index f953452..28f62df8 100644 --- a/extensions/browser/updater/safe_manifest_parser.cc +++ b/extensions/browser/updater/safe_manifest_parser.cc
@@ -168,15 +168,15 @@ void ParseXmlDone(ParseUpdateManifestCallback callback, data_decoder::DataDecoder::ValueOrError result) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - if (!result.value) { - ManifestParseFailure failure("Failed to parse XML: " + *result.error, + if (!result.has_value()) { + ManifestParseFailure failure("Failed to parse XML: " + result.error(), ManifestInvalidError::XML_PARSING_FAILED); ReportError(std::move(callback), failure); return; } auto results = std::make_unique<UpdateManifestResults>(); - base::Value& root = *result.value; + base::Value& root = *result; // Look for the required namespace declaration. std::string gupdate_ns;
diff --git a/fuchsia_web/runners/cast/cast_component.cc b/fuchsia_web/runners/cast/cast_component.cc index 1ca401d..16212be1 100644 --- a/fuchsia_web/runners/cast/cast_component.cc +++ b/fuchsia_web/runners/cast/cast_component.cc
@@ -104,12 +104,14 @@ void CastComponent::ConnectAudio( fidl::InterfaceRequest<fuchsia::media::Audio> request) { - startup_context()->svc()->Connect(std::move(request)); + agent_manager_->ConnectToAgentService(application_config_.agent_url(), + std::move(request)); } void CastComponent::ConnectDeviceWatcher( fidl::InterfaceRequest<fuchsia::camera3::DeviceWatcher> request) { - startup_context()->svc()->Connect(std::move(request)); + agent_manager_->ConnectToAgentService(application_config_.agent_url(), + std::move(request)); } bool CastComponent::HasWebPermission(
diff --git a/fuchsia_web/runners/cast/cast_component.h b/fuchsia_web/runners/cast/cast_component.h index d5134a8..50a973e9 100644 --- a/fuchsia_web/runners/cast/cast_component.h +++ b/fuchsia_web/runners/cast/cast_component.h
@@ -131,10 +131,7 @@ const bool is_headless_; base::OnceClosure on_destroyed_; - // Maintains an active connection to the Agent responsible for this component, - // to ensure that per-component state is kept live. std::unique_ptr<cr_fuchsia::AgentManager> agent_manager_; - chromium::cast::ApplicationConfig application_config_; chromium::cast::UrlRequestRewriteRulesProviderPtr url_rewrite_rules_provider_; std::vector<fuchsia::web::UrlRequestRewriteRule> initial_url_rewrite_rules_;
diff --git a/fuchsia_web/runners/cast/cast_runner_integration_test.cc b/fuchsia_web/runners/cast/cast_runner_integration_test.cc index fe41feb3..1de0391 100644 --- a/fuchsia_web/runners/cast/cast_runner_integration_test.cc +++ b/fuchsia_web/runners/cast/cast_runner_integration_test.cc
@@ -810,7 +810,7 @@ // Expect fuchsia.media.Audio connection to be redirected to the agent. base::RunLoop run_loop; ASSERT_EQ( - component.component_services()->AddPublicService( + component.component_state()->outgoing_directory()->AddPublicService( std::make_unique<vfs::Service>( [quit_closure = run_loop.QuitClosure()]( zx::channel channel, async_dispatcher_t* dispatcher) mutable { @@ -841,7 +841,7 @@ // agent. bool received_device_watcher_request = false; ASSERT_EQ( - component.component_services()->AddPublicService( + component.component_state()->outgoing_directory()->AddPublicService( std::make_unique<vfs::Service>( [&received_device_watcher_request]( zx::channel channel, async_dispatcher_t* dispatcher) mutable { @@ -916,13 +916,15 @@ // agent. bool received_device_watcher_request = false; ASSERT_EQ( - second_component.component_services()->AddPublicService( - std::make_unique<vfs::Service>( - [&received_device_watcher_request]( - zx::channel channel, async_dispatcher_t* dispatcher) mutable { - received_device_watcher_request = true; - }), - fuchsia::camera3::DeviceWatcher::Name_), + second_component.component_state() + ->outgoing_directory() + ->AddPublicService(std::make_unique<vfs::Service>( + [&received_device_watcher_request]( + zx::channel channel, + async_dispatcher_t* dispatcher) mutable { + received_device_watcher_request = true; + }), + fuchsia::camera3::DeviceWatcher::Name_), ZX_OK); second_component.ExecuteJavaScript("connectCamera();");
diff --git a/fuchsia_web/webengine/browser/content_directory_loader_factory.cc b/fuchsia_web/webengine/browser/content_directory_loader_factory.cc index eca781e..904dd47 100644 --- a/fuchsia_web/webengine/browser/content_directory_loader_factory.cc +++ b/fuchsia_web/webengine/browser/content_directory_loader_factory.cc
@@ -193,11 +193,14 @@ metadata_mmap.length())); if (metadata_parsed && metadata_parsed->is_dict()) { - if (metadata_parsed->FindStringKey("charset")) - charset = *metadata_parsed->FindStringKey("charset"); + const auto& dict = metadata_parsed->GetDict(); + const std::string* parsed_charset = dict.FindString("charset"); + if (parsed_charset) + charset = *parsed_charset; - if (metadata_parsed->FindStringKey("mime")) - mime_type = *metadata_parsed->FindStringKey("mime"); + const std::string* parsed_mime = dict.FindString("mime"); + if (parsed_mime) + mime_type = *parsed_mime; } }
diff --git a/fuchsia_web/webengine/browser/input_browsertest.cc b/fuchsia_web/webengine/browser/input_browsertest.cc index e8f52cb8..d6cf8d95 100644 --- a/fuchsia_web/webengine/browser/input_browsertest.cc +++ b/fuchsia_web/webengine/browser/input_browsertest.cc
@@ -11,6 +11,7 @@ #include "base/fuchsia/test_component_context_for_process.h" #include "base/test/scoped_feature_list.h" #include "content/public/test/browser_test.h" +#include "content/public/test/browser_test_utils.h" #include "fuchsia_web/common/test/frame_test_util.h" #include "fuchsia_web/common/test/test_navigation_listener.h" #include "fuchsia_web/webengine/browser/context_impl.h" @@ -57,24 +58,11 @@ base::Value ExpectedKeyValue(base::StringPiece code, base::StringPiece key, base::StringPiece type) { - base::Value expected(base::Value::Type::DICTIONARY); - expected.SetStringKey("code", code); - expected.SetStringKey("key", key); - expected.SetStringKey("type", type); - return expected; -} - -// Recursive base case. -template <typename T> -void AppendValueList(std::vector<T>* vec) {} - -// Use tail recursion to emplace a sequence of Values into |vec|. -// It is used as an alternative to initializer lists, which don't work with -// move-only types like base::Value. -template <typename T, typename... Args> -void AppendValueList(std::vector<T>* vec, T&& value, Args&&... args) { - vec->push_back(std::move(value)); - AppendValueList(vec, std::forward<base::Value>(args)...); + base::Value::Dict expected; + expected.Set("code", code); + expected.Set("key", key); + expected.Set("type", type); + return base::Value(std::move(expected)); } class FakeKeyboard : public fuchsia::ui::input3::testing::Keyboard_TestBase { @@ -185,14 +173,14 @@ template <typename... Args> void ExpectKeyEventsEqual(Args... events) { - std::vector<base::Value> expected; - AppendValueList(&expected, std::forward<Args>(events)...); + base::Value::List expected; + content::ConvertToBaseValueList(expected, std::forward<Args>(events)...); frame_for_test_.navigation_listener().RunUntilTitleEquals( base::NumberToString(expected.size())); absl::optional<base::Value> actual = ExecuteJavaScript(frame_for_test_.ptr().get(), kKeyDicts); - EXPECT_EQ(*actual, base::Value(expected)); + EXPECT_EQ(*actual, base::Value(std::move(expected))); } // Used to publish fake services.
diff --git a/fuchsia_web/webengine/browser/virtual_keyboard_browsertest.cc b/fuchsia_web/webengine/browser/virtual_keyboard_browsertest.cc index f26f895..4bc7e08 100644 --- a/fuchsia_web/webengine/browser/virtual_keyboard_browsertest.cc +++ b/fuchsia_web/webengine/browser/virtual_keyboard_browsertest.cc
@@ -111,7 +111,7 @@ frame_for_test_.ptr().get(), base::StringPrintf("getPointInsideText('%.*s')", base::saturated_cast<int>(id.length()), id.data())); - if (!result) { + if (!result || !result->is_dict()) { ADD_FAILURE() << "!result"; return {}; } @@ -119,8 +119,9 @@ // Note that coordinates are floating point and must be retrieved as such // from the Value, but we can cast them to integers and disregard the // fractional value with no major consequences. - return gfx::Point(*result->FindDoublePath("x") + kInputFieldClickInset, - *result->FindDoublePath("y") + kInputFieldClickInset); + return gfx::Point( + *result->GetDict().FindDouble("x") + kInputFieldClickInset, + *result->GetDict().FindDouble("y") + kInputFieldClickInset); } protected:
diff --git a/fuchsia_web/webengine/browser/web_engine_config.cc b/fuchsia_web/webengine/browser/web_engine_config.cc index 6246fd1..9639366 100644 --- a/fuchsia_web/webengine/browser/web_engine_config.cc +++ b/fuchsia_web/webengine/browser/web_engine_config.cc
@@ -46,7 +46,8 @@ bool AddCommandLineArgsFromConfig(const base::Value& config, base::CommandLine* command_line) { - const base::Value* args = config.FindDictKey("command-line-args"); + const base::Value::Dict* args = + config.GetDict().FindDict("command-line-args"); if (!args) return true; @@ -83,7 +84,7 @@ switches::kWebglMSAASampleCount, }; - for (const auto arg : args->DictItems()) { + for (const auto arg : *args) { if (!base::Contains(kAllowedArgs, arg.first)) { // TODO(https://crbug.com/1032439): Increase severity and return false // once we have a mechanism for soft transitions of supported arguments. @@ -132,21 +133,22 @@ const bool widevine_enabled = command_line->HasSwitch(switches::kEnableWidevine); + const base::Value::Dict& dict = config.GetDict(); const bool allow_protected_graphics = - config.FindBoolPath("allow-protected-graphics").value_or(false); + dict.FindBool("allow-protected-graphics").value_or(false); const bool force_protected_graphics = - config.FindBoolPath("force-protected-graphics").value_or(false); + dict.FindBool("force-protected-graphics").value_or(false); const bool enable_protected_graphics = ((playready_enabled || widevine_enabled) && allow_protected_graphics) || force_protected_graphics; const bool use_overlays_for_video = - config.FindBoolPath("use-overlays-for-video").value_or(false); + dict.FindBool("use-overlays-for-video").value_or(false); if (enable_protected_graphics) { command_line->AppendSwitch(switches::kEnableVulkanProtectedMemory); command_line->AppendSwitch(switches::kEnableProtectedVideoBuffers); const bool force_protected_video_buffers = - config.FindBoolPath("force-protected-video-buffers").value_or(false); + dict.FindBool("force-protected-video-buffers").value_or(false); if (force_protected_video_buffers) { command_line->AppendSwitch(switches::kForceProtectedVideoOutputBuffers); }
diff --git a/fuchsia_web/webengine/browser/web_engine_config_unittest.cc b/fuchsia_web/webengine/browser/web_engine_config_unittest.cc index fbeb5162..72354fa8 100644 --- a/fuchsia_web/webengine/browser/web_engine_config_unittest.cc +++ b/fuchsia_web/webengine/browser/web_engine_config_unittest.cc
@@ -15,11 +15,11 @@ base::Value CreateConfigWithSwitchValue(std::string switch_name, std::string switch_value) { - base::Value config_dict(base::Value::Type::DICTIONARY); - base::Value args(base::Value::Type::DICTIONARY); - args.SetStringKey(switch_name, switch_value); - config_dict.SetKey(kCommandLineArgs, std::move(args)); - return config_dict; + base::Value::Dict config_dict; + base::Value::Dict args; + args.Set(switch_name, switch_value); + config_dict.Set(kCommandLineArgs, std::move(args)); + return base::Value(std::move(config_dict)); } } // namespace @@ -41,15 +41,16 @@ } TEST(WebEngineConfig, WronglyTypedCommandLineArgs) { - base::Value config(base::Value::Type::DICTIONARY); + base::Value::Dict config; // Specify a configuration that sets valid args with invalid value. - base::Value args(base::Value::Type::DICTIONARY); - args.SetBoolKey("renderer-process-limit", false); - config.SetKey(kCommandLineArgs, std::move(args)); + base::Value::Dict args; + args.Set("renderer-process-limit", false); + config.Set(kCommandLineArgs, std::move(args)); base::CommandLine command(base::CommandLine::NO_PROGRAM); - EXPECT_FALSE(UpdateCommandLineFromConfigFile(config, &command)); + EXPECT_FALSE(UpdateCommandLineFromConfigFile(base::Value(std::move(config)), + &command)); } TEST(WebEngineConfig, WithGoogleApiKeyValue) {
diff --git a/fuchsia_web/webengine/browser/web_engine_memory_inspector.cc b/fuchsia_web/webengine/browser/web_engine_memory_inspector.cc index f179859..0bbdac6 100644 --- a/fuchsia_web/webengine/browser/web_engine_memory_inspector.cc +++ b/fuchsia_web/webengine/browser/web_engine_memory_inspector.cc
@@ -22,13 +22,14 @@ if (!config) return {}; - const base::Value* names_list = config->FindListPath("allocator-dump-names"); + const base::Value::List* names_list = + config->GetDict().FindList("allocator-dump-names"); if (!names_list) return {}; std::vector<std::string> names; - names.reserve(names_list->GetListDeprecated().size()); - for (auto& name : names_list->GetListDeprecated()) { + names.reserve(names_list->size()); + for (auto& name : *names_list) { names.push_back(name.GetString()); } return names;
diff --git a/gpu/command_buffer/client/raster_implementation.cc b/gpu/command_buffer/client/raster_implementation.cc index b973329a..06f6604d 100644 --- a/gpu/command_buffer/client/raster_implementation.cc +++ b/gpu/command_buffer/client/raster_implementation.cc
@@ -1223,7 +1223,8 @@ GLuint src_size = src_info.computeByteSize(row_bytes); GLuint total_size = - pixels_offset + base::bits::AlignUp(src_size, sizeof(uint64_t)); + pixels_offset + + base::bits::AlignUp(src_size, static_cast<GLuint>(sizeof(uint64_t))); std::unique_ptr<ScopedSharedMemoryPtr> scoped_shared_memory = std::make_unique<ScopedSharedMemoryPtr>(total_size, transfer_buffer_, @@ -1441,7 +1442,8 @@ GLuint dst_size = dst_info.computeByteSize(dst_row_bytes); GLuint total_size = - pixels_offset + base::bits::AlignUp(dst_size, sizeof(uint64_t)); + pixels_offset + + base::bits::AlignUp(dst_size, static_cast<GLuint>(sizeof(uint64_t))); std::unique_ptr<ScopedMappedMemoryPtr> scoped_shared_memory = std::make_unique<ScopedMappedMemoryPtr>(total_size, helper(), @@ -1621,9 +1623,9 @@ return; } - GLuint y_offset = base::bits::AlignUp( + auto y_offset = static_cast<GLuint>(base::bits::AlignUp( sizeof(cmds::ReadbackYUVImagePixelsINTERNALImmediate::Result), - sizeof(uint64_t)); + sizeof(uint64_t))); if (y_plane_row_stride_bytes < output_rect.width()) { SetGLError( @@ -1633,8 +1635,9 @@ } GLuint y_padded_size = output_rect.height() * y_plane_row_stride_bytes; + constexpr auto kSizeofUint64 = static_cast<GLuint>(sizeof(uint64_t)); GLuint u_offset = - base::bits::AlignUp(y_offset + y_padded_size, sizeof(uint64_t)); + base::bits::AlignUp(y_offset + y_padded_size, kSizeofUint64); if (u_plane_row_stride_bytes < ((output_rect.width() + 1) / 2)) { SetGLError( GL_INVALID_VALUE, "glReadbackYUVPixelsAsync", @@ -1645,7 +1648,7 @@ ((output_rect.height() + 1) / 2) * u_plane_row_stride_bytes; GLuint v_offset = - base::bits::AlignUp(u_offset + u_padded_size, sizeof(uint64_t)); + base::bits::AlignUp(u_offset + u_padded_size, kSizeofUint64); if (v_plane_row_stride_bytes < ((output_rect.width() + 1) / 2)) { SetGLError( GL_INVALID_VALUE, "glReadbackYUVPixelsAsync", @@ -1656,7 +1659,7 @@ ((output_rect.height() + 1) / 2) * v_plane_row_stride_bytes; size_t total_size = - base::bits::AlignUp(v_offset + v_padded_size, sizeof(uint64_t)); + base::bits::AlignUp(v_offset + v_padded_size, kSizeofUint64); std::unique_ptr<ScopedMappedMemoryPtr> scoped_shared_memory = std::make_unique<ScopedMappedMemoryPtr>(total_size, helper(),
diff --git a/gpu/command_buffer/service/test_shared_image_backing.cc b/gpu/command_buffer/service/test_shared_image_backing.cc index f962eeb..21011c8 100644 --- a/gpu/command_buffer/service/test_shared_image_backing.cc +++ b/gpu/command_buffer/service/test_shared_image_backing.cc
@@ -11,7 +11,6 @@ #include "third_party/skia/include/core/SkPromiseImageTexture.h" #include "third_party/skia/include/gpu/GrBackendSurface.h" #include "third_party/skia/include/gpu/mock/GrMockTypes.h" -#include "ui/gl/gl_image.h" namespace gpu { namespace { @@ -135,14 +134,7 @@ return true; } void EndReadAccess(gfx::GpuFenceHandle release_fence) override {} - - gl::GLImage* GetGLImage() override { - gl_image_ = base::MakeRefCounted<gl::GLImage>(); - return gl_image_.get(); - } - - private: - scoped_refptr<gl::GLImage> gl_image_; + gl::GLImage* GetGLImage() override { return nullptr; } }; } // namespace
diff --git a/gpu/command_buffer/service/webgpu_decoder_impl.cc b/gpu/command_buffer/service/webgpu_decoder_impl.cc index 1f2e169a..5c33a7e 100644 --- a/gpu/command_buffer/service/webgpu_decoder_impl.cc +++ b/gpu/command_buffer/service/webgpu_decoder_impl.cc
@@ -544,7 +544,8 @@ // Align up to 256, required by WebGPU buffer->texture and texture->buffer // copies. - checked_bytes_per_row = base::bits::AlignUp(packed_bytes_per_row, 256); + checked_bytes_per_row = + base::bits::AlignUp(packed_bytes_per_row, uint32_t{256}); if (!checked_bytes_per_row.AssignIfValid(bytes_per_row)) { return false; }
diff --git a/headless/BUILD.gn b/headless/BUILD.gn index 42249c7..cb2a88ebc 100644 --- a/headless/BUILD.gn +++ b/headless/BUILD.gn
@@ -34,6 +34,10 @@ if (headless_use_policy) { defines += [ "HEADLESS_USE_POLICY" ] } + + if (headless_mode_policy_supported) { + defines += [ "HEADLESS_MODE_POLICY_SUPPORTED" ] + } } # For code inside the build component "headless".
diff --git a/headless/headless.gni b/headless/headless.gni index 11aed66a..635f3554 100644 --- a/headless/headless.gni +++ b/headless/headless.gni
@@ -11,4 +11,7 @@ # Use Policy component to manage preferences. headless_use_policy = true + + #Platforms where headless mode is supported. + headless_mode_policy_supported = !is_android && !is_ios && !is_chromeos }
diff --git a/headless/lib/browser/policy/headless_browser_policy_connector.cc b/headless/lib/browser/policy/headless_browser_policy_connector.cc index a8dc184a..5a0e5692 100644 --- a/headless/lib/browser/policy/headless_browser_policy_connector.cc +++ b/headless/lib/browser/policy/headless_browser_policy_connector.cc
@@ -48,7 +48,9 @@ base::BindRepeating(&GetChromePolicyDetails), /*allow_future_policies=*/false); +#if !BUILDFLAG(IS_CHROMEOS) handlers->AddHandler(std::make_unique<HeadlessModePolicyHandler>()); +#endif handlers->AddHandler( std::make_unique<URLBlocklistPolicyHandler>(key::kURLBlocklist));
diff --git a/headless/lib/browser/policy/headless_mode_policy.cc b/headless/lib/browser/policy/headless_mode_policy.cc index 9cbab048..4900f72 100644 --- a/headless/lib/browser/policy/headless_mode_policy.cc +++ b/headless/lib/browser/policy/headless_mode_policy.cc
@@ -13,8 +13,10 @@ // static void HeadlessModePolicy::RegisterLocalPrefs(PrefRegistrySimple* registry) { +#if defined(HEADLESS_MODE_POLICY_SUPPORTED) registry->RegisterIntegerPref(headless::prefs::kHeadlessMode, static_cast<int>(HeadlessMode::kDefaultValue)); +#endif } // static @@ -25,6 +27,7 @@ if (!pref_service) return HeadlessMode::kDefaultValue; +#if defined(HEADLESS_MODE_POLICY_SUPPORTED) int value = pref_service->GetInteger(headless::prefs::kHeadlessMode); if (value < static_cast<int>(HeadlessMode::kMinValue) || value > static_cast<int>(HeadlessMode::kMaxValue)) { @@ -37,6 +40,9 @@ } return static_cast<HeadlessMode>(value); +#else + return HeadlessMode::kDefaultValue; +#endif } // static @@ -44,6 +50,7 @@ return GetPolicy(pref_service) != HeadlessMode::kEnabled; } +#if defined(HEADLESS_MODE_POLICY_SUPPORTED) HeadlessModePolicyHandler::HeadlessModePolicyHandler() : IntRangePolicyHandler( key::kHeadlessMode, @@ -53,5 +60,6 @@ false) {} HeadlessModePolicyHandler::~HeadlessModePolicyHandler() = default; +#endif } // namespace policy
diff --git a/headless/lib/browser/policy/headless_mode_policy.h b/headless/lib/browser/policy/headless_mode_policy.h index f73b04a..e17a441 100644 --- a/headless/lib/browser/policy/headless_mode_policy.h +++ b/headless/lib/browser/policy/headless_mode_policy.h
@@ -44,6 +44,7 @@ static bool IsHeadlessDisabled(const PrefService* pref_service); }; +#if defined(HEADLESS_MODE_POLICY_SUPPORTED) // Handles the HeadlessMode policy. Controls the managed values of the // |kHeadlessMode| pref. class HeadlessModePolicyHandler : public IntRangePolicyHandler { @@ -55,6 +56,7 @@ HeadlessModePolicyHandler& operator=(const HeadlessModePolicyHandler&) = delete; }; +#endif } // namespace policy
diff --git a/infra/config/generated/builders/reclient/Linux Builder reclient staging untrusted/properties.json b/infra/config/generated/builders/reclient/Linux Builder reclient staging untrusted/properties.json deleted file mode 100644 index 0110791..0000000 --- a/infra/config/generated/builders/reclient/Linux Builder reclient staging untrusted/properties.json +++ /dev/null
@@ -1,58 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "reclient", - "builder": "Linux Builder reclient staging untrusted", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-fyi-archive", - "builder_group": "chromium.reclient.fyi", - "execution_mode": "COMPILE_AND_TEST", - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "chromium", - "target_bits": 64 - }, - "legacy_gclient_config": { - "apply_configs": [ - "use_clang_coverage", - "enable_reclient", - "reclient_staging" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "reclient", - "builder": "Linux Builder reclient staging untrusted", - "project": "chromium" - } - ] - } - }, - "$build/reclient": { - "instance": "rbe-chromium-untrusted", - "metrics_project": "chromium-reclient-metrics" - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.reclient.fyi", - "recipe": "chromium" -} \ No newline at end of file
diff --git a/infra/config/generated/builders/reclient/Linux Builder reclient test untrusted/properties.json b/infra/config/generated/builders/reclient/Linux Builder reclient test untrusted/properties.json deleted file mode 100644 index f8baebe..0000000 --- a/infra/config/generated/builders/reclient/Linux Builder reclient test untrusted/properties.json +++ /dev/null
@@ -1,58 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "reclient", - "builder": "Linux Builder reclient test untrusted", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-fyi-archive", - "builder_group": "chromium.reclient.fyi", - "execution_mode": "COMPILE_AND_TEST", - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "chromium", - "target_bits": 64 - }, - "legacy_gclient_config": { - "apply_configs": [ - "use_clang_coverage", - "enable_reclient", - "reclient_test" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "reclient", - "builder": "Linux Builder reclient test untrusted", - "project": "chromium" - } - ] - } - }, - "$build/reclient": { - "instance": "rbe-chromium-untrusted-test", - "metrics_project": "chromium-reclient-metrics" - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.reclient.fyi", - "recipe": "chromium" -} \ No newline at end of file
diff --git a/infra/config/generated/builders/reclient/Mac Builder reclient staging untrusted/properties.json b/infra/config/generated/builders/reclient/Mac Builder reclient staging untrusted/properties.json deleted file mode 100644 index ea3b558d..0000000 --- a/infra/config/generated/builders/reclient/Mac Builder reclient staging untrusted/properties.json +++ /dev/null
@@ -1,60 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "reclient", - "builder": "Mac Builder reclient staging untrusted", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-fyi-archive", - "builder_group": "chromium.reclient.fyi", - "execution_mode": "COMPILE_AND_TEST", - "legacy_chromium_config": { - "apply_configs": [ - "mb", - "goma_use_local" - ], - "build_config": "Release", - "config": "chromium", - "target_bits": 64, - "target_platform": "mac" - }, - "legacy_gclient_config": { - "apply_configs": [ - "use_clang_coverage", - "enable_reclient", - "reclient_staging" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "reclient", - "builder": "Mac Builder reclient staging untrusted", - "project": "chromium" - } - ] - } - }, - "$build/reclient": { - "instance": "rbe-chromium-untrusted", - "metrics_project": "chromium-reclient-metrics" - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.reclient.fyi", - "recipe": "chromium" -} \ No newline at end of file
diff --git a/infra/config/generated/builders/reclient/Mac Builder reclient test untrusted/properties.json b/infra/config/generated/builders/reclient/Mac Builder reclient test untrusted/properties.json deleted file mode 100644 index a7ec6871..0000000 --- a/infra/config/generated/builders/reclient/Mac Builder reclient test untrusted/properties.json +++ /dev/null
@@ -1,60 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "reclient", - "builder": "Mac Builder reclient test untrusted", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-fyi-archive", - "builder_group": "chromium.reclient.fyi", - "execution_mode": "COMPILE_AND_TEST", - "legacy_chromium_config": { - "apply_configs": [ - "mb", - "goma_use_local" - ], - "build_config": "Release", - "config": "chromium", - "target_bits": 64, - "target_platform": "mac" - }, - "legacy_gclient_config": { - "apply_configs": [ - "use_clang_coverage", - "enable_reclient", - "reclient_test" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "reclient", - "builder": "Mac Builder reclient test untrusted", - "project": "chromium" - } - ] - } - }, - "$build/reclient": { - "instance": "rbe-chromium-untrusted-test", - "metrics_project": "chromium-reclient-metrics" - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.reclient.fyi", - "recipe": "chromium" -} \ No newline at end of file
diff --git a/infra/config/generated/builders/reclient/Simple Chrome Builder reclient staging untrusted/properties.json b/infra/config/generated/builders/reclient/Simple Chrome Builder reclient staging untrusted/properties.json deleted file mode 100644 index 81e67ff..0000000 --- a/infra/config/generated/builders/reclient/Simple Chrome Builder reclient staging untrusted/properties.json +++ /dev/null
@@ -1,62 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "reclient", - "builder": "Simple Chrome Builder reclient staging untrusted", - "project": "chromium" - }, - "builder_spec": { - "builder_group": "chromium.reclient.fyi", - "execution_mode": "COMPILE_AND_TEST", - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "chromium", - "cros_boards_with_qemu_images": [ - "amd64-generic-vm" - ], - "target_arch": "intel", - "target_bits": 64, - "target_platform": "chromeos" - }, - "legacy_gclient_config": { - "apply_configs": [ - "chromeos", - "enable_reclient", - "reclient_staging" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "reclient", - "builder": "Simple Chrome Builder reclient staging untrusted", - "project": "chromium" - } - ] - } - }, - "$build/reclient": { - "instance": "rbe-chromium-untrusted", - "metrics_project": "chromium-reclient-metrics" - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.reclient.fyi", - "recipe": "chromium" -} \ No newline at end of file
diff --git a/infra/config/generated/builders/reclient/Simple Chrome Builder reclient test untrusted/properties.json b/infra/config/generated/builders/reclient/Simple Chrome Builder reclient test untrusted/properties.json deleted file mode 100644 index 55d85f6..0000000 --- a/infra/config/generated/builders/reclient/Simple Chrome Builder reclient test untrusted/properties.json +++ /dev/null
@@ -1,62 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "reclient", - "builder": "Simple Chrome Builder reclient test untrusted", - "project": "chromium" - }, - "builder_spec": { - "builder_group": "chromium.reclient.fyi", - "execution_mode": "COMPILE_AND_TEST", - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "chromium", - "cros_boards_with_qemu_images": [ - "amd64-generic-vm" - ], - "target_arch": "intel", - "target_bits": 64, - "target_platform": "chromeos" - }, - "legacy_gclient_config": { - "apply_configs": [ - "chromeos", - "enable_reclient", - "reclient_test" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "reclient", - "builder": "Simple Chrome Builder reclient test untrusted", - "project": "chromium" - } - ] - } - }, - "$build/reclient": { - "instance": "rbe-chromium-untrusted-test", - "metrics_project": "chromium-reclient-metrics" - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.reclient.fyi", - "recipe": "chromium" -} \ No newline at end of file
diff --git a/infra/config/generated/builders/reclient/Win x64 Builder reclient test untrusted/properties.json b/infra/config/generated/builders/reclient/Win x64 Builder reclient gVisor cross test/properties.json similarity index 91% rename from infra/config/generated/builders/reclient/Win x64 Builder reclient test untrusted/properties.json rename to infra/config/generated/builders/reclient/Win x64 Builder reclient gVisor cross test/properties.json index 977f7697..46c7ea80 100644 --- a/infra/config/generated/builders/reclient/Win x64 Builder reclient test untrusted/properties.json +++ b/infra/config/generated/builders/reclient/Win x64 Builder reclient gVisor cross test/properties.json
@@ -6,7 +6,7 @@ { "builder_id": { "bucket": "reclient", - "builder": "Win x64 Builder reclient test untrusted", + "builder": "Win x64 Builder reclient gVisor cross test", "project": "chromium" }, "builder_spec": { @@ -37,7 +37,7 @@ "builder_ids": [ { "bucket": "reclient", - "builder": "Win x64 Builder reclient test untrusted", + "builder": "Win x64 Builder reclient gVisor cross test", "project": "chromium" } ]
diff --git a/infra/config/generated/builders/reclient/Win x64 Builder reclient staging untrusted/properties.json b/infra/config/generated/builders/reclient/Win x64 Builder reclient staging untrusted/properties.json deleted file mode 100644 index aae9424..0000000 --- a/infra/config/generated/builders/reclient/Win x64 Builder reclient staging untrusted/properties.json +++ /dev/null
@@ -1,59 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "reclient", - "builder": "Win x64 Builder reclient staging untrusted", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-fyi-archive", - "builder_group": "chromium.reclient.fyi", - "execution_mode": "COMPILE_AND_TEST", - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "chromium", - "target_bits": 64, - "target_platform": "win" - }, - "legacy_gclient_config": { - "apply_configs": [ - "use_clang_coverage", - "enable_reclient", - "reclient_staging" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "reclient", - "builder": "Win x64 Builder reclient staging untrusted", - "project": "chromium" - } - ] - } - }, - "$build/reclient": { - "instance": "rbe-chromium-untrusted", - "metrics_project": "chromium-reclient-metrics" - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.reclient.fyi", - "recipe": "chromium" -} \ No newline at end of file
diff --git a/infra/config/generated/builders/reclient/ios-simulator reclient staging untrusted/properties.json b/infra/config/generated/builders/reclient/ios-simulator reclient staging untrusted/properties.json deleted file mode 100644 index 2045994..0000000 --- a/infra/config/generated/builders/reclient/ios-simulator reclient staging untrusted/properties.json +++ /dev/null
@@ -1,61 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "reclient", - "builder": "ios-simulator reclient staging untrusted", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-fyi-archive", - "builder_group": "chromium.reclient.fyi", - "execution_mode": "COMPILE_AND_TEST", - "legacy_chromium_config": { - "apply_configs": [ - "mb", - "mac_toolchain" - ], - "build_config": "Debug", - "config": "chromium", - "target_bits": 64, - "target_platform": "ios" - }, - "legacy_gclient_config": { - "apply_configs": [ - "use_clang_coverage", - "enable_reclient", - "reclient_staging" - ], - "config": "ios" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "reclient", - "builder": "ios-simulator reclient staging untrusted", - "project": "chromium" - } - ] - } - }, - "$build/reclient": { - "instance": "rbe-chromium-untrusted", - "metrics_project": "chromium-reclient-metrics" - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.reclient.fyi", - "recipe": "chromium", - "xcode_build_version": "13c100" -} \ No newline at end of file
diff --git a/infra/config/generated/builders/reclient/ios-simulator reclient test untrusted/properties.json b/infra/config/generated/builders/reclient/ios-simulator reclient test untrusted/properties.json deleted file mode 100644 index 334ae5e..0000000 --- a/infra/config/generated/builders/reclient/ios-simulator reclient test untrusted/properties.json +++ /dev/null
@@ -1,61 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "reclient", - "builder": "ios-simulator reclient test untrusted", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-fyi-archive", - "builder_group": "chromium.reclient.fyi", - "execution_mode": "COMPILE_AND_TEST", - "legacy_chromium_config": { - "apply_configs": [ - "mb", - "mac_toolchain" - ], - "build_config": "Debug", - "config": "chromium", - "target_bits": 64, - "target_platform": "ios" - }, - "legacy_gclient_config": { - "apply_configs": [ - "use_clang_coverage", - "enable_reclient", - "reclient_test" - ], - "config": "ios" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "reclient", - "builder": "ios-simulator reclient test untrusted", - "project": "chromium" - } - ] - } - }, - "$build/reclient": { - "instance": "rbe-chromium-untrusted-test", - "metrics_project": "chromium-reclient-metrics" - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.reclient.fyi", - "recipe": "chromium", - "xcode_build_version": "13c100" -} \ No newline at end of file
diff --git a/infra/config/generated/builders/reclient/mac-arm64-rel reclient staging untrusted/properties.json b/infra/config/generated/builders/reclient/mac-arm64-rel reclient staging untrusted/properties.json deleted file mode 100644 index 052d39a..0000000 --- a/infra/config/generated/builders/reclient/mac-arm64-rel reclient staging untrusted/properties.json +++ /dev/null
@@ -1,59 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "reclient", - "builder": "mac-arm64-rel reclient staging untrusted", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-fyi-archive", - "builder_group": "chromium.reclient.fyi", - "execution_mode": "COMPILE_AND_TEST", - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "chromium", - "target_arch": "arm", - "target_bits": 64, - "target_platform": "mac" - }, - "legacy_gclient_config": { - "apply_configs": [ - "enable_reclient", - "reclient_staging" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "reclient", - "builder": "mac-arm64-rel reclient staging untrusted", - "project": "chromium" - } - ] - } - }, - "$build/reclient": { - "instance": "rbe-chromium-untrusted", - "metrics_project": "chromium-reclient-metrics" - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.reclient.fyi", - "recipe": "chromium" -} \ No newline at end of file
diff --git a/infra/config/generated/builders/reclient/mac-arm64-rel reclient test untrusted/properties.json b/infra/config/generated/builders/reclient/mac-arm64-rel reclient test untrusted/properties.json deleted file mode 100644 index b94ed01..0000000 --- a/infra/config/generated/builders/reclient/mac-arm64-rel reclient test untrusted/properties.json +++ /dev/null
@@ -1,59 +0,0 @@ -{ - "$build/chromium_tests_builder_config": { - "builder_config": { - "builder_db": { - "entries": [ - { - "builder_id": { - "bucket": "reclient", - "builder": "mac-arm64-rel reclient test untrusted", - "project": "chromium" - }, - "builder_spec": { - "build_gs_bucket": "chromium-fyi-archive", - "builder_group": "chromium.reclient.fyi", - "execution_mode": "COMPILE_AND_TEST", - "legacy_chromium_config": { - "apply_configs": [ - "mb" - ], - "build_config": "Release", - "config": "chromium", - "target_arch": "arm", - "target_bits": 64, - "target_platform": "mac" - }, - "legacy_gclient_config": { - "apply_configs": [ - "enable_reclient", - "reclient_test" - ], - "config": "chromium" - } - } - } - ] - }, - "builder_ids": [ - { - "bucket": "reclient", - "builder": "mac-arm64-rel reclient test untrusted", - "project": "chromium" - } - ] - } - }, - "$build/reclient": { - "instance": "rbe-chromium-untrusted-test", - "metrics_project": "chromium-reclient-metrics" - }, - "$recipe_engine/resultdb/test_presentation": { - "column_keys": [], - "grouping_keys": [ - "status", - "v.test_suite" - ] - }, - "builder_group": "chromium.reclient.fyi", - "recipe": "chromium" -} \ No newline at end of file
diff --git a/infra/config/generated/builders/try/linux-rel/properties.json b/infra/config/generated/builders/try/linux-rel/properties.json index 534966c..ed2efae5 100644 --- a/infra/config/generated/builders/try/linux-rel/properties.json +++ b/infra/config/generated/builders/try/linux-rel/properties.json
@@ -161,6 +161,9 @@ ], "use_clang_coverage": true }, + "$build/flakiness": { + "check_for_flakiness": true + }, "$recipe_engine/resultdb/test_presentation": { "column_keys": [], "grouping_keys": [
diff --git a/infra/config/generated/luci/cr-buildbucket.cfg b/infra/config/generated/luci/cr-buildbucket.cfg index fca5bbb..d9213f3 100644 --- a/infra/config/generated/luci/cr-buildbucket.cfg +++ b/infra/config/generated/luci/cr-buildbucket.cfg
@@ -47622,86 +47622,6 @@ } } builders { - name: "Linux Builder reclient staging untrusted" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:8" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Ubuntu-18.04" - dimensions: "pool:luci.chromium.ci" - dimensions: "ssd:0" - exe { - cipd_package: "infra/chromium/bootstrapper/${platform}" - cipd_version: "latest" - cmd: "bootstrapper" - } - properties: - '{' - ' "$bootstrap/exe": {' - ' "exe": {' - ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",' - ' "cipd_version": "refs/heads/main",' - ' "cmd": [' - ' "luciexe"' - ' ]' - ' }' - ' },' - ' "$bootstrap/properties": {' - ' "properties_file": "infra/config/generated/builders/reclient/Linux Builder reclient staging untrusted/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.reclient.fyi",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium"' - '}' - execution_timeout_secs: 10800 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "blink_web_tests_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://[^/]*blink_web_tests/.+" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { name: "Linux Builder reclient test" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" @@ -47782,86 +47702,6 @@ } } builders { - name: "Linux Builder reclient test untrusted" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:8" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Ubuntu-18.04" - dimensions: "pool:luci.chromium.ci" - dimensions: "ssd:0" - exe { - cipd_package: "infra/chromium/bootstrapper/${platform}" - cipd_version: "latest" - cmd: "bootstrapper" - } - properties: - '{' - ' "$bootstrap/exe": {' - ' "exe": {' - ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",' - ' "cipd_version": "refs/heads/main",' - ' "cmd": [' - ' "luciexe"' - ' ]' - ' }' - ' },' - ' "$bootstrap/properties": {' - ' "properties_file": "infra/config/generated/builders/reclient/Linux Builder reclient test untrusted/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.reclient.fyi",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium"' - '}' - execution_timeout_secs: 10800 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "blink_web_tests_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://[^/]*blink_web_tests/.+" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { name: "Mac Builder reclient staging" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" @@ -47940,84 +47780,6 @@ } } builders { - name: "Mac Builder reclient staging untrusted" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Mac-12" - dimensions: "pool:luci.chromium.ci" - exe { - cipd_package: "infra/chromium/bootstrapper/${platform}" - cipd_version: "latest" - cmd: "bootstrapper" - } - properties: - '{' - ' "$bootstrap/exe": {' - ' "exe": {' - ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",' - ' "cipd_version": "refs/heads/main",' - ' "cmd": [' - ' "luciexe"' - ' ]' - ' }' - ' },' - ' "$bootstrap/properties": {' - ' "properties_file": "infra/config/generated/builders/reclient/Mac Builder reclient staging untrusted/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.reclient.fyi",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium"' - '}' - execution_timeout_secs: 10800 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "blink_web_tests_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://[^/]*blink_web_tests/.+" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { name: "Mac Builder reclient test" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" @@ -48096,84 +47858,6 @@ } } builders { - name: "Mac Builder reclient test untrusted" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Mac-12" - dimensions: "pool:luci.chromium.ci" - exe { - cipd_package: "infra/chromium/bootstrapper/${platform}" - cipd_version: "latest" - cmd: "bootstrapper" - } - properties: - '{' - ' "$bootstrap/exe": {' - ' "exe": {' - ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",' - ' "cipd_version": "refs/heads/main",' - ' "cmd": [' - ' "luciexe"' - ' ]' - ' }' - ' },' - ' "$bootstrap/properties": {' - ' "properties_file": "infra/config/generated/builders/reclient/Mac Builder reclient test untrusted/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.reclient.fyi",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium"' - '}' - execution_timeout_secs: 10800 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "blink_web_tests_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://[^/]*blink_web_tests/.+" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { name: "Simple Chrome Builder reclient staging" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" @@ -48254,86 +47938,6 @@ } } builders { - name: "Simple Chrome Builder reclient staging untrusted" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:8" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Ubuntu-18.04" - dimensions: "pool:luci.chromium.ci" - dimensions: "ssd:0" - exe { - cipd_package: "infra/chromium/bootstrapper/${platform}" - cipd_version: "latest" - cmd: "bootstrapper" - } - properties: - '{' - ' "$bootstrap/exe": {' - ' "exe": {' - ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",' - ' "cipd_version": "refs/heads/main",' - ' "cmd": [' - ' "luciexe"' - ' ]' - ' }' - ' },' - ' "$bootstrap/properties": {' - ' "properties_file": "infra/config/generated/builders/reclient/Simple Chrome Builder reclient staging untrusted/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.reclient.fyi",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium"' - '}' - execution_timeout_secs: 10800 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "blink_web_tests_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://[^/]*blink_web_tests/.+" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { name: "Simple Chrome Builder reclient test" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" @@ -48414,13 +48018,13 @@ } } builders { - name: "Simple Chrome Builder reclient test untrusted" + name: "Win x64 Builder reclient gVisor cross test" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" - dimensions: "cores:8" + dimensions: "cores:32" dimensions: "cpu:x86-64" dimensions: "free_space:standard" - dimensions: "os:Ubuntu-18.04" + dimensions: "os:Windows" dimensions: "pool:luci.chromium.ci" dimensions: "ssd:0" exe { @@ -48440,7 +48044,7 @@ ' }' ' },' ' "$bootstrap/properties": {' - ' "properties_file": "infra/config/generated/builders/reclient/Simple Chrome Builder reclient test untrusted/properties.json",' + ' "properties_file": "infra/config/generated/builders/reclient/Win x64 Builder reclient gVisor cross test/properties.json",' ' "top_level_project": {' ' "ref": "refs/heads/main",' ' "repo": {' @@ -48453,7 +48057,7 @@ ' "led_builder_is_bootstrapped": true,' ' "recipe": "chromium"' '}' - execution_timeout_secs: 10800 + execution_timeout_secs: 18000 build_numbers: YES service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" experiments { @@ -48574,86 +48178,6 @@ } } builders { - name: "Win x64 Builder reclient staging untrusted" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:32" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Windows" - dimensions: "pool:luci.chromium.ci" - dimensions: "ssd:0" - exe { - cipd_package: "infra/chromium/bootstrapper/${platform}" - cipd_version: "latest" - cmd: "bootstrapper" - } - properties: - '{' - ' "$bootstrap/exe": {' - ' "exe": {' - ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",' - ' "cipd_version": "refs/heads/main",' - ' "cmd": [' - ' "luciexe"' - ' ]' - ' }' - ' },' - ' "$bootstrap/properties": {' - ' "properties_file": "infra/config/generated/builders/reclient/Win x64 Builder reclient staging untrusted/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.reclient.fyi",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium"' - '}' - execution_timeout_secs: 18000 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "blink_web_tests_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://[^/]*blink_web_tests/.+" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { name: "Win x64 Builder reclient test" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" @@ -48734,86 +48258,6 @@ } } builders { - name: "Win x64 Builder reclient test untrusted" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cores:32" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Windows" - dimensions: "pool:luci.chromium.ci" - dimensions: "ssd:0" - exe { - cipd_package: "infra/chromium/bootstrapper/${platform}" - cipd_version: "latest" - cmd: "bootstrapper" - } - properties: - '{' - ' "$bootstrap/exe": {' - ' "exe": {' - ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",' - ' "cipd_version": "refs/heads/main",' - ' "cmd": [' - ' "luciexe"' - ' ]' - ' }' - ' },' - ' "$bootstrap/properties": {' - ' "properties_file": "infra/config/generated/builders/reclient/Win x64 Builder reclient test untrusted/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.reclient.fyi",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium"' - '}' - execution_timeout_secs: 18000 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "blink_web_tests_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://[^/]*blink_web_tests/.+" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { name: "ios-simulator reclient staging" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" @@ -48896,88 +48340,6 @@ } } builders { - name: "ios-simulator reclient staging untrusted" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Mac-12" - dimensions: "pool:luci.chromium.ci" - exe { - cipd_package: "infra/chromium/bootstrapper/${platform}" - cipd_version: "latest" - cmd: "bootstrapper" - } - properties: - '{' - ' "$bootstrap/exe": {' - ' "exe": {' - ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",' - ' "cipd_version": "refs/heads/main",' - ' "cmd": [' - ' "luciexe"' - ' ]' - ' }' - ' },' - ' "$bootstrap/properties": {' - ' "properties_file": "infra/config/generated/builders/reclient/ios-simulator reclient staging untrusted/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.reclient.fyi",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium"' - '}' - execution_timeout_secs: 10800 - caches { - name: "xcode_ios_13c100" - path: "xcode_ios_13c100.app" - } - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "blink_web_tests_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://[^/]*blink_web_tests/.+" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { name: "ios-simulator reclient test" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" @@ -49060,88 +48422,6 @@ } } builders { - name: "ios-simulator reclient test untrusted" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Mac-12" - dimensions: "pool:luci.chromium.ci" - exe { - cipd_package: "infra/chromium/bootstrapper/${platform}" - cipd_version: "latest" - cmd: "bootstrapper" - } - properties: - '{' - ' "$bootstrap/exe": {' - ' "exe": {' - ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",' - ' "cipd_version": "refs/heads/main",' - ' "cmd": [' - ' "luciexe"' - ' ]' - ' }' - ' },' - ' "$bootstrap/properties": {' - ' "properties_file": "infra/config/generated/builders/reclient/ios-simulator reclient test untrusted/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.reclient.fyi",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium"' - '}' - execution_timeout_secs: 10800 - caches { - name: "xcode_ios_13c100" - path: "xcode_ios_13c100.app" - } - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "blink_web_tests_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://[^/]*blink_web_tests/.+" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { name: "mac-arm64-rel reclient staging" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" @@ -49220,84 +48500,6 @@ } } builders { - name: "mac-arm64-rel reclient staging untrusted" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Mac-12" - dimensions: "pool:luci.chromium.ci" - exe { - cipd_package: "infra/chromium/bootstrapper/${platform}" - cipd_version: "latest" - cmd: "bootstrapper" - } - properties: - '{' - ' "$bootstrap/exe": {' - ' "exe": {' - ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",' - ' "cipd_version": "refs/heads/main",' - ' "cmd": [' - ' "luciexe"' - ' ]' - ' }' - ' },' - ' "$bootstrap/properties": {' - ' "properties_file": "infra/config/generated/builders/reclient/mac-arm64-rel reclient staging untrusted/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.reclient.fyi",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium"' - '}' - execution_timeout_secs: 10800 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "blink_web_tests_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://[^/]*blink_web_tests/.+" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } - builders { name: "mac-arm64-rel reclient test" swarming_host: "chromium-swarm.appspot.com" dimensions: "builderless:1" @@ -49375,84 +48577,6 @@ } } } - builders { - name: "mac-arm64-rel reclient test untrusted" - swarming_host: "chromium-swarm.appspot.com" - dimensions: "builderless:1" - dimensions: "cpu:x86-64" - dimensions: "free_space:standard" - dimensions: "os:Mac-12" - dimensions: "pool:luci.chromium.ci" - exe { - cipd_package: "infra/chromium/bootstrapper/${platform}" - cipd_version: "latest" - cmd: "bootstrapper" - } - properties: - '{' - ' "$bootstrap/exe": {' - ' "exe": {' - ' "cipd_package": "infra/recipe_bundles/chromium.googlesource.com/chromium/tools/build",' - ' "cipd_version": "refs/heads/main",' - ' "cmd": [' - ' "luciexe"' - ' ]' - ' }' - ' },' - ' "$bootstrap/properties": {' - ' "properties_file": "infra/config/generated/builders/reclient/mac-arm64-rel reclient test untrusted/properties.json",' - ' "top_level_project": {' - ' "ref": "refs/heads/main",' - ' "repo": {' - ' "host": "chromium.googlesource.com",' - ' "project": "chromium/src"' - ' }' - ' }' - ' },' - ' "builder_group": "chromium.reclient.fyi",' - ' "led_builder_is_bootstrapped": true,' - ' "recipe": "chromium"' - '}' - execution_timeout_secs: 10800 - build_numbers: YES - service_account: "chromium-ci-builder@chops-service-accounts.iam.gserviceaccount.com" - experiments { - key: "luci.recipes.use_python3" - value: 100 - } - resultdb { - enable: true - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "ci_test_results" - test_results {} - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "gpu_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://chrome/test:telemetry_gpu_integration_test[^/]*/.+" - } - } - } - bq_exports { - project: "chrome-luci-data" - dataset: "chromium" - table: "blink_web_tests_ci_test_results" - test_results { - predicate { - test_id_regexp: "ninja://[^/]*blink_web_tests/.+" - } - } - } - history_options { - use_invocation_timestamp: true - } - } - } } } buckets {
diff --git a/infra/config/generated/luci/luci-milo.cfg b/infra/config/generated/luci/luci-milo.cfg index f96e014e..42310c7 100644 --- a/infra/config/generated/luci/luci-milo.cfg +++ b/infra/config/generated/luci/luci-milo.cfg
@@ -12058,6 +12058,11 @@ short_name: "rcs" } builders { + name: "buildbucket/luci.chromium.reclient/Win x64 Builder reclient gVisor cross test" + category: "rbe|win" + short_name: "rcs" + } + builders { name: "buildbucket/luci.chromium.reclient/Win x64 Builder reclient staging" category: "rbe|win" short_name: "rcs" @@ -12067,66 +12072,6 @@ category: "rbe|win" short_name: "rcs" } - builders { - name: "buildbucket/luci.chromium.reclient/ios-simulator reclient staging untrusted" - category: "rbecq|ios" - short_name: "rcs" - } - builders { - name: "buildbucket/luci.chromium.reclient/ios-simulator reclient test untrusted" - category: "rbecq|ios" - short_name: "rcs" - } - builders { - name: "buildbucket/luci.chromium.reclient/Linux Builder reclient staging untrusted" - category: "rbecq|linux" - short_name: "rcs" - } - builders { - name: "buildbucket/luci.chromium.reclient/Linux Builder reclient test untrusted" - category: "rbecq|linux" - short_name: "rcs" - } - builders { - name: "buildbucket/luci.chromium.reclient/Simple Chrome Builder reclient staging untrusted" - category: "rbecq|linux" - short_name: "rcs" - } - builders { - name: "buildbucket/luci.chromium.reclient/Simple Chrome Builder reclient test untrusted" - category: "rbecq|linux" - short_name: "rcs" - } - builders { - name: "buildbucket/luci.chromium.reclient/Mac Builder reclient staging untrusted" - category: "rbecq|mac" - short_name: "rcs" - } - builders { - name: "buildbucket/luci.chromium.reclient/Mac Builder reclient test untrusted" - category: "rbecq|mac" - short_name: "rcs" - } - builders { - name: "buildbucket/luci.chromium.reclient/mac-arm64-rel reclient staging untrusted" - category: "rbecq|mac" - short_name: "rcs" - } - builders { - name: "buildbucket/luci.chromium.reclient/mac-arm64-rel reclient test untrusted" - category: "rbecq|mac" - short_name: "rcs" - } - builders { - name: "buildbucket/luci.chromium.reclient/Win x64 Builder reclient staging untrusted" - category: "rbecq|win" - short_name: "rcs" - } - builders { - name: "buildbucket/luci.chromium.reclient/Win x64 Builder reclient test untrusted" - category: "rbecq|win" - short_name: "rcs" - } header { oncalls { name: "Chromium"
diff --git a/infra/config/generated/luci/luci-scheduler.cfg b/infra/config/generated/luci/luci-scheduler.cfg index 220713ad..da89d2ca 100644 --- a/infra/config/generated/luci/luci-scheduler.cfg +++ b/infra/config/generated/luci/luci-scheduler.cfg
@@ -1835,16 +1835,6 @@ } } job { - id: "Linux Builder reclient staging untrusted" - realm: "reclient" - acl_sets: "reclient" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "reclient" - builder: "Linux Builder reclient staging untrusted" - } -} -job { id: "Linux Builder reclient test" realm: "reclient" acl_sets: "reclient" @@ -1855,16 +1845,6 @@ } } job { - id: "Linux Builder reclient test untrusted" - realm: "reclient" - acl_sets: "reclient" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "reclient" - builder: "Linux Builder reclient test untrusted" - } -} -job { id: "Linux CFI" realm: "ci" acl_sets: "ci" @@ -2373,16 +2353,6 @@ } } job { - id: "Mac Builder reclient staging untrusted" - realm: "reclient" - acl_sets: "reclient" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "reclient" - builder: "Mac Builder reclient staging untrusted" - } -} -job { id: "Mac Builder reclient test" realm: "reclient" acl_sets: "reclient" @@ -2393,16 +2363,6 @@ } } job { - id: "Mac Builder reclient test untrusted" - realm: "reclient" - acl_sets: "reclient" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "reclient" - builder: "Mac Builder reclient test untrusted" - } -} -job { id: "Mac Debug (Intel)" realm: "ci" acls { @@ -2845,16 +2805,6 @@ } } job { - id: "Simple Chrome Builder reclient staging untrusted" - realm: "reclient" - acl_sets: "reclient" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "reclient" - builder: "Simple Chrome Builder reclient staging untrusted" - } -} -job { id: "Simple Chrome Builder reclient test" realm: "reclient" acl_sets: "reclient" @@ -2865,16 +2815,6 @@ } } job { - id: "Simple Chrome Builder reclient test untrusted" - realm: "reclient" - acl_sets: "reclient" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "reclient" - builder: "Simple Chrome Builder reclient test untrusted" - } -} -job { id: "Site Isolation Android" realm: "ci" acl_sets: "ci" @@ -3853,6 +3793,16 @@ } } job { + id: "Win x64 Builder reclient gVisor cross test" + realm: "reclient" + acl_sets: "reclient" + buildbucket { + server: "cr-buildbucket.appspot.com" + bucket: "reclient" + builder: "Win x64 Builder reclient gVisor cross test" + } +} +job { id: "Win x64 Builder reclient staging" realm: "reclient" acl_sets: "reclient" @@ -3863,16 +3813,6 @@ } } job { - id: "Win x64 Builder reclient staging untrusted" - realm: "reclient" - acl_sets: "reclient" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "reclient" - builder: "Win x64 Builder reclient staging untrusted" - } -} -job { id: "Win x64 Builder reclient test" realm: "reclient" acl_sets: "reclient" @@ -3883,16 +3823,6 @@ } } job { - id: "Win x64 Builder reclient test untrusted" - realm: "reclient" - acl_sets: "reclient" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "reclient" - builder: "Win x64 Builder reclient test untrusted" - } -} -job { id: "Win10 FYI x64 DX12 Vulkan Debug (NVIDIA)" realm: "ci" acls { @@ -5466,16 +5396,6 @@ } } job { - id: "ios-simulator reclient staging untrusted" - realm: "reclient" - acl_sets: "reclient" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "reclient" - builder: "ios-simulator reclient staging untrusted" - } -} -job { id: "ios-simulator reclient test" realm: "reclient" acl_sets: "reclient" @@ -5486,16 +5406,6 @@ } } job { - id: "ios-simulator reclient test untrusted" - realm: "reclient" - acl_sets: "reclient" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "reclient" - builder: "ios-simulator reclient test untrusted" - } -} -job { id: "ios-simulator-code-coverage" realm: "ci" acl_sets: "ci" @@ -6459,16 +6369,6 @@ } } job { - id: "mac-arm64-rel reclient staging untrusted" - realm: "reclient" - acl_sets: "reclient" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "reclient" - builder: "mac-arm64-rel reclient staging untrusted" - } -} -job { id: "mac-arm64-rel reclient test" realm: "reclient" acl_sets: "reclient" @@ -6479,16 +6379,6 @@ } } job { - id: "mac-arm64-rel reclient test untrusted" - realm: "reclient" - acl_sets: "reclient" - buildbucket { - server: "cr-buildbucket.appspot.com" - bucket: "reclient" - builder: "mac-arm64-rel reclient test untrusted" - } -} -job { id: "mac-arm64-updater-tester-dbg" realm: "ci" acls { @@ -7655,29 +7545,18 @@ triggers: "mac-archive-rel-goma-rbe-canary" triggers: "mac-archive-rel-goma-rbe-latest" triggers: "Linux Builder reclient staging" - triggers: "Linux Builder reclient staging untrusted" triggers: "Linux Builder reclient test" - triggers: "Linux Builder reclient test untrusted" triggers: "Mac Builder reclient staging" - triggers: "Mac Builder reclient staging untrusted" triggers: "Mac Builder reclient test" - triggers: "Mac Builder reclient test untrusted" triggers: "Simple Chrome Builder reclient staging" - triggers: "Simple Chrome Builder reclient staging untrusted" triggers: "Simple Chrome Builder reclient test" - triggers: "Simple Chrome Builder reclient test untrusted" + triggers: "Win x64 Builder reclient gVisor cross test" triggers: "Win x64 Builder reclient staging" - triggers: "Win x64 Builder reclient staging untrusted" triggers: "Win x64 Builder reclient test" - triggers: "Win x64 Builder reclient test untrusted" triggers: "ios-simulator reclient staging" - triggers: "ios-simulator reclient staging untrusted" triggers: "ios-simulator reclient test" - triggers: "ios-simulator reclient test untrusted" triggers: "mac-arm64-rel reclient staging" - triggers: "mac-arm64-rel reclient staging untrusted" triggers: "mac-arm64-rel reclient test" - triggers: "mac-arm64-rel reclient test untrusted" triggers: "WebRTC Chromium Android Builder" triggers: "WebRTC Chromium Linux Builder" triggers: "WebRTC Chromium Mac Builder"
diff --git a/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star b/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star index d93aca3..54c80af 100644 --- a/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star +++ b/infra/config/subprojects/chromium/try/tryserver.chromium.linux.star
@@ -225,7 +225,7 @@ name = "linux-rel", compilator = "linux-rel-compilator", branch_selector = branches.STANDARD_MILESTONE, - check_for_flakiness = False, + check_for_flakiness = True, mirrors = [ "ci/Linux Builder", "ci/Linux Tests",
diff --git a/infra/config/subprojects/reclient/reclient.star b/infra/config/subprojects/reclient/reclient.star index b295989d..5732c36 100644 --- a/infra/config/subprojects/reclient/reclient.star +++ b/infra/config/subprojects/reclient/reclient.star
@@ -55,28 +55,17 @@ *, name, console_view_category, - reclient_instance = "rbe-chromium-%s", + reclient_instance = "rbe-chromium-trusted", **kwargs): - return [ - ci.builder( - name = name, - reclient_instance = reclient_instance % "trusted", - console_view_entry = consoles.console_view_entry( - category = "rbe|" + console_view_category, - short_name = "rcs", - ), - **kwargs + return ci.builder( + name = name, + reclient_instance = reclient_instance, + console_view_entry = consoles.console_view_entry( + category = "rbe|" + console_view_category, + short_name = "rcs", ), - ci.builder( - name = name + " untrusted", - reclient_instance = reclient_instance % "untrusted", - console_view_entry = consoles.console_view_entry( - category = "rbecq|" + console_view_category, - short_name = "rcs", - ), - **kwargs - ), - ] + **kwargs + ) def fyi_reclient_test_builder( *, @@ -86,7 +75,19 @@ return fyi_reclient_staging_builder( name = name, console_view_category = console_view_category, - reclient_instance = "rbe-chromium-%s-test", + reclient_instance = "rbe-chromium-trusted-test", + **kwargs + ) + +def fyi_reclient_gvisor_test_builder( + *, + name, + console_view_category, + **kwargs): + return fyi_reclient_staging_builder( + name = name, + console_view_category = console_view_category, + reclient_instance = "rbe-chromium-untrusted-test", **kwargs ) @@ -218,6 +219,29 @@ os = os.WINDOWS_ANY, ) +fyi_reclient_gvisor_test_builder( + name = "Win x64 Builder reclient gVisor cross test", + builder_spec = builder_config.copy_from( + "ci/Win x64 Builder", + lambda spec: structs.evolve( + spec, + gclient_config = structs.extend( + spec.gclient_config, + apply_configs = [ + "enable_reclient", + "reclient_test", + ], + ), + build_gs_bucket = "chromium-fyi-archive", + ), + ), + builderless = True, + console_view_category = "win", + cores = 32, + execution_timeout = 5 * time.hour, + os = os.WINDOWS_ANY, +) + fyi_reclient_staging_builder( name = "Simple Chrome Builder reclient staging", console_view_category = "linux",
diff --git a/ios/chrome/app/strings/ios_strings.grd b/ios/chrome/app/strings/ios_strings.grd index 9591d03..8622139e 100644 --- a/ios/chrome/app/strings/ios_strings.grd +++ b/ios/chrome/app/strings/ios_strings.grd
@@ -1146,6 +1146,15 @@ <message name="IDS_IOS_ICON_SEARCH" desc="Accessibility label for the search icon [iOS only]."> Search </message> + <message name="IDS_IOS_INCOGNITO_INTERSTITIAL_TITLE" desc="Title of interstitial which lets the user choose, when they open a link from an external app, whether to open it in Incognito mode or in a regular tab. [iOS only]"> + Open in Incognito? + </message> + <message name="IDS_IOS_INCOGNITO_INTERSTITIAL_OPEN_IN_CHROME_INCOGNITO" desc="Button to open a link from an external app in Incognito mode rather than a regular tab. [iOS only]"> + Open in Chrome Incognito + </message> + <message name="IDS_IOS_INCOGNITO_INTERSTITIAL_OPEN_IN_CHROME" desc="Button to open a link from an external app in a regular tab rather than in Incognito mode. [iOS only]"> + Open in Chrome + </message> <message name="IDS_IOS_INCOGNITO_REAUTH_SYSTEM_DIALOG_REASON" desc="Text for system biometric authentication dialog to explain why authentication is required when the user attempts to authenticate to access Incognito tabs. [iOS only]"> Use <ph name="BIOMETRIC_AUTHENITCATION_TYPE">$1<ex>Face ID</ex></ph> to unlock your Incognito tabs. </message>
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_INCOGNITO_INTERSTITIAL_OPEN_IN_CHROME.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_INCOGNITO_INTERSTITIAL_OPEN_IN_CHROME.png.sha1 new file mode 100644 index 0000000..f8023f8 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_INCOGNITO_INTERSTITIAL_OPEN_IN_CHROME.png.sha1
@@ -0,0 +1 @@ +4ea3dc78e75c0cc92dd6bafbd26db53540b4d1d4 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_INCOGNITO_INTERSTITIAL_OPEN_IN_CHROME_INCOGNITO.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_INCOGNITO_INTERSTITIAL_OPEN_IN_CHROME_INCOGNITO.png.sha1 new file mode 100644 index 0000000..9126beb --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_INCOGNITO_INTERSTITIAL_OPEN_IN_CHROME_INCOGNITO.png.sha1
@@ -0,0 +1 @@ +1e773633bfa5a9714bd1d48afd712331048d3fb0 \ No newline at end of file
diff --git a/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_INCOGNITO_INTERSTITIAL_TITLE.png.sha1 b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_INCOGNITO_INTERSTITIAL_TITLE.png.sha1 new file mode 100644 index 0000000..702fc702 --- /dev/null +++ b/ios/chrome/app/strings/ios_strings_grd/IDS_IOS_INCOGNITO_INTERSTITIAL_TITLE.png.sha1
@@ -0,0 +1 @@ +fddea7a8fb24b15255a420abfb682c022d789518 \ No newline at end of file
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb index 63c15fd..23e7feb 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_as.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">আপুনি <ph name="DOMAIN" />এ পৰিচালনা কৰা এটা একাউণ্টৰ জৰিয়তে ছাইন ইন কৰিছে আৰু সেইটোৰ প্ৰশাসকক আপোনাৰ Chromium ডেটা নিয়ন্ত্ৰণ কৰিবলৈ সুবিধা দিছে। আপোনাৰ ডেটা এই একাউণ্টটোৰ সৈতে স্থায়ীভাৱে সংযুক্ত হৈ থাকিব। Chromiumৰ পৰা ছাইন আউট কৰিলে আপোনাৰ ডেটা মচা যাব কিন্ত সেইবোৰ আপোনাৰ Google একাউণ্টত জমা হৈয়ে থাকিব।</translation> <translation id="5983312940147103417">Chromiumক উন্নত কৰক</translation> <translation id="602807004951640891">আপুনি Chromium ব্যৱহাৰ কৰি <ph name="BEGIN_LINK_TOS" />সেৱাৰ চৰ্তাৱলী<ph name="END_LINK_TOS" />ত সন্মত হৈছে।</translation> +<translation id="6062449165341879460">আপোনাৰ প্ৰতিষ্ঠান <ph name="DOMAIN" />এ আপোনাৰ Chromiumৰ ডেটা, বুকমাৰ্ক, ইতিহাস, পাছৱৰ্ড আৰু আপুনি এই একাউণ্টটোত ছেভ কৰা আন ছেটিংসমূহ এক্সেছ কৰিব পাৰিব। আপুনি ছাইন আউট কৰিলে, এই ডিভাইচটোৰ পৰা আপোনাৰ ডেটা মচা হ’ব। অৱশ্যে, আপোনাৰ ডেটা আপোনাৰ পৰিচালিত Google একাউণ্টত ষ্ট’ৰ হৈ থাকিব আৰু সেয়া আপোনাৰ প্ৰতিষ্ঠানৰ বাবে উপলব্ধ হ’ব। আপোনাৰ প্ৰতিষ্ঠানে Chromiumৰ আচৰণ সলনি কৰিব পৰা সেই বিশেষ একাউণ্টটোৰ বাবে ব্যৱহাৰকাৰীৰ নীতিসমূহো ছেট কৰিব পাৰে।</translation> <translation id="6119647025869519954">Chromiumক আপোনাৰ ডিফ’ল্ট ব্ৰাউজাৰ কৰিবলৈ: ১) ছেটিং খোলক ২) ডিফ’ল্ট ব্ৰাউজাৰ এপত টিপক
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ca.xtb index f0f51c4..0448c5a 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ca.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">Estàs iniciant la sessió amb un compte gestionat per <ph name="DOMAIN" /> i estàs donant a l'administrador el control de les teves dades de Chromium. Les dades passaran a estar vinculades a aquest compte permanentment. Si tanques la sessió de Chromium, se suprimiran les teves dades d'aquest dispositiu, però continuaran emmagatzemades al teu compte de Google.</translation> <translation id="5983312940147103417">Millora Chromium</translation> <translation id="602807004951640891">En utilitzar Chromium, acceptes les <ph name="BEGIN_LINK_TOS" />condicions del servei<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">La teva organització (<ph name="DOMAIN" />) tindrà accés a les teves dades, les adreces d'interès, l'historial, les contrasenyes i altres opcions de configuració de Chromium que emmagatzemis en aquest compte. Quan tanquis la sessió, les teves dades s'esborraran d'aquest dispositiu, però continuaran emmagatzemades al teu Compte de Google gestionat i estaran disponibles per a la teva organització. L'organització també pot definir polítiques dels usuaris específiques del compte que poden canviar el comportament de Chromium.</translation> <translation id="6119647025869519954">Per establir Chromium com a navegador predeterminat: 1. Obre Configuració. 2. Toca Aplicació de navegador predeterminada.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb index 43317695..d82b863 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_cs.xtb
@@ -73,6 +73,7 @@ <translation id="5945387852661427312">Přihlašujete se pomocí účtu spravovaného doménou <ph name="DOMAIN" /> a poskytujete jeho správci kontrolu nad svými daty prohlížeče Chromium. Vaše data budou trvale přidružena k tomuto účtu. Odhlášením z prohlížeče Chromium svá data smažete z tohoto zařízení, ve vašem účtu Google však uložena zůstanou.</translation> <translation id="5983312940147103417">Pomozte s vylepšováním prohlížeče Chromium</translation> <translation id="602807004951640891">Používáním prohlížeče Chromium vyjadřujete souhlas se <ph name="BEGIN_LINK_TOS" />smluvními podmínkami<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">Vaše organizace <ph name="DOMAIN" /> bude mít přístup k datům, záložkám, historii, heslům a dalším nastavením prohlížeče Chromium, která uložíte do tohoto účtu. Když se odhlásíte, vaše data budou z tohoto zařízení vymazána. Ve spravovaném účtu Google nicméně vaše data zůstanou uložena a vaše organizace k nim bude mít přístup. Vaše organizace také může v tomto konkrétním účtu nastavit zásady pro uživatele, které mohou chování prohlížeče Chromium změnit.</translation> <translation id="6119647025869519954">Postup nastavení Chromia jako výchozího prohlížeče: 1. Otevřete nastavení. 2. Klepněte na Výchozí prohlížeč.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_cy.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_cy.xtb index 02223c4..519bf4c 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_cy.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_cy.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">Rydych yn mewngofnodi gyda chyfrif a reolir gan <ph name="DOMAIN" /> ac yn rhoi rheolaeth dros eich data Chromium i'w weinyddwr. Bydd eich data yn cael eu cysylltu'n barhaol i'r cyfrif hwn. Bydd allgofnodi o Chromium yn dileu eich data o'r ddyfais hon, ond bydd yn parhau i gael ei storio yn eich Cyfrif Google.</translation> <translation id="5983312940147103417">Gwella Chromium</translation> <translation id="602807004951640891">Drwy ddefnyddio Chromium, rydych yn cytuno i'r <ph name="BEGIN_LINK_TOS" />Telerau Gwasanaeth<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">Bydd gan <ph name="DOMAIN" /> eich sefydliad fynediad at eich data Chromium, nodau tudalen, hanes, cyfrineiriau a gosodiadau eraill rydych yn eu storio yn y cyfrif hwn. Pan fyddwch yn allgofnodi, bydd eich data yn cael eu clirio o'r ddyfais hon. Fodd bynnag, bydd eich data yn parhau i gael ei storio yn eich Cyfrif Google a reolir a bydd ar gael i'ch sefydliad. Gall eich sefydliad hefyd osod polisïau defnyddwyr sy'n benodol i'r cyfrif hwnnw a all newid ymddygiad Chromium.</translation> <translation id="6119647025869519954">I osod Chromium fel eich porwr diofyn: 1. Agorwch y gosodiadau 2. Tapiwch Ap Pori Diofyn
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb index b66cc8b4f..c9818db2 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_da.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">Du er ved at logge ind med en konto, der administreres af <ph name="DOMAIN" />, hvilket giver administratoren kontrol over dine Chromium-data. Dine data tilknyttes denne konto permanent. Hvis du logger ud af Chromium, slettes dine data fra denne enhed, men de forbliver gemt på din Google-konto.</translation> <translation id="5983312940147103417">Gør Chromium bedre</translation> <translation id="602807004951640891">Når du bruger Chromium, accepterer du <ph name="BEGIN_LINK_TOS" />servicevilkårene<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">Din organisation <ph name="DOMAIN" /> får adgang til din Chromium-historik samt dine Chromium-data, -bogmærker, -adgangskoder og andre indstillinger, som du har gemt på denne konto. Når du logger ud, ryddes dine data fra denne enhed. Dine data vil dog fortsat være gemt på din managerstyrede Google-konto, og de vil fortsat være tilgængelige for din organisation. Din organisation kan også konfigurere brugerpolitikker, der gælder specifikt for den pågældende konto, og som kan ændre Chromiums adfærd.</translation> <translation id="6119647025869519954">Sådan gør du Chromium til din standardbrowser: 1. Åbn Indstillinger 2. Tryk på Standardbrowserapp
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 2e870c79..193da81 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_es.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">Estás iniciando sesión con una cuenta gestionada por <ph name="DOMAIN" /> y vas a otorgar a su administrador el control sobre tus datos de Chromium. Tus datos se vincularán de forma permanente a esta cuenta. Al cerrar sesión en Chromium, tus datos se eliminarán de este dispositivo, pero permanecerán almacenados en tu cuenta de Google.</translation> <translation id="5983312940147103417">Mejorar Chromium</translation> <translation id="602807004951640891">Al usar Chromium, aceptas los <ph name="BEGIN_LINK_TOS" />Términos del Servicio<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">Tu organización <ph name="DOMAIN" /> tendrá acceso a tus datos, tus marcadores, tu historial, tus contraseñas y otros ajustes de Chromium que almacenes en esta cuenta. Si cierras sesión, tus datos se borrarán de este dispositivo. Sin embargo, tus datos permanecerán almacenados en tu cuenta de Google gestionada y estarán disponibles para tu organización. Tu organización también puede establecer políticas de usuarios específicas de esa cuenta que pueden cambiar el comportamiento de Chromium.</translation> <translation id="6119647025869519954">Para establecer Chromium como navegador predeterminado, haz lo siguiente: 1. Abre Configuración 2. Toca Aplicación de navegador predeterminada
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_et.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_et.xtb index 0c9abf1..c5ccb790 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_et.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_et.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">Logite sisse kontoga, mida haldab <ph name="DOMAIN" />, ja annate selle administraatorile üle Chromiumi andmete juhtimise. Teie andmed seotakse jäädavalt selle kontoga. Chromiumist väljalogimisel kustutatakse teie andmed sellest seadmest, kuid need jäävad alles teie Google'i kontole.</translation> <translation id="5983312940147103417">Chromiumi täiustamine</translation> <translation id="602807004951640891">Chromiumi kasutamisel nõustute <ph name="BEGIN_LINK_TOS" />teenusetingimustega<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">Teie organisatsioon <ph name="DOMAIN" /> saab juurdepääsu teie Chromiumi andmetele, järjehoidjatele, ajaloole, paroolidele ja muudele seadetele, mille sellele kontole salvestate. Kui välja logite, kustutatakse teie andmed sellest seadmest. Teie andmed jäävad teie hallatud Google'i kontole siiski alles ja need on teie organisatsiooni jaoks saadaval. Teie organisatsioon saab määrata ka konto kasutajareegleid, millega saab Chromiumi käitumist muuta.</translation> <translation id="6119647025869519954">Chromiumi vaikebrauseriks määramiseks tehke järgmist. 1. Avage menüü Seaded. 2. Puudutage valikut Vaikebrauserirakendus.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb index 3802bd1..d5d277ac 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_eu.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312"><ph name="DOMAIN" /> domeinuak kudeatutako kontu batekin hasi duzu saioa eta administratzaileari eman diozu Chromium datuen kontrola. Datuak betiko lotuko dira kontu honekin. Saioa amaitzen baduzu, Chromium datuak ezabatu egingo dira gailutik, baina Google-ko kontuan izango dituzu gordeta.</translation> <translation id="5983312940147103417">Hobetu Chromium</translation> <translation id="602807004951640891">Chromium erabiltzen baduzu, onartu egingo dituzu <ph name="BEGIN_LINK_TOS" />Zerbitzu-baldintzak<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">Chromium-eko datuak, laster-markak, historia, pasahitzak eta kontu honetan gordetzen dituzun bestelako ezarpenak atzitu ahalko ditu zure erakundeak (<ph name="DOMAIN" />). Saioa amaitzen duzunean, datuak garbitu egingo dira gailu honetatik. Hala ere, Google-ko kontu kudeatuan jarraituko dute, eta erakundea haiek atzitzeko gai izango da. Halaber, erabiltzaile-gidalerro jakin batzuk ezar ditzake erakundeak kontu horretarako, eta gidalerro horiek Chromium-en portaera alda dezakete.</translation> <translation id="6119647025869519954">Chromium arakatzaile lehenetsi bihurtzeko: 1. Ireki Ezarpenak. 2. Sakatu Arakatzaile lehenetsia.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb index acf1465c..827e80b5 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fi.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">Olet kirjautumassa sisään verkkotunnuksen <ph name="DOMAIN" /> hallitsemalla tilillä ja antamassa sen järjestelmänvalvojalle oikeuden hallita Chromium-tietojasi. Tietosi liitetään pysyvästi tähän tiliin. Chromiumista uloskirjautuminen poistaa tietosi tältä laitteelta, mutta ne säilyvät Google-tililläsi.</translation> <translation id="5983312940147103417">Entistä parempi Chromium</translation> <translation id="602807004951640891">Käyttämällä Chromiumia hyväksyt <ph name="BEGIN_LINK_TOS" />käyttöehdot<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">Organisaatiosi <ph name="DOMAIN" /> saa pääsyn Chromium-dataasi, kirjanmerkkeihisi, historiaasi, salasanoihisi ja muihin asetuksiisi, jotka olet tallentanut tälle tilille. Kun kirjaudut ulos, datasi tyhjennetään tältä laitteelta. Data säilyy kuitenkin hallinnoidulla Google-tililläsi ja on organisaation saatavilla. Organisaatiosi voi myös asettaa tilikohtaisia käyttäjäkäytäntöjä, jotka voivat muuttaa Chromiumin toimintaa.</translation> <translation id="6119647025869519954">Näin teet Chromiumista oletusselaimesi: 1. Avaa asetukset 2. Valitse Oletusselain
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb index 95718ec..e961fc7 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_fil.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">Nag-sign in ka gamit ang account na pinamamahalaan ng <ph name="DOMAIN" /> at binibigyan mo ang administrator nito ng kontrol sa iyong data sa Chromium. Permanenteng mauugnay ang data mo sa account na ito. Made-delete ang data mo sa device na ito kapag nag-sign out ka sa Chromium, ngunit mananatili itong naka-store sa Google Account mo.</translation> <translation id="5983312940147103417">Pahusayin ang Chromium</translation> <translation id="602807004951640891">Sa paggamit ng Chromium, sumasang-ayon ka sa <ph name="BEGIN_LINK_TOS" />Mga Tuntunin ng Serbisyo<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">Magkakaroon ng access ang <ph name="DOMAIN" /> ng iyong organisasyon sa data, mga bookmark, history, mga password, at iba mo pang setting sa Chromium na iso-store mo sa account na ito. Kapag nag-sign out ka, maki-clear ang iyong data sa device na ito. Gayunpaman, mananatiling naka-store ang iyong data sa pinapamahalaang Google Account mo at magiging available ito sa iyong organisasyon. Puwede ring magtakda ang iyong organisasyon ng mga patakaran ng user na partikular sa account na iyon na puwedeng makabago sa gawi ng Chromium.</translation> <translation id="6119647025869519954">Para itakda ang Chromium bilang iyong default: 1. Buksan ang Settings 2. I-tap ang Default Browser App
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb index 4c7603a7..94e4090 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_gu.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">તમે <ph name="DOMAIN" /> દ્વારા મેનેજ એકાઉન્ટમાં સાઇન ઇન કરી રહ્યાં છો અને તમારા Chromium ડેટા પર એનું એડમિન નિયંત્રણ આપી રહ્યાં છો. તમારો ડેટા આ એકાઉન્ટ સાથે કાયમીરૂપે જોડાયેલું રહેશે. Chromiumમાંથી સાઇન આઉટ કરવું આ ડિવાઇસ પરથી તમારો ડેટા ડિલીટ કરશે, પરંતુ એ તમારા Google એકાઉન્ટમાં સ્ટોર રહેશે.</translation> <translation id="5983312940147103417">Chromiumને બહેતર બનાવો</translation> <translation id="602807004951640891">Chromiumનો ઉપયોગ કરીને, તમે તેની <ph name="BEGIN_LINK_TOS" />સેવાની શરતો<ph name="END_LINK_TOS" /> સાથે સંમત થાઓ છો.</translation> +<translation id="6062449165341879460">તમારી સંસ્થા <ph name="DOMAIN" />ને તમારા Chromium ડેટા, બુકમાર્ક, ઇતિહાસ, પાસવર્ડ અને તમે આ એકાઉન્ટમાં સ્ટોર કરો છો તે અન્ય સેટિંગનો ઍક્સેસ મળશે. જ્યારે તમે સાઇન આઉટ કરશો, ત્યારે આ ડિવાઇસમાંથી તમારો ડેટા સાફ કરવામાં આવશે. જોકે, તમારો ડેટા તમારા મેનેજ કરેલા Google એકાઉન્ટમાં સ્ટોર કરેલો રહેશે અને તમારી સંસ્થા માટે ઉપલબ્ધ રહેશે. તમારી સંસ્થા વિશેષ કરીને તે એકાઉન્ટ માટે વપરાશકર્તાની પૉલિસીઓ સેટ કરી શકે છે કે જે Chromiumના વર્તનને બદલી શકે છે.</translation> <translation id="6119647025869519954">Chromiumને તમારું ડિફૉલ્ટ બ્રાઉઝર બનાવવા માટે: 1. સેટિંગ ખોલો 2. ડિફૉલ્ટ બ્રાઉઝર ઍપ પર ટૅપ કરો
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_hu.xtb index 73c633ec..44bb345 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hu.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">Egy <ph name="DOMAIN" /> által felügyelt fiókkal jelentkezik be, és engedélyezi az adminisztrátor számára a Chromium-adatok kezelését. Adatai állandó jelleggel ehhez a fiókhoz lesznek társítva. A Chromiumból való kijelentkezéssel törli adatait erről az eszközről, de azok továbbra is megmaradnak Google-fiókjában.</translation> <translation id="5983312940147103417">A Chromium fejlesztése</translation> <translation id="602807004951640891">A Chromium használatával elfogadja az <ph name="BEGIN_LINK_TOS" />általános szerződési feltételeket<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">Szervezete (<ph name="DOMAIN" />) hozzáfér majd az Ön Chromium-adataihoz, -könyvjelzőihez, -előzményeihez, -jelszavaihoz és az ebben a fiókban tárolt egyéb beállításaihoz. Kijelentkezéskor az adatai törlődnek erről az eszközről. Az adatok azonban továbbra is megmaradnak a felügyelt Google-fiókban, és hozzáférhetők lesznek szervezete számára. Szervezete felhasználói házirendeket is beállíthat erre a fiókra vonatkozóan, amelyek módosíthatják a Chromium viselkedését.</translation> <translation id="6119647025869519954">A Chromium beállítása alapértelmezett böngészőként: 1. Nyissa meg a Beállításokat. 2. Koppintson az Alapértelmezett böngésző lehetőségre.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_hy.xtb index 409773b..d17ef6a 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_hy.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_hy.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">Դուք մուտք եք գործում <ph name="DOMAIN" /> տիրույթի կողմից կառավարվող հաշիվ՝ դրա ադմինիստրատորին թույլ տալով վերահսկել ձեր Chromium-ի տվյալները: Ձեր տվյալները մշտապես կկապվեն այս հաշվի հետ: Եթե դուրս գաք Chromium-ից, այս սարքում պահված տվյալները կջնջվեն, սակայն կպահպանվեն ձեր Google հաշվում:</translation> <translation id="5983312940147103417">Օգնեք բարելավել Chromium-ի աշխատանքը</translation> <translation id="602807004951640891">Օգտագործելով Chromium-ը՝ դուք ընդունում եք <ph name="BEGIN_LINK_TOS" />Օգտագործման պայմանները<ph name="END_LINK_TOS" />։</translation> +<translation id="6062449165341879460">Ձեր <ph name="DOMAIN" /> կազմակերպությանը հասանելի կդառնան ձեր Chromium-ի տվյալները, էջանիշները, պատմությունը, գաղտնաբառերը և այս հաշվում պահված այլ կարգավորումները։ Երբ դուրս գաք հաշվից, ձեր տվյալները կջնջվեն այս սարքից։ Այդուհանդերձ, դրանք կպահվեն ձեր կառավարվող Google հաշվում և հասանելի կլինեն ձեր կազմակերպությանը։ Ձեր կազմակերպությունը կարող է սահմանել օգտագործման կանոններ, որոնք կիրառելի են նշված հաշվի համար և կարող են փոխել Chromium-ի աշխատանքը։</translation> <translation id="6119647025869519954">Chromium-ը ձեր կանխադրված դիտարկիչը դարձնելու համար․ 1. Բացեք կարգավորումները։ 2. Հպեք «Դիտարկիչի կանխադրված հավելված»։
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb index 8e7a91b..f278397 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_id.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">Anda masuk dengan akun yang dikelola oleh <ph name="DOMAIN" /> dan memberikan kontrol data Chromium kepada administrator. Data Anda akan terikat dengan akun ini secara permanen. Bila Anda keluar dari Chromium, data akan dihapus dari perangkat ini, namun tetap disimpan di Akun Google.</translation> <translation id="5983312940147103417">Buat Chromium Menjadi Lebih Baik</translation> <translation id="602807004951640891">Dengan menggunakan Chromium, Anda menyetujui <ph name="BEGIN_LINK_TOS" />Persyaratan Layanan<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">Organisasi Anda <ph name="DOMAIN" /> akan memiliki akses ke data, bookmark, histori, sandi, dan setelan Chromium lainnya yang Anda simpan di akun ini. Jika logout, data Anda akan dihapus dari perangkat ini. Namun, data akan tetap disimpan di Akun Google terkelola Anda dan tersedia untuk organisasi Anda. Organisasi juga dapat menetapkan kebijakan pengguna khusus untuk akun tersebut yang dapat mengubah perilaku Chromium.</translation> <translation id="6119647025869519954">Untuk menjadikan Chromium sebagai default: 1. Buka Setelan 2. Ketuk Aplikasi Browser Default
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb index 17d103722..4cfbeecb 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ja.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312"><ph name="DOMAIN" /> で管理されているアカウントでログインして、Chromium データの管理を管理者に委ねようとしています。この操作を行うと、データはこのアカウントに恒久的に関連付けられます。Chromium からログアウトすると、データはこのデバイスから削除されますが、Google アカウントには残ります。</translation> <translation id="5983312940147103417">Chromium の品質を向上</translation> <translation id="602807004951640891">Chromium を使用すると、<ph name="BEGIN_LINK_TOS" />利用規約<ph name="END_LINK_TOS" />に同意したことになります。</translation> +<translation id="6062449165341879460">このアカウントで保存した Chromium のデータ、ブックマーク、履歴、パスワード、その他の設定は、組織(<ph name="DOMAIN" />)からアクセス可能となります。ログアウトすると、データはこのデバイスから消去されますが、管理対象の Google アカウントには保存されたままで、組織はこれを使用できます。また、組織はこのアカウント専用のユーザー ポリシーを設定して、Chromium の動作を変更することも可能です。</translation> <translation id="6119647025869519954">Chromium を既定のブラウザにするには: 1. [設定] を開きます。 2. [デフォルトのブラウザアプリ] をタップします。
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb index 6936e8d..778e5c8 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_kk.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312"><ph name="DOMAIN" /> басқаратын аккаунтпен кірдіңіз және оның әкімшісіне Chromium дерегін басқару құқығы берілді. Дерек осы аккаунтпен байланыстырылады. Chromium жүйесінен шыққанда, дерек бұл құрылғыдан жойылғанымен, Google аккаунтында сақталады.</translation> <translation id="5983312940147103417">Chromium-ды жақсартуға үлес қосыңыз</translation> <translation id="602807004951640891">Chromium пайдалана отырып, <ph name="BEGIN_LINK_TOS" />Қызмет көрсету шарттарына<ph name="END_LINK_TOS" /> келісесіз.</translation> +<translation id="6062449165341879460">Ұйымыңыздың <ph name="DOMAIN" /> доменінде Chromium-дағы деректер, бетбелгілер, тарих, құпия сөздер және осы аккаунтта сақталған басқа да параметрлер пайдаланылатын болады. Жүйеден шыққан кезде, деректеріңіз бұл құрылғыдан өшіріледі. Дегенмен олар басқарылатын Google аккаунтында сол күйінде сақталады және ұйымыңызға қолжетімді болады. Сондай-ақ ұйымыңыз Chromium-дағы әрекеттерді өзгерте алатын аккаунтқа қатысты пайдаланушы саясаттарын орната алады.</translation> <translation id="6119647025869519954">Chromium браузерін әдепкі браузер ету үшін: 1. Параметрлерді ашыңыз. 2. "Әдепкі браузер қолданбасы" түймесін түртіңіз.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb index a71db45..f62ecef 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ko.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312"><ph name="DOMAIN" />에서 관리하는 계정으로 로그인합니다. 계정 관리자가 내 Chromium 데이터를 관리하게 되며 데이터는 이 계정에 영구적으로 연결됩니다. Chromium에서 로그아웃하면 데이터가 기기에서 삭제되지만 Google 계정에는 그대로 유지됩니다.</translation> <translation id="5983312940147103417">Chromium 개선에 참여</translation> <translation id="602807004951640891">Chromium을 사용하면 <ph name="BEGIN_LINK_TOS" />서비스 약관<ph name="END_LINK_TOS" />에 동의하게 됩니다.</translation> +<translation id="6062449165341879460"><ph name="DOMAIN" /> 조직에서 이 계정에 저장하는 Chromium 데이터, 북마크, 방문 기록, 비밀번호, 기타 설정에 액세스할 수 있습니다. 로그아웃하면 데이터가 기기에서 삭제됩니다. 하지만 데이터는 관리 Google 계정에 계속 저장되어 조직에서 사용할 수 있습니다. 조직에서 관련 계정에 적용되는 사용자 정책을 설정하여 Chromium의 동작을 변경할 수도 있습니다.</translation> <translation id="6119647025869519954">Chromium을 기본 브라우저로 설정하려면 다음 단계를 따르세요. 1. 설정을 엽니다. 2. 기본 브라우저 앱을 탭합니다.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb index 1987a58..ed7c2f8 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ms.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">Anda mengelog masuk dengan akaun yang diurus oleh <ph name="DOMAIN" /> dan memberi kawalan terhadap data Chromium anda kepada pentadbirnya. Data anda akan terikat secara kekal kepada akaun ini. Tindakan mengelog keluar daripada Chromium akan memadamkan data anda daripada peranti ini, tetapi data itu akan kekal disimpan dalam Akaun Google anda.</translation> <translation id="5983312940147103417">Jadikan Chromium Lebih Baik</translation> <translation id="602807004951640891">Dengan menggunakan Chromium, anda bersetuju untuk menerima <ph name="BEGIN_LINK_TOS" />Syarat Perkhidmatan<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">Organisasi <ph name="DOMAIN" /> anda akan mempunyai akses kepada data Chromium, penanda halaman, sejarah, kata laluan dan tetapan lain yang anda simpan dalam akaun ini. Apabila anda log keluar, data anda akan dikosongkan daripada peranti ini. Namun begitu, data anda akan terus disimpan dalam Google Account terurus anda dan akan tersedia di organisasi anda. Organisasi anda juga boleh menetapkan dasar pengguna khusus untuk akaun tersebut yang boleh mengubah gelagat Chromium.</translation> <translation id="6119647025869519954">Untuk menjadikan Chromium sebagai penyemak imbas lalai anda: 1. Buka Tetapan 2. Ketik Apl Penyemak Imbas Lalai
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb index 3cb175cd..e4fb08b0 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ne.xtb
@@ -73,6 +73,7 @@ <translation id="5945387852661427312">तपाईं <ph name="DOMAIN" /> द्वारा व्यवस्थापन गरिएको खाता मार्फत साइन इन गर्दै हुनुहुन्छ र त्यसका प्रशासकलाई तपाईंको Chromium को डेटामाथि नियन्त्रण गर्न दिँदै हुनुहुन्छ। तपाईंको डेटा सदाका लागि यस खातामा जोडिनेछ। Chromium बाट साइन आउट गर्नुले तपाईंको डेटा यस डिभाइसबाट मेटिनेछ तर यो तपाईंको Google खातामा भण्डारण गरिएको अवस्थामा रहनेछ।</translation> <translation id="5983312940147103417">Chromium को गुणस्तर अझ राम्रो बनाउनुहोस्</translation> <translation id="602807004951640891">Chromium प्रयोग गरेर तपाईं <ph name="BEGIN_LINK_TOS" />सेवाका सर्तहरू<ph name="END_LINK_TOS" />मा सहमति जनाउनुहुन्छ।</translation> +<translation id="6062449165341879460">तपाईंको सङ्गठन <ph name="DOMAIN" /> ले Chromium मा भएका तपाईंका डेटा, बुकमार्क, इतिहास, पासवर्ड र तपाईंले यो खातामा सेभ गर्ने अन्य सेटिङ हेर्न तथा प्रयोग गर्न सक्ने छ। तपाईंले साइन आउट गरेपछि यो डिभाइसबाट तपाईंको डेटा मेटाइने छ। तर तपाईंको डेटा तपाईंको व्यवस्थापन गरिएको Google खातामा सेभ भइरहने छ र तपाईंको सङ्गठनले उक्त डेटा हेर्न तथा प्रयोग गर्न सक्ने छ। तपाईंको सङ्गठनले उक्त खातामा लागू हुने प्रयोगकर्तासम्बन्धी नीतिहरू तय गर्न पनि सक्छ र ती नीतिहरूले Chromium ले काम गर्ने तरिकामा प्रभाव पार्न सक्छ।</translation> <translation id="6119647025869519954">Chromium लाई आफ्नो डिफल्ट ब्राउजर बनाउन: १. सेटिङ खोल्नुहोस् २. 'डिफल्ट ब्राउजर एप'मा ट्याप गर्नुहोस्
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_no.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_no.xtb index 840e4d8..eb779885 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_no.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">Du logger på med en konto som administreres av <ph name="DOMAIN" />, og du gir dermed administratoren for dette domenet kontroll over Chromium-dataene dine. Dataene dine blir knyttet til denne kontoen permanent. Når du logger av Chromium, slettes dataene dine fra denne enheten, men de er fortsatt lagret i Google-kontoen din.</translation> <translation id="5983312940147103417">Gjør Chromium bedre</translation> <translation id="602807004951640891">Ved å bruke Chromium samtykker du i <ph name="BEGIN_LINK_TOS" />vilkårene for bruk<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">Organisasjonen din, <ph name="DOMAIN" />, får tilgang til data, bokmerker, logg, passord og andre innstillinger for Chromium som du lagrer i denne kontoen. Når du logger av, slettes dataene dine fra denne enheten. Dataene forblir imidlertid lagret i den administrerte Google-kontoen og er tilgjengelige for organisasjonen din. Organisasjonen din kan også angi spesifikke brukerinnstillinger for den aktuelle kontoen. Disse kan endre virkemåten til Chromium.</translation> <translation id="6119647025869519954">Slik velger du Chromium som standardnettleser: 1. Åpne Innstillinger. 2. Trykk på Standard nettleserapp.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_or.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_or.xtb index 9e8b1ae..5248a62 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_or.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_or.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">ଆପଣ <ph name="DOMAIN" />ଙ୍କ ଦ୍ୱାରା ପରିଚାଳିତ ଏକ ଆକାଉଣ୍ଟ ମାଧ୍ୟମରେ ସାଇନ୍ ଇନ୍ କରିଛନ୍ତି ଏବଂ ଏହାର ବ୍ୟବସ୍ଥାପକଙ୍କୁ ଆପଣଙ୍କ Chromium ଡାଟାର ନିୟନ୍ତ୍ରଣ ଦେଇଛନ୍ତି। ଆପଣଙ୍କର ଡାଟା ଏହି ଆକାଉଣ୍ଟ ସହ ସ୍ଥାୟୀଭାବେ ଆବଦ୍ଧ ହେବ। Chromiumରୁ ସାଇନ୍ ଆଉଟ୍ କରିବା ଦ୍ୱାରା ଆପଣଙ୍କର ଡାଟା ଏହି ଡିଭାଇସ୍ରୁ ଡିଲିଟ୍ ହୋଇଯିବ, କିନ୍ତୁ ଏହା ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟରେ ଷ୍ଟୋର୍ ହୋଇ ରହିବ।</translation> <translation id="5983312940147103417">Chromiumକୁ ଆହୁରି ଉନ୍ନତ କରନ୍ତୁ</translation> <translation id="602807004951640891">Chromium ବ୍ୟବହାର କରି, ଆପଣ <ph name="BEGIN_LINK_TOS" />ସେବାର ସର୍ତ୍ତାବଳୀ<ph name="END_LINK_TOS" />ରେ ସମ୍ମତ ହୁଅନ୍ତି।</translation> +<translation id="6062449165341879460">ଆପଣଙ୍କ ସଂସ୍ଥା <ph name="DOMAIN" />ର ଆପଣଙ୍କ Chromium ଡାଟା, ବୁକମାର୍କ, ଇତିହାସ, ପାସୱାର୍ଡ ଏବଂ ଏହି ଆକାଉଣ୍ଟରେ ଆପଣ ଷ୍ଟୋର କରୁଥିବା ଅନ୍ୟ ସେଟିଂସକୁ ଆକ୍ସେସ ରହିବ। ଆପଣ ସାଇନ ଆଉଟ କଲେ, ଆପଣଙ୍କ ଡାଟାକୁ ଏହି ଡିଭାଇସରୁ ଖାଲି କରିଦିଆଯିବ। କିନ୍ତୁ, ଆପଣଙ୍କ ଡାଟା ଆପଣଙ୍କର ପରିଚାଳିତ Google ଆକାଉଣ୍ଟରେ ଷ୍ଟୋର ହୋଇ ରହିବ ଏବଂ ଆପଣଙ୍କ ସଂସ୍ଥା ପାଇଁ ଉପଲବ୍ଧ ହେବ। ଆପଣଙ୍କ ସଂସ୍ଥା ମଧ୍ୟ ସେହି ଆକାଉଣ୍ଟ ପାଇଁ ନିର୍ଦ୍ଦିଷ୍ଟ ଉପଯୋଗକର୍ତ୍ତା ନୀତିଗୁଡ଼ିକୁ ସେଟ କରିପାରିବ ଯାହା Chromiumର ବ୍ୟବହାରକୁ ପରିବର୍ତ୍ତନ କରିପାରିବ।</translation> <translation id="6119647025869519954">Chromiumକୁ ଆପଣଙ୍କ ଡିଫଲ୍ଟ ବ୍ରାଉଜର୍ କରିବାକୁ: 1. ସେଟିଂସ୍ ଖୋଲନ୍ତୁ 2. ଡିଫଲ୍ଟ ବ୍ରାଉଜର୍ ଆପକୁ ଟାପ୍ କରନ୍ତୁ
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pa.xtb index 5243c0d..dab7d9c 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_pa.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pa.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">ਤੁਸੀਂ <ph name="DOMAIN" /> ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤੇ ਖਾਤੇ ਨਾਲ ਸਾਈਨ-ਇਨ ਕਰ ਰਹੇ ਹੋ ਅਤੇ ਉਸਦੇ ਪ੍ਰਸ਼ਾਸਕ ਨੂੰ ਆਪਣੇ Chromium ਡਾਟੇ ਦਾ ਕੰਟਰੋਲ ਦੇ ਰਹੇ ਹੋ। ਤੁਹਾਡਾ ਡਾਟਾ ਸਥਾਈ ਤੌਰ 'ਤੇ ਇਸ ਖਾਤੇ ਨਾਲ ਜੋੜ ਦਿੱਤਾ ਜਾਵੇਗਾ। Chromium ਤੋਂ ਸਾਈਨ-ਆਊਟ ਹੋਣ ਨਾਲ ਤੁਹਾਡਾ ਡਾਟਾ ਇਸ ਡੀਵਾਈਸ ਤੋਂ ਮਿਟਾ ਦਿੱਤਾ ਜਾਵੇਗਾ, ਪਰ ਇਹ ਤੁਹਾਡੇ Google ਖਾਤੇ ਵਿੱਚ ਸਟੋਰ ਰਹੇਗਾ।</translation> <translation id="5983312940147103417">Chromium ਨੂੰ ਬਿਹਤਰ ਬਣਾਓ</translation> <translation id="602807004951640891">Chromium ਨੂੰ ਵਰਤ ਕੇ, ਤੁਸੀਂ <ph name="BEGIN_LINK_TOS" />ਸੇਵਾ ਦੇ ਨਿਯਮਾਂ<ph name="END_LINK_TOS" /> ਨਾਲ ਸਹਿਮਤ ਹੁੰਦੇ ਹੋ।</translation> +<translation id="6062449165341879460">ਤੁਹਾਡੀ ਸੰਸਥਾ <ph name="DOMAIN" /> ਕੋਲ ਤੁਹਾਡੇ Chromium ਡਾਟੇ, ਬੁੱਕਮਾਰਕਾਂ, ਇਤਿਹਾਸ, ਪਾਸਵਰਡਾਂ ਅਤੇ ਤੁਹਾਡੇ ਵੱਲੋਂ ਇਸ ਖਾਤੇ ਵਿੱਚ ਸਟੋਰ ਕੀਤੀਆਂ ਜਾਣ ਵਾਲੀਆਂ ਹੋਰ ਸੈਟਿੰਗਾਂ ਤੱਕ ਪਹੁੰਚ ਹੋਵੇਗੀ। ਤੁਹਾਡੇ ਵੱਲੋਂ ਸਾਈਨ-ਆਊਟ ਕਰਨ 'ਤੇ, ਤੁਹਾਡੇ ਡਾਟੇ ਨੂੰ ਇਸ ਡੀਵਾਈਸ ਤੋਂ ਕਲੀਅਰ ਕਰ ਦਿੱਤਾ ਜਾਵੇਗਾ। ਹਾਲਾਂਕਿ, ਤੁਹਾਡਾ ਡਾਟਾ ਤੁਹਾਡੇ ਪ੍ਰਬੰਧਿਤ Google ਖਾਤੇ ਵਿੱਚ ਸਟੋਰ ਰਹੇਗਾ ਅਤੇ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵਿੱਚ ਉਪਲਬਧ ਰਹੇਗਾ। ਤੁਹਾਡੀ ਸੰਸਥਾ ਖਾਸ ਤੌਰ 'ਤੇ ਉਸ ਖਾਤੇ ਲਈ ਵਰਤੋਂਕਾਰ ਨੀਤੀਆਂ ਵੀ ਸੈੱਟ ਕਰ ਸਕਦੀ ਹੈ ਜੋ Chromium ਦੇ ਵਿਹਾਰ ਨੂੰ ਬਦਲ ਸਕਦੀਆਂ ਹਨ।</translation> <translation id="6119647025869519954">Chromium ਨੂੰ ਆਪਣਾ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਬ੍ਰਾਊਜ਼ਰ ਬਣਾਉਣ ਲਈ: 1. ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹੋ 2. ਪੂਰਵ-ਨਿਰਧਾਰਤ ਬ੍ਰਾਊਜ਼ਰ ਐਪ 'ਤੇ ਟੈਪ ਕਰੋ
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb index 65b1130..2506432d 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pl.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">Logujesz się na konto, którym zarządza <ph name="DOMAIN" />, i przekazujesz jego administratorowi kontrolę nad Twoimi danymi Chromium. Zostaną one trwale przypisane do tego konta. Gdy się wylogujesz, znikną one z tego urządzenia, ale pozostaną zapisane na Twoim koncie Google.</translation> <translation id="5983312940147103417">Ulepszaj Chromium</translation> <translation id="602807004951640891">Używając Chromium, wyrażasz zgodę na <ph name="BEGIN_LINK_TOS" />Warunki korzystania z usługi<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">Twoja organizacja (<ph name="DOMAIN" />) będzie miała dostęp do danych, zakładek, historii, haseł i innych ustawień Chromium, które przechowujesz na tym koncie. Gdy się wylogujesz, dane zostaną usunięte z tego urządzenia. Pozostaną one jednak zapisane na zarządzanym koncie Google i organizacja będzie miała do nich dostęp. Organizacja może też ustawiać na tym koncie zasady dotyczące użytkowników, które mogą zmieniać działanie Chromium.</translation> <translation id="6119647025869519954">Aby ustawić Chromium jako przeglądarkę domyślną: 1. Otwórz Ustawienia. 2. Kliknij Domyślna przeglądarka.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb index bc38dd7..115da2f 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_pt-BR.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">Você está fazendo login com uma conta gerenciada por <ph name="DOMAIN" /> e dando ao administrador dela o controle sobre seus dados do Chromium, os quais ficarão permanentemente vinculados a essa conta. Se você sair do Chromium, seus dados serão excluídos deste dispositivo, mas permanecerão armazenados na sua Conta do Google.</translation> <translation id="5983312940147103417">Melhorar o Chromium</translation> <translation id="602807004951640891">Ao usar o Chromium, você concorda com os <ph name="BEGIN_LINK_TOS" />Termos de Serviço<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">A organização <ph name="DOMAIN" /> vai ter acesso aos dados, favoritos, histórico, senhas e outras configurações do Chromium que você armazenar nessa conta. Quando você sair, seus dados vão ser apagados deste dispositivo. No entanto, os dados continuarão armazenados na sua Conta do Google gerenciada e vão ficar disponíveis para sua organização. A organização também pode definir políticas do usuário específicas para a conta, e elas podem mudar o comportamento do Chromium.</translation> <translation id="6119647025869519954">Para tornar o Chromium seu navegador padrão: 1. Abra as Configurações. 2. Toque em 'App do navegador padrão".
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sk.xtb index ac4cc76..540598f 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sk.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">Prihlasujete sa pomocou účtu spravovaného doménou <ph name="DOMAIN" /> a jej správcovi tým dávate kontrolu nad vašimi údajmi prehliadača Chromium. Vaše údaje budú natrvalo prepojené s týmto účtom. Odhlásením z prehliadača Chromium odstránite údaje z príslušného zariadenia, avšak naďalej zostanú uložené vo vašom účte Google.</translation> <translation id="5983312940147103417">Zlepšujte Chromium</translation> <translation id="602807004951640891">Používaním prehliadača Chromium vyjadrujete súhlas so <ph name="BEGIN_LINK_TOS" />zmluvnými podmienkami<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">Vaša organizácia <ph name="DOMAIN" /> bude mať prístup k údajom, záložkám, histórii, heslám a ďalším nastaveniam prehliadača Chromium, ktoré uložíte v tomto účte. Keď sa odhlásite, vaše údaje budú z tohto zariadenia vymazané. Údaje však zostanú uložené vo vašom spravovanom účte Google a budú k dispozícii vašej organizácii. Vaša organizácia môže nastaviť aj pravidlá pre používateľov špecifické pre daný účet, ktoré môžu zmeniť správanie prehliadača Chromium.</translation> <translation id="6119647025869519954">Ak chcete Chromium nastaviť ako predvolený prehliadač: 1. Otvorte nastavenia. 2. Klepnite na položku Predvolená aplikácia prehliadača.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_sl.xtb index c4f57492..0c0624bb 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_sl.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_sl.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">Prijavljate se z računom, ki ga upravlja <ph name="DOMAIN" />, in nadzor nad podatki v Chromiumu predajate skrbniku. Vaši podatki bodo trajno povezani s tem računom. Če se odjavite iz Chromiuma, boste izbrisali podatke iz te naprave, vendar bodo še naprej shranjeni v Google Računu.</translation> <translation id="5983312940147103417">Izboljšajte Chromium</translation> <translation id="602807004951640891">Če uporabljate Chromium, se strinjate s <ph name="BEGIN_LINK_TOS" />pogoji storitve<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">Vaša organizacija <ph name="DOMAIN" /> bo imela dostop do podatkov Chromiuma, zaznamkov, zgodovine, gesel in drugih nastavitev, ki jih shranite v tem računu. Ko se odjavite, bodo podatki izbrisani iz te naprave. Vaši podatki bodo kljub temu še naprej shranjeni v upravljanem računu Google in bodo na voljo vaši organizaciji. Vaša organizacija lahko nastavi tudi uporabniške pravilnike, specifične za ta račun, to pa lahko spremeni način delovanja Chromiuma.</translation> <translation id="6119647025869519954">Chromium nastavite kot privzeti iskalnik tako: 1. Odprite nastavitve. 2. Dotaknite se možnosti za privzeto aplikacijo za brskanje.
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb index 13c0d3b..4268de9 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ta.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312"><ph name="DOMAIN" /> நிர்வகிக்கும் கணக்கில் உள்நுழைந்து, உங்கள் Chromium தரவு மீதான கட்டுப்பாட்டை அதன் நிர்வாகிக்கு வழங்குகிறீர்கள். இந்தக் கணக்குடன் தரவு நிரந்தரமாக இணைக்கப்படும். Chromiumமிலிருந்து வெளியேறுவதால், இந்தச் சாதனத்திலிருந்து தரவு நீக்கப்படும், எனினும் உங்கள் Google கணக்கில் தரவு தொடர்ந்து இருக்கும்.</translation> <translation id="5983312940147103417">Chromiumமைச் சிறந்ததாக்குங்கள்</translation> <translation id="602807004951640891">Chromiumமைப் பயன்படுத்துவதன் மூலம் <ph name="BEGIN_LINK_TOS" />சேவை விதிமுறைகளை<ph name="END_LINK_TOS" /> ஏற்கிறீர்கள்.</translation> +<translation id="6062449165341879460">உங்கள் Chromium தரவு, புக்மார்க்குகள், இதுவரை பார்த்தவை, கடவுச்சொற்கள் மற்றும் இந்தக் கணக்கில் நீங்கள் சேமிக்கும் பிற அமைப்புகளை உங்கள் நிறுவனம் (<ph name="DOMAIN" />) அணுக முடியும். நீங்கள் வெளியேறினால் இந்தச் சாதனத்தில் இருந்து உங்கள் தரவு அழிக்கப்படும். இருப்பினும், நிர்வகிக்கப்படும் உங்கள் Google கணக்கில் அவை சேமிக்கப்பட்டிருக்கும். அத்துடன் உங்கள் நிறுவனத்தால் அவற்றைப் பயன்படுத்தவும் முடியும். அந்தக் கணக்கிற்கு மட்டும் பொருந்தும் பயனர் கொள்கைகளையும் உங்கள் நிறுவனம் அமைக்கலாம். இதனால் Chromium இயங்கும் விதத்தில் மாற்றம் ஏற்படலாம்.</translation> <translation id="6119647025869519954">Chromiumமை உங்கள் இயல்பு உலாவியாக மாற்ற: 1. அமைப்புகளைத் திறக்கவும் 2. இயல்பு உலாவி ஆப்ஸ் என்பதைத் தட்டவும்
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb index 46f8885..980fb4ba 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_te.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">మీరు <ph name="DOMAIN" /> నిర్వహణలో ఉన్న ఖాతా నుండి సైన్ ఇన్ చేస్తున్నారు. దీని నిర్వాహకునికి మీ Chromium డేటాపై నియంత్రణను అందిస్తున్నారు. మీ డేటా శాశ్వతంగా ఈ ఖాతాకు అనుబంధించబడుతుంది. Chromium నుండి సైన్ అవుట్ చేయడం వలన ఈ పరికరం నుండి మీ డేటా తొలగించబడుతుంది. కానీ ఇది మీ Google ఖాతాలో అలాగే నిల్వ చేయబడి ఉంటుంది.</translation> <translation id="5983312940147103417">Chromiumను మెరుగుపరచండి</translation> <translation id="602807004951640891">Chromiumను ఉపయోగించడం ద్వారా, మీరు <ph name="BEGIN_LINK_TOS" />సేవా నిబంధనల<ph name="END_LINK_TOS" />కు అంగీకరిస్తున్నారు.</translation> +<translation id="6062449165341879460">ఈ ఖాతాలో మీరు స్టోర్ చేసిన మీ Chromium డేటా, బుక్మార్క్లు, హిస్టరీ, పాస్వర్డ్లు, ఇతర సెట్టింగ్లకు మీ సంస్థ <ph name="DOMAIN" /> యాక్సెస్ను కలిగి ఉంటుంది. మీరు సైన్ అవుట్ చేసినప్పుడు, ఈ పరికరం నుండి మీ డేటా క్లియర్ చేయబడుతుంది. అయితే, మీ డేటా మీ మేనేజ్ చేయబడే Google ఖాతాలో అలాగే స్టోర్ చేయబడుతుంది, మీ సంస్థకు అందుబాటులో ఉంటుంది. Chromium ప్రవర్తనను మార్చగల నిర్దిష్ట యూజర్ పాలసీలను కూడా మీ సంస్థ ఆ ఖాతాకు సెట్ చేయగలదు.</translation> <translation id="6119647025869519954">ఈ విధంగా Chromiumను మీ ఆటోమేటిక్ బ్రౌజర్గా సెట్ చేసుకోండి: 1. సెట్టింగ్లను తెరవండి 2. ఆటోమేటిక్ బ్రౌజర్ యాప్ను ట్యాప్ చేయండి
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb index 3629812..c0e73d1f 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_ur.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">آپ <ph name="DOMAIN" /> کے زیر انتظام اکاؤنٹ کے ساتھ سائن ان کر رہے ہیں اور اس کے منتظم کو اپنے Chromium ڈیٹا پر کنٹرول دے رہے ہیں۔ آپ کا ڈیٹا اس اکاؤنٹ سے مستقل طور پر مربوط ہو جائے گا۔ Chromium سے سائن آؤٹ کرنے سے آپ کا ڈیٹا اس آلہ سے حذف ہو جائے گا، لیکن یہ آپ کے Google اکاؤنٹ میں اسٹور رہے گا۔</translation> <translation id="5983312940147103417">Chromium کو بہتر بنائیں</translation> <translation id="602807004951640891">Chromium استعمال کر کے، آپ <ph name="BEGIN_LINK_TOS" />سروس کی شرائط<ph name="END_LINK_TOS" /> سے اتفاق کرتے ہیں۔</translation> +<translation id="6062449165341879460">آپ کی تنظیم کے <ph name="DOMAIN" /> کو آپ کے Chromium ڈیٹا، بُک مارکس، سرگزشت، پاس ورڈز اور دیگر ترتیبات تک رسائی حاصل ہوگی جنہیں آپ اس اکاؤنٹ میں اسٹور کرتے ہیں۔ آپ کے سائن آؤٹ کرنے پر، اس آلے سے آپ کا ڈیٹا صاف کر دیا جائے گا۔ تاہم، آپ کا ڈیٹا آپ کے نظم کردہ Google اکاؤنٹ میں اسٹور رہے گا اور آپ کی تنظیم کے لیے دستیاب رہے گا۔ آپ کی تنظیم اس اکاؤنٹ کے لیے مخصوص صارف کی پالیسیاں بھی سیٹ کر سکتی ہے جو Chromium کے رویے کو تبدلی کر سکتی ہیں۔</translation> <translation id="6119647025869519954">Chromium کو اپنا ڈیفالٹ بنانے کیلئے: 1۔ ترتیبات کھولیں 2۔ ڈیفالٹ براؤزر ایپ پر تھپتھپائیں
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb index 9261807c..704f8de 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_vi.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">Bạn đang đăng nhập bằng tài khoản do <ph name="DOMAIN" /> quản lý và cấp cho quản trị viên quyền kiểm soát dữ liệu Chromium của bạn. Dữ liệu của bạn sẽ được liên kết vĩnh viễn với tài khoản này. Đăng xuất khỏi Chromium sẽ xóa dữ liệu của bạn khỏi thiết bị này nhưng dữ liệu đó sẽ vẫn được lưu trữ trong Tài khoản Google.</translation> <translation id="5983312940147103417">Cải thiện Chromium</translation> <translation id="602807004951640891">Bằng việc sử dụng Chromium, bạn đồng ý với <ph name="BEGIN_LINK_TOS" />Điều khoản dịch vụ<ph name="END_LINK_TOS" />.</translation> +<translation id="6062449165341879460">Tổ chức của bạn (<ph name="DOMAIN" />) sẽ có quyền truy cập vào dữ liệu của bạn trên Chromium, dấu trang, nhật ký, mật khẩu và các chế độ cài đặt khác mà bạn lưu trữ trong tài khoản này. Khi bạn đăng xuất, dữ liệu của bạn sẽ bị xoá khỏi thiết bị này. Tuy nhiên, dữ liệu vẫn được lưu trữ trong Tài khoản Google được quản lý của bạn và tổ chức có thể sử dụng dữ liệu này. Tổ chức của bạn cũng có thể thiết lập chính sách người dùng dành riêng cho tài khoản đó và việc này có thể làm thay đổi hành vi của Chromium.</translation> <translation id="6119647025869519954">Cách đặt Chromium làm trình duyệt mặc định: 1. Mở phần Cài đặt 2. Nhấn vào Ứng dụng trình duyệt mặc định
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb index c15fc7e..dd6c15e 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-CN.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">您正要登录由 <ph name="DOMAIN" /> 管理的帐号,并要授权其管理员控制您的 Chromium 数据。您的数据将与此帐号永久关联。退出 Chromium 后,您的数据将从这台设备上删除,但仍会保留在您的 Google 帐号中。</translation> <translation id="5983312940147103417">帮助改善 Chromium</translation> <translation id="602807004951640891">使用 Chromium 即表示您同意接受<ph name="BEGIN_LINK_TOS" />服务条款<ph name="END_LINK_TOS" />。</translation> +<translation id="6062449165341879460">贵组织 (<ph name="DOMAIN" />) 将能够访问您在此帐号中存储的 Chromium 数据、书签、历史记录、密码和其他设置。当您退出帐号时,系统将从这部设备上清除您的数据。不过,您的数据仍会存储在您名下受管理的 Google 帐号中,且可供贵组织访问。贵组织也可专门针对上述帐号设置用户规范,这可能会改变 Chromium 的行为。</translation> <translation id="6119647025869519954">若要将 Chromium 设为默认浏览器,请执行以下操作: 1. 打开“设置” 2. 点按“默认浏览器应用”
diff --git a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb index 4bc79a17..4e83afb 100644 --- a/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb +++ b/ios/chrome/app/strings/resources/ios_chromium_strings_zh-HK.xtb
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">您即將登入由 <ph name="DOMAIN" /> 管理的帳戶,並讓帳戶管理員控制您的 Chromium 資料。您的資料將與這個帳戶建立永久連結。如果您登出 Chromium,系統將刪除此裝置上的資料,但這些資料仍會儲存在您的 Google 帳戶中。</translation> <translation id="5983312940147103417">讓 Chromium 更臻完美</translation> <translation id="602807004951640891">使用 Chromium 即表示您同意《<ph name="BEGIN_LINK_TOS" />服務條款<ph name="END_LINK_TOS" />》。</translation> +<translation id="6062449165341879460">貴機構 <ph name="DOMAIN" /> 將可存取你儲存在這個帳戶中的 Chromium 資料、書籤、歷史記錄、密碼和其他設定。登出帳戶後,系統會清除這部裝置中的資料。不過,你的資料仍會儲存在受管理 Google 帳戶中,並可供貴機構使用。貴機構也可以設定該帳戶專屬的使用者政策,這些政策可以變更 Chromium 的行為。</translation> <translation id="6119647025869519954">如何將 Chromium 設定為預設瀏覽器: 1. 開啟「設定」 2. 輕按 [預設瀏覽器應用程式]
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 876186bd..f88a058 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
@@ -74,6 +74,7 @@ <translation id="5945387852661427312">你即將使用由 <ph name="DOMAIN" /> 所管理的帳戶登入,並授權該網域的管理員控管你的 Chromium 資料。你的資料會與這個帳戶建立永久連結。登出 Chromium 後,系統會將你的資料從這個裝置上刪除,但繼續保留在你的 Google 帳戶中。</translation> <translation id="5983312940147103417">讓 Chromium 更臻完美</translation> <translation id="602807004951640891">使用 Chromium 即表示你同意《<ph name="BEGIN_LINK_TOS" />服務條款<ph name="END_LINK_TOS" />》。</translation> +<translation id="6062449165341879460">貴機構 <ph name="DOMAIN" /> 將可存取你儲存在這個帳戶中的 Chromium 資料、書籤、歷史記錄、密碼和其他設定。登出帳戶後,系統會清除這部裝置中的資料。不過,你的資料仍會儲存在受管理 Google 帳戶中,並可供貴機構使用。貴機構也可以設定該帳戶專屬的使用者政策,這些政策可以變更 Chromium 的行為。</translation> <translation id="6119647025869519954">如何將 Chromium 設為預設瀏覽器: 1. 開啟「設定」 2. 輕觸 [預設瀏覽器 App]
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_as.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_as.xtb index 9c507e3..3de46a6 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_as.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_as.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">কোনো ডেটা উলংঘনৰ ফলত আপোনাৰ পাছৱৰ্ডটো ফাদিল হৈছে। Chromeএ পাছৱৰ্ডটো এতিয়াই সলনি কৰাটো চুপাৰিছ কৰে।</translation> <translation id="7693590760643069321">এতিয়া আপুনি বাৰ্তা, নথি আৰু অন্য এপ্সমূহত থকা কোনো লিংকত টিপিলে যিকোনো সময়তে Chrome ব্যৱহাৰ কৰিব পাৰে।</translation> <translation id="7698568245838009292">Chromeএ কেমেৰাটো এক্সেছ কৰিবলৈ বিচাৰে</translation> +<translation id="7754633291442704733">আপোনাৰ প্ৰতিষ্ঠান <ph name="DOMAIN" />এ আপোনাৰ Chromeৰ ডেটা, বুকমাৰ্ক, ইতিহাস, পাছৱৰ্ড আৰু আপুনি এই একাউণ্টটোত ছেভ কৰা আন ছেটিংসমূহ এক্সেছ কৰিব পাৰিব। আপুনি ছাইন আউট কৰিলে, এই ডিভাইচটোৰ পৰা আপোনাৰ ডেটা মচা হ’ব। অৱশ্যে, আপোনাৰ ডেটা আপোনাৰ পৰিচালিত Google একাউণ্টত ষ্ট’ৰ হৈ থাকিব আৰু সেয়া আপোনাৰ প্ৰতিষ্ঠানৰ বাবে উপলব্ধ হ’ব। আপোনাৰ প্ৰতিষ্ঠানে Chromeৰ আচৰণ সলনি কৰিব পৰা সেই বিশেষ একাউণ্টটোৰ বাবে ব্যৱহাৰকাৰীৰ নীতিসমূহো ছেট কৰিব পাৰে।</translation> <translation id="7780154209050837198">Chrome পাৰ্যমানে ব্যৱহাৰ কৰিবলৈ আপোনাৰ Google একাউণ্টটোৰ জৰিয়তে Chromeত ছাইন ইন কৰক।</translation> <translation id="7855730255114109580">Google Chrome একেবাৰে শেহতীয়া অৱস্থাত আছে</translation> <translation id="8022947259858476807">লিংক খুলিবলৈ, ৱিজেটৰ পৰা সন্ধান কৰিবলৈ আৰু অন্য এপত পাছৱৰ্ড স্বয়ংক্ৰিয়ভাৱে পূৰ কৰিবলৈ ডিফ’ল্ট হিচাপে Chrome ব্যৱহাৰ কৰক</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ca.xtb index 4d90189..f6d42be 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ca.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">La teva contrasenya ha quedat exposada en l'àmbit d'una violació de les dades. Chrome et recomana que canviïs la contrasenya ara.</translation> <translation id="7693590760643069321">Ara pots utilitzar Chrome cada vegada que toquis enllaços en missatges, documents i altres aplicacions.</translation> <translation id="7698568245838009292">Chrome sol·licita accés a la càmera</translation> +<translation id="7754633291442704733">La teva organització (<ph name="DOMAIN" />) tindrà accés a les teves dades, les adreces d'interès, l'historial, les contrasenyes i altres opcions de configuració de Chrome que emmagatzemis en aquest compte. Quan tanquis la sessió, les teves dades s'esborraran d'aquest dispositiu, però continuaran emmagatzemades al teu Compte de Google gestionat i estaran disponibles per a la teva organització. L'organització també pot definir polítiques dels usuaris específiques del compte que poden canviar el comportament de Chrome.</translation> <translation id="7780154209050837198">Per treure el màxim profit de Chrome, inicia-hi la sessió amb el teu Compte de Google.</translation> <translation id="7855730255114109580">Google Chrome està actualitzat</translation> <translation id="8022947259858476807">Utilitza Chrome de manera predeterminada per obrir enllaços, cercar des de widgets i emplenar automàticament contrasenyes en altres aplicacions</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb index 51b0ee43..2b0fb22 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_cs.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Vaše heslo bylo vyzrazeno při porušení zabezpečení údajů. Chrome doporučuje heslo okamžitě změnit.</translation> <translation id="7693590760643069321">Nyní můžete Chrome použít pokaždé, když klepnete na odkazy ve zprávách, dokumentech a ostatních aplikacích.</translation> <translation id="7698568245838009292">Chrome potřebuje přístup k fotoaparátu</translation> +<translation id="7754633291442704733">Vaše organizace <ph name="DOMAIN" /> bude mít přístup k datům, záložkám, historii, heslům a dalším nastavením prohlížeče Chrome, která uložíte do tohoto účtu. Když se odhlásíte, vaše data budou z tohoto zařízení vymazána. Ve spravovaném účtu Google nicméně vaše data zůstanou uložena a vaše organizace k nim bude mít přístup. Vaše organizace také může v tomto konkrétním účtu nastavit zásady pro uživatele, které mohou chování prohlížeče Chrome změnit.</translation> <translation id="7780154209050837198">Pokud z Chromu chcete získat maximum, přihlaste se do něj pomocí účtu Google.</translation> <translation id="7855730255114109580">Google Chrome je aktuální</translation> <translation id="8022947259858476807">Používejte Chrome jako výchozí prohlížeč k otevírání odkazů, vyhledávání z widgetů a automatickému vyplňování hesel v jiných aplikacích</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_cy.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_cy.xtb index aa7fa5f..a0751ad 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_cy.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_cy.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Datgelwyd eich cyfrinair mewn achos o dor data. Mae Chrome yn argymell newid eich cyfrinair nawr.</translation> <translation id="7693590760643069321">Gallwch bellach ddefnyddio Chrome unrhyw bryd y byddwch yn tapio dolenni mewn negeseuon, dogfennau ac apiau eraill.</translation> <translation id="7698568245838009292">Hoffai Chrome gael mynediad at y Camera</translation> +<translation id="7754633291442704733">Bydd gan <ph name="DOMAIN" /> eich sefydliad fynediad at eich data Chrome, nodau tudalen, hanes, cyfrineiriau a gosodiadau eraill rydych yn eu storio yn y cyfrif hwn. Pan fyddwch yn allgofnodi, bydd eich data yn cael eu clirio o'r ddyfais hon. Fodd bynnag, bydd eich data yn parhau i gael ei storio yn eich Cyfrif Google a reolir a bydd ar gael i'ch sefydliad. Gall eich sefydliad hefyd osod polisïau defnyddwyr sy'n benodol i'r cyfrif hwnnw a all newid ymddygiad Chrome.</translation> <translation id="7780154209050837198">I gael y gorau o Chrome, mewngofnodwch i Chrome â'ch Cyfrif Google.</translation> <translation id="7855730255114109580">Mae Google Chrome yn gyfoes</translation> <translation id="8022947259858476807">Defnyddiwch Chrome yn ddiofyn i agor dolenni, chwilio o declynnau, ac awtolenwi cyfrineiriau mewn apiau eraill</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb index 3efe817..5bee676 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_da.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Din adgangskode er blevet offentliggjort i forbindelse med et brud på datasikkerheden. Chrome anbefaler, at du skifter din adgangskode med det samme.</translation> <translation id="7693590760643069321">Du kan nu bruge Chrome, hver gang du trykker på links i meddelelser, dokumenter og andre apps.</translation> <translation id="7698568245838009292">Chrome anmoder om adgang til kameraet</translation> +<translation id="7754633291442704733">Din organisation <ph name="DOMAIN" /> får adgang til din Chrome-historik samt dine Chrome-data, -bogmærker, -adgangskoder og andre indstillinger, som du har gemt på denne konto. Når du logger ud, ryddes dine data fra denne enhed. Dine data vil dog fortsat være gemt på din managerstyrede Google-konto, og de vil fortsat være tilgængelige for din organisation. Din organisation kan også konfigurere brugerpolitikker, der gælder specifikt for den pågældende konto, og som kan ændre Chromes adfærd.</translation> <translation id="7780154209050837198">Log ind i Chrome med din Google-konto for at få mest muligt ud af Chrome.</translation> <translation id="7855730255114109580">Google Chrome er opdateret</translation> <translation id="8022947259858476807">Brug som standard Chrome til at åbne links, søge efter widgets og udfylde adgangskoder automatisk i andre apps</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_es.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_es.xtb index eaeb746..c524888e 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_es.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Tu contraseña se ha visto expuesta en una quiebra de seguridad de datos. Chrome recomienda cambiar la contraseña ahora.</translation> <translation id="7693590760643069321">Ahora puedes usar Chrome cada vez que toques enlaces de mensajes, documentos y otras aplicaciones.</translation> <translation id="7698568245838009292">Chrome quiere acceder a la cámara</translation> +<translation id="7754633291442704733">Tu organización <ph name="DOMAIN" /> tendrá acceso a tus datos, tus marcadores, tu historial, tus contraseñas y otros ajustes de Chrome que almacenes en esta cuenta. Si cierras sesión, tus datos se borrarán de este dispositivo. Sin embargo, tus datos permanecerán almacenados en tu cuenta de Google gestionada y estarán disponibles para tu organización. Tu organización también puede establecer políticas de usuarios específicas de esa cuenta que pueden cambiar el comportamiento de Chrome.</translation> <translation id="7780154209050837198">Para sacarle el máximo partido a Chrome, inicia sesión en Chrome con tu cuenta de Google.</translation> <translation id="7855730255114109580">Google Chrome está actualizado</translation> <translation id="8022947259858476807">Usa Chrome de forma predeterminada para abrir enlaces, hacer búsquedas desde widgets y autocompletar contraseñas en otras aplicaciones</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_et.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_et.xtb index a1ae6ab..86a16f39 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_et.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_et.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Teie parool oli andmetega seotud rikkumise käigus avalikustatud. Chrome soovitab teil kohe parooli muuta.</translation> <translation id="7693590760643069321">Nüüd saate kasutada Chrome'i iga kord, kui puudutate linke sõnumites, dokumentides ja muudes rakendustes.</translation> <translation id="7698568245838009292">Chrome soovib juurdepääsu kaamerale</translation> +<translation id="7754633291442704733">Teie organisatsioon <ph name="DOMAIN" /> saab juurdepääsu teie Chrome'i andmetele, järjehoidjatele, ajaloole, paroolidele ja muudele seadetele, mille sellele kontole salvestate. Kui välja logite, kustutatakse teie andmed sellest seadmest. Teie andmed jäävad teie hallatud Google'i kontole siiski alles ja need on teie organisatsiooni jaoks saadaval. Teie organisatsioon saab määrata ka konto kasutajareegleid, millega saab Chrome'i käitumist muuta.</translation> <translation id="7780154209050837198">Chrome'i kasutamiseks parimal moel logige Chrome'i sisse oma Google'i kontoga.</translation> <translation id="7855730255114109580">Google Chrome on ajakohane</translation> <translation id="8022947259858476807">Kasutage linkide avamiseks, vidinatest otsimiseks ja muudes rakendustes paroolide automaatselt täitmiseks vaikimisi Chrome'i</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb index db68109..dbcb434 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_eu.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Pasahitza arriskuan jarri da, datuen isilpekotasuna urratu delako. Pasahitza berehala aldatzea gomendatzen du Chrome-k.</translation> <translation id="7693590760643069321">Orain, Chrome erabili ahalko duzu mezuetan, dokumentuetan eta aplikazioetan estekak sakatzen dituzunean.</translation> <translation id="7698568245838009292">Chrome-k kamera atzitu nahi du</translation> +<translation id="7754633291442704733">Chrome-ko datuak, laster-markak, historia, pasahitzak eta kontu honetan gordetzen dituzun bestelako ezarpenak atzitu ahalko ditu zure erakundeak (<ph name="DOMAIN" />). Saioa amaitzen duzunean, datuak garbitu egingo dira gailu honetatik. Hala ere, Google-ko kontu kudeatuan jarraituko dute, eta erakundea haiek atzitzeko gai izango da. Halaber, erabiltzaile-gidalerro jakin batzuk ezar ditzake erakundeak kontu horretarako, eta gidalerro horiek Chrome-ren portaera alda dezakete.</translation> <translation id="7780154209050837198">Chrome-ri etekinik handiena ateratzeko, hasi saioa Chrome-n Google-ko kontuarekin.</translation> <translation id="7855730255114109580">Eguneratuta dago Google Chrome</translation> <translation id="8022947259858476807">Erabili Chrome modu lehenetsian estekak irekitzeko, widgetetatik bilaketak egiteko eta beste aplikazio batzuetako pasahitzak automatikoki betetzeko</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb index bbb115f..b077d076 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fi.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Salasanasi vaarantui tietosuojaloukkauksessa. Chrome suosittelee salasanan vaihtamista välittömästi.</translation> <translation id="7693590760643069321">Voit nyt käyttää Chromea aina, kun napautat linkkejä viesteissä, dokumenteissa tai muissa sovelluksissa.</translation> <translation id="7698568245838009292">Chrome pyytää kameran käyttöoikeutta</translation> +<translation id="7754633291442704733">Organisaatiosi <ph name="DOMAIN" /> saa pääsyn Chrome-dataasi, kirjanmerkkeihisi, historiaasi, salasanoihisi ja muihin asetuksiisi, jotka olet tallentanut tälle tilille. Kun kirjaudut ulos, datasi tyhjennetään tältä laitteelta. Data säilyy kuitenkin hallinnoidulla Google-tililläsi ja on organisaation saatavilla. Organisaatiosi voi myös asettaa tilikohtaisia käyttäjäkäytäntöjä, jotka voivat muuttaa Chromen toimintaa.</translation> <translation id="7780154209050837198">Kirjaudu sisään Chromeen Google-tililläsi, jotta saat parhaan hyödyn Chromesta.</translation> <translation id="7855730255114109580">Google Chrome on ajan tasalla</translation> <translation id="8022947259858476807">Käytä Chromea oletuksena ja avaa linkkejä, hae widgeteistä ja täytä salasanoja automaattisesti muissa sovelluksissa</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb index e9ceb66aa..bdb435243 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_fil.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Na-expose ang password mo sa isang paglabag sa data. Inirerekomenda ng Chromium na palitan ang password ngayon.</translation> <translation id="7693590760643069321">Magagamit mo na ang Chrome sa tuwing magta-tap ka ng mga link sa mga mensahe, dokumento, at iba pang app.</translation> <translation id="7698568245838009292">Gustong I-access ng Chrome ang Camera</translation> +<translation id="7754633291442704733">Magkakaroon ng access ang <ph name="DOMAIN" /> ng iyong organisasyon sa data, mga bookmark, history, mga password, at iba mo pang setting sa Chrome na iso-store mo sa account na ito. Kapag nag-sign out ka, maki-clear ang iyong data sa device na ito. Gayunpaman, mananatiling naka-store ang iyong data sa pinapamahalaang Google Account mo at magiging available ito sa iyong organisasyon. Puwede ring magtakda ang iyong organisasyon ng mga patakaran ng user na partikular sa account na iyon na puwedeng makabago sa gawi ng Chrome.</translation> <translation id="7780154209050837198">Para masulit ang Chrome, mag-sign in sa Chrome gamit ang iyong Google Account.</translation> <translation id="7855730255114109580">Napapanahon ang Google Chrome</translation> <translation id="8022947259858476807">Gamitin ang Chrome bilang default para magbukas ng mga link, maghanap mula sa mga widget, at mag-autofill ng mga password sa iba pang app</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb index e42d20a..91eb0f6 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_gu.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">ડેટા ઉલ્લંઘનમાં તમારો પાસવર્ડ જાહેર થઈ ગયો હતો. Chrome હમણાં જ પાસવર્ડ બદલવાનો સુઝાવ આપે છે.</translation> <translation id="7693590760643069321">હવે તમે જ્યારે પણ મેસેજ, દસ્તાવેજો અને અન્ય ઍપમાં લિંક પર ટૅપ કરો, ત્યારે Chromeનો ઉપયોગ કરી શકશો.</translation> <translation id="7698568245838009292">Chromeને કૅમેરાનો ઍક્સેસ જોઈશે</translation> +<translation id="7754633291442704733">તમારી સંસ્થા <ph name="DOMAIN" />ને તમારા Chrome ડેટા, બુકમાર્ક, ઇતિહાસ, પાસવર્ડ અને તમે આ એકાઉન્ટમાં સ્ટોર કરો છો તે અન્ય સેટિંગનો ઍક્સેસ મળશે. જ્યારે તમે સાઇન આઉટ કરશો, ત્યારે આ ડિવાઇસમાંથી તમારો ડેટા સાફ કરવામાં આવશે. જોકે, તમારો ડેટા તમારા મેનેજ કરેલા Google એકાઉન્ટમાં સ્ટોર કરેલો રહેશે અને તમારી સંસ્થા માટે ઉપલબ્ધ રહેશે. તમારી સંસ્થા વિશેષ કરીને તે એકાઉન્ટ માટે વપરાશકર્તાની પૉલિસીઓ સેટ કરી શકે છે કે જે Chromeના વર્તનને બદલી શકે છે.</translation> <translation id="7780154209050837198">Chromeનો વધુમાં વધુ લાભ લેવા માટે, તમારા Google એકાઉન્ટ વડે Chromeમાં સાઇન ઇન કરો.</translation> <translation id="7855730255114109580">Google Chrome અપ ટૂ ડેટ છે</translation> <translation id="8022947259858476807">લિંક ખોલવા, વિજેટથી શોધવા અને અન્ય ઍપમાં પાસવર્ડ ઑટોમૅટિક રીતે ભરવાની સુવિધા માટે ડિફૉલ્ટ તરીકે Chromeનો ઉપયોગ કરો</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hu.xtb index 47ba9371..915852b0 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hu.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Jelszava adatvédelmi incidens során nyilvánosságra került. A Chrome a jelszó azonnali módosítását javasolja.</translation> <translation id="7693590760643069321">Mostantól bármikor használhatja a Chrome-ot, amikor üzenetekben, dokumentumokban és más alkalmazásokban linkekre kattint.</translation> <translation id="7698568245838009292">A Chrome hozzá szeretne férni a kamerához</translation> +<translation id="7754633291442704733">Szervezete (<ph name="DOMAIN" />) hozzáfér majd az Ön Chrome-adataihoz, -könyvjelzőihez, -előzményeihez, -jelszavaihoz és az ebben a fiókban tárolt egyéb beállításaihoz. Kijelentkezéskor az adatai törlődnek erről az eszközről. Az adatok azonban továbbra is megmaradnak a felügyelt Google-fiókban, és hozzáférhetők lesznek szervezete számára. Szervezete felhasználói házirendeket is beállíthat erre a fiókra vonatkozóan, amelyek módosíthatják a Chrome viselkedését.</translation> <translation id="7780154209050837198">Annak érdekében, hogy a legtöbbet hozhassa ki a Chrome-ból, jelentkezzen be Google-fiókjával a Chrome-ba.</translation> <translation id="7855730255114109580">A Google Chrome naprakész</translation> <translation id="8022947259858476807">A Chrome-ot alapértelmezett böngészőként használva linkek nyithatók meg, modulokban lehet keresni, és jelszavak tölthetők be automatikusan az egyéb alkalmazásokban</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hy.xtb index 068a42d..3972ad14 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_hy.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_hy.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Տվյալների արտահոսքի արդյունքում ձեր գաղտնաբառը հայտնի է դարձել կողմնակի անձանց։ Chrome-ը խորհուրդ է տալիս փոխել գաղտնաբառը։</translation> <translation id="7693590760643069321">Այժմ հաղորդագրություններում, փաստաթղթերում և այլ հավելվածներում առկա հղումները կարող եք բացել Chrome-ում։</translation> <translation id="7698568245838009292">Chrome-ն ուզում է օգտագործել տեսախցիկը</translation> +<translation id="7754633291442704733">Ձեր <ph name="DOMAIN" /> կազմակերպությանը հասանելի կդառնան ձեր Chrome-ի տվյալները, էջանիշները, պատմությունը, գաղտնաբառերը և այս հաշվում պահված այլ կարգավորումները։ Երբ դուրս գաք հաշվից, ձեր տվյալները կջնջվեն այս սարքից։ Այդուհանդերձ, դրանք կպահվեն ձեր կառավարվող Google հաշվում և հասանելի կլինեն ձեր կազմակերպությանը։ Ձեր կազմակերպությունը կարող է սահմանել օգտագործման կանոններ, որոնք կիրառելի են նշված հաշվի համար և կարող են փոխել Chrome-ի աշխատանքը։</translation> <translation id="7780154209050837198">Chromе-ի բոլոր գործառույթներն օգտագործելու համար մտեք Google հաշիվ։</translation> <translation id="7855730255114109580">Google Chrome-ը թարմացված է</translation> <translation id="8022947259858476807">Դարձրեք Chrome-ը ձեր կանխադրված դիտարկիչը՝ հղումներ բացելու, վիջեթներից որոնելու և այլ հավելվածներում գաղտնաբառերի ինքնալրացման համար</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb index 7c94a3be..6ecdd6a 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_id.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Sandi Anda terekspos saat terjadi pelanggaran data. Chrome merekomendasikan untuk mengubah sandi sekarang.</translation> <translation id="7693590760643069321">Anda sekarang dapat menggunakan Chrome kapan saja dengan mengetuk link di pesan, dokumen, dan aplikasi lainnya.</translation> <translation id="7698568245838009292">Chrome Ingin Mengakses Kamera</translation> +<translation id="7754633291442704733">Organisasi Anda <ph name="DOMAIN" /> akan memiliki akses ke data, bookmark, histori, sandi, dan setelan Chrome lainnya yang Anda simpan di akun ini. Jika logout, data Anda akan dihapus dari perangkat ini. Namun, data akan tetap disimpan di Akun Google terkelola Anda dan tersedia untuk organisasi Anda. Organisasi juga dapat menetapkan kebijakan pengguna khusus untuk akun tersebut yang dapat mengubah perilaku Chrome.</translation> <translation id="7780154209050837198">Untuk mengoptimalkan Chrome, login ke Chrome dengan Akun Google Anda.</translation> <translation id="7855730255114109580">Ini adalah Google Chrome versi terbaru</translation> <translation id="8022947259858476807">Gunakan Chrome secara default untuk membuka link, menelusuri dari widget, dan mengisi otomatis sandi di aplikasi lainnya</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb index 5d7347f..0985c537 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ja.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">データ侵害によってパスワードが漏洩しました。パスワードをすぐに変更することをおすすめします。</translation> <translation id="7693590760643069321">メッセージ、ドキュメント、他のアプリのリンクをタップしたときに、常に Chrome が使えるようになります。</translation> <translation id="7698568245838009292">Chrome がカメラへのアクセス許可を求めています</translation> +<translation id="7754633291442704733">このアカウントで保存した Chrome のデータ、ブックマーク、履歴、パスワード、その他の設定は、組織(<ph name="DOMAIN" />)からアクセス可能となります。ログアウトすると、データはこのデバイスから消去されますが、管理対象の Google アカウントには保存されたままで、組織はこれを使用できます。また、組織はこのアカウント専用のユーザー ポリシーを設定して、Chrome の動作を変更することも可能です。</translation> <translation id="7780154209050837198">Chrome を最大限に活用するには、Google アカウントで Chrome にログインしてください。</translation> <translation id="7855730255114109580">Google Chrome は最新版です</translation> <translation id="8022947259858476807">Chrome を既定に設定すると、リンクの表示やウィジェットからの検索、他のアプリでのパスワードの自動入力に使用できるようになります</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_kk.xtb index dab2531..65f8dd6 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_kk.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_kk.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Деректердің қауіпсіздігі бұзылған кезде, құпия сөзіңізді біліп қойды. Chrome құпия сөзіңізді дереу өзгертуге кеңес береді.</translation> <translation id="7693590760643069321">Енді хабарларда, құжаттарда және басқа қолданбаларда сілтемелерді түртіп, Chrome браузерін кез келген уақытта пайдалана аласыз.</translation> <translation id="7698568245838009292">Chrome камераны пайдаланғысы келеді</translation> +<translation id="7754633291442704733">Ұйымыңыздың <ph name="DOMAIN" /> доменінде Chrome-дағы деректер, бетбелгілер, тарих, құпия сөздер және осы аккаунтта сақталған басқа да параметрлер пайдаланылатын болады. Жүйеден шыққан кезде, деректеріңіз бұл құрылғыдан өшіріледі. Дегенмен олар басқарылатын Google аккаунтында сол күйінде сақталады және ұйымыңызға қолжетімді болады. Сондай-ақ ұйымыңыз Chrome-дағы әрекеттерді өзгерте алатын аккаунтқа қатысты пайдаланушы саясаттарын орната алады.</translation> <translation id="7780154209050837198">Chrome-ды барынша пайдалану үшін оған Google аккаунтыңызбен кіріңіз.</translation> <translation id="7855730255114109580">Google Chrome жаңартылған</translation> <translation id="8022947259858476807">Сілтемелерді ашу, виджеттерден іздеу және басқа қолданбаларда құпия сөздерді автотолтыру үшін Chrome браузерін әдепкісінше пайдаланыңыз.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb index 8a858f3a..a0204aeb 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ko.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">정보 유출로 인해 비밀번호가 노출되었습니다. 지금 바로 비밀번호를 변경하시기 바랍니다.</translation> <translation id="7693590760643069321">이제 언제든 메시지, 문서 및 다른 앱에서 링크를 탭하여 Chrome을 사용할 수 있습니다.</translation> <translation id="7698568245838009292">Chrome에서 카메라에 액세스하려고 함</translation> +<translation id="7754633291442704733"><ph name="DOMAIN" /> 조직에서 이 계정에 저장하는 Chrome 데이터, 북마크, 방문 기록, 비밀번호, 기타 설정에 액세스할 수 있습니다. 로그아웃하면 데이터가 기기에서 삭제됩니다. 하지만 데이터는 관리 Google 계정에 계속 저장되어 조직에서 사용할 수 있습니다. 조직에서 관련 계정에 적용되는 사용자 정책을 설정하여 Chrome의 동작을 변경할 수도 있습니다.</translation> <translation id="7780154209050837198">Chrome을 최대한 활용하려면 Google 계정으로 Chrome에 로그인하세요</translation> <translation id="7855730255114109580">Chrome이 최신 버전입니다.</translation> <translation id="8022947259858476807">Chrome을 다른 앱에서 링크를 열고, 위젯에서 검색하고, 비밀번호를 자동 완성할 기본값으로 사용합니다.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb index 9a494b8..f97d4832 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ms.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Kata laluan anda terdedah dalam suatu pelanggaran data. Chrome mengesyorkan supaya kata laluan ditukar sekarang.</translation> <translation id="7693590760643069321">Kini anda boleh menggunakan Chrome pada bila-bila masa anda mengetik pautan dalam mesej, dokumen dan apl lain.</translation> <translation id="7698568245838009292">Chrome Ingin Mengakses Kamera Anda</translation> +<translation id="7754633291442704733">Organisasi <ph name="DOMAIN" /> anda akan mempunyai akses kepada data Chrome, penanda halaman, sejarah, kata laluan dan tetapan lain yang anda simpan dalam akaun ini. Apabila anda log keluar, data anda akan dikosongkan daripada peranti ini. Namun begitu, data anda akan terus disimpan dalam Google Account terurus anda dan akan tersedia di organisasi anda. Organisasi anda juga boleh menetapkan dasar pengguna khusus untuk akaun tersebut yang boleh mengubah gelagat Chrome.</translation> <translation id="7780154209050837198">Untuk memanfaatkan Chrome sepenuhnya, log masuk ke Chrome dengan Google Account anda.</translation> <translation id="7855730255114109580">Google Chrome adalah yang terkini</translation> <translation id="8022947259858476807">Gunakan Chrome secara lalai untuk membuka pautan, mencari daripada widget dan melengkapkan kata laluan secara automatik dalam apl lain</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ne.xtb index 6260972..4c09cd1 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ne.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ne.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">तपाईंको पासवर्ड डेटा चोरीको घटनामा अरूले देखेका थिए। Chrome तपाईंलाई अहिले नै उक्त पासवर्ड बदल्न सिफारिस गर्छ।</translation> <translation id="7693590760643069321">तपाईंले अब कुनै म्यासेज, डकुमेन्ट वा अन्य एपमा भएका लिंकमा ट्याप गर्दा ती लिंक Chrome मा खुल्ने छन्।</translation> <translation id="7698568245838009292">Chrome क्यामेरामाथि पहुँच राख्न चाहन्छ</translation> +<translation id="7754633291442704733">तपाईंको सङ्गठन <ph name="DOMAIN" /> ले Chrome मा भएका तपाईंका डेटा, बुकमार्क, इतिहास, पासवर्ड र तपाईंले यो खातामा सेभ गर्ने अन्य सेटिङ हेर्न तथा प्रयोग गर्न सक्ने छ। तपाईंले साइन आउट गरेपछि यो डिभाइसबाट तपाईंको डेटा मेटाइने छ। तर तपाईंको डेटा तपाईंको व्यवस्थापन गरिएको Google खातामा सेभ भइरहने छ र तपाईंको सङ्गठनले उक्त डेटा हेर्न तथा प्रयोग गर्न सक्ने छ। तपाईंको सङ्गठनले उक्त खातामा लागू हुने प्रयोगकर्तासम्बन्धी नीतिहरू तय गर्न पनि सक्छ र ती नीतिहरूले Chrome ले काम गर्ने तरिकामा प्रभाव पार्न सक्छ।</translation> <translation id="7780154209050837198">Chrome बाट बढीभन्दा बढी फाइदा लिन Chrome मा आफ्नो Google खातामार्फत साइन इन गर्नुहोस्।</translation> <translation id="7855730255114109580">Google Chrome अद्यावधिक छ</translation> <translation id="8022947259858476807">लिंक खोल्न, विजेटबाट खोजी गर्न तथा अन्य एपहरूमा पासवर्ड स्वतः भर्न डिफल्ट रूपमा Chrome प्रयोग गर्नुहोस्</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_no.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_no.xtb index 7b79408..38890e7 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_no.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Passordet ditt har vært avdekket i et databrudd. Chrome anbefaler at du bytter passord nå.</translation> <translation id="7693590760643069321">Nå kan du bruke Chrome hver gang du trykker på linker i meldinger, dokumenter og andre apper.</translation> <translation id="7698568245838009292">Chrome vil ha tilgang til kameraet</translation> +<translation id="7754633291442704733">Organisasjonen din, <ph name="DOMAIN" />, får tilgang til data, bokmerker, logg, passord og andre innstillinger for Chrome som du lagrer i denne kontoen. Når du logger av, slettes dataene dine fra denne enheten. Dataene forblir imidlertid lagret i den administrerte Google-kontoen og er tilgjengelige for organisasjonen din. Organisasjonen din kan også angi spesifikke brukerinnstillinger for den aktuelle kontoen. Disse kan endre virkemåten til Chrome.</translation> <translation id="7780154209050837198">For å få mest mulig ut av Chrome, logg på Chrome med Google-kontoen din.</translation> <translation id="7855730255114109580">Google Chrome er oppdatert</translation> <translation id="8022947259858476807">Bruk Chrome som standard til å åpne linker, søke i moduler og fylle ut passord i andre apper automatisk</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_or.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_or.xtb index f7ae742..0dc6c8ed 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_or.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_or.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">ଏକ ଡାଟା ଉଲ୍ଲଙ୍ଘନ ଯୋଗୁଁ ଆପଣଙ୍କ ପାସୱାର୍ଡଟି ଚୋରି ହୋଇଯାଇଛି। Chrome ବର୍ତ୍ତମାନ ପାସୱାର୍ଡକୁ ବଦଳାଇବା ପାଇଁ ସୁପାରିଶ କରୁଛି।</translation> <translation id="7693590760643069321">ବର୍ତ୍ତମାନ ଆପଣ ମେସେଜ୍, ଡକ୍ୟୁମେଣ୍ଟ ଓ ଅନ୍ୟ ଆପଗୁଡ଼ିକରେ ଥିବା ଲିଙ୍କରେ ଯେ କୌଣସି ସମୟରେ ଟାପ୍ କରି Chrome ବ୍ୟବହାର କରିପାରିବେ।</translation> <translation id="7698568245838009292">Chrome କ୍ୟାମେରାକୁ ଆକ୍ସେସ୍ କରିବାକୁ ଚାହୁଁଛି</translation> +<translation id="7754633291442704733">ଆପଣଙ୍କ ସଂସ୍ଥା <ph name="DOMAIN" />ର ଆପଣଙ୍କ Chrome ଡାଟା, ବୁକମାର୍କ, ଇତିହାସ, ପାସୱାର୍ଡ ଏବଂ ଏହି ଆକାଉଣ୍ଟରେ ଆପଣ ଷ୍ଟୋର କରୁଥିବା ଅନ୍ୟ ସେଟିଂସକୁ ଆକ୍ସେସ ରହିବ। ଆପଣ ସାଇନ ଆଉଟ କଲେ, ଆପଣଙ୍କ ଡାଟାକୁ ଏହି ଡିଭାଇସରୁ ଖାଲି କରିଦିଆଯିବ। କିନ୍ତୁ, ଆପଣଙ୍କ ଡାଟା ଆପଣଙ୍କର ପରିଚାଳିତ Google ଆକାଉଣ୍ଟରେ ଷ୍ଟୋର ହୋଇ ରହିବ ଏବଂ ଆପଣଙ୍କ ସଂସ୍ଥା ପାଇଁ ଉପଲବ୍ଧ ହେବ। ଆପଣଙ୍କ ସଂସ୍ଥା ମଧ୍ୟ ସେହି ଆକାଉଣ୍ଟ ପାଇଁ ନିର୍ଦ୍ଦିଷ୍ଟ ଉପଯୋଗକର୍ତ୍ତା ନୀତିଗୁଡ଼ିକୁ ସେଟ କରିପାରିବ ଯାହା Chromeର ବ୍ୟବହାରକୁ ପରିବର୍ତ୍ତନ କରିପାରିବ।</translation> <translation id="7780154209050837198">Chromeରୁ ସବୁଠାରୁ ଅଧିକ ସୁବିଧା ପାଇବା ପାଇଁ, ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ ମାଧ୍ୟମରେ Chromeରେ ସାଇନ ଇନ କରନ୍ତୁ।</translation> <translation id="7855730255114109580">Google Chrome ଅପ୍-ଟୁ-ଡେଟ୍ ଅଛି</translation> <translation id="8022947259858476807">ଲିଙ୍କଗୁଡ଼ିକୁ ଖୋଲିବା, ୱିଜେଟଗୁଡ଼ିକରୁ ସନ୍ଧାନ କରିବା ଏବଂ ଅନ୍ୟ ଆପଗୁଡ଼ିକରେ ପାସୱାର୍ଡଗୁଡ଼ିକୁ ସ୍ୱତଃପୂରଣ କରିବା ପାଇଁ Chromeକୁ ଡିଫଲ୍ଟ ଭାବେ ବ୍ୟବହାର କରନ୍ତୁ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pa.xtb index 8694ae4d..3ab5fc7f 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pa.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pa.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">ਤੁਹਾਡੇ ਪਾਸਵਰਡ ਦਾ ਕਿਸੇ ਡਾਟਾ ਉਲੰਘਣਾ ਵਿੱਚ ਖੁਲਾਸਾ ਹੋਇਆ ਸੀ। Chrome ਹੁਣੇ ਪਾਸਵਰਡ ਬਦਲਣ ਦੀ ਸਿਫ਼ਾਰਸ਼ ਕਰਦਾ ਹੈ।</translation> <translation id="7693590760643069321">ਤੁਸੀਂ ਹੁਣ ਸੁਨੇਹੇ, ਦਸਤਾਵੇਜ਼ ਅਤੇ ਹੋਰ ਐਪਾਂ ਵਿਚਲੇ ਲਿੰਕਾਂ 'ਤੇ ਟੈਪ ਕਰਕੇ ਕਿਸੇ ਵੇਲੇ ਵੀ Chrome ਵਰਤ ਸਕਦੇ ਹੋ।</translation> <translation id="7698568245838009292">Chrome ਦੀ ਕੈਮਰੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੀ ਇੱਛਾ ਹੈ</translation> +<translation id="7754633291442704733">ਤੁਹਾਡੀ ਸੰਸਥਾ <ph name="DOMAIN" /> ਕੋਲ ਤੁਹਾਡੇ Chrome ਡਾਟੇ, ਬੁੱਕਮਾਰਕਾਂ, ਇਤਿਹਾਸ, ਪਾਸਵਰਡਾਂ ਅਤੇ ਤੁਹਾਡੇ ਵੱਲੋਂ ਇਸ ਖਾਤੇ ਵਿੱਚ ਸਟੋਰ ਕੀਤੀਆਂ ਜਾਣ ਵਾਲੀਆਂ ਹੋਰ ਸੈਟਿੰਗਾਂ ਤੱਕ ਪਹੁੰਚ ਹੋਵੇਗੀ। ਤੁਹਾਡੇ ਵੱਲੋਂ ਸਾਈਨ-ਆਊਟ ਕਰਨ 'ਤੇ, ਤੁਹਾਡੇ ਡਾਟੇ ਨੂੰ ਇਸ ਡੀਵਾਈਸ ਤੋਂ ਕਲੀਅਰ ਕਰ ਦਿੱਤਾ ਜਾਵੇਗਾ। ਹਾਲਾਂਕਿ, ਤੁਹਾਡਾ ਡਾਟਾ ਤੁਹਾਡੇ ਪ੍ਰਬੰਧਿਤ Google ਖਾਤੇ ਵਿੱਚ ਸਟੋਰ ਰਹੇਗਾ ਅਤੇ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵਿੱਚ ਉਪਲਬਧ ਰਹੇਗਾ। ਤੁਹਾਡੀ ਸੰਸਥਾ ਖਾਸ ਤੌਰ 'ਤੇ ਉਸ ਖਾਤੇ ਲਈ ਵਰਤੋਂਕਾਰ ਨੀਤੀਆਂ ਵੀ ਸੈੱਟ ਕਰ ਸਕਦੀ ਹੈ ਜੋ Chrome ਦੇ ਵਿਹਾਰ ਨੂੰ ਬਦਲ ਸਕਦੀਆਂ ਹਨ।</translation> <translation id="7780154209050837198">Chrome ਦਾ ਵੱਧ ਤੋਂ ਵੱਧ ਲਾਹਾ ਲੈਣ ਲਈ, ਆਪਣੇ Google ਖਾਤੇ ਨਾਲ Chrome ਵਿੱਚ ਸਾਈਨ-ਇਨ ਕਰੋ।</translation> <translation id="7855730255114109580">Google Chrome ਅੱਪ ਟੂ ਡੇਟ ਹੈ</translation> <translation id="8022947259858476807">ਲਿੰਕਾਂ ਨੂੰ ਖੋਲ੍ਹਣ, ਵਿਜੇਟਾਂ ਤੋਂ ਖੋਜ ਕਰਨ ਅਤੇ ਹੋਰ ਐਪਾਂ ਵਿੱਚ ਆਟੋਫਿਲ ਪਾਸਵਰਡਾਂ ਲਈ ਪੂਰਵ-ਨਿਰਧਾਰਿਤ ਤੌਰ 'ਤੇ Chrome ਦੀ ਵਰਤੋਂ ਕਰੋ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb index 774082a2..0b97597 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pl.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Wskutek naruszenia bezpieczeństwa danych doszło do ujawnienia hasła. Chrome zaleca jego natychmiastową zmianę.</translation> <translation id="7693590760643069321">Teraz możesz używać Chrome za każdym razem, gdy klikniesz link w wiadomościach, dokumentach i w innych aplikacjach.</translation> <translation id="7698568245838009292">Chrome chce mieć dostęp do kamery</translation> +<translation id="7754633291442704733">Twoja organizacja (<ph name="DOMAIN" />) będzie miała dostęp do danych, zakładek, historii, haseł i innych ustawień Chrome, które przechowujesz na tym koncie. Gdy się wylogujesz, dane zostaną usunięte z tego urządzenia. Pozostaną one jednak zapisane na zarządzanym koncie Google i organizacja będzie miała do nich dostęp. Organizacja może też ustawiać na tym koncie zasady dotyczące użytkowników, które mogą zmieniać działanie Chrome.</translation> <translation id="7780154209050837198">Aby w pełni wykorzystać możliwości Chrome, zaloguj się na konto Google.</translation> <translation id="7855730255114109580">Masz aktualną wersję Google Chrome</translation> <translation id="8022947259858476807">Używaj domyślnie Chrome, aby otwierać linki, wyszukiwać z widżetów i korzystać z autouzupełniania haseł w innych aplikacjach</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb index f1db5d6..a368160 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_pt-BR.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Sua senha foi exposta em uma violação de dados. Por recomendação do Chrome, mude a senha imediatamente.</translation> <translation id="7693590760643069321">Agora você pode usar o Chrome sempre que toca em links em mensagens, documentos e outros apps.</translation> <translation id="7698568245838009292">Solicitação do Chrome para acessar a câmera</translation> +<translation id="7754633291442704733">A organização <ph name="DOMAIN" /> vai ter acesso aos dados, favoritos, histórico, senhas e outras configurações do Chrome que você armazenar nessa conta. Quando você sair, seus dados vão ser apagados deste dispositivo. No entanto, os dados continuarão armazenados na sua Conta do Google gerenciada e vão ficar disponíveis para sua organização. A organização também pode definir políticas do usuário específicas para a conta, e elas podem mudar o comportamento do Chrome.</translation> <translation id="7780154209050837198">Para aproveitar o Chrome ao máximo, faça login na sua Conta do Google.</translation> <translation id="7855730255114109580">O Google Chrome está atualizado</translation> <translation id="8022947259858476807">Use o Chrome como padrão para abrir links, pesquisar em widgets e preencher senhas automaticamente em outros apps</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sk.xtb index b8e228b..269e739f 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sk.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">V rámci porušenia ochrany údajov bolo prezradené vaše heslo. Chrome vám ho odporúča okamžite zmeniť.</translation> <translation id="7693590760643069321">Chrome môžete teraz kedykoľvek použiť klepnutím na odkazy v správach, dokumentoch a ďalších aplikáciách.</translation> <translation id="7698568245838009292">Chrome chce použiť fotoaparát</translation> +<translation id="7754633291442704733">Vaša organizácia <ph name="DOMAIN" /> bude mať prístup k údajom, záložkám, histórii, heslám a ďalším nastaveniam Chromu, ktoré uložíte v tomto účte. Keď sa odhlásite, vaše údaje budú z tohto zariadenia vymazané. Údaje však zostanú uložené vo vašom spravovanom účte Google a budú k dispozícii vašej organizácii. Vaša organizácia môže nastaviť aj pravidlá pre používateľov špecifické pre daný účet, ktoré môžu zmeniť správanie Chromu.</translation> <translation id="7780154209050837198">Ak chcete využívať Chrome naplno, prihláste sa doň svojím účtom Google.</translation> <translation id="7855730255114109580">Google Chrome je aktuálny.</translation> <translation id="8022947259858476807">Predvolene otvárajte odkazy, vyhľadávajte v miniaplikáciách a automaticky dopĺňajte heslá v iných aplikáciách pomocou Chromu</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sl.xtb index 2cda62717..f96e9e994 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_sl.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_sl.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Geslo je bilo razkrito zaradi podatkovne kršitve. Chrome priporoča, da takoj spremenite geslo.</translation> <translation id="7693590760643069321">Zdaj lahko uporabljate Chrome, kadar koli se dotaknete povezav v sporočilih, dokumentih in drugih aplikacijah.</translation> <translation id="7698568245838009292">Chrome želi dostopati do fotoaparata</translation> +<translation id="7754633291442704733">Vaša organizacija <ph name="DOMAIN" /> bo imela dostop do podatkov Chroma, zaznamkov, zgodovine, gesel in drugih nastavitev, ki jih shranite v tem računu. Ko se odjavite, bodo podatki izbrisani iz te naprave. Vaši podatki bodo kljub temu še naprej shranjeni v upravljanem računu Google in bodo na voljo vaši organizaciji. Vaša organizacija lahko nastavi tudi uporabniške pravilnike, specifične za ta račun, to pa lahko spremeni način delovanja Chroma.</translation> <translation id="7780154209050837198">Če želite kar najbolje izkoristiti Chrome, se prijavite vanj z računom Google.</translation> <translation id="7855730255114109580">Google Chrome je posodobljen</translation> <translation id="8022947259858476807">Uporabljajte Chrome kot privzeto možnost odpiranja povezav, iskanja v pripomočkih in samodejnega izpolnjevanja gesel v drugih aplikacijah.</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb index f1ec3958..144930ee 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ta.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">தரவு மீறலின் காரணமாக உங்களின் கடவுச்சொல் பாதுகாப்பை இழந்துவிட்டது. கடவுச்சொல்லை இப்போதே மாற்றுமாறு Chrome பரிந்துரைக்கிறது.</translation> <translation id="7693590760643069321">இனி எப்போது வேண்டுமானாலும் மெசேஜ்கள், ஆவணங்கள் மற்றும் பிற ஆப்ஸில் உள்ள இணைப்புகளை Chromeமில் திறக்கலாம்.</translation> <translation id="7698568245838009292">Chrome 'கேமராவைப்’ பயன்படுத்த விரும்புகிறது</translation> +<translation id="7754633291442704733">உங்கள் Chrome தரவு, புக்மார்க்குகள், இதுவரை பார்த்தவை, கடவுச்சொற்கள் மற்றும் இந்தக் கணக்கில் நீங்கள் சேமிக்கும் பிற அமைப்புகளை உங்கள் நிறுவனம் (<ph name="DOMAIN" />) அணுக முடியும். நீங்கள் வெளியேறினால் இந்தச் சாதனத்தில் இருந்து உங்கள் தரவு அழிக்கப்படும். இருப்பினும், நிர்வகிக்கப்படும் உங்கள் Google கணக்கில் அவை சேமிக்கப்பட்டிருக்கும். அத்துடன் உங்கள் நிறுவனத்தால் அவற்றைப் பயன்படுத்தவும் முடியும். அந்தக் கணக்கிற்கு மட்டும் பொருந்தும் பயனர் கொள்கைகளையும் உங்கள் நிறுவனம் அமைக்கலாம். இதனால் Chrome இயங்கும் விதத்தில் மாற்றம் ஏற்படலாம்.</translation> <translation id="7780154209050837198">Chromeமில் இருந்து அதிகப் பலன்களைப் பெற, உங்கள் Google கணக்கின் மூலம் Chromeமில் உள்நுழையவும்.</translation> <translation id="7855730255114109580">Google Chrome புதுப்பித்த நிலையில் உள்ளது</translation> <translation id="8022947259858476807">இணைப்புகளைத் திறப்பதற்கும், விட்ஜெட்டுகளில் தேடுவதற்கும், பிற ஆப்ஸில் கடவுச்சொற்களைத் தானாக நிரப்புவதற்கும் Chromeமை இயல்பு உலாவியாகப் பயன்படுத்தலாம்</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb index cd2e799..61df8fd 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_te.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">డేటా ఉల్లంఘన జరిగిన ఒక సంఘటనలో మీ పాస్వర్డ్ బహిర్గతమైంది. ఇప్పుడే పాస్వర్డ్ను మార్చాల్సిందిగా Chrome సిఫార్సు చేస్తోంది.</translation> <translation id="7693590760643069321">మెసేజ్లు, డాక్యుమెంట్లు, ఇతర యాప్లలో లింక్లను ట్యాప్ చేయడం ద్వారా, మీరు ఎప్పుడైనా Chromeను ఉపయోగించవచ్చు.</translation> <translation id="7698568245838009292">కెమెరాను Chrome యాక్సెస్ చేయాలనుకుంటోంది</translation> +<translation id="7754633291442704733">మీరు ఈ ఖాతాలో స్టోర్ చేసిన Chrome డేటా, బుక్మార్క్లు, హిస్టరీ, పాస్వర్డ్లు, ఇతర సెట్టింగ్లకు మీ సంస్థ <ph name="DOMAIN" /> యాక్సెస్ను కలిగి ఉంటుంది. మీరు సైన్ అవుట్ చేసినప్పుడు, ఈ పరికరం నుండి మీ డేటా క్లియర్ చేయబడుతుంది. అయితే, మీ డేటా మీ మేనేజ్ చేయబడే Google ఖాతాలో అలాగే స్టోర్ చేయబడుతుంది, మీ సంస్థకు అందుబాటులో ఉంటుంది. Chrome ప్రవర్తనను మార్చగల నిర్దిష్ట యూజర్ పాలసీలను కూడా మీ సంస్థ ఆ ఖాతాకు సెట్ చేయగలదు.</translation> <translation id="7780154209050837198">Chrome నుండి అత్యంత ఎక్కువ ప్రయోజనం పొందడం కోసం, మీ Google ఖాతాతో Chromeకు సైన్ ఇన్ చేయండి.</translation> <translation id="7855730255114109580">Google Chrome తాజాగా ఉంది</translation> <translation id="8022947259858476807">లింక్లను తెరవడానికి, విడ్జెట్ల నుండి సెర్చ్ చేయడానికి, ఇతర యాప్లలో పాస్వర్డ్లను ఆటోఫిల్ చేయడానికి Chromeను డిఫాల్ట్గా ఉపయోగించండి</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ur.xtb index 6b1e451..1079b666 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_ur.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_ur.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">ڈیٹا کی خلاف ورزی میں آپ کا پاس ورڈ افشاء ہو گیا۔ Chrome کی تجویز ہے کہ آپ ابھی پاس ورڈ تبدیل کریں۔</translation> <translation id="7693590760643069321">اب جب بھی آپ پیغامات، دستاویزات اور دیگر ایپس میں لنکس کو تھپتھپائیں تو آپ Chrome کا استعمال کر سکتے ہیں۔</translation> <translation id="7698568245838009292">Chrome کیمرے تک رسائی حاصل کرنا چاہے گا</translation> +<translation id="7754633291442704733">آپ کی تنظیم کے <ph name="DOMAIN" /> کو آپ کے Chrome ڈیٹا، بُک مارکس، سرگزشت، پاس ورڈز اور دیگر ترتیبات تک رسائی حاصل ہوگی جنہیں آپ اس اکاؤنٹ میں اسٹور کرتے ہیں۔ آپ کے سائن آؤٹ کرنے پر، اس آلے سے آپ کا ڈیٹا صاف کر دیا جائے گا۔ تاہم، آپ کا ڈیٹا آپ کے نظم کردہ Google اکاؤنٹ میں اسٹور رہے گا اور آپ کی تنظیم کے لیے دستیاب رہے گا۔ آپ کی تنظیم اس اکاؤنٹ کے لیے مخصوص صارف کی پالیسیاں بھی سیٹ کر سکتی ہے جو Chrome کے رویے کو تبدلی کر سکتی ہیں۔</translation> <translation id="7780154209050837198">Chrome سے بھرپور فائدہ اٹھانے کے لیے اپنے Google اکاؤنٹ کے ساتھ Chrome میں سائن ان کریں۔</translation> <translation id="7855730255114109580">Google Chrome اپ ٹو ڈیٹ ہے</translation> <translation id="8022947259858476807">لنکس کھولنے، ویجیٹس سے تلاش کرنے اور دیگر ایپس میں پاس ورڈز کو آٹو فل کرنے کیلئے، Chrome کا بطور ڈیفالٹ استعمال کریں</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb index a0af36a..c06c6257 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_vi.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">Mật khẩu của bạn đã bị lộ trong một vụ rò rỉ dữ liệu. Chrome khuyên bạn nên đổi ngay mật khẩu.</translation> <translation id="7693590760643069321">Giờ đây, bạn có thể dùng Chrome mỗi khi nhấn vào các đường liên kết trong thư/tin nhắn, tài liệu và các ứng dụng khác.</translation> <translation id="7698568245838009292">Chrome muốn truy cập vào máy ảnh</translation> +<translation id="7754633291442704733">Tổ chức của bạn (<ph name="DOMAIN" />) sẽ có quyền truy cập vào dữ liệu của bạn trên Chrome, dấu trang, nhật ký, mật khẩu và các chế độ cài đặt khác mà bạn lưu trữ trong tài khoản này. Khi bạn đăng xuất, dữ liệu của bạn sẽ bị xoá khỏi thiết bị này. Tuy nhiên, dữ liệu vẫn được lưu trữ trong Tài khoản Google được quản lý của bạn và tổ chức có thể sử dụng dữ liệu này. Tổ chức của bạn cũng có thể thiết lập chính sách người dùng dành riêng cho tài khoản đó và việc này có thể làm thay đổi hành vi của Chrome.</translation> <translation id="7780154209050837198">Để khai thác tối đa Chrome, hãy đăng nhập vào Chrome bằng Tài khoản Google của bạn.</translation> <translation id="7855730255114109580">Google Chrome đã được cập nhật</translation> <translation id="8022947259858476807">Hãy dùng Chrome theo mặc định để mở đường liên kết, tìm kiếm trong tiện ích và tự động điền mật khẩu trên các ứng dụng khác</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-CN.xtb index e374175..580a3bc 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-CN.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">您的密码遭遇了数据泄露。Chrome 建议您立即更改此密码。</translation> <translation id="7693590760643069321">现在,每当点按消息、文档和其他应用中的链接时,您都可以使用 Chrome 打开链接。</translation> <translation id="7698568245838009292">Chrome 想要访问相机</translation> +<translation id="7754633291442704733">贵组织 (<ph name="DOMAIN" />) 将能够访问您在此帐号中存储的 Chrome 数据、书签、历史记录、密码和其他设置。当您退出帐号时,系统将从这部设备上清除您的数据。不过,您的数据仍会存储在您名下受管理的 Google 帐号中,且可供贵组织访问。贵组织也可专门针对上述帐号设置用户规范,这可能会改变 Chrome 的行为。</translation> <translation id="7780154209050837198">若要充分利用 Chrome,请使用您的 Google 帐号登录 Chrome。</translation> <translation id="7855730255114109580">Google Chrome 已是最新版本</translation> <translation id="8022947259858476807">默认使用 Chrome 来打开链接、在微件中执行搜索以及在其他应用中自动填充密码</translation>
diff --git a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb index 9dcbef0e..008047b 100644 --- a/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb +++ b/ios/chrome/app/strings/resources/ios_google_chrome_strings_zh-HK.xtb
@@ -109,6 +109,7 @@ <translation id="766361182512894255">您的密碼因資料外洩而被洩露。Chrome 建議立即變更密碼。</translation> <translation id="7693590760643069321">您現在只要在訊息、文件或其他應用程式中輕按連結,即可使用 Chrome。</translation> <translation id="7698568245838009292">Chrome 要求存取相機</translation> +<translation id="7754633291442704733">貴機構 <ph name="DOMAIN" /> 將可存取你儲存在這個帳戶中的 Chrome 資料、書籤、歷史記錄、密碼和其他設定。登出帳戶後,系統會清除這部裝置中的資料。不過,你的資料仍會儲存在受管理 Google 帳戶中,並可供貴機構使用。貴機構也可以設定該帳戶專屬的使用者政策,這些政策可以變更 Chrome 的行為。</translation> <translation id="7780154209050837198">如要充分運用 Chrome 的所有功能,請透過 Google 帳戶登入 Chrome。</translation> <translation id="7855730255114109580">Google Chrome 已是最新版本</translation> <translation id="8022947259858476807">預設使用 Chrome 來開啟連結、從小工具搜尋,以及在其他應用程式中自動填入密碼</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 7603fa9..fb685872 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
@@ -109,6 +109,7 @@ <translation id="766361182512894255">你的密碼因為資料侵害事件遭到外洩。Chrome 建議你立即變更密碼。</translation> <translation id="7693590760643069321">現在只要在訊息、文件和其他應用程式中輕觸連結,即可透過 Chrome 開啟。</translation> <translation id="7698568245838009292">Chrome 要求存取你的相機</translation> +<translation id="7754633291442704733">貴機構 <ph name="DOMAIN" /> 將可存取你儲存在這個帳戶中的 Chrome 資料、書籤、歷史記錄、密碼和其他設定。登出帳戶後,系統會清除這部裝置中的資料。不過,你的資料仍會儲存在受管理 Google 帳戶中,並可供貴機構使用。貴機構也可以設定該帳戶專屬的使用者政策,這些政策可以變更 Chrome 的行為。</translation> <translation id="7780154209050837198">如要充分運用 Chrome 的各項功能,請透過 Google 帳戶登入 Chrome。</translation> <translation id="7855730255114109580">Google Chrome 目前是最新版本</translation> <translation id="8022947259858476807">預設使用 Chrome 來開啟連結、從小工具搜尋,以及自動在其他應用程式中填入密碼</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_as.xtb b/ios/chrome/app/strings/resources/ios_strings_as.xtb index 7ee8f6f..6c8fb3e 100644 --- a/ios/chrome/app/strings/resources/ios_strings_as.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_as.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">আন পাছৱৰ্ড মচক…</translation> <translation id="1066060668811609597">ছিংক পৰিচালনা কৰক</translation> <translation id="1076421457278169141">ক’ড স্কেন কৰা হ’ল</translation> +<translation id="1076785341346483463">পৰিচালিত একাউণ্টৰ জৰিয়তে ছিংক কৰক</translation> <translation id="1084365883616172403">ফেচবুক প’ষ্ট দিয়া হ’ল।</translation> <translation id="1103523840287552314"><ph name="LANGUAGE" /> সদাই অনুবাদ কৰক</translation> <translation id="1104948393051856124">গ্ৰহণ কৰক আৰু অব্যাহত ৰাখক</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ca.xtb b/ios/chrome/app/strings/resources/ios_strings_ca.xtb index 8947ea5..b43803b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ca.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ca.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Utilitza una altra contrasenya...</translation> <translation id="1066060668811609597">Gestiona la sincronització</translation> <translation id="1076421457278169141">S'ha escanejat el codi</translation> +<translation id="1076785341346483463">Sincronitza amb el compte gestionat</translation> <translation id="1084365883616172403">S'ha completat la publicació a Facebook.</translation> <translation id="1103523840287552314">Tradueix sempre el text en <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Accepta i continua</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cs.xtb b/ios/chrome/app/strings/resources/ios_strings_cs.xtb index c98e907..5e157c4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cs.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cs.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Použit jiné heslo...</translation> <translation id="1066060668811609597">Správa synchronizace</translation> <translation id="1076421457278169141">Kód byl naskenován</translation> +<translation id="1076785341346483463">Synchronizace se spravovaným účtem</translation> <translation id="1084365883616172403">Příspěvek na Facebook byl odeslán.</translation> <translation id="1103523840287552314">Vždy překládat jazyk <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Přijmout a pokračovat</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_cy.xtb b/ios/chrome/app/strings/resources/ios_strings_cy.xtb index 8e81677..9228917 100644 --- a/ios/chrome/app/strings/resources/ios_strings_cy.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_cy.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Defnyddio Cyfrinair Arall...</translation> <translation id="1066060668811609597">Rheoli Cysoni</translation> <translation id="1076421457278169141">Mae'r cod wedi'i sganio</translation> +<translation id="1076785341346483463">Cysoni Gyda Chyfrif a Reolir</translation> <translation id="1084365883616172403">Wedi gorffen postio i Facebook.</translation> <translation id="1103523840287552314">Cyfieithu <ph name="LANGUAGE" /> bob amser</translation> <translation id="1104948393051856124">Derbyn a Pharhau</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_da.xtb b/ios/chrome/app/strings/resources/ios_strings_da.xtb index 275dfb25..ed237e14 100644 --- a/ios/chrome/app/strings/resources/ios_strings_da.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_da.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Brug en anden adgangskode...</translation> <translation id="1066060668811609597">Administrer synkronisering</translation> <translation id="1076421457278169141">Koden er scannet</translation> +<translation id="1076785341346483463">Synkroniser med managerstyret konto</translation> <translation id="1084365883616172403">Indlæg delt på Facebook.</translation> <translation id="1103523840287552314">Oversæt altid <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Acceptér og fortsæt</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_es.xtb b/ios/chrome/app/strings/resources/ios_strings_es.xtb index cfc8f5f..b5fc5b8 100644 --- a/ios/chrome/app/strings/resources/ios_strings_es.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_es.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Usar otra contraseña...</translation> <translation id="1066060668811609597">Gestionar sincronización</translation> <translation id="1076421457278169141">Código escaneado</translation> +<translation id="1076785341346483463">Sincronizar con cuenta gestionada</translation> <translation id="1084365883616172403">Publicado en Facebook</translation> <translation id="1103523840287552314">Traducir siempre del <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Aceptar y continuar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_et.xtb b/ios/chrome/app/strings/resources/ios_strings_et.xtb index c650fc4e..da50c05 100644 --- a/ios/chrome/app/strings/resources/ios_strings_et.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_et.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Kasuta muud parooli …</translation> <translation id="1066060668811609597">Sünkroonimise haldamine</translation> <translation id="1076421457278169141">Kood on skannitud</translation> +<translation id="1076785341346483463">Sünkroonimine hallatud kontoga</translation> <translation id="1084365883616172403">Facebooki postitus on valmis.</translation> <translation id="1103523840287552314">Tõlgi alati: <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Nõustu ja jätka</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_eu.xtb b/ios/chrome/app/strings/resources/ios_strings_eu.xtb index f7a30a3e5..4e5f801 100644 --- a/ios/chrome/app/strings/resources/ios_strings_eu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_eu.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Erabili beste pasahitz bat…</translation> <translation id="1066060668811609597">Kudeatu sinkronizazioa</translation> <translation id="1076421457278169141">Eskaneatu da kodea</translation> +<translation id="1076785341346483463">Sinkronizatu kontu kudeatuarekin</translation> <translation id="1084365883616172403">Mezua Facebook-en argitaratu da.</translation> <translation id="1103523840287552314">Itzuli <ph name="LANGUAGE" /> beti</translation> <translation id="1104948393051856124">Onartu eta jarraitu</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fi.xtb b/ios/chrome/app/strings/resources/ios_strings_fi.xtb index 8cf7a84..d52faee 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fi.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Käytä toista salasanaa…</translation> <translation id="1066060668811609597">Synkronointiasetusten määritys</translation> <translation id="1076421457278169141">Koodi skannattiin.</translation> +<translation id="1076785341346483463">Synkronoi hallinnoidun tilin kanssa</translation> <translation id="1084365883616172403">Facebook-viesti julkaistu.</translation> <translation id="1103523840287552314">Käännä <ph name="LANGUAGE" /> aina</translation> <translation id="1104948393051856124">Hyväksy ja jatka</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_fil.xtb b/ios/chrome/app/strings/resources/ios_strings_fil.xtb index 4d46fd8..ec859c6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_fil.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_fil.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Gumamit ng Ibang Password...</translation> <translation id="1066060668811609597">Pamahalaan ang Pag-sync</translation> <translation id="1076421457278169141">Na-scan na ang code</translation> +<translation id="1076785341346483463">I-sync sa Pinapamahalaang Account</translation> <translation id="1084365883616172403">Kumpleto na ang pag-post sa Facebook.</translation> <translation id="1103523840287552314">Palaging i-translate ang <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Tanggapin at Magpatuloy</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_gu.xtb b/ios/chrome/app/strings/resources/ios_strings_gu.xtb index fddd3d25..35b623f 100644 --- a/ios/chrome/app/strings/resources/ios_strings_gu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_gu.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">અન્ય પાસવર્ડનો ઉપયોગ કરો...</translation> <translation id="1066060668811609597">સિંક મેનેજ કરો</translation> <translation id="1076421457278169141">કોડ સ્કેન કર્યો</translation> +<translation id="1076785341346483463">મેનેજ કરેલા એકાઉન્ટ સાથે સિંક કરો</translation> <translation id="1084365883616172403">Facebook પોસ્ટ પૂર્ણ કરી છે.</translation> <translation id="1103523840287552314"><ph name="LANGUAGE" />નો હંમેશાં અનુવાદ કરો</translation> <translation id="1104948393051856124">સ્વીકારો અને ચાલુ રાખો</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hu.xtb b/ios/chrome/app/strings/resources/ios_strings_hu.xtb index 5000c00..7e93278 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hu.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hu.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Másik jelszó használata…</translation> <translation id="1066060668811609597">Szinkronizálás kezelése</translation> <translation id="1076421457278169141">Kód beolvasva</translation> +<translation id="1076785341346483463">Szinkronizálás felügyelt fiókkal</translation> <translation id="1084365883616172403">A Facebook-bejegyzés kész.</translation> <translation id="1103523840287552314"><ph name="LANGUAGE" /> - mindig legyen lefordítva</translation> <translation id="1104948393051856124">Elfogadás és folytatás</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_hy.xtb b/ios/chrome/app/strings/resources/ios_strings_hy.xtb index 138f5aee..16816d1b 100644 --- a/ios/chrome/app/strings/resources/ios_strings_hy.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_hy.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Օգտագործել այլ գաղտնաբառ…</translation> <translation id="1066060668811609597">Համաժամացման կառավարում</translation> <translation id="1076421457278169141">Կոդը ընթերցվեց</translation> +<translation id="1076785341346483463">Համաժամացում կառավարվող հաշվի հետ</translation> <translation id="1084365883616172403">Facebook-ում փակցնումն ավարտվեց:</translation> <translation id="1103523840287552314">Միշտ թարգմանել <ph name="LANGUAGE" />-ից</translation> <translation id="1104948393051856124">Ընդունել և շարունակել</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_id.xtb b/ios/chrome/app/strings/resources/ios_strings_id.xtb index c5e44154..cca23a03 100644 --- a/ios/chrome/app/strings/resources/ios_strings_id.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_id.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Gunakan Sandi Lain...</translation> <translation id="1066060668811609597">Kelola Sinkronisasi</translation> <translation id="1076421457278169141">Kode telah dipindai</translation> +<translation id="1076785341346483463">Sinkronkan dengan Akun Terkelola</translation> <translation id="1084365883616172403">Kirim Facebook selesai.</translation> <translation id="1103523840287552314">Selalu terjemahkan <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Terima & Lanjutkan</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ja.xtb b/ios/chrome/app/strings/resources/ios_strings_ja.xtb index 0ee4e12..a78935d4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ja.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ja.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">他のパスワードを使用...</translation> <translation id="1066060668811609597">同期の管理</translation> <translation id="1076421457278169141">コードをスキャンしました</translation> +<translation id="1076785341346483463">管理対象アカウントとの同期</translation> <translation id="1084365883616172403">Facebookへの投稿が完了しました。</translation> <translation id="1103523840287552314"><ph name="LANGUAGE" />を常に翻訳</translation> <translation id="1104948393051856124">同意して続行</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_kk.xtb b/ios/chrome/app/strings/resources/ios_strings_kk.xtb index 39710324..4d7ab9d 100644 --- a/ios/chrome/app/strings/resources/ios_strings_kk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_kk.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Басқа құпия сөз қолданыңыз...</translation> <translation id="1066060668811609597">Синхрондауды басқару</translation> <translation id="1076421457278169141">Код сканерленген</translation> +<translation id="1076785341346483463">Басқарылатын аккаунт арқылы синхрондау</translation> <translation id="1084365883616172403">Facebook жариялау аяқталды.</translation> <translation id="1103523840287552314">Әрқашан <ph name="LANGUAGE" /> тіліне аудару</translation> <translation id="1104948393051856124">Қабылдау және жалғастыру</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ko.xtb b/ios/chrome/app/strings/resources/ios_strings_ko.xtb index fa8638c..eb8567ed 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ko.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ko.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">다른 비밀번호를 사용하세요...</translation> <translation id="1066060668811609597">동기화 관리</translation> <translation id="1076421457278169141">코드 스캔됨</translation> +<translation id="1076785341346483463">관리 계정과 동기화</translation> <translation id="1084365883616172403">Facebook 게시가 완료되었습니다.</translation> <translation id="1103523840287552314"><ph name="LANGUAGE" /> 항상 번역</translation> <translation id="1104948393051856124">동의 및 계속</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ms.xtb b/ios/chrome/app/strings/resources/ios_strings_ms.xtb index 143f040..fae5e405 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ms.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ms.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Gunakan Kata Laluan Lain...</translation> <translation id="1066060668811609597">Urus Penyegerakan</translation> <translation id="1076421457278169141">Kod diimbas</translation> +<translation id="1076785341346483463">Segerakkan dengan Akaun Terurus</translation> <translation id="1084365883616172403">Catatan Facebook selesai.</translation> <translation id="1103523840287552314">Sentiasa terjemahkan <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Terima & Teruskan</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ne.xtb b/ios/chrome/app/strings/resources/ios_strings_ne.xtb index 45774c7a05..0a8c1375 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ne.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ne.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">अर्को पासवर्ड प्रयोग गर्नुहोस्...</translation> <translation id="1066060668811609597">सिंक व्यवस्थापन गर्नुहोस्</translation> <translation id="1076421457278169141">कोड स्क्यान गरियो</translation> +<translation id="1076785341346483463">व्यवस्थापन गरिएको खातासँग सिंक गर्नुहोस्</translation> <translation id="1084365883616172403">Facebook पोस्ट पूरा भयो।</translation> <translation id="1103523840287552314">सँधै अनुवाद गर्नुहोस् <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">स्वीकार गर्नुहोस् र जारी राख्नुहोस्</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_no.xtb b/ios/chrome/app/strings/resources/ios_strings_no.xtb index 77ac269b..f87bf4a4 100644 --- a/ios/chrome/app/strings/resources/ios_strings_no.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_no.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Bruk et annet passord</translation> <translation id="1066060668811609597">Administrer synkronisering</translation> <translation id="1076421457278169141">Koden er skannet</translation> +<translation id="1076785341346483463">Synkroniser med administrert konto</translation> <translation id="1084365883616172403">Facebook-innlegget er fullført.</translation> <translation id="1103523840287552314">Oversett alltid <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Godta og fortsett</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_or.xtb b/ios/chrome/app/strings/resources/ios_strings_or.xtb index d2d40fc..53b8af6 100644 --- a/ios/chrome/app/strings/resources/ios_strings_or.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_or.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">ଅନ୍ୟ ଗୋଟିଏ ପାସ୍ୱାର୍ଡ ବ୍ୟବହାର କରନ୍ତୁ...</translation> <translation id="1066060668811609597">ସିଙ୍କ ପରିଚାଳନା କରନ୍ତୁ</translation> <translation id="1076421457278169141">ସ୍କାନ୍ କରାଯାଇଥିବା କୋଡ୍</translation> +<translation id="1076785341346483463">ପରିଚାଳିତ ଆକାଉଣ୍ଟ ସହ ସିଙ୍କ କରନ୍ତୁ</translation> <translation id="1084365883616172403">Facebookରେ ପୋଷ୍ଟ ଶେଷ ହୋଇଛି।</translation> <translation id="1103523840287552314">ସର୍ବଦା <ph name="LANGUAGE" /> ଅନୁବାଦ କରନ୍ତୁ</translation> <translation id="1104948393051856124">ସ୍ୱୀକାର କରନ୍ତୁ ଏବଂ ଜାରି ରଖନ୍ତୁ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pa.xtb b/ios/chrome/app/strings/resources/ios_strings_pa.xtb index e97588f..a12a676 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pa.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pa.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">ਕੋਈ ਹੋਰ ਪਾਸਵਰਡ ਵਰਤੋ...</translation> <translation id="1066060668811609597">ਸਿੰਕ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰੋ</translation> <translation id="1076421457278169141">ਕੋਡ ਸਕੈਨ ਕੀਤਾ ਗਿਆ</translation> +<translation id="1076785341346483463">ਪ੍ਰਬੰਧਿਤ ਕੀਤੇ ਖਾਤੇ ਨਾਲ ਸਿੰਕ ਕਰੋ</translation> <translation id="1084365883616172403">ਫੇਸਬੁੱਕ ਪੋਸਟ ਪੂਰੀ ਕੀਤੀ।</translation> <translation id="1103523840287552314"><ph name="LANGUAGE" /> ਦਾ ਹਮੇਸ਼ਾਂ ਅਨੁਵਾਦ ਕਰੋ</translation> <translation id="1104948393051856124">ਸਵੀਕਾਰ ਕਰੋ & ਜਾਰੀ ਰੱਖੋ</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pl.xtb b/ios/chrome/app/strings/resources/ios_strings_pl.xtb index 1b0a47fe..e764a39 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pl.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Użyj innego hasła…</translation> <translation id="1066060668811609597">Zarządzanie synchronizacją</translation> <translation id="1076421457278169141">Kod został zeskanowany</translation> +<translation id="1076785341346483463">Synchronizacja z kontem zarządzanym</translation> <translation id="1084365883616172403">Post na Facebooku dodany.</translation> <translation id="1103523840287552314">Zawsze tłumacz z języka: <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Zaakceptuj i kontynuuj</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb index 26c185b..bc914bf9 100644 --- a/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_pt-BR.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Usar outra senha...</translation> <translation id="1066060668811609597">Gerenciar sincronização</translation> <translation id="1076421457278169141">Código lido</translation> +<translation id="1076785341346483463">Sincronizar com a conta gerenciada</translation> <translation id="1084365883616172403">A postagem no Facebook foi concluída.</translation> <translation id="1103523840287552314">Sempre traduzir do <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Aceitar e continuar</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sk.xtb b/ios/chrome/app/strings/resources/ios_strings_sk.xtb index a9feedc..4c89077 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sk.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sk.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Použiť iné heslo…</translation> <translation id="1066060668811609597">Správa synchronizácie</translation> <translation id="1076421457278169141">Kód bol naskenovaný</translation> +<translation id="1076785341346483463">Synchronizácia so spravovaným účtom</translation> <translation id="1084365883616172403">Príspevok bol uverejnený na Facebook.</translation> <translation id="1103523840287552314">Vždy preložiť nasledujúci jazyk: <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Prijať a pokračovať</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_sl.xtb b/ios/chrome/app/strings/resources/ios_strings_sl.xtb index 470f74b..3432dac 100644 --- a/ios/chrome/app/strings/resources/ios_strings_sl.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_sl.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Uporaba drugega gesla …</translation> <translation id="1066060668811609597">Upravljanje sinhronizacije</translation> <translation id="1076421457278169141">Koda je bila optično prebrana</translation> +<translation id="1076785341346483463">Sinhronizacija z upravljanim računom</translation> <translation id="1084365883616172403">Objava v Facebooku je dokončana.</translation> <translation id="1103523840287552314">Vedno prevedi ta jezik: <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Sprejmi in nadaljuj</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ta.xtb b/ios/chrome/app/strings/resources/ios_strings_ta.xtb index 59cbea0..975a484 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ta.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ta.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">வேறொரு கடவுச்சொல்லைப் பயன்படுத்தவும்...</translation> <translation id="1066060668811609597">ஒத்திசைவை நிர்வகித்தல்</translation> <translation id="1076421457278169141">குறியீடு ஸ்கேன் செய்யப்பட்டது</translation> +<translation id="1076785341346483463">நிர்வகிக்கப்படும் கணக்குடன் ஒத்திசைத்தல்</translation> <translation id="1084365883616172403">Facebook இடுகை நிறைவுபெற்றது.</translation> <translation id="1103523840287552314">எப்போதும் இந்த மொழியை மொழிபெயர் <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">ஏற்று தொடரவும்</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_te.xtb b/ios/chrome/app/strings/resources/ios_strings_te.xtb index 8a3f13e..6af4687 100644 --- a/ios/chrome/app/strings/resources/ios_strings_te.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_te.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">వేరే పాస్వర్డ్ ఉపయోగించండి...</translation> <translation id="1066060668811609597">సింక్ను నిర్వహించండి</translation> <translation id="1076421457278169141">కోడ్ స్కాన్ చేయబడింది</translation> +<translation id="1076785341346483463">మేనేజ్ చేయబడే ఖాతాతో సింక్ చేయండి</translation> <translation id="1084365883616172403">Facebook పోస్ట్ పూర్తయింది.</translation> <translation id="1103523840287552314"><ph name="LANGUAGE" />ను ఎల్లప్పుడూ అనువదించండి</translation> <translation id="1104948393051856124">అంగీకరించు & కొనసాగు</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_ur.xtb b/ios/chrome/app/strings/resources/ios_strings_ur.xtb index 25140d0a..51e52b1 100644 --- a/ios/chrome/app/strings/resources/ios_strings_ur.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_ur.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">دوسرا پاس ورڈ استعمال کریں…</translation> <translation id="1066060668811609597">مطابقت پذیری کا نظم کريں</translation> <translation id="1076421457278169141">کوڈ اسکین ہوگیا</translation> +<translation id="1076785341346483463">نظم کردہ اکاؤنٹ کے ساتھ سِنک کریں</translation> <translation id="1084365883616172403">Facebook کی اشاعت مکمل ہوگئی۔</translation> <translation id="1103523840287552314"><ph name="LANGUAGE" /> کو ہمیشہ ترجمہ کریں</translation> <translation id="1104948393051856124">قبول کریں اور جاری رکھیں</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_vi.xtb b/ios/chrome/app/strings/resources/ios_strings_vi.xtb index 554668c..118ee92 100644 --- a/ios/chrome/app/strings/resources/ios_strings_vi.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_vi.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">Dùng mật khẩu khác...</translation> <translation id="1066060668811609597">Quản lý dữ liệu đồng bộ hóa</translation> <translation id="1076421457278169141">Đã quét mã</translation> +<translation id="1076785341346483463">Đồng bộ hoá với tài khoản được quản lý</translation> <translation id="1084365883616172403">Đã đăng lên Facebook.</translation> <translation id="1103523840287552314">Luôn dịch <ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">Chấp nhận và tiếp tục</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb index 48f7f98..9ba57618 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-CN.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">使用其他密码…</translation> <translation id="1066060668811609597">管理同步数据</translation> <translation id="1076421457278169141">已扫描代码</translation> +<translation id="1076785341346483463">与受管理的帐号同步</translation> <translation id="1084365883616172403">Facebook 信息发布已完成。</translation> <translation id="1103523840287552314">一律翻译<ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">接受并继续</translation>
diff --git a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb index 97f4270..7a2bc587 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-HK.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">使用其他密碼…</translation> <translation id="1066060668811609597">管理同步功能</translation> <translation id="1076421457278169141">已掃描編碼</translation> +<translation id="1076785341346483463">與受管理帳戶同步</translation> <translation id="1084365883616172403">已順利發布到 Facebook。</translation> <translation id="1103523840287552314">永遠翻譯<ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">接受並繼續</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 9022d69..601dc53 100644 --- a/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb +++ b/ios/chrome/app/strings/resources/ios_strings_zh-TW.xtb
@@ -17,6 +17,7 @@ <translation id="1063454504051558093">使用其他密碼...</translation> <translation id="1066060668811609597">管理同步功能</translation> <translation id="1076421457278169141">已掃描圖碼/條碼</translation> +<translation id="1076785341346483463">與受管理帳戶同步</translation> <translation id="1084365883616172403">已順利發布到 Facebook。</translation> <translation id="1103523840287552314">一律翻譯<ph name="LANGUAGE" /></translation> <translation id="1104948393051856124">接受並繼續</translation>
diff --git a/ios/chrome/browser/policy/configuration_policy_handler_list_factory.mm b/ios/chrome/browser/policy/configuration_policy_handler_list_factory.mm index e010005..9d069c8 100644 --- a/ios/chrome/browser/policy/configuration_policy_handler_list_factory.mm +++ b/ios/chrome/browser/policy/configuration_policy_handler_list_factory.mm
@@ -159,8 +159,6 @@ std::make_unique<policy::NewTabPageLocationPolicyHandler>()); handlers->AddHandler(std::make_unique<policy::URLBlocklistPolicyHandler>( policy::key::kURLBlocklist)); - handlers->AddHandler(std::make_unique<policy::HttpsOnlyModePolicyHandler>( - prefs::kHttpsOnlyModeEnabled)); return handlers; }
diff --git a/ios/chrome/browser/ui/autofill/BUILD.gn b/ios/chrome/browser/ui/autofill/BUILD.gn index 04390d9..4555d39b4a 100644 --- a/ios/chrome/browser/ui/autofill/BUILD.gn +++ b/ios/chrome/browser/ui/autofill/BUILD.gn
@@ -71,6 +71,10 @@ "card_expiration_date_fix_flow_view_bridge.mm", "card_name_fix_flow_view_bridge.h", "card_name_fix_flow_view_bridge.mm", + "card_unmask_prompt_view_bridge.h", + "card_unmask_prompt_view_bridge.mm", + "card_unmask_prompt_view_controller.h", + "card_unmask_prompt_view_controller.mm", "legacy_card_unmask_prompt_view_bridge.h", "legacy_card_unmask_prompt_view_bridge.mm", ] @@ -90,7 +94,10 @@ "//ios/web", "//ui/base", ] - public_deps = [ "//ios/chrome/browser/ui/collection_view" ] + public_deps = [ + "//ios/chrome/browser/ui/collection_view", + "//ios/chrome/browser/ui/table_view", + ] frameworks = [ "UIKit.framework" ] }
diff --git a/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.h b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.h new file mode 100644 index 0000000..5e420c0 --- /dev/null +++ b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.h
@@ -0,0 +1,30 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_UI_AUTOFILL_CARD_UNMASK_PROMPT_VIEW_BRIDGE_H_ +#define IOS_CHROME_BROWSER_UI_AUTOFILL_CARD_UNMASK_PROMPT_VIEW_BRIDGE_H_ + +#import "components/autofill/core/browser/ui/payments/card_unmask_prompt_view.h" + +namespace autofill { +// iOS implementation of the unmask prompt UI. +class CardUnmaskPromptViewBridge : public CardUnmaskPromptView { + public: + CardUnmaskPromptViewBridge(const CardUnmaskPromptViewBridge&) = delete; + CardUnmaskPromptViewBridge& operator=(const CardUnmaskPromptViewBridge&) = + delete; + + ~CardUnmaskPromptViewBridge() override; + + // CardUnmaskPromptView: + void Show() override; + void ControllerGone() override; + void DisableAndWaitForVerification() override; + void GotVerificationResult(const std::u16string& error_message, + bool allow_retry) override; +}; + +} // namespace autofill + +#endif // IOS_CHROME_BROWSER_UI_AUTOFILL_CARD_UNMASK_PROMPT_VIEW_BRIDGE_H_
diff --git a/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.mm b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.mm new file mode 100644 index 0000000..777bc4c --- /dev/null +++ b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.mm
@@ -0,0 +1,38 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/browser/ui/autofill/card_unmask_prompt_view_bridge.h" +#import "base/notreached.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +namespace autofill { + +#pragma mark CardUnmaskPromptViewBridge + +CardUnmaskPromptViewBridge::~CardUnmaskPromptViewBridge() { + NOTIMPLEMENTED(); +} + +void CardUnmaskPromptViewBridge::Show() { + NOTIMPLEMENTED(); +} + +void CardUnmaskPromptViewBridge::ControllerGone() { + NOTIMPLEMENTED(); +} + +void CardUnmaskPromptViewBridge::DisableAndWaitForVerification() { + NOTIMPLEMENTED(); +} + +void CardUnmaskPromptViewBridge::GotVerificationResult( + const std::u16string& error_message, + bool allow_retry) { + NOTIMPLEMENTED(); +} + +} // namespace autofill
diff --git a/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_controller.h b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_controller.h new file mode 100644 index 0000000..1ceecce --- /dev/null +++ b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_controller.h
@@ -0,0 +1,21 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_UI_AUTOFILL_CARD_UNMASK_PROMPT_VIEW_CONTROLLER_H_ +#define IOS_CHROME_BROWSER_UI_AUTOFILL_CARD_UNMASK_PROMPT_VIEW_CONTROLLER_H_ +#import "ios/chrome/browser/ui/table_view/chrome_table_view_controller.h" + +// IOS Ui for the Autofill Card Unmask Prompt. +// +// This screen is displayed when the user needs to verify a saved credit card +// (e.g: when trying to auto fill the card in a payment form). It asks the user +// to input the Card Verification Code (CVC). If the the card had expired and +// has a new CVC and expiration date, it asks the user to input the new CVC and +// expiration date. Once the card is verified the prompt is dismissed and the +// operation requiring the card verification is continued (e.g: the card is auto +// filled in a payment form). +@interface CardUnmaskPromptViewController : ChromeTableViewController + +@end +#endif // IOS_CHROME_BROWSER_UI_AUTOFILL_CARD_UNMASK_PROMPT_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_controller.mm b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_controller.mm new file mode 100644 index 0000000..4941eea0 --- /dev/null +++ b/ios/chrome/browser/ui/autofill/card_unmask_prompt_view_controller.mm
@@ -0,0 +1,13 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/browser/ui/autofill/card_unmask_prompt_view_controller.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +@implementation CardUnmaskPromptViewController + +@end
diff --git a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm index 2a503c8d..e4ada25 100644 --- a/ios/chrome/browser/ui/browser_view/browser_coordinator.mm +++ b/ios/chrome/browser/ui/browser_view/browser_coordinator.mm
@@ -63,6 +63,7 @@ #import "ios/chrome/browser/ui/commands/command_dispatcher.h" #import "ios/chrome/browser/ui/commands/feed_commands.h" #import "ios/chrome/browser/ui/commands/find_in_page_commands.h" +#import "ios/chrome/browser/ui/commands/new_tab_page_commands.h" #import "ios/chrome/browser/ui/commands/page_info_commands.h" #import "ios/chrome/browser/ui/commands/password_breach_commands.h" #import "ios/chrome/browser/ui/commands/password_protection_commands.h" @@ -172,6 +173,7 @@ EnterprisePromptCoordinatorDelegate, FormInputAccessoryCoordinatorNavigator, NetExportTabHelperDelegate, + NewTabPageCommands, PageInfoCommands, PasswordBreachCommands, PasswordProtectionCommands, @@ -353,6 +355,7 @@ KeyCommandsProvider* _keyCommandsProvider; PrerenderService* _prerenderService; BubblePresenter* _bubblePresenter; + ToolbarAccessoryPresenter* _toolbarAccessoryPresenter; NewTabPageCoordinator* _ntpCoordinator; ToolbarCoordinatorAdaptor* _toolbarCoordinatorAdaptor; PrimaryToolbarCoordinator* _primaryToolbarCoordinator; @@ -563,6 +566,7 @@ @protocol(DefaultBrowserPromoNonModalCommands), @protocol(FeedCommands), @protocol(FindInPageCommands), + @protocol(NewTabPageCommands), @protocol(PageInfoCommands), @protocol(PasswordBreachCommands), @protocol(PasswordProtectionCommands), @@ -614,6 +618,9 @@ [_dispatcher startDispatchingToTarget:_bubblePresenter forProtocol:@protocol(HelpCommands)]; + _toolbarAccessoryPresenter = [[ToolbarAccessoryPresenter alloc] + initWithIsIncognito:self.browser->GetBrowserState()->IsOffTheRecord()]; + _sideSwipeController = [[SideSwipeController alloc] initWithBrowser:self.browser]; [_sideSwipeController setSnapshotDelegate:self]; @@ -683,6 +690,8 @@ _viewControllerDependencies.prerenderService = _prerenderService; _viewControllerDependencies.bubblePresenter = _bubblePresenter; + _viewControllerDependencies.toolbarAccessoryPresenter = + _toolbarAccessoryPresenter; _viewControllerDependencies.popupMenuCoordinator = self.popupMenuCoordinator; _viewControllerDependencies.downloadManagerCoordinator = self.downloadManagerCoordinator; @@ -714,6 +723,8 @@ _bubblePresenter.delegate = self.viewController; _bubblePresenter.rootViewController = self.viewController; + _toolbarAccessoryPresenter.baseViewController = self.viewController; + self.qrScannerCoordinator.baseViewController = self.viewController; [self.qrScannerCoordinator start]; @@ -727,14 +738,13 @@ [_dispatcher startDispatchingToTarget:self.viewController forProtocol:@protocol(BrowserCommands)]; - [_dispatcher startDispatchingToTarget:self.viewController - forProtocol:@protocol(NewTabPageCommands)]; } // Destroys the browser view controller dependencies. - (void)destroyViewControllerDependencies { _viewControllerDependencies.prerenderService = nil; _viewControllerDependencies.bubblePresenter = nil; + _viewControllerDependencies.toolbarAccessoryPresenter = nil; _viewControllerDependencies.popupMenuCoordinator = nil; _viewControllerDependencies.downloadManagerCoordinator = nil; _viewControllerDependencies.ntpCoordinator = nil; @@ -762,6 +772,7 @@ [_dispatcher stopDispatchingToTarget:_bubblePresenter]; [_bubblePresenter stop]; _bubblePresenter = nil; + _toolbarAccessoryPresenter = nil; _prerenderService = nil; _fullscreenController = nullptr; @@ -1280,12 +1291,11 @@ self.findBarCoordinator = [[FindBarCoordinator alloc] initWithBaseViewController:self.viewController browser:self.browser]; - self.findBarCoordinator.presenter = - self.viewController.toolbarAccessoryPresenter; + self.findBarCoordinator.presenter = _toolbarAccessoryPresenter; self.findBarCoordinator.delegate = self; self.findBarCoordinator.presentationDelegate = self.viewController; - if (self.viewController.toolbarAccessoryPresenter.isPresenting) { + if (_toolbarAccessoryPresenter.isPresenting) { self.nextToolbarCoordinator = self.findBarCoordinator; [self closeTextZoom]; return; @@ -1453,11 +1463,10 @@ self.textZoomCoordinator = [[TextZoomCoordinator alloc] initWithBaseViewController:self.viewController browser:self.browser]; - self.textZoomCoordinator.presenter = - self.viewController.toolbarAccessoryPresenter; + self.textZoomCoordinator.presenter = _toolbarAccessoryPresenter; self.textZoomCoordinator.delegate = self; - if (self.viewController.toolbarAccessoryPresenter.isPresenting) { + if (_toolbarAccessoryPresenter.isPresenting) { self.nextToolbarCoordinator = self.textZoomCoordinator; [self closeFindInPage]; return; @@ -2108,4 +2117,45 @@ return NO; } +#pragma mark - NewTabPageCommands + +- (void)openNTPScrolledIntoFeedType:(FeedType)feedType { + // Dismiss any presenting modal. Ex. Follow management page. + + __weak __typeof(self) weakSelf = self; + [self.viewController + clearPresentedStateWithCompletion:^{ + [weakSelf scrollToNTPAfterPresentedStateCleared:feedType]; + } + dismissOmnibox:YES]; +} + +- (void)updateFollowingFeedHasUnseenContent:(BOOL)hasUnseenContent { + [_ntpCoordinator updateFollowingFeedHasUnseenContent:hasUnseenContent]; +} + +- (void)handleFeedModelDidEndUpdates:(FeedType)feedType { + [_ntpCoordinator handleFeedModelDidEndUpdates:feedType]; +} + +- (void)scrollToNTPAfterPresentedStateCleared:(FeedType)feedType { + web::WebState* currentWebState = + self.browser->GetWebStateList()->GetActiveWebState(); + + // Configure next NTP to be scrolled into `feedType`. + NewTabPageTabHelper* NTPHelper = + NewTabPageTabHelper::FromWebState(currentWebState); + if (NTPHelper) { + NTPHelper->SetNextNTPFeedType(feedType); + // TODO(crbug.com/1329173): Scroll into feed. + } + + // Navigate to NTP in same tab. + UrlLoadingBrowserAgent* urlLoadingBrowserAgent = + UrlLoadingBrowserAgent::FromBrowser(self.browser); + UrlLoadParams urlLoadParams = + UrlLoadParams::InCurrentTab(GURL(kChromeUINewTabURL)); + urlLoadingBrowserAgent->Load(urlLoadParams); +} + @end
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.h b/ios/chrome/browser/ui/browser_view/browser_view_controller.h index c6c258a8..1300e5b 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.h +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.h
@@ -12,7 +12,6 @@ #import "ios/chrome/browser/ui/authentication/signin_presenter.h" #import "ios/chrome/browser/ui/browser_view/key_commands_provider.h" #import "ios/chrome/browser/ui/commands/browser_commands.h" -#import "ios/chrome/browser/ui/commands/new_tab_page_commands.h" #import "ios/chrome/browser/ui/find_bar/find_bar_coordinator.h" #import "ios/chrome/browser/ui/incognito_reauth/incognito_reauth_consumer.h" #import "ios/chrome/browser/ui/ntp/logo_animation_controller.h" @@ -61,6 +60,7 @@ typedef struct { PrerenderService* prerenderService; BubblePresenter* bubblePresenter; + ToolbarAccessoryPresenter* toolbarAccessoryPresenter; PopupMenuCoordinator* popupMenuCoordinator; DownloadManagerCoordinator* downloadManagerCoordinator; NewTabPageCoordinator* ntpCoordinator; @@ -89,8 +89,7 @@ ToolbarCoordinatorDelegate, WebNavigationNTPDelegate, WebStateContainerViewProvider, - BrowserCommands, - NewTabPageCommands> + BrowserCommands> // Initializes a new BVC. // `browser` is the browser whose tabs this BVC will display. @@ -138,10 +137,6 @@ // property. @property(nonatomic, strong) UIViewController* sadTabViewController; -// Presenter used to display accessories over the toolbar (e.g. Find In Page). -@property(nonatomic, strong) - ToolbarAccessoryPresenter* toolbarAccessoryPresenter; - // Positioner for activity services attached to the toolbar. @property(nonatomic, readonly) id<ActivityServicePositioner> activityServicePositioner;
diff --git a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm index d4ae07d8..b3339b51 100644 --- a/ios/chrome/browser/ui/browser_view/browser_view_controller.mm +++ b/ios/chrome/browser/ui/browser_view/browser_view_controller.mm
@@ -406,6 +406,10 @@ @property(nonatomic, strong) BubblePresenter* bubblePresenter; +// Presenter used to display accessories over the toolbar (e.g. Find In Page). +@property(nonatomic, strong) + ToolbarAccessoryPresenter* toolbarAccessoryPresenter; + // Command handler for text zoom commands @property(nonatomic, weak) id<TextZoomCommands> textZoomHandler; @@ -501,6 +505,7 @@ [_sideSwipeController setSwipeDelegate:self]; _bookmarkInteractionController = dependencies.bookmarkInteractionController; self.bubblePresenter = dependencies.bubblePresenter; + self.toolbarAccessoryPresenter = dependencies.toolbarAccessoryPresenter; self.ntpCoordinator = dependencies.ntpCoordinator; self.popupMenuCoordinator = dependencies.popupMenuCoordinator; self.primaryToolbarCoordinator = dependencies.primaryToolbarCoordinator; @@ -3353,39 +3358,6 @@ } } -#pragma mark - NewTabPageCommands -// TODO (crbug/1329108): Remove NewTabPageCommands from the BVC. - -- (void)openNTPScrolledIntoFeedType:(FeedType)feedType { - // Dismiss any presenting modal. Ex. Follow management page. - [self - clearPresentedStateWithCompletion:^{ - // Configure next NTP to be scrolled into `feedType`. - NewTabPageTabHelper* NTPHelper = - NewTabPageTabHelper::FromWebState(self.currentWebState); - if (NTPHelper) { - NTPHelper->SetNextNTPFeedType(feedType); - // TODO(crbug.com/1329173): Scroll into feed. - } - - // Navigate to NTP in same tab. - UrlLoadingBrowserAgent* urlLoadingBrowserAgent = - UrlLoadingBrowserAgent::FromBrowser(self.browser); - UrlLoadParams urlLoadParams = - UrlLoadParams::InCurrentTab(GURL(kChromeUINewTabURL)); - urlLoadingBrowserAgent->Load(urlLoadParams); - } - dismissOmnibox:YES]; -} - -- (void)updateFollowingFeedHasUnseenContent:(BOOL)hasUnseenContent { - [self.ntpCoordinator updateFollowingFeedHasUnseenContent:hasUnseenContent]; -} - -- (void)handleFeedModelDidEndUpdates:(FeedType)feedType { - [self.ntpCoordinator handleFeedModelDidEndUpdates:feedType]; -} - #pragma mark - WebStateListObserving methods // TODO(crbug.com/1329088): Move BVC's tab lifeceyle event updates to a @@ -3848,19 +3820,6 @@ atOffset:[self currentHeaderOffset]]; } -#pragma mark - Toolbar Accessory Methods - -- (ToolbarAccessoryPresenter*)toolbarAccessoryPresenter { - if (_toolbarAccessoryPresenter) { - return _toolbarAccessoryPresenter; - } - - _toolbarAccessoryPresenter = - [[ToolbarAccessoryPresenter alloc] initWithIsIncognito:_isOffTheRecord]; - _toolbarAccessoryPresenter.baseViewController = self; - return _toolbarAccessoryPresenter; -} - #pragma mark - NewTabPageTabHelperDelegate - (void)newTabPageHelperDidChangeVisibility:(NewTabPageTabHelper*)NTPHelper
diff --git a/ios/chrome/browser/ui/content_suggestions/cells/BUILD.gn b/ios/chrome/browser/ui/content_suggestions/cells/BUILD.gn index 182d19810..720d156 100644 --- a/ios/chrome/browser/ui/content_suggestions/cells/BUILD.gn +++ b/ios/chrome/browser/ui/content_suggestions/cells/BUILD.gn
@@ -100,7 +100,6 @@ testonly = true sources = [ "content_suggestions_header_item_unittest.mm", - "content_suggestions_most_visited_item_unittest.mm", "content_suggestions_tile_layout_util_unittest.mm", "content_suggestions_whats_new_item_unittest.mm", ]
diff --git a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_item_unittest.mm b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_item_unittest.mm deleted file mode 100644 index 4b45796..0000000 --- a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_item_unittest.mm +++ /dev/null
@@ -1,58 +0,0 @@ -// Copyright 2017 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#import "ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_item.h" - -#import "ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_cell.h" -#include "ios/chrome/browser/ui/util/ui_util.h" -#import "ios/chrome/common/ui/favicon/favicon_attributes.h" -#import "ios/chrome/common/ui/favicon/favicon_view.h" -#include "testing/gtest/include/gtest/gtest.h" -#include "testing/platform_test.h" -#import "third_party/ocmock/OCMock/OCMock.h" -#import "third_party/ocmock/gtest_support.h" - -#if !defined(__has_feature) || !__has_feature(objc_arc) -#error "This file requires ARC support." -#endif - -namespace { - -using ContentSuggestionsMostVisitedItemTest = PlatformTest; - -TEST_F(ContentSuggestionsMostVisitedItemTest, CellClass) { - // Setup. - ContentSuggestionsMostVisitedItem* item = - [[ContentSuggestionsMostVisitedItem alloc] initWithType:0]; - - // Action. - ContentSuggestionsMostVisitedCell* cell = [[[item cellClass] alloc] init]; - - // Test. - ASSERT_EQ([ContentSuggestionsMostVisitedCell class], [cell class]); -} - -TEST_F(ContentSuggestionsMostVisitedItemTest, Configure) { - // Setup. - NSString* title = @"Test title."; - ContentSuggestionsMostVisitedItem* item = - [[ContentSuggestionsMostVisitedItem alloc] initWithType:0]; - item.title = title; - item.attributes = - [FaviconAttributes attributesWithMonogram:@"C" - textColor:[UIColor whiteColor] - backgroundColor:[UIColor blackColor] - defaultBackgroundColor:NO]; - ContentSuggestionsMostVisitedCell* cell = [[[item cellClass] alloc] init]; - id faviconViewMock = OCMPartialMock(cell.faviconView); - OCMExpect([faviconViewMock configureWithAttributes:item.attributes]); - - // Action. - [item configureCell:cell]; - - // Test. - ASSERT_EQ(title, cell.titleLabel.text); - ASSERT_OCMOCK_VERIFY(faviconViewMock); -} -}
diff --git a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_tile_view.mm b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_tile_view.mm index b5e920a6..4b42ee759 100644 --- a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_tile_view.mm +++ b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_most_visited_tile_view.mm
@@ -30,8 +30,8 @@ @implementation ContentSuggestionsMostVisitedTileView -- (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; +- (instancetype)initWithFrame:(CGRect)frame placeholder:(BOOL)isPlaceholder { + self = [super initWithFrame:frame placeholder:isPlaceholder]; if (self) { _faviconView = [[FaviconView alloc] init]; _faviconView.font = [UIFont systemFontOfSize:22]; @@ -50,7 +50,7 @@ - (instancetype)initWithConfiguration: (ContentSuggestionsMostVisitedItem*)config { - self = [self initWithFrame:CGRectZero]; + self = [self initWithFrame:CGRectZero placeholder:!config]; if (self) { if (!config) { // If there is no config, then this is a placeholder tile.
diff --git a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_shortcut_tile_view.mm b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_shortcut_tile_view.mm index c879382..13535cd 100644 --- a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_shortcut_tile_view.mm +++ b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_shortcut_tile_view.mm
@@ -27,7 +27,7 @@ @synthesize countLabel = _countLabel; - (instancetype)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; + self = [super initWithFrame:frame placeholder:NO]; if (self) { _iconView = [[UIImageView alloc] initWithFrame:self.bounds]; _iconView.translatesAutoresizingMaskIntoConstraints = NO;
diff --git a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_tile_view.h b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_tile_view.h index 92062ba..275e42c 100644 --- a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_tile_view.h +++ b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_tile_view.h
@@ -12,15 +12,18 @@ // most visited tiles and shortcut tiles on NTP and other places. @interface ContentSuggestionsTileView : UIView <UIPointerInteractionDelegate> +// Initializer that will lay itself out as placeholder tile with no text or +// favicon if |isPlaceholder| is YES. +- (instancetype)initWithFrame:(CGRect)frame placeholder:(BOOL)isPlaceholder; + // Container for the image view. Used in subclasses. -@property(nonatomic, strong, readonly, nonnull) UIView* imageContainerView; +@property(nonatomic, strong, readonly) UIView* imageContainerView; // Title of the Most Visited. -@property(nonatomic, strong, readonly, nonnull) UILabel* titleLabel; +@property(nonatomic, strong, readonly) UILabel* titleLabel; // The view displaying the background image (squircle) for the tile image. -@property(nonatomic, strong, readonly, nonnull) - UIImageView* imageBackgroundView; +@property(nonatomic, strong, readonly) UIImageView* imageBackgroundView; @end
diff --git a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_tile_view.mm b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_tile_view.mm index b1ea8b3..dd89528b 100644 --- a/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_tile_view.mm +++ b/ios/chrome/browser/ui/content_suggestions/cells/content_suggestions_tile_view.mm
@@ -33,16 +33,14 @@ @implementation ContentSuggestionsTileView -- (instancetype)initWithFrame:(CGRect)frame { +- (instancetype)initWithFrame:(CGRect)frame placeholder:(BOOL)isPlaceholder { self = [super initWithFrame:frame]; if (self) { _titleLabel = [[UILabel alloc] init]; _titleLabel.textColor = [UIColor colorNamed:kTextSecondaryColor]; _titleLabel.font = [self titleLabelFont]; _titleLabel.textAlignment = NSTextAlignmentCenter; - _titleLabel.preferredMaxLayoutWidth = - IsContentSuggestionsUIModuleRefreshEnabled() ? kIconSize - : kPreferredMaxWidth; + _titleLabel.preferredMaxLayoutWidth = kPreferredMaxWidth; _titleLabel.numberOfLines = kLabelNumLines; if (IsContentSuggestionsUIModuleRefreshEnabled()) { _titleLabel.adjustsFontSizeToFitWidth = YES; @@ -76,7 +74,7 @@ AddSameCenterConstraints(_imageContainerView, backgroundView); UIView* containerView = backgroundView; - if (IsContentSuggestionsUIModuleRefreshEnabled()) { + if (IsContentSuggestionsUIModuleRefreshEnabled() && isPlaceholder) { ApplyVisualConstraintsWithMetrics( @[ @"V:|[container]-(space)-[title]-(>=0)-|" ], @{@"container" : containerView, @"title" : _titleLabel},
diff --git a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm index bc262fa9..1528b848 100644 --- a/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm +++ b/ios/chrome/browser/ui/content_suggestions/content_suggestions_view_controller.mm
@@ -45,13 +45,22 @@ namespace { // The width of the modules. -const int kModuleWidth = 343; +const int kModuleWidthCompact = 343; +const int kModuleWidthRegular = 382; // The height of the modules; const int kModuleHeight = 139; // The spacing between the modules. const float kModuleVerticalSpacing = 16.0f; + +// Returns the module width depending on the horizontal trait collection. +CGFloat GetModuleWidthForHorizontalTraitCollection( + UITraitCollection* traitCollection) { + return traitCollection.horizontalSizeClass == UIUserInterfaceSizeClassRegular + ? kModuleWidthRegular + : kModuleWidthCompact; +} } // namespace @interface ContentSuggestionsViewController () < @@ -83,12 +92,17 @@ // Module Container for the Most Visited Tiles. @property(nonatomic, strong) ContentSuggestionsModuleContainer* mostVisitedModuleContainer; +// Width Anchor of the Most Visited Tiles container. +@property(nonatomic, strong) + NSLayoutConstraint* mostVisitedContainerWidthAnchor; // List of all of the Most Visited views. @property(nonatomic, strong) NSMutableArray<ContentSuggestionsMostVisitedTileView*>* mostVisitedViews; // Module Container for the Shortcuts. @property(nonatomic, strong) ContentSuggestionsModuleContainer* shortcutsModuleContainer; +// Width Anchor of the Shortcuts container. +@property(nonatomic, strong) NSLayoutConstraint* shortcutsContainerWidthAnchor; // StackView holding all of `shortcutsViews`. @property(nonatomic, strong) UIStackView* shortcutsStackView; // List of all of the Shortcut views. @@ -215,7 +229,7 @@ } CGFloat width = IsContentSuggestionsUIModuleRefreshEnabled() - ? kModuleWidth + ? GetModuleWidthForHorizontalTraitCollection(self.traitCollection) : MostVisitedTilesContentHorizontalSpace(self.traitCollection); CGFloat height = IsContentSuggestionsUIModuleRefreshEnabled() @@ -223,8 +237,10 @@ : MostVisitedCellSize( self.traitCollection.preferredContentSizeCategory) .height; + self.mostVisitedContainerWidthAnchor = + [parentView.widthAnchor constraintEqualToConstant:width]; [NSLayoutConstraint activateConstraints:@[ - [parentView.widthAnchor constraintEqualToConstant:width], + self.mostVisitedContainerWidthAnchor, [parentView.heightAnchor constraintGreaterThanOrEqualToConstant:height] ]]; [self populateMostVisitedModule]; @@ -268,7 +284,7 @@ } CGFloat width = IsContentSuggestionsUIModuleRefreshEnabled() - ? kModuleWidth + ? GetModuleWidthForHorizontalTraitCollection(self.traitCollection) : MostVisitedTilesContentHorizontalSpace(self.traitCollection); CGFloat height = IsContentSuggestionsUIModuleRefreshEnabled() @@ -276,8 +292,10 @@ : MostVisitedCellSize( self.traitCollection.preferredContentSizeCategory) .height; + self.shortcutsContainerWidthAnchor = + [parentView.widthAnchor constraintEqualToConstant:width]; [NSLayoutConstraint activateConstraints:@[ - [parentView.widthAnchor constraintEqualToConstant:width], + self.shortcutsContainerWidthAnchor, [parentView.heightAnchor constraintGreaterThanOrEqualToConstant:height] ]]; } @@ -300,6 +318,20 @@ ntp_home::FakeOmniboxAccessibilityID(); } +#pragma mark - UITraitEnvironment + +- (void)traitCollectionDidChange:(UITraitCollection*)previousTraitCollection { + [super traitCollectionDidChange:previousTraitCollection]; + if (IsContentSuggestionsUIModuleRefreshEnabled() && + previousTraitCollection.horizontalSizeClass != + self.traitCollection.horizontalSizeClass) { + self.shortcutsContainerWidthAnchor.constant = + GetModuleWidthForHorizontalTraitCollection(self.traitCollection); + self.mostVisitedContainerWidthAnchor.constant = + GetModuleWidthForHorizontalTraitCollection(self.traitCollection); + } +} + #pragma mark - ContentSuggestionsConsumer - (void)showReturnToRecentTabTileWithConfig:
diff --git a/ios/chrome/browser/ui/incognito_interstitial/BUILD.gn b/ios/chrome/browser/ui/incognito_interstitial/BUILD.gn new file mode 100644 index 0000000..e53b357 --- /dev/null +++ b/ios/chrome/browser/ui/incognito_interstitial/BUILD.gn
@@ -0,0 +1,46 @@ +# Copyright 2022 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +source_set("incognito_interstitial_ui") { + configs += [ "//build/config/compiler:enable_arc" ] + sources = [ + "incognito_interstitial_view_controller.h", + "incognito_interstitial_view_controller.mm", + "incognito_interstitial_view_controller_delegate.h", + ] + deps = [ + "resources:incognito_interstitial_screen_banner", + "//ios/chrome/app/strings:ios_strings_grit", + "//ios/chrome/browser/ui:feature_flags", + "//ios/chrome/browser/ui/ntp:ntp_internal", + "//ios/chrome/browser/ui/util:util", + "//ios/chrome/common/ui/colors:colors", + "//ios/chrome/common/ui/promo_style:promo_style", + "//ios/chrome/common/ui/util:util", + "//ui/base:base", + ] + frameworks = [ "UIKit.framework" ] +} + +source_set("incognito_interstitial") { + configs += [ "//build/config/compiler:enable_arc" ] + sources = [ + "incognito_interstitial_coordinator.h", + "incognito_interstitial_coordinator.mm", + "incognito_interstitial_coordinator_delegate.h", + ] + deps = [ + ":incognito_interstitial_ui", + "//base:base", + "//ios/chrome/app:mode", + "//ios/chrome/app/application_delegate:tab_opening", + "//ios/chrome/browser/ui/coordinators:chrome_coordinators", + "//ios/chrome/browser/ui/incognito_reauth:incognito_reauth_scene_agent", + "//ios/chrome/browser/ui/main:scene_state_header", + "//ios/chrome/browser/ui/ntp:ntp_internal", + "//ios/chrome/browser/url_loading:url_loading", + "//ios/chrome/browser/url_loading:url_loading_params_header", + ] + frameworks = [ "UIKit.framework" ] +}
diff --git a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_coordinator.h b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_coordinator.h new file mode 100644 index 0000000..7671305 --- /dev/null +++ b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_coordinator.h
@@ -0,0 +1,44 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_UI_INCOGNITO_INTERSTITIAL_INCOGNITO_INTERSTITIAL_COORDINATOR_H_ +#define IOS_CHROME_BROWSER_UI_INCOGNITO_INTERSTITIAL_INCOGNITO_INTERSTITIAL_COORDINATOR_H_ + +#import "base/ios/block_types.h" +#import "ios/chrome/browser/ui/coordinators/chrome_coordinator.h" +#import "ios/chrome/browser/url_loading/url_loading_params.h" + +@protocol IncognitoInterstitialCoordinatorDelegate; +@protocol TabOpening; + +// The coordinator for the Incognito interstitial. It manages a view controller +// with the actual interstitial UI. +@interface IncognitoInterstitialCoordinator : ChromeCoordinator + +@property(nonatomic, weak) id<IncognitoInterstitialCoordinatorDelegate> + delegate; + +// Tab opener to be used to open a new tab. +@property(nonatomic, weak) id<TabOpening> tabOpener; + +// URL load parameters associated with the external intent. +@property(nonatomic, assign) UrlLoadParams urlLoadParams; + +// Whether to ask the tab opener to also dismiss the omnibox before opening a +// new tab. +@property(nonatomic, assign) BOOL shouldDismissOmnibox; + +- (instancetype)init NS_UNAVAILABLE; + +// Stops the coordinator and dismisses the Incognito interstitial with +// `completion` as a completion. +- (void)stopWithCompletion:(ProceduralBlock)completion; + +// Starts the coordinator and shows the Incognito interstitial with `completion` +// as a completion. +- (void)startWithCompletion:(ProceduralBlock)completion; + +@end + +#endif // IOS_CHROME_BROWSER_UI_INCOGNITO_INTERSTITIAL_INCOGNITO_INTERSTITIAL_COORDINATOR_H_
diff --git a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_coordinator.mm b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_coordinator.mm new file mode 100644 index 0000000..fcb504f9 --- /dev/null +++ b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_coordinator.mm
@@ -0,0 +1,118 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_coordinator.h" +#import "base/strings/sys_string_conversions.h" +#import "ios/chrome/app/application_delegate/tab_opening.h" +#import "ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_coordinator_delegate.h" +#import "ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller.h" +#import "ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller_delegate.h" +#import "ios/chrome/browser/ui/incognito_reauth/incognito_reauth_scene_agent.h" +#import "ios/chrome/browser/ui/main/scene_state_browser_agent.h" +#import "ios/chrome/browser/ui/ntp/new_tab_page_url_loader_delegate.h" +#import "ios/chrome/browser/url_loading/url_loading_browser_agent.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +@interface IncognitoInterstitialCoordinator () < + IncognitoInterstitialViewControllerDelegate, + NewTabPageURLLoaderDelegate> + +@property(nonatomic, strong) + IncognitoInterstitialViewController* incognitoInterstitialViewController; + +@end + +@implementation IncognitoInterstitialCoordinator + +- (void)startWithCompletion:(ProceduralBlock)completion { + self.incognitoInterstitialViewController = + [[IncognitoInterstitialViewController alloc] init]; + self.incognitoInterstitialViewController.delegate = self; + self.incognitoInterstitialViewController.URLLoaderDelegate = self; + self.incognitoInterstitialViewController.subtitleText = + base::SysUTF8ToNSString(self.urlLoadParams.web_params.url.spec()); + + [self.baseViewController + presentViewController:self.incognitoInterstitialViewController + animated:YES + completion:completion]; +} + +- (void)stopWithCompletion:(ProceduralBlock)completion { + __weak __typeof(self) weakSelf = self; + [self.incognitoInterstitialViewController + dismissViewControllerAnimated:YES + completion:^{ + weakSelf.incognitoInterstitialViewController = nil; + completion(); + }]; +} + +- (void)start { + [self startWithCompletion:nil]; +} + +- (void)stop { + [self stopWithCompletion:nil]; +} + +#pragma mark - IncognitoInterstitialViewControllerDelegate + +- (void)didTapPrimaryActionButton { + // Dismiss modals (including interstitial) and open link in incognito tab. + __weak __typeof(self) weakSelf = self; + UrlLoadParams params = self.urlLoadParams; + BOOL dismissOmnibox = self.shouldDismissOmnibox; + void (^dismissModalsAndOpenTab)() = ^{ + [weakSelf.tabOpener dismissModalsAndOpenSelectedTabInMode: + ApplicationModeForTabOpening::INCOGNITO + withUrlLoadParams:params + dismissOmnibox:dismissOmnibox + completion:nil]; + }; + + SceneState* sceneState = + SceneStateBrowserAgent::FromBrowser(self.browser)->GetSceneState(); + IncognitoReauthSceneAgent* reauthAgent = + [IncognitoReauthSceneAgent agentFromScene:sceneState]; + if (reauthAgent.authenticationRequired) { + [reauthAgent + authenticateIncognitoContentWithCompletionBlock:^(BOOL success) { + if (success) { + dismissModalsAndOpenTab(); + } + }]; + } else { + dismissModalsAndOpenTab(); + } +} + +- (void)didTapSecondaryActionButton { + // Dismiss modals (including interstitial) and open link in regular tab. + [self.tabOpener + dismissModalsAndOpenSelectedTabInMode:ApplicationModeForTabOpening::NORMAL + withUrlLoadParams:self.urlLoadParams + dismissOmnibox:self.shouldDismissOmnibox + completion:nil]; +} + +- (void)didTapCancelButton { + [self.delegate shouldStopIncognitoInterstitial:self]; +} + +#pragma mark - NewTabPageURLLoaderDelegate + +- (void)loadURLInTab:(const GURL&)URL { + [self.tabOpener + dismissModalsAndOpenSelectedTabInMode:ApplicationModeForTabOpening:: + INCOGNITO + withUrlLoadParams:UrlLoadParams::InCurrentTab(URL) + dismissOmnibox:YES + completion:nil]; +} + +@end
diff --git a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_coordinator_delegate.h b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_coordinator_delegate.h new file mode 100644 index 0000000..a74a1f8 --- /dev/null +++ b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_coordinator_delegate.h
@@ -0,0 +1,21 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_UI_INCOGNITO_INTERSTITIAL_INCOGNITO_INTERSTITIAL_COORDINATOR_DELEGATE_H_ +#define IOS_CHROME_BROWSER_UI_INCOGNITO_INTERSTITIAL_INCOGNITO_INTERSTITIAL_COORDINATOR_DELEGATE_H_ + +#import "base/ios/block_types.h" + +@class IncognitoInterstitialCoordinator; + +@protocol IncognitoInterstitialCoordinatorDelegate <NSObject> + +// Callback for the delegate to know it should call stop the interstitial +// coordinator. +- (void)shouldStopIncognitoInterstitial: + (IncognitoInterstitialCoordinator*)incognitoInterstitial; + +@end + +#endif // IOS_CHROME_BROWSER_UI_INCOGNITO_INTERSTITIAL_INCOGNITO_INTERSTITIAL_COORDINATOR_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller.h b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller.h new file mode 100644 index 0000000..86af3a0 --- /dev/null +++ b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller.h
@@ -0,0 +1,25 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_UI_INCOGNITO_INTERSTITIAL_INCOGNITO_INTERSTITIAL_VIEW_CONTROLLER_H_ +#define IOS_CHROME_BROWSER_UI_INCOGNITO_INTERSTITIAL_INCOGNITO_INTERSTITIAL_VIEW_CONTROLLER_H_ + +#import "ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller_delegate.h" +#import "ios/chrome/common/ui/promo_style/promo_style_view_controller.h" + +@protocol NewTabPageURLLoaderDelegate; + +// Main view controller for the Incognito interstitial, to be managed by the +// associated `IncognitoInterstitialCoordinator`. +@interface IncognitoInterstitialViewController : PromoStyleViewController + +@property(nonatomic, weak) id<IncognitoInterstitialViewControllerDelegate> + delegate; + +// Some URLs in the controlled view can be loaded. +@property(nonatomic, weak) id<NewTabPageURLLoaderDelegate> URLLoaderDelegate; + +@end + +#endif // IOS_CHROME_BROWSER_UI_INCOGNITO_INTERSTITIAL_INCOGNITO_INTERSTITIAL_VIEW_CONTROLLER_H_
diff --git a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller.mm b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller.mm new file mode 100644 index 0000000..ac03e31 --- /dev/null +++ b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller.mm
@@ -0,0 +1,174 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#import "ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller.h" +#import "base/check.h" +#import "base/cxx17_backports.h" +#import "base/mac/foundation_util.h" +#import "ios/chrome/browser/ui/ntp/incognito_view.h" +#import "ios/chrome/browser/ui/ntp/revamped_incognito_view.h" +#import "ios/chrome/browser/ui/ui_feature_flags.h" +#import "ios/chrome/browser/ui/util/uikit_ui_util.h" +#import "ios/chrome/common/ui/colors/semantic_color_names.h" +#import "ios/chrome/common/ui/util/constraints_ui_util.h" +#import "ios/chrome/grit/ios_strings.h" +#import "ui/base/device_form_factor.h" +#import "ui/base/l10n/l10n_util_mac.h" + +#if !defined(__has_feature) || !__has_feature(objc_arc) +#error "This file requires ARC support." +#endif + +namespace { + +// Opacity of navigation bar is scroll view content offset divided by this. +const CGFloat kNavigationBarOpacityDenominator = 100; + +} // namespace + +@interface IncognitoInterstitialViewController () + +// The navigation bar to display at the top of the view, to contain a "Cancel" +// button. +@property(nonatomic, strong) UINavigationBar* navigationBar; + +@end + +@implementation IncognitoInterstitialViewController + +@dynamic delegate; + +#pragma mark - UIViewController + +- (void)viewDidLoad { + self.bannerName = @"incognito_interstitial_screen_banner"; + self.isTallBanner = YES; + self.shouldBannerFillTopSpace = YES; + + self.titleText = l10n_util::GetNSString(IDS_IOS_INCOGNITO_INTERSTITIAL_TITLE); + self.primaryActionString = l10n_util::GetNSString( + IDS_IOS_INCOGNITO_INTERSTITIAL_OPEN_IN_CHROME_INCOGNITO); + self.secondaryActionString = + l10n_util::GetNSString(IDS_IOS_INCOGNITO_INTERSTITIAL_OPEN_IN_CHROME); + + UIScrollView* incognitoView = NULL; + if (base::FeatureList::IsEnabled(kIncognitoNtpRevamp)) { + RevampedIncognitoView* revampedIncognitoView = + [[RevampedIncognitoView alloc] initWithFrame:CGRectZero + showTopIncognitoImageAndTitle:NO]; + revampedIncognitoView.URLLoaderDelegate = self.URLLoaderDelegate; + incognitoView = revampedIncognitoView; + } else { + IncognitoView* revampedIncognitoView = + [[IncognitoView alloc] initWithFrame:CGRectZero + showTopIncognitoImageAndTitle:NO]; + revampedIncognitoView.URLLoaderDelegate = self.URLLoaderDelegate; + incognitoView = revampedIncognitoView; + } + + [self.specificContentView addSubview:incognitoView]; + + self.overrideUserInterfaceStyle = UIUserInterfaceStyleDark; + self.modalInPresentation = YES; + + UIBarButtonItem* cancelButton = [[UIBarButtonItem alloc] + initWithBarButtonSystemItem:UIBarButtonSystemItemCancel + target:self.delegate + action:@selector(didTapCancelButton)]; + + UINavigationItem* navigationRootItem = + [[UINavigationItem alloc] initWithTitle:@""]; + navigationRootItem.rightBarButtonItem = cancelButton; + + self.navigationBar = [[UINavigationBar alloc] init]; + [self.navigationBar pushNavigationItem:navigationRootItem animated:false]; + [self updateNavigationBarAppearanceWithOpacity:0.0]; + + // This needs to be called after parameters of `PromoStyleViewController` have + // been set, but before adding additional layout constraints, since these + // constraints can only be activated once the complete view hierarchy has been + // constructed and relevant views belong to the same hierarchy. + [super viewDidLoad]; + + incognitoView.translatesAutoresizingMaskIntoConstraints = NO; + [NSLayoutConstraint activateConstraints:@[ + [incognitoView.leadingAnchor + constraintEqualToAnchor:self.view.leadingAnchor], + [incognitoView.trailingAnchor + constraintEqualToAnchor:self.view.trailingAnchor], + [incognitoView.topAnchor + constraintEqualToAnchor:self.specificContentView.topAnchor], + [incognitoView.bottomAnchor + constraintEqualToAnchor:self.specificContentView.bottomAnchor], + [incognitoView.heightAnchor + constraintEqualToAnchor:incognitoView.contentLayoutGuide.heightAnchor], + ]]; + + [self.view addSubview:self.navigationBar]; + self.navigationBar.translatesAutoresizingMaskIntoConstraints = NO; + [NSLayoutConstraint activateConstraints:@[ + [self.navigationBar.leadingAnchor + constraintEqualToAnchor:self.view.leadingAnchor], + [self.navigationBar.trailingAnchor + constraintEqualToAnchor:self.view.trailingAnchor], + [self.navigationBar.topAnchor constraintEqualToAnchor:self.view.topAnchor], + ]]; +} + +- (NSUInteger)supportedInterfaceOrientations { + return (ui::GetDeviceFormFactor() == ui::DEVICE_FORM_FACTOR_TABLET) + ? [super supportedInterfaceOrientations] + : UIInterfaceOrientationMaskPortrait; +} + +#pragma mark - UIScrollViewDelegate + +// This override allows scroll detection of the scroll view contained within the +// underlying PromoStyleViewController. +- (void)scrollViewDidScroll:(UIScrollView*)scrollView { + [super scrollViewDidScroll:scrollView]; + + CGFloat navigationBarOpacity = + scrollView.contentOffset.y / kNavigationBarOpacityDenominator; + navigationBarOpacity = + base::clamp(navigationBarOpacity, 0.0, 1.0, std::less_equal<>()); + [self updateNavigationBarAppearanceWithOpacity:navigationBarOpacity]; +} + +#pragma mark - Private + +- (void)updateNavigationBarAppearanceWithOpacity:(CGFloat)opacity { + UIColor* backgroundColor = + [UIColor colorNamed:kGroupedPrimaryBackgroundColor]; + UIColor* shadowColor = [UIColor colorNamed:kSeparatorColor]; + CGFloat backgroundAlpha = CGColorGetAlpha(backgroundColor.CGColor); + CGFloat shadowAlpha = CGColorGetAlpha(shadowColor.CGColor); + + if (@available(iOS 15, *)) { + UINavigationBarAppearance* appearance = + [[UINavigationBarAppearance alloc] init]; + [appearance configureWithOpaqueBackground]; + appearance.backgroundColor = + [backgroundColor colorWithAlphaComponent:backgroundAlpha * opacity]; + appearance.shadowColor = + [shadowColor colorWithAlphaComponent:shadowAlpha * opacity]; + + self.navigationBar.compactAppearance = appearance; + self.navigationBar.standardAppearance = appearance; + self.navigationBar.scrollEdgeAppearance = appearance; + } else { + UIImage* navigationBarBackgroundImage = ImageWithColor( + [backgroundColor colorWithAlphaComponent:backgroundAlpha * opacity]); + UIImage* navigationBarShadowImage = ImageWithColor( + [shadowColor colorWithAlphaComponent:shadowAlpha * opacity]); + [self.navigationBar setBackgroundImage:navigationBarBackgroundImage + forBarMetrics:UIBarMetricsDefault]; + + self.navigationBar.shadowImage = navigationBarShadowImage; + } + + self.navigationBar.tintColor = [UIColor colorNamed:kBlueColor]; +} + +@end
diff --git a/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller_delegate.h b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller_delegate.h new file mode 100644 index 0000000..c6971cd --- /dev/null +++ b/ios/chrome/browser/ui/incognito_interstitial/incognito_interstitial_view_controller_delegate.h
@@ -0,0 +1,19 @@ +// Copyright 2022 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef IOS_CHROME_BROWSER_UI_INCOGNITO_INTERSTITIAL_INCOGNITO_INTERSTITIAL_VIEW_CONTROLLER_DELEGATE_H_ +#define IOS_CHROME_BROWSER_UI_INCOGNITO_INTERSTITIAL_INCOGNITO_INTERSTITIAL_VIEW_CONTROLLER_DELEGATE_H_ + +#import "ios/chrome/common/ui/promo_style/promo_style_view_controller_delegate.h" + +@protocol IncognitoInterstitialViewControllerDelegate < + PromoStyleViewControllerDelegate> + +// Called back when the user interacts with the "Cancel" button in the +// controlled view. +- (void)didTapCancelButton; + +@end + +#endif // IOS_CHROME_BROWSER_UI_INCOGNITO_INTERSTITIAL_INCOGNITO_INTERSTITIAL_VIEW_CONTROLLER_DELEGATE_H_
diff --git a/ios/chrome/browser/ui/incognito_interstitial/resources/BUILD.gn b/ios/chrome/browser/ui/incognito_interstitial/resources/BUILD.gn new file mode 100644 index 0000000..2990d94 --- /dev/null +++ b/ios/chrome/browser/ui/incognito_interstitial/resources/BUILD.gn
@@ -0,0 +1,14 @@ +# Copyright 2022 The Chromium Authors. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +import("//build/config/ios/asset_catalog.gni") + +imageset("incognito_interstitial_screen_banner") { + sources = [ + "incognito_interstitial_screen_banner.imageset/Contents.json", + "incognito_interstitial_screen_banner.imageset/incognito_interstitial_screen_banner@1x.png", + "incognito_interstitial_screen_banner.imageset/incognito_interstitial_screen_banner@2x.png", + "incognito_interstitial_screen_banner.imageset/incognito_interstitial_screen_banner@3x.png", + ] +}
diff --git a/ios/chrome/browser/ui/incognito_interstitial/resources/incognito_interstitial_screen_banner.imageset/Contents.json b/ios/chrome/browser/ui/incognito_interstitial/resources/incognito_interstitial_screen_banner.imageset/Contents.json new file mode 100644 index 0000000..298dc04b --- /dev/null +++ b/ios/chrome/browser/ui/incognito_interstitial/resources/incognito_interstitial_screen_banner.imageset/Contents.json
@@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "incognito_interstitial_screen_banner@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "incognito_interstitial_screen_banner@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "incognito_interstitial_screen_banner@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +}
diff --git a/ios/chrome/browser/ui/incognito_interstitial/resources/incognito_interstitial_screen_banner.imageset/incognito_interstitial_screen_banner@1x.png b/ios/chrome/browser/ui/incognito_interstitial/resources/incognito_interstitial_screen_banner.imageset/incognito_interstitial_screen_banner@1x.png new file mode 100644 index 0000000..1257715 --- /dev/null +++ b/ios/chrome/browser/ui/incognito_interstitial/resources/incognito_interstitial_screen_banner.imageset/incognito_interstitial_screen_banner@1x.png Binary files differ
diff --git a/ios/chrome/browser/ui/incognito_interstitial/resources/incognito_interstitial_screen_banner.imageset/incognito_interstitial_screen_banner@2x.png b/ios/chrome/browser/ui/incognito_interstitial/resources/incognito_interstitial_screen_banner.imageset/incognito_interstitial_screen_banner@2x.png new file mode 100644 index 0000000..6701319 --- /dev/null +++ b/ios/chrome/browser/ui/incognito_interstitial/resources/incognito_interstitial_screen_banner.imageset/incognito_interstitial_screen_banner@2x.png Binary files differ
diff --git a/ios/chrome/browser/ui/incognito_interstitial/resources/incognito_interstitial_screen_banner.imageset/incognito_interstitial_screen_banner@3x.png b/ios/chrome/browser/ui/incognito_interstitial/resources/incognito_interstitial_screen_banner.imageset/incognito_interstitial_screen_banner@3x.png new file mode 100644 index 0000000..ae20284a --- /dev/null +++ b/ios/chrome/browser/ui/incognito_interstitial/resources/incognito_interstitial_screen_banner.imageset/incognito_interstitial_screen_banner@3x.png Binary files differ
diff --git a/ios/chrome/browser/ui/main/BUILD.gn b/ios/chrome/browser/ui/main/BUILD.gn index 0fe4a71..883a1cd2 100644 --- a/ios/chrome/browser/ui/main/BUILD.gn +++ b/ios/chrome/browser/ui/main/BUILD.gn
@@ -183,6 +183,7 @@ "//ios/chrome/browser/ui/first_run:field_trial", "//ios/chrome/browser/ui/first_run:utils", "//ios/chrome/browser/ui/history", + "//ios/chrome/browser/ui/incognito_interstitial:incognito_interstitial", "//ios/chrome/browser/ui/incognito_reauth:incognito_reauth_scene_agent", "//ios/chrome/browser/ui/main:browser_interface_provider", "//ios/chrome/browser/ui/ntp:feature_flags",
diff --git a/ios/chrome/browser/ui/ntp/incognito_view.h b/ios/chrome/browser/ui/ntp/incognito_view.h index 32133e2..55af964 100644 --- a/ios/chrome/browser/ui/ntp/incognito_view.h +++ b/ios/chrome/browser/ui/ntp/incognito_view.h
@@ -7,14 +7,26 @@ #import <UIKit/UIKit.h> -class UrlLoadingBrowserAgent; +@protocol NewTabPageURLLoaderDelegate; // The scrollview containing the views. Its content's size is constrained on its // superview's size. @interface IncognitoView : UIScrollView +// Initialize the view with a given `frame`. +// Set `showTopIncognitoImageAndTitle` to `YES` to have the top Incognito +// header (with a big icon and title) added at the top of the scroll view +// content. - (instancetype)initWithFrame:(CGRect)frame - URLLoader:(UrlLoadingBrowserAgent*)URLLoader; + showTopIncognitoImageAndTitle:(BOOL)showTopIncognitoImageAndTitle + NS_DESIGNATED_INITIALIZER; + +- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE; + +- (instancetype)initWithCoder:(NSCoder*)aDecoder NS_UNAVAILABLE; + +// Delegate to load urls in the current tab. +@property(nonatomic, weak) id<NewTabPageURLLoaderDelegate> URLLoaderDelegate; @end
diff --git a/ios/chrome/browser/ui/ntp/incognito_view.mm b/ios/chrome/browser/ui/ntp/incognito_view.mm index 04b425c..0b74ce29 100644 --- a/ios/chrome/browser/ui/ntp/incognito_view.mm +++ b/ios/chrome/browser/ui/ntp/incognito_view.mm
@@ -11,12 +11,12 @@ #include "ios/chrome/browser/application_context.h" #import "ios/chrome/browser/drag_and_drop/url_drag_drop_handler.h" #import "ios/chrome/browser/ui/icons/chrome_symbol.h" +#import "ios/chrome/browser/ui/ntp/new_tab_page_url_loader_delegate.h" #import "ios/chrome/browser/ui/toolbar/public/toolbar_constants.h" #import "ios/chrome/browser/ui/toolbar/public/toolbar_utils.h" #include "ios/chrome/browser/ui/util/rtl_geometry.h" #include "ios/chrome/browser/ui/util/ui_util.h" #import "ios/chrome/browser/ui/util/uikit_ui_util.h" -#import "ios/chrome/browser/url_loading/url_loading_browser_agent.h" #import "ios/chrome/browser/url_loading/url_loading_params.h" #import "ios/chrome/common/string_util.h" #import "ios/chrome/common/ui/colors/semantic_color_names.h" @@ -144,22 +144,22 @@ // forced to expand, centering the views in between them. NSArray<NSLayoutConstraint*>* _superViewConstraints; - // The UrlLoadingService associated with this view. - UrlLoadingBrowserAgent* _URLLoader; // weak - // Handles drop interactions for this view. URLDragDropHandler* _dragDropHandler; } + +- (instancetype)initWithFrame:(CGRect)frame { + return [self initWithFrame:frame showTopIncognitoImageAndTitle:YES]; +} + - (instancetype)initWithFrame:(CGRect)frame - URLLoader:(UrlLoadingBrowserAgent*)URLLoader { + showTopIncognitoImageAndTitle:(BOOL)showTopIncognitoImageAndTitle { self = [super initWithFrame:frame]; if (self) { - _URLLoader = URLLoader; - - _dragDropHandler = [[URLDragDropHandler alloc] init]; - _dragDropHandler.dropDelegate = self; - [self addInteraction:[[UIDropInteraction alloc] - initWithDelegate:_dragDropHandler]]; + _dragDropHandler = [[URLDragDropHandler alloc] init]; + _dragDropHandler.dropDelegate = self; + [self addInteraction:[[UIDropInteraction alloc] + initWithDelegate:_dragDropHandler]]; self.alwaysBounceVertical = YES; // The bottom safe area is taken care of with the bottomUnsafeArea guides. @@ -179,29 +179,31 @@ _stackView.alignment = UIStackViewAlignmentCenter; [_containerView addSubview:_stackView]; - // Incognito image. - UIImage* incognitoImage; - if (UseSymbols()) { - UIImageSymbolConfiguration* configuration = [UIImageSymbolConfiguration - configurationWithPointSize:kIncognitoSymbolImagePointSize - weight:UIImageSymbolWeightLight - scale:UIImageSymbolScaleMedium]; - incognitoImage = [CustomSymbolWithConfiguration( - kIncognitoCircleFillSymbol, configuration) - imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; - } else { - incognitoImage = [[UIImage imageNamed:@"incognito_icon"] - imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + if (showTopIncognitoImageAndTitle) { + // Incognito image. + UIImage* incognitoImage; + if (UseSymbols()) { + UIImageSymbolConfiguration* configuration = [UIImageSymbolConfiguration + configurationWithPointSize:kIncognitoSymbolImagePointSize + weight:UIImageSymbolWeightLight + scale:UIImageSymbolScaleMedium]; + incognitoImage = [CustomSymbolWithConfiguration( + kIncognitoCircleFillSymbol, configuration) + imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + } else { + incognitoImage = [[UIImage imageNamed:@"incognito_icon"] + imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + } + + UIImageView* incognitoImageView = + [[UIImageView alloc] initWithImage:incognitoImage]; + incognitoImageView.tintColor = [UIColor colorNamed:kTextPrimaryColor]; + [_stackView addArrangedSubview:incognitoImageView]; + [_stackView setCustomSpacing:kStackViewImageSpacing + afterView:incognitoImageView]; } - UIImageView* incognitoImageView = - [[UIImageView alloc] initWithImage:incognitoImage]; - incognitoImageView.tintColor = [UIColor colorNamed:kTextPrimaryColor]; - [_stackView addArrangedSubview:incognitoImageView]; - [_stackView setCustomSpacing:kStackViewImageSpacing - afterView:incognitoImageView]; - - [self addTextSections]; + [self addTextSectionsWithTitleShown:showTopIncognitoImageAndTitle]; // `topGuide` and `bottomGuide` exist to vertically position the stackview // inside the container scrollview. @@ -357,7 +359,7 @@ } - (void)view:(UIView*)view didDropURL:(const GURL&)URL atPoint:(CGPoint)point { - _URLLoader->Load(UrlLoadParams::InCurrentTab(URL)); + [self.URLLoaderDelegate loadURLInTab:URL]; } #pragma mark - Private @@ -373,25 +375,27 @@ // Triggers a navigation to the help page. - (void)learnMoreButtonPressed { - _URLLoader->Load(UrlLoadParams::InCurrentTab( - GetUrlWithLang(GURL(kLearnMoreIncognitoUrl)))); + [self.URLLoaderDelegate + loadURLInTab:GetUrlWithLang(GURL(kLearnMoreIncognitoUrl))]; } // Adds views containing the text of the incognito page to `_stackView`. -- (void)addTextSections { - UIColor* titleTextColor = [UIColor colorNamed:kTextPrimaryColor]; +- (void)addTextSectionsWithTitleShown:(BOOL)showTitle { UIColor* bodyTextColor = BodyTextColor(); UIColor* linkTextColor = [UIColor colorNamed:kBlueColor]; // Title. - UILabel* titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; - titleLabel.font = TitleFont(); - titleLabel.textColor = titleTextColor; - titleLabel.numberOfLines = 0; - titleLabel.textAlignment = NSTextAlignmentCenter; - titleLabel.text = l10n_util::GetNSString(IDS_NEW_TAB_OTR_TITLE); - titleLabel.adjustsFontForContentSizeCategory = YES; - [_stackView addArrangedSubview:titleLabel]; + if (showTitle) { + UIColor* titleTextColor = [UIColor colorNamed:kTextPrimaryColor]; + UILabel* titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + titleLabel.font = TitleFont(); + titleLabel.textColor = titleTextColor; + titleLabel.numberOfLines = 0; + titleLabel.textAlignment = NSTextAlignmentCenter; + titleLabel.text = l10n_util::GetNSString(IDS_NEW_TAB_OTR_TITLE); + titleLabel.adjustsFontForContentSizeCategory = YES; + [_stackView addArrangedSubview:titleLabel]; + } // The Subtitle and Learn More link have no vertical spacing between them, // so they are embedded in a separate stack view.
diff --git a/ios/chrome/browser/ui/ntp/incognito_view_controller.h b/ios/chrome/browser/ui/ntp/incognito_view_controller.h index 9719e53..6cbb35f 100644 --- a/ios/chrome/browser/ui/ntp/incognito_view_controller.h +++ b/ios/chrome/browser/ui/ntp/incognito_view_controller.h
@@ -16,6 +16,9 @@ // Init with the given loader object. `loader` may be nil, but isn't // retained so it must outlive this controller. +// TODO(crbug.com/1335402): View controllers should not have access to +// model-layer objects. Create a mediator to connect model-layer class +// `UrlLoadingBrowserAgent` to the view controller. - (instancetype)initWithUrlLoader:(UrlLoadingBrowserAgent*)URLLoader; @end
diff --git a/ios/chrome/browser/ui/ntp/incognito_view_controller.mm b/ios/chrome/browser/ui/ntp/incognito_view_controller.mm index fb9e554c..7635b073 100644 --- a/ios/chrome/browser/ui/ntp/incognito_view_controller.mm +++ b/ios/chrome/browser/ui/ntp/incognito_view_controller.mm
@@ -32,6 +32,9 @@ @implementation IncognitoViewController { // The UrlLoadingService associated with this view. + // TODO(crbug.com/1335402): View controllers should not have access to + // model-layer objects. Create a mediator to connect model-layer class + // `UrlLoadingBrowserAgent` to the view controller. UrlLoadingBrowserAgent* _URLLoader; // weak } @@ -48,13 +51,16 @@ if (base::FeatureList::IsEnabled(kIncognitoNtpRevamp)) { RevampedIncognitoView* view = - [[RevampedIncognitoView alloc] initWithFrame:self.view.bounds]; + [[RevampedIncognitoView alloc] initWithFrame:self.view.bounds + showTopIncognitoImageAndTitle:YES]; view.URLLoaderDelegate = self; self.incognitoView = view; } else { - self.incognitoView = [[IncognitoView alloc] initWithFrame:self.view.bounds - URLLoader:_URLLoader]; + IncognitoView* view = [[IncognitoView alloc] initWithFrame:self.view.bounds + showTopIncognitoImageAndTitle:YES]; + view.URLLoaderDelegate = self; + self.incognitoView = view; } self.incognitoView.accessibilityIdentifier = kNTPIncognitoViewIdentifier;
diff --git a/ios/chrome/browser/ui/ntp/new_tab_page_url_loader_delegate.h b/ios/chrome/browser/ui/ntp/new_tab_page_url_loader_delegate.h index 9d2ae26..8cf1e85 100644 --- a/ios/chrome/browser/ui/ntp/new_tab_page_url_loader_delegate.h +++ b/ios/chrome/browser/ui/ntp/new_tab_page_url_loader_delegate.h
@@ -5,6 +5,8 @@ #ifndef IOS_CHROME_BROWSER_UI_NTP_NEW_TAB_PAGE_URL_LOADER_DELEGATE_H_ #define IOS_CHROME_BROWSER_UI_NTP_NEW_TAB_PAGE_URL_LOADER_DELEGATE_H_ +class GURL; + // Delegate for new tab page to load urls. @protocol NewTabPageURLLoaderDelegate
diff --git a/ios/chrome/browser/ui/ntp/revamped_incognito_view.h b/ios/chrome/browser/ui/ntp/revamped_incognito_view.h index 5e9cdfbc..d747be62 100644 --- a/ios/chrome/browser/ui/ntp/revamped_incognito_view.h +++ b/ios/chrome/browser/ui/ntp/revamped_incognito_view.h
@@ -13,7 +13,17 @@ // superview's size. @interface RevampedIncognitoView : UIScrollView -- (instancetype)initWithFrame:(CGRect)frame; +// Initialize the view with a given `frame`. +// Set `showTopIncognitoImageAndTitle` to `YES` to have the top Incognito +// header (with a big icon and title) added at the top of the scroll view +// content. +- (instancetype)initWithFrame:(CGRect)frame + showTopIncognitoImageAndTitle:(BOOL)showTopIncognitoImageAndTitle + NS_DESIGNATED_INITIALIZER; + +- (instancetype)initWithFrame:(CGRect)frame NS_UNAVAILABLE; + +- (instancetype)initWithCoder:(NSCoder*)aDecoder NS_UNAVAILABLE; // Delegate to load urls in the current tab. @property(nonatomic, weak) id<NewTabPageURLLoaderDelegate> URLLoaderDelegate;
diff --git a/ios/chrome/browser/ui/ntp/revamped_incognito_view.mm b/ios/chrome/browser/ui/ntp/revamped_incognito_view.mm index c337001..5f4eb83 100644 --- a/ios/chrome/browser/ui/ntp/revamped_incognito_view.mm +++ b/ios/chrome/browser/ui/ntp/revamped_incognito_view.mm
@@ -181,7 +181,13 @@ // Handles drop interactions for this view. URLDragDropHandler* _dragDropHandler; } + - (instancetype)initWithFrame:(CGRect)frame { + return [self initWithFrame:frame showTopIncognitoImageAndTitle:YES]; +} + +- (instancetype)initWithFrame:(CGRect)frame + showTopIncognitoImageAndTitle:(BOOL)showTopIncognitoImageAndTitle { self = [super initWithFrame:frame]; if (self) { _dragDropHandler = [[URLDragDropHandler alloc] init]; @@ -203,29 +209,31 @@ self.stackView.alignment = UIStackViewAlignmentCenter; [self.containerView addSubview:self.stackView]; - // Incognito icon. - UIImage* incognitoImage; - if (UseSymbols()) { - UIImageSymbolConfiguration* configuration = [UIImageSymbolConfiguration - configurationWithPointSize:kIncognitoSymbolImagePointSize - weight:UIImageSymbolWeightLight - scale:UIImageSymbolScaleMedium]; - incognitoImage = [CustomSymbolWithConfiguration( - kIncognitoCircleFillSymbol, configuration) - imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; - } else { - incognitoImage = [[UIImage imageNamed:@"incognito_icon"] - imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + if (showTopIncognitoImageAndTitle) { + // Incognito icon. + UIImage* incognitoImage; + if (UseSymbols()) { + UIImageSymbolConfiguration* configuration = [UIImageSymbolConfiguration + configurationWithPointSize:kIncognitoSymbolImagePointSize + weight:UIImageSymbolWeightLight + scale:UIImageSymbolScaleMedium]; + incognitoImage = [CustomSymbolWithConfiguration( + kIncognitoCircleFillSymbol, configuration) + imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + } else { + incognitoImage = [[UIImage imageNamed:@"incognito_icon"] + imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + } + + UIImageView* incognitoImageView = + [[UIImageView alloc] initWithImage:incognitoImage]; + incognitoImageView.tintColor = [UIColor colorNamed:kTextPrimaryColor]; + [self.stackView addArrangedSubview:incognitoImageView]; + [self.stackView setCustomSpacing:kStackViewImageSpacing + afterView:incognitoImageView]; } - UIImageView* incognitoImageView = - [[UIImageView alloc] initWithImage:incognitoImage]; - incognitoImageView.tintColor = [UIColor colorNamed:kTextPrimaryColor]; - [self.stackView addArrangedSubview:incognitoImageView]; - [self.stackView setCustomSpacing:kStackViewImageSpacing - afterView:incognitoImageView]; - - [self addTextSections]; + [self addTextSectionsWithTitleShown:showTopIncognitoImageAndTitle]; // `topGuide` and `bottomGuide` exist to vertically position the stackview // inside the container scrollview. @@ -328,18 +336,20 @@ #pragma mark - Private // Adds views containing the text of the incognito page to `self.stackView`. -- (void)addTextSections { - UIColor* titleTextColor = [UIColor colorNamed:kTextPrimaryColor]; +- (void)addTextSectionsWithTitleShown:(BOOL)showTitle { + if (showTitle) { + UIColor* titleTextColor = [UIColor colorNamed:kTextPrimaryColor]; - // Title. - UILabel* titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; - titleLabel.font = TitleFont(); - titleLabel.textColor = titleTextColor; - titleLabel.numberOfLines = 0; - titleLabel.textAlignment = NSTextAlignmentCenter; - titleLabel.text = l10n_util::GetNSString(IDS_REVAMPED_INCOGNITO_NTP_TITLE); - titleLabel.adjustsFontForContentSizeCategory = YES; - [self.stackView addArrangedSubview:titleLabel]; + // Title. + UILabel* titleLabel = [[UILabel alloc] initWithFrame:CGRectZero]; + titleLabel.font = TitleFont(); + titleLabel.textColor = titleTextColor; + titleLabel.numberOfLines = 0; + titleLabel.textAlignment = NSTextAlignmentCenter; + titleLabel.text = l10n_util::GetNSString(IDS_REVAMPED_INCOGNITO_NTP_TITLE); + titleLabel.adjustsFontForContentSizeCategory = YES; + [self.stackView addArrangedSubview:titleLabel]; + } // Does section. UIView* doesSection = [self
diff --git a/ios/chrome/browser/ui/settings/privacy/BUILD.gn b/ios/chrome/browser/ui/settings/privacy/BUILD.gn index 5ef3344..30089b3 100644 --- a/ios/chrome/browser/ui/settings/privacy/BUILD.gn +++ b/ios/chrome/browser/ui/settings/privacy/BUILD.gn
@@ -146,7 +146,6 @@ "//ios/chrome/browser/ui/table_view:utils", "//ios/chrome/browser/ui/table_view/cells", "//ios/chrome/test:test_support", - "//ios/components/security_interstitials/https_only_mode:feature", "//ios/web/public/test", "//testing/gtest", "//third_party/ocmock:ocmock",
diff --git a/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller_unittest.mm b/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller_unittest.mm index 349c906d..f7cb5c52 100644 --- a/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller_unittest.mm +++ b/ios/chrome/browser/ui/settings/privacy/privacy_table_view_controller_unittest.mm
@@ -32,7 +32,6 @@ #include "ios/chrome/grit/ios_chromium_strings.h" #include "ios/chrome/grit/ios_strings.h" #include "ios/chrome/test/ios_chrome_scoped_testing_local_state.h" -#import "ios/components/security_interstitials/https_only_mode/feature.h" #include "ios/web/public/test/web_task_environment.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/l10n/l10n_util.h" @@ -64,8 +63,6 @@ PrivacyTableViewControllerTestConfigEnhancedProtectionEnabled = 1 << 0, // Tests should run with Third-party intents in Incognito flag enabled. PrivacyTableViewControllerTestConfig3PIntentsInIncognitoEnabled = 1 << 1, - // Tests should run with HTTPS-Only Mode flag enabled. - PrivacyTableViewControllerTestConfigHttpsOnlyModeSettingEnabled = 1 << 2, }; // `ScopedFeatureList` wrapper so `PrivacyTableViewControllerTest` can ensure @@ -113,15 +110,6 @@ enabledDisabledFeatures.second.push_back(kIOS3PIntentsInIncognito); } - if (GetParam() & - PrivacyTableViewControllerTestConfigHttpsOnlyModeSettingEnabled) { - enabledDisabledFeatures.first.push_back( - security_interstitials::features::kHttpsOnlyMode); - } else { - enabledDisabledFeatures.second.push_back( - security_interstitials::features::kHttpsOnlyMode); - } - return enabledDisabledFeatures; }
diff --git a/ios/chrome/common/ui/promo_style/promo_style_view_controller.h b/ios/chrome/common/ui/promo_style/promo_style_view_controller.h index b608a3e..ae527c2 100644 --- a/ios/chrome/common/ui/promo_style/promo_style_view_controller.h +++ b/ios/chrome/common/ui/promo_style/promo_style_view_controller.h
@@ -20,6 +20,15 @@ // NO, the banner will be of normal height (25% of view height). Defaults to NO. @property(nonatomic, assign) BOOL isTallBanner; +// When set to NO, the top of the banner will be constrained to the top of the +// view and its height will be 25% or 35% of the view height depending on the +// value of `isTallBanner`. When set to YES, the banner will be constrained so +// as to fill the top space (horizontally and vertically) while preserving +// aspect ratio and constraining the bottom of the image so as to ensure 25% or +// 35% of the top space of the view is covered. Defaults to NO. +// Must be set before the view is loaded. +@property(nonatomic, assign) BOOL shouldBannerFillTopSpace; + // The label of the headline below the image. Must be set before the view is // loaded. This is declared public so the accessibility can be enabled. @property(nonatomic, strong) UILabel* titleLabel;
diff --git a/ios/chrome/common/ui/promo_style/promo_style_view_controller.mm b/ios/chrome/common/ui/promo_style/promo_style_view_controller.mm index b07ab4c..633a9d5 100644 --- a/ios/chrome/common/ui/promo_style/promo_style_view_controller.mm +++ b/ios/chrome/common/ui/promo_style/promo_style_view_controller.mm
@@ -198,12 +198,13 @@ [self.scrollContentView.heightAnchor constraintGreaterThanOrEqualToAnchor:self.scrollView.heightAnchor], - // Banner image constraints. Scale the image vertically so its height takes - // a certain % of the view height while maintaining its aspect ratio. Don't - // constrain the width so that the image extends all the way to the edges of - // the view, outside the scrollContentView. + // Common banner image constraints, further constraints are added below + // depending on the value of `self.shouldBannerFillTopSpace`. + // The first constraint ensures bounciness of the scroll view does not lead + // to the user being able to see the void space above the banner. + // The second ensures the banner is well centered within the view. [self.imageView.topAnchor - constraintEqualToAnchor:self.scrollContentView.topAnchor], + constraintLessThanOrEqualToAnchor:self.view.topAnchor], [self.imageView.centerXAnchor constraintEqualToAnchor:self.view.centerXAnchor], @@ -246,6 +247,29 @@ constraintEqualToAnchor:widthLayoutGuide.trailingAnchor], ]]; + // Banner image constraints. + if (!self.shouldBannerFillTopSpace) { + // Scale the image vertically so its height takes + // a certain % of the view height while maintaining its aspect ratio. Don't + // constrain the width so that the image extends all the way to the edges of + // the view, outside the scrollContentView. + [NSLayoutConstraint activateConstraints:@[ + [self.imageView.topAnchor + constraintEqualToAnchor:self.scrollContentView.topAnchor], + ]]; + } else { + NSLayoutDimension* dimFromToOfViewToBottomOfBanner = [self.view.topAnchor + anchorWithOffsetToAnchor:self.imageView.bottomAnchor]; + [NSLayoutConstraint activateConstraints:@[ + // Constrain bottom of banner to top of view + C * height of view + // where C = isTallBanner ? tallMultiplier : defaultMultiplier. + [dimFromToOfViewToBottomOfBanner + constraintEqualToAnchor:self.view.heightAnchor + multiplier:self.isTallBanner ? kTallBannerMultiplier + : kDefaultBannerMultiplier], + ]]; + } + self.buttonsVerticalAnchorConstraints = @[ [self.scrollView.bottomAnchor constraintEqualToAnchor:self.actionStackView.topAnchor @@ -601,12 +625,23 @@ - (CGSize)computeBannerImageSize { CGFloat bannerMultiplier = self.isTallBanner ? kTallBannerMultiplier : kDefaultBannerMultiplier; + CGFloat bannerAspectRatio = + [self bannerImage].size.width / [self bannerImage].size.height; - CGFloat destinationHeight = - roundf(self.view.bounds.size.height * bannerMultiplier); - CGFloat destinationWidth = - roundf([self bannerImage].size.width / [self bannerImage].size.height * - destinationHeight); + CGFloat destinationHeight = 0; + CGFloat destinationWidth = 0; + + if (!self.shouldBannerFillTopSpace) { + destinationHeight = roundf(self.view.bounds.size.height * bannerMultiplier); + destinationWidth = roundf(bannerAspectRatio * destinationHeight); + } else { + CGFloat minBannerWidth = self.view.bounds.size.width; + CGFloat minBannerHeight = self.view.bounds.size.height * bannerMultiplier; + destinationWidth = + roundf(fmax(minBannerWidth, bannerAspectRatio * minBannerHeight)); + destinationHeight = roundf(bannerAspectRatio * destinationWidth); + } + CGSize newSize = CGSizeMake(destinationWidth, destinationHeight); return newSize; }
diff --git a/ios/chrome/test/data/policy/policy_test_cases.json b/ios/chrome/test/data/policy/policy_test_cases.json index a062099..72f0165 100644 --- a/ios/chrome/test/data/policy/policy_test_cases.json +++ b/ios/chrome/test/data/policy/policy_test_cases.json
@@ -212,6 +212,9 @@ "CloudPolicyOverridesPlatformPolicy": { "reason_for_missing_test": "This policy has no pref as it is only directly read by the policy system." }, + "CloudUserPolicyOverridesCloudMachinePolicy": { + "reason_for_missing_test": "This policy has no pref as it is only directly read by the policy system." + }, "ComponentUpdatesEnabled": { "os": [ "ios" @@ -442,6 +445,15 @@ } ] }, + "PolicyAtomicGroupsEnabled": { + "reason_for_missing_test": "This policy has no pref as it is only directly read by the policy system." + }, + "PolicyDictionaryMultipleSourceMergeList": { + "reason_for_missing_test": "This policy has no pref as it is only directly read by the policy system." + }, + "PolicyListMultipleSourceMergeList": { + "reason_for_missing_test": "This policy has no pref as it is only directly read by the policy system." + }, "PolicyRefreshRate": { "os": [ "ios"
diff --git a/ios/components/security_interstitials/https_only_mode/feature.cc b/ios/components/security_interstitials/https_only_mode/feature.cc index 93b03fdb6..79f261d 100644 --- a/ios/components/security_interstitials/https_only_mode/feature.cc +++ b/ios/components/security_interstitials/https_only_mode/feature.cc
@@ -8,7 +8,7 @@ namespace features { const base::Feature kHttpsOnlyMode{"HttpsOnlyMode", - base::FEATURE_ENABLED_BY_DEFAULT}; + base::FEATURE_DISABLED_BY_DEFAULT}; } // namespace features } // namespace security_interstitials
diff --git a/ios/components/security_interstitials/https_only_mode/feature.h b/ios/components/security_interstitials/https_only_mode/feature.h index 2d17ddff..8ba9d64c 100644 --- a/ios/components/security_interstitials/https_only_mode/feature.h +++ b/ios/components/security_interstitials/https_only_mode/feature.h
@@ -10,8 +10,7 @@ namespace security_interstitials { namespace features { -// Enables the HTTPS-Only mode UI setting on iOS. The user has to enable -// the UI setting under "Privacy and Security" to use HTTPS-Only Mode. +// Enables HTTPS-Only mode upgrades on iOS. extern const base::Feature kHttpsOnlyMode; } // namespace features
diff --git a/media/base/video_frame.cc b/media/base/video_frame.cc index 8e906c8..921dbbd68 100644 --- a/media/base/video_frame.cc +++ b/media/base/video_frame.cc
@@ -1604,8 +1604,8 @@ // These values were chosen to mirror ffmpeg's get_video_buffer(). // TODO(dalecurtis): This should be configurable; eventually ffmpeg wants // us to use av_cpu_max_align(), but... for now, they just hard-code 32. - const size_t height = - base::bits::AlignUp(rows(plane), kFrameAddressAlignment); + const size_t height = base::bits::AlignUp(static_cast<size_t>(rows(plane)), + kFrameAddressAlignment); const size_t width = std::abs(stride(plane)); plane_size[plane] = width * height; }
diff --git a/media/base/video_frame.h b/media/base/video_frame.h index 08a48d7d..ed16de2 100644 --- a/media/base/video_frame.h +++ b/media/base/video_frame.h
@@ -54,12 +54,11 @@ class MEDIA_EXPORT VideoFrame : public base::RefCountedThreadSafe<VideoFrame> { public: - enum { - kFrameSizeAlignment = 16, - kFrameSizePadding = 16, + static constexpr size_t kFrameSizeAlignment = 16; + static constexpr size_t kFrameSizePadding = 16; - kFrameAddressAlignment = VideoFrameLayout::kBufferAddressAlignment - }; + static constexpr size_t kFrameAddressAlignment = + VideoFrameLayout::kBufferAddressAlignment; enum { kMaxPlanes = 4,
diff --git a/media/base/video_frame_unittest.cc b/media/base/video_frame_unittest.cc index cc1b210..f1265c1 100644 --- a/media/base/video_frame_unittest.cc +++ b/media/base/video_frame_unittest.cc
@@ -174,10 +174,10 @@ yv12_frame->stride(VideoFrame::kVPlane)); ASSERT_EQ( yv12_frame->coded_size().width() & (VideoFrame::kFrameSizeAlignment - 1), - 0); + 0u); ASSERT_EQ( yv12_frame->coded_size().height() & (VideoFrame::kFrameSizeAlignment - 1), - 0); + 0u); size_t bytes_per_row = yv12_frame->coded_size().width() * 4u; uint8_t* rgb_data = reinterpret_cast<uint8_t*>(
diff --git a/media/capture/video/linux/fake_v4l2_impl.cc b/media/capture/video/linux/fake_v4l2_impl.cc index 94e9af7..da4d7714 100644 --- a/media/capture/video/linux/fake_v4l2_impl.cc +++ b/media/capture/video/linux/fake_v4l2_impl.cc
@@ -38,7 +38,7 @@ __u32 RoundUpToMultipleOfPageSize(__u32 size) { CHECK(base::bits::IsPowerOfTwo(getpagesize())); - return base::bits::AlignUp(size, getpagesize()); + return base::bits::AlignUp(size, base::checked_cast<__u32>(getpagesize())); } struct FakeV4L2Buffer {
diff --git a/media/filters/dav1d_video_decoder.cc b/media/filters/dav1d_video_decoder.cc index 830b6bd..40daa6f 100644 --- a/media/filters/dav1d_video_decoder.cc +++ b/media/filters/dav1d_video_decoder.cc
@@ -387,7 +387,7 @@ const bool needs_fake_uv_planes = pic->p.layout == DAV1D_PIXEL_LAYOUT_I400; if (needs_fake_uv_planes) { // UV planes are half the size of the Y plane. - uv_plane_stride = base::bits::AlignUp(pic->stride[0] / 2, 2); + uv_plane_stride = base::bits::AlignUp(pic->stride[0] / 2, ptrdiff_t{2}); const auto uv_plane_height = (pic->p.h + 1) / 2; const size_t size_needed = uv_plane_stride * uv_plane_height;
diff --git a/media/filters/gav1_video_decoder.cc b/media/filters/gav1_video_decoder.cc index 56b2c69..79203e5f 100644 --- a/media/filters/gav1_video_decoder.cc +++ b/media/filters/gav1_video_decoder.cc
@@ -114,7 +114,8 @@ // VideoFramePool creates frames with a fixed alignment of // VideoFrame::kFrameAddressAlignment. If libgav1 requests a larger // alignment, it cannot be supported. - CHECK_LE(stride_alignment, VideoFrame::kFrameAddressAlignment); + CHECK_LE(static_cast<size_t>(stride_alignment), + VideoFrame::kFrameAddressAlignment); const VideoPixelFormat format = Libgav1ImageFormatToVideoPixelFormat(image_format, bitdepth);
diff --git a/media/filters/h264_bitstream_buffer.cc b/media/filters/h264_bitstream_buffer.cc index 7d8126b..48c20e6 100644 --- a/media/filters/h264_bitstream_buffer.cc +++ b/media/filters/h264_bitstream_buffer.cc
@@ -45,7 +45,7 @@ if (bits_in_reg == 0) return; - size_t bytes_in_reg = base::bits::AlignUp(bits_in_reg, 8) / 8; + size_t bytes_in_reg = base::bits::AlignUp(bits_in_reg, size_t{8}) / 8; reg_ <<= (kRegBitSize - bits_in_reg); // Convert to MSB and append as such to the stream.
diff --git a/media/filters/h264_bitstream_buffer_unittest.cc b/media/filters/h264_bitstream_buffer_unittest.cc index 374d0c8..4f5e9cf 100644 --- a/media/filters/h264_bitstream_buffer_unittest.cc +++ b/media/filters/h264_bitstream_buffer_unittest.cc
@@ -40,7 +40,7 @@ uint64_t num_bits = GetParam(); // TODO(posciak): Tests for >64 bits. ASSERT_LE(num_bits, 64u); - uint64_t num_bytes = base::bits::AlignUp(num_bits, 8) / 8; + uint64_t num_bytes = base::bits::AlignUp(num_bits, uint64_t{8}) / 8; b->AppendBits(num_bits, kTestPattern); b->FlushReg(); @@ -60,7 +60,7 @@ TEST_F(H264BitstreamBufferAppendBitsTest, VerifyFlushAndBitsInBuffer) { auto b = base::MakeRefCounted<H264BitstreamBuffer>(); uint64_t num_bits = 20; - uint64_t num_bytes = base::bits::AlignUp(num_bits, 8) / 8; + uint64_t num_bytes = base::bits::AlignUp(num_bits, uint64_t{8}) / 8; b->AppendBits(num_bits, kTestPattern); b->Flush();
diff --git a/media/gpu/test/video_frame_helpers.cc b/media/gpu/test/video_frame_helpers.cc index 409e1b7..535ef2f 100644 --- a/media/gpu/test/video_frame_helpers.cc +++ b/media/gpu/test/video_frame_helpers.cc
@@ -477,7 +477,8 @@ VideoFrame::RowBytes(i, pixel_format, dimension.width()); const size_t rows = VideoFrame::Rows(i, pixel_format, dimension.height()); const size_t plane_size = stride * rows; - const size_t aligned_size = base::bits::AlignUp(plane_size, alignment); + const size_t aligned_size = + base::bits::AlignUp(plane_size, size_t{alignment}); planes[i].stride = stride; planes[i].offset = offset; planes[i].size = aligned_size;
diff --git a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc index bdcc3a74..3d28ebb 100644 --- a/media/gpu/v4l2/v4l2_video_encode_accelerator.cc +++ b/media/gpu/v4l2/v4l2_video_encode_accelerator.cc
@@ -1823,7 +1823,7 @@ // Set H.264 output level from config. Use Level 4.0 as fallback default. uint8_t h264_level = config.h264_output_level.value_or(H264SPS::kLevelIDC4p0); - constexpr size_t kH264MacroblockSizeInPixels = 16; + constexpr int kH264MacroblockSizeInPixels = 16; const uint32_t framerate = config.initial_framerate.value_or( VideoEncodeAccelerator::kDefaultFramerate); const uint32_t mb_width =
diff --git a/media/gpu/vaapi/h264_vaapi_video_encoder_delegate.cc b/media/gpu/vaapi/h264_vaapi_video_encoder_delegate.cc index 88e539d..904767443 100644 --- a/media/gpu/vaapi/h264_vaapi_video_encoder_delegate.cc +++ b/media/gpu/vaapi/h264_vaapi_video_encoder_delegate.cc
@@ -237,7 +237,7 @@ DVLOGF(1) << "The pixel sizes are not even: " << visible_size_.ToString(); return false; } - constexpr size_t kH264MacroblockSizeInPixels = 16; + constexpr int kH264MacroblockSizeInPixels = 16; coded_size_ = gfx::Size( base::bits::AlignUp(visible_size_.width(), kH264MacroblockSizeInPixels), base::bits::AlignUp(visible_size_.height(), kH264MacroblockSizeInPixels));
diff --git a/media/parsers/webp_parser.cc b/media/parsers/webp_parser.cc index 8aec632..dda7ea1 100644 --- a/media/parsers/webp_parser.cc +++ b/media/parsers/webp_parser.cc
@@ -104,7 +104,7 @@ // Check that the size of the encoded data is consistent. const size_t vp8_padded_frame_size = - base::bits::AlignUp(base::strict_cast<size_t>(vp8_frame_size), 2u); + base::bits::AlignUp(size_t{vp8_frame_size}, size_t{2}); if (encoded_data.size() - kWebPFileAndVp8ChunkHeaderSizeInBytes != vp8_padded_frame_size) { return nullptr;
diff --git a/media/video/gpu_memory_buffer_video_frame_pool.cc b/media/video/gpu_memory_buffer_video_frame_pool.cc index c9c3f38..27e5cd57 100644 --- a/media/video/gpu_memory_buffer_video_frame_pool.cc +++ b/media/video/gpu_memory_buffer_video_frame_pool.cc
@@ -756,16 +756,16 @@ DCHECK_EQ(video_frame->visible_rect().x() % 2, 0); DCHECK_EQ(video_frame->visible_rect().y() % 2, 0); if (!gfx::IsOddWidthMultiPlanarBuffersAllowed()) - width = base::bits::AlignUp(width, 2); + width = base::bits::AlignUp(width, size_t{2}); if (!gfx::IsOddHeightMultiPlanarBuffersAllowed()) - height = base::bits::AlignUp(height, 2); + height = base::bits::AlignUp(height, size_t{2}); output = gfx::Size(width, height); break; case GpuVideoAcceleratorFactories::OutputFormat::XR30: case GpuVideoAcceleratorFactories::OutputFormat::XB30: case GpuVideoAcceleratorFactories::OutputFormat::RGBA: case GpuVideoAcceleratorFactories::OutputFormat::BGRA: - output = gfx::Size(base::bits::AlignUp(width, 2), height); + output = gfx::Size(base::bits::AlignUp(width, size_t{2}), height); break; case GpuVideoAcceleratorFactories::OutputFormat::UNDEFINED: NOTREACHED();
diff --git a/net/data/cache_tests/good_2_0/contents.txt b/net/data/cache_tests/good_2_0/contents.txt new file mode 100644 index 0000000..4b987fc5 --- /dev/null +++ b/net/data/cache_tests/good_2_0/contents.txt
@@ -0,0 +1,38 @@ +This is a sample valid cache in 2.0 format. +This was produced before the 3.0 format change by the following test: + +TEST_F(DiskCacheBackendTest, CreateCorrect) { + const char* kKey = "https://example.org/data"; + cache_path_ = base::FilePath("/tmp/cache-correct-2.0"); + CleanupCacheDir(); + CHECK(base::CreateDirectory(cache_path_)); + + SetMaxSize(16*1024); + InitCache(); + + disk_cache::Entry* entry = nullptr; + ASSERT_THAT(CreateEntry(kKey, &entry), IsOk()); + + const int kBufSize = 1234; + scoped_refptr<net::IOBuffer> buffer = + base::MakeRefCounted<net::IOBuffer>(kBufSize); + CacheTestFillBuffer(buffer->data(), kBufSize, /*no_nulls=*/false); + + EXPECT_EQ(kBufSize, WriteData(entry, /*index=*/1, /*offset=*/0, buffer.get(), + /*len=*/kBufSize, /*truncate=*/false)); + entry->Close(); +} + +With the following patch applied: +--- a/net/disk_cache/blockfile/block_files.cc ++++ b/net/disk_cache/blockfile/block_files.cc +@@ -487,7 +487,7 @@ bool BlockFiles::GrowBlockFile(MappedFile* file, BlockFileHeader* header) { + + ScopedFlush flush(file); + DCHECK(!header->empty[3]); +- int new_size = header->max_entries + 1024; ++ int new_size = header->max_entries + 64; + if (new_size > kMaxBlocks) + new_size = kMaxBlocks; + +To keep the data_ file size down somewhat.
diff --git a/net/data/cache_tests/good_2_0/data_0 b/net/data/cache_tests/good_2_0/data_0 new file mode 100644 index 0000000..8049b0c5 --- /dev/null +++ b/net/data/cache_tests/good_2_0/data_0 Binary files differ
diff --git a/net/data/cache_tests/good_2_0/data_1 b/net/data/cache_tests/good_2_0/data_1 new file mode 100644 index 0000000..6584d2d4 --- /dev/null +++ b/net/data/cache_tests/good_2_0/data_1 Binary files differ
diff --git a/net/data/cache_tests/good_2_0/data_2 b/net/data/cache_tests/good_2_0/data_2 new file mode 100644 index 0000000..fc272a5 --- /dev/null +++ b/net/data/cache_tests/good_2_0/data_2 Binary files differ
diff --git a/net/data/cache_tests/good_2_0/data_3 b/net/data/cache_tests/good_2_0/data_3 new file mode 100644 index 0000000..5eec9735 --- /dev/null +++ b/net/data/cache_tests/good_2_0/data_3 Binary files differ
diff --git a/net/data/cache_tests/good_2_0/index b/net/data/cache_tests/good_2_0/index new file mode 100644 index 0000000..3da72c4 --- /dev/null +++ b/net/data/cache_tests/good_2_0/index Binary files differ
diff --git a/net/data/cache_tests/good_2_1/contents.txt b/net/data/cache_tests/good_2_1/contents.txt new file mode 100644 index 0000000..fddaf89 --- /dev/null +++ b/net/data/cache_tests/good_2_1/contents.txt
@@ -0,0 +1,39 @@ +This is a sample valid cache in 2.1 format. +This was produced before the 3.0 format change by the following test: + +TEST_F(DiskCacheBackendTest, CreateCorrect21) { + const char* kKey = "https://example.org/data"; + cache_path_ = base::FilePath("/tmp/cache-correct-2.1"); + CleanupCacheDir(); + CHECK(base::CreateDirectory(cache_path_)); + + SetMaxSize(16*1024); + SetNewEviction(); + InitCache(); + + disk_cache::Entry* entry = nullptr; + ASSERT_THAT(CreateEntry(kKey, &entry), IsOk()); + + const int kBufSize = 1234; + scoped_refptr<net::IOBuffer> buffer = + base::MakeRefCounted<net::IOBuffer>(kBufSize); + CacheTestFillBuffer(buffer->data(), kBufSize, /*no_nulls=*/false); + + EXPECT_EQ(kBufSize, WriteData(entry, /*index=*/1, /*offset=*/0, buffer.get(), + /*len=*/kBufSize, /*truncate=*/false)); + entry->Close(); +} + +With the following patch applied: +--- a/net/disk_cache/blockfile/block_files.cc ++++ b/net/disk_cache/blockfile/block_files.cc +@@ -487,7 +487,7 @@ bool BlockFiles::GrowBlockFile(MappedFile* file, BlockFileHeader* header) { + + ScopedFlush flush(file); + DCHECK(!header->empty[3]); +- int new_size = header->max_entries + 1024; ++ int new_size = header->max_entries + 64; + if (new_size > kMaxBlocks) + new_size = kMaxBlocks; + +To keep the data_ file size down somewhat.
diff --git a/net/data/cache_tests/good_2_1/data_0 b/net/data/cache_tests/good_2_1/data_0 new file mode 100644 index 0000000..509eaec --- /dev/null +++ b/net/data/cache_tests/good_2_1/data_0 Binary files differ
diff --git a/net/data/cache_tests/good_2_1/data_1 b/net/data/cache_tests/good_2_1/data_1 new file mode 100644 index 0000000..3a4beb1 --- /dev/null +++ b/net/data/cache_tests/good_2_1/data_1 Binary files differ
diff --git a/net/data/cache_tests/good_2_1/data_2 b/net/data/cache_tests/good_2_1/data_2 new file mode 100644 index 0000000..c614809 --- /dev/null +++ b/net/data/cache_tests/good_2_1/data_2 Binary files differ
diff --git a/net/data/cache_tests/good_2_1/data_3 b/net/data/cache_tests/good_2_1/data_3 new file mode 100644 index 0000000..5eec9735 --- /dev/null +++ b/net/data/cache_tests/good_2_1/data_3 Binary files differ
diff --git a/net/data/cache_tests/good_2_1/index b/net/data/cache_tests/good_2_1/index new file mode 100644 index 0000000..c0f3852 --- /dev/null +++ b/net/data/cache_tests/good_2_1/index Binary files differ
diff --git a/net/disk_cache/backend_unittest.cc b/net/disk_cache/backend_unittest.cc index e7c8ba9..16ac64f 100644 --- a/net/disk_cache/backend_unittest.cc +++ b/net/disk_cache/backend_unittest.cc
@@ -222,6 +222,7 @@ void BackendOpenOrCreateEntry(); void BackendDeadOpenNextEntry(); void BackendIteratorConcurrentDoom(); + void BackendValidateMigrated(); }; void DiskCacheBackendTest::CreateKeyAndCheck(disk_cache::Backend* cache, @@ -5447,3 +5448,44 @@ entry->Doom(); entry->Close(); } + +void DiskCacheBackendTest::BackendValidateMigrated() { + // Blockfile 3.0 migration test. + DisableFirstCleanup(); // started from copied dir, not cleaned dir. + InitCache(); + + // The total size comes straight from the headers, and is expected to be 1258 + // for either set of testdata. + EXPECT_EQ(1258, CalculateSizeOfAllEntries()); + EXPECT_EQ(1, cache_->GetEntryCount()); + + disk_cache::Entry* entry = nullptr; + ASSERT_THAT(OpenEntry("https://example.org/data", &entry), IsOk()); + + // Size of the actual payload. + EXPECT_EQ(1234, entry->GetDataSize(1)); + + entry->Close(); +} + +TEST_F(DiskCacheBackendTest, BlockfileMigrate20) { + ASSERT_TRUE(CopyTestCache("good_2_0")); + BackendValidateMigrated(); +} + +TEST_F(DiskCacheBackendTest, BlockfileMigrate21) { + ASSERT_TRUE(CopyTestCache("good_2_1")); + BackendValidateMigrated(); +} + +TEST_F(DiskCacheBackendTest, BlockfileMigrateNewEviction20) { + ASSERT_TRUE(CopyTestCache("good_2_0")); + SetNewEviction(); + BackendValidateMigrated(); +} + +TEST_F(DiskCacheBackendTest, BlockfileMigrateNewEviction21) { + ASSERT_TRUE(CopyTestCache("good_2_1")); + SetNewEviction(); + BackendValidateMigrated(); +}
diff --git a/net/disk_cache/blockfile/backend_impl.cc b/net/disk_cache/blockfile/backend_impl.cc index a0f9d6d..4b13920 100644 --- a/net/disk_cache/blockfile/backend_impl.cc +++ b/net/disk_cache/blockfile/backend_impl.cc
@@ -513,7 +513,7 @@ cache_entry = nullptr; } - int current_size = data_->header.num_bytes / (1024 * 1024); + int64_t current_size = data_->header.num_bytes / (1024 * 1024); int64_t total_hours = stats_.GetCounter(Stats::TIMER) / 120; int64_t no_use_hours = stats_.GetCounter(Stats::LAST_REPORT_TIMER) / 120; int64_t use_hours = total_hours - no_use_hours; @@ -1361,11 +1361,6 @@ IndexHeader header; header.table_len = DesiredIndexTableLen(max_size_); - - // We need file version 2.1 for the new eviction algorithm. - if (new_eviction_) - header.version = 0x20001; - header.create_time = Time::Now().ToInternalValue(); if (!file->Write(&header, sizeof(header), 0)) @@ -1880,7 +1875,7 @@ void BackendImpl::ReportStats() { CACHE_UMA(COUNTS, "Entries", 0, data_->header.num_entries); - int current_size = data_->header.num_bytes / (1024 * 1024); + int64_t current_size = data_->header.num_bytes / (1024 * 1024); int max_size = max_size_ / (1024 * 1024); int hit_ratio_as_percentage = stats_.GetHitRatio(); @@ -1953,7 +1948,7 @@ int64_t trim_rate = stats_.GetCounter(Stats::TRIM_ENTRY) / use_hours; CACHE_UMA(COUNTS, "TrimRate", 0, static_cast<int>(trim_rate)); - int avg_size = data_->header.num_bytes / GetEntryCount(); + int64_t avg_size = data_->header.num_bytes / GetEntryCount(); CACHE_UMA(COUNTS, "EntrySize", 0, avg_size); CACHE_UMA(COUNTS, "EntriesFull", 0, data_->header.num_entries); @@ -1983,11 +1978,19 @@ void BackendImpl::UpgradeTo2_1() { // 2.1 is basically the same as 2.0, except that new fields are actually // updated by the new eviction algorithm. - DCHECK(0x20000 == data_->header.version); - data_->header.version = 0x20001; + DCHECK_EQ(kVersion2_0, data_->header.version); + data_->header.version = kVersion2_1; data_->header.lru.sizes[Rankings::NO_USE] = data_->header.num_entries; } +void BackendImpl::UpgradeTo3_0() { + // 3.0 uses a 64-bit size field. + DCHECK(kVersion2_0 == data_->header.version || + kVersion2_1 == data_->header.version); + data_->header.version = kVersion3_0; + data_->header.num_bytes = data_->header.old_v2_num_bytes; +} + bool BackendImpl::CheckIndex() { DCHECK(data_); @@ -1997,23 +2000,25 @@ return false; } - if (new_eviction_) { - // We support versions 2.0 and 2.1, upgrading 2.0 to 2.1. - if (kIndexMagic != data_->header.magic || - kCurrentVersion >> 16 != data_->header.version >> 16) { - LOG(ERROR) << "Invalid file version or magic"; - return false; - } - if (kCurrentVersion == data_->header.version) { - // We need file version 2.1 for the new eviction algorithm. - UpgradeTo2_1(); - } - } else { - if (kIndexMagic != data_->header.magic || - kCurrentVersion != data_->header.version) { - LOG(ERROR) << "Invalid file version or magic"; - return false; - } + if (data_->header.magic != kIndexMagic) { + LOG(ERROR) << "Invalid file magic"; + return false; + } + + // 2.0 + new_eviction needs conversion to 2.1. + if (data_->header.version == kVersion2_0 && new_eviction_) { + UpgradeTo2_1(); + } + + // 2.0 or 2.1 can be upgraded to 3.0 + if (data_->header.version == kVersion2_0 || + data_->header.version == kVersion2_1) { + UpgradeTo3_0(); + } + + if (kCurrentVersion != data_->header.version) { + LOG(ERROR) << "Invalid file version"; + return false; } if (!data_->header.table_len) {
diff --git a/net/disk_cache/blockfile/backend_impl.h b/net/disk_cache/blockfile/backend_impl.h index 89cffbb..7190c3b 100644 --- a/net/disk_cache/blockfile/backend_impl.h +++ b/net/disk_cache/blockfile/backend_impl.h
@@ -375,9 +375,13 @@ // Send UMA stats. void ReportStats(); - // Upgrades the index file to version 2.1. + // Upgrades the index file to version 2.1 (from 2.0) void UpgradeTo2_1(); + // Upgrades the index file to version 3.0 + // (from 2.1/2.0 depending on eviction algorithm) + void UpgradeTo3_0(); + // Performs basic checks on the index file. Returns false on failure. bool CheckIndex();
diff --git a/net/disk_cache/blockfile/disk_format.cc b/net/disk_cache/blockfile/disk_format.cc index 4d398c28..475c57f2 100644 --- a/net/disk_cache/blockfile/disk_format.cc +++ b/net/disk_cache/blockfile/disk_format.cc
@@ -6,6 +6,8 @@ namespace disk_cache { +static_assert(sizeof(IndexHeader) == 368); + IndexHeader::IndexHeader() { memset(this, 0, sizeof(*this)); magic = kIndexMagic;
diff --git a/net/disk_cache/blockfile/disk_format.h b/net/disk_cache/blockfile/disk_format.h index a621ec1..94786f0 100644 --- a/net/disk_cache/blockfile/disk_format.h +++ b/net/disk_cache/blockfile/disk_format.h
@@ -56,7 +56,10 @@ const int kIndexTablesize = 0x10000; const uint32_t kIndexMagic = 0xC103CAC3; -const uint32_t kCurrentVersion = 0x20000; // Version 2.0. +const uint32_t kVersion2_0 = 0x20000; +const uint32_t kVersion2_1 = 0x20001; +const uint32_t kVersion3_0 = 0x30000; +const uint32_t kCurrentVersion = kVersion3_0; struct LruData { int32_t pad1[2]; @@ -77,7 +80,7 @@ uint32_t magic; uint32_t version; int32_t num_entries; // Number of entries currently stored. - int32_t num_bytes; // Total size of the stored data. + int32_t old_v2_num_bytes; // Total size of the stored data, in versions 2.x int32_t last_file; // Last external file created. int32_t this_id; // Id for all entries being changed (dirty flag). CacheAddr stats; // Storage for usage data. @@ -85,7 +88,8 @@ int32_t crash; // Signals a previous crash. int32_t experiment; // Id of an ongoing test. uint64_t create_time; // Creation time for this set of files. - int32_t pad[52]; + int64_t num_bytes; // Total size of the stored data, in version 3.0 + int32_t pad[50]; LruData lru; // Eviction control data. };
diff --git a/net/http/transport_security_state_static.pins b/net/http/transport_security_state_static.pins index 179d7c8..232be7c 100644 --- a/net/http/transport_security_state_static.pins +++ b/net/http/transport_security_state_static.pins
@@ -43,9 +43,9 @@ # hash function for preloaded entries again (we have already done so once). # -# Last updated: 2022-07-12 12:55 UTC +# Last updated: 2022-07-13 12:54 UTC PinsListTimestamp -1657630522 +1657716857 TestSPKI sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
diff --git a/net/tools/dump_cache/dump_files.cc b/net/tools/dump_cache/dump_files.cc index 6aa77c5..525e172 100644 --- a/net/tools/dump_cache/dump_files.cc +++ b/net/tools/dump_cache/dump_files.cc
@@ -109,7 +109,7 @@ printf("magic: %x\n", header.magic); printf("version: %d.%d\n", header.version >> 16, header.version & 0xffff); printf("entries: %d\n", header.num_entries); - printf("total bytes: %d\n", header.num_bytes); + printf("total bytes: %" PRId64 "\n", header.num_bytes); printf("last file number: %d\n", header.last_file); printf("current id: %d\n", header.this_id); printf("table length: %d\n", header.table_len);
diff --git a/remoting/client/chromoting_session.cc b/remoting/client/chromoting_session.cc index dd60ebe..b532cba 100644 --- a/remoting/client/chromoting_session.cc +++ b/remoting/client/chromoting_session.cc
@@ -542,6 +542,7 @@ scoped_refptr<protocol::TransportContext> transport_context = new protocol::TransportContext( std::make_unique<protocol::ChromiumPortAllocatorFactory>(), + webrtc::ThreadWrapper::current()->SocketServer(), runtime_->url_loader_factory(), /* oauth_token_getter= */ nullptr, protocol::NetworkSettings(
diff --git a/remoting/host/it2me/BUILD.gn b/remoting/host/it2me/BUILD.gn index 55854f5..36c72074 100644 --- a/remoting/host/it2me/BUILD.gn +++ b/remoting/host/it2me/BUILD.gn
@@ -78,6 +78,7 @@ "//base:i18n", "//build:chromeos_buildflags", "//components/policy:policy_code_generate", + "//components/webrtc:thread_wrapper", "//extensions/browser/api/messaging:native_messaging", "//mojo/core/embedder", "//net",
diff --git a/remoting/host/it2me/it2me_host.cc b/remoting/host/it2me/it2me_host.cc index 369ce1cb..c771803 100644 --- a/remoting/host/it2me/it2me_host.cc +++ b/remoting/host/it2me/it2me_host.cc
@@ -17,6 +17,7 @@ #include "base/time/time.h" #include "build/chromeos_buildflags.h" #include "components/policy/policy_constants.h" +#include "components/webrtc/thread_wrapper.h" #include "net/url_request/url_request_context_getter.h" #include "remoting/base/auto_thread.h" #include "remoting/base/logging.h" @@ -154,6 +155,8 @@ CreateDeferredConnectContext create_context) { DCHECK(host_context_->network_task_runner()->BelongsToCurrentThread()); DCHECK_EQ(It2MeHostState::kDisconnected, state_); + // This thread is used as a network thread in WebRTC. + webrtc::ThreadWrapper::EnsureForCurrentMessageLoop(); if (!remote_support_connections_allowed_) { SetState(It2MeHostState::kError, ErrorCode::DISALLOWED_BY_POLICY); @@ -239,6 +242,7 @@ scoped_refptr<protocol::TransportContext> transport_context = new protocol::TransportContext( std::make_unique<protocol::ChromiumPortAllocatorFactory>(), + webrtc::ThreadWrapper::current()->SocketServer(), host_context_->url_loader_factory(), oauth_token_getter_.get(), network_settings, protocol::TransportRole::SERVER); if (!ice_config.is_null()) {
diff --git a/remoting/host/remoting_me2me_host.cc b/remoting/host/remoting_me2me_host.cc index 5bd9809..8f426cd9 100644 --- a/remoting/host/remoting_me2me_host.cc +++ b/remoting/host/remoting_me2me_host.cc
@@ -29,6 +29,7 @@ #include "base/values.h" #include "build/build_config.h" #include "components/policy/policy_constants.h" +#include "components/webrtc/thread_wrapper.h" #include "ipc/ipc_channel.h" #include "ipc/ipc_channel_proxy.h" #include "ipc/ipc_listener.h" @@ -1655,6 +1656,9 @@ DCHECK(context_->network_task_runner()->BelongsToCurrentThread()); DCHECK(!host_); + // This thread is used as a network thread in WebRTC. + webrtc::ThreadWrapper::EnsureForCurrentMessageLoop(); + SetState(HOST_STARTED); InitializeSignaling(); @@ -1682,6 +1686,7 @@ scoped_refptr<protocol::TransportContext> transport_context = new protocol::TransportContext( std::make_unique<protocol::ChromiumPortAllocatorFactory>(), + webrtc::ThreadWrapper::current()->SocketServer(), context_->url_loader_factory(), oauth_token_getter_.get(), network_settings, protocol::TransportRole::SERVER); std::unique_ptr<protocol::SessionManager> session_manager(
diff --git a/remoting/host/third_party_auth_config.cc b/remoting/host/third_party_auth_config.cc index a04365fb..5c34de9 100644 --- a/remoting/host/third_party_auth_config.cc +++ b/remoting/host/third_party_auth_config.cc
@@ -71,6 +71,7 @@ namespace { +#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_IOS) void ExtractHelper(const base::DictionaryValue& policy_dict, const std::string& policy_name, bool* policy_present, @@ -83,6 +84,7 @@ policy_value->clear(); } } +#endif } // namespace @@ -92,6 +94,7 @@ std::string* token_validation_url, std::string* token_validation_cert_issuer) { bool policies_present = false; +#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_IOS) ExtractHelper(policy_dict, policy::key::kRemoteAccessHostTokenUrl, &policies_present, token_url); ExtractHelper(policy_dict, policy::key::kRemoteAccessHostTokenValidationUrl, @@ -99,6 +102,7 @@ ExtractHelper(policy_dict, policy::key::kRemoteAccessHostTokenValidationCertificateIssuer, &policies_present, token_validation_cert_issuer); +#endif return policies_present; }
diff --git a/remoting/host/third_party_auth_config_unittest.cc b/remoting/host/third_party_auth_config_unittest.cc index cd585a38..13f6644 100644 --- a/remoting/host/third_party_auth_config_unittest.cc +++ b/remoting/host/third_party_auth_config_unittest.cc
@@ -153,6 +153,7 @@ EXPECT_FALSE(ThirdPartyAuthConfig::ExtractStrings(dict, &url1, &url2, &cert)); } +#if !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS) && !BUILDFLAG(IS_IOS) TEST(ThirdPartyAuthConfig, ExtractAll) { base::DictionaryValue dict; dict.SetString(key::kRemoteAccessHostTokenUrl, "test1"); @@ -176,6 +177,8 @@ EXPECT_EQ("test2", url2); EXPECT_EQ("", cert); } +#endif // !BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CHROMEOS) && + // !BUILDFLAG(IS_IOS) TEST(ThirdPartyAuthConfig, Output) { ThirdPartyAuthConfig third_party_auth_config;
diff --git a/remoting/protocol/chromium_port_allocator_factory.cc b/remoting/protocol/chromium_port_allocator_factory.cc index 2201654..525d77cb 100644 --- a/remoting/protocol/chromium_port_allocator_factory.cc +++ b/remoting/protocol/chromium_port_allocator_factory.cc
@@ -19,8 +19,10 @@ ChromiumPortAllocatorFactory::CreatePortAllocator( scoped_refptr<TransportContext> transport_context, base::WeakPtr<SessionOptionsProvider> session_options_provider) { + rtc::SocketFactory* socket_factory = transport_context->socket_factory(); + DCHECK(socket_factory); return std::make_unique<PortAllocator>( - base::WrapUnique(new rtc::BasicNetworkManager()), + base::WrapUnique(new rtc::BasicNetworkManager(socket_factory)), base::WrapUnique( new ChromiumPacketSocketFactory(session_options_provider)), transport_context);
diff --git a/remoting/protocol/ice_transport_unittest.cc b/remoting/protocol/ice_transport_unittest.cc index f89ee99..f0ea39ab 100644 --- a/remoting/protocol/ice_transport_unittest.cc +++ b/remoting/protocol/ice_transport_unittest.cc
@@ -120,10 +120,12 @@ void InitializeConnection() { webrtc::ThreadWrapper::EnsureForCurrentMessageLoop(); + rtc::SocketFactory* socket_factory = + webrtc::ThreadWrapper::current()->SocketServer(); host_transport_ = std::make_unique<IceTransport>( new TransportContext(std::make_unique<ChromiumPortAllocatorFactory>(), - nullptr, nullptr, network_settings_, - TransportRole::SERVER), + socket_factory, nullptr, nullptr, + network_settings_, TransportRole::SERVER), &host_event_handler_); if (!host_authenticator_) { host_authenticator_ = @@ -132,8 +134,8 @@ client_transport_ = std::make_unique<IceTransport>( new TransportContext(std::make_unique<ChromiumPortAllocatorFactory>(), - nullptr, nullptr, network_settings_, - TransportRole::CLIENT), + socket_factory, nullptr, nullptr, + network_settings_, TransportRole::CLIENT), &client_event_handler_); if (!client_authenticator_) { client_authenticator_ =
diff --git a/remoting/protocol/transport_context.cc b/remoting/protocol/transport_context.cc index 13770d1..098f272 100644 --- a/remoting/protocol/transport_context.cc +++ b/remoting/protocol/transport_context.cc
@@ -61,8 +61,8 @@ scoped_refptr<TransportContext> TransportContext::ForTests(TransportRole role) { webrtc::ThreadWrapper::EnsureForCurrentMessageLoop(); return new protocol::TransportContext( - std::make_unique<protocol::ChromiumPortAllocatorFactory>(), nullptr, - nullptr, + std::make_unique<protocol::ChromiumPortAllocatorFactory>(), + webrtc::ThreadWrapper::current()->SocketServer(), nullptr, nullptr, protocol::NetworkSettings( protocol::NetworkSettings::NAT_TRAVERSAL_OUTGOING), role); @@ -70,15 +70,19 @@ TransportContext::TransportContext( std::unique_ptr<PortAllocatorFactory> port_allocator_factory, + rtc::SocketFactory* socket_factory, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, OAuthTokenGetter* oauth_token_getter, const NetworkSettings& network_settings, TransportRole role) : port_allocator_factory_(std::move(port_allocator_factory)), + socket_factory_(socket_factory), url_loader_factory_(url_loader_factory), oauth_token_getter_(oauth_token_getter), network_settings_(network_settings), - role_(role) {} + role_(role) { + DCHECK(socket_factory_); +} TransportContext::~TransportContext() = default;
diff --git a/remoting/protocol/transport_context.h b/remoting/protocol/transport_context.h index cf31af8d..bb29d608 100644 --- a/remoting/protocol/transport_context.h +++ b/remoting/protocol/transport_context.h
@@ -41,6 +41,7 @@ TransportContext( std::unique_ptr<PortAllocatorFactory> port_allocator_factory, + rtc::SocketFactory* socket_factory, scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory, OAuthTokenGetter* oauth_token_getter, const NetworkSettings& network_settings, @@ -71,6 +72,7 @@ PortAllocatorFactory* port_allocator_factory() { return port_allocator_factory_.get(); } + rtc::SocketFactory* socket_factory() const { return socket_factory_; } const NetworkSettings& network_settings() const { return network_settings_; } TransportRole role() const { return role_; } @@ -87,6 +89,7 @@ void OnIceConfig(const IceConfig& ice_config); std::unique_ptr<PortAllocatorFactory> port_allocator_factory_; + raw_ptr<rtc::SocketFactory> socket_factory_; scoped_refptr<network::SharedURLLoaderFactory> url_loader_factory_; raw_ptr<OAuthTokenGetter> oauth_token_getter_ = nullptr; NetworkSettings network_settings_;
diff --git a/remoting/test/ftl_signaling_playground.cc b/remoting/test/ftl_signaling_playground.cc index 5f42f28..9bf57a5 100644 --- a/remoting/test/ftl_signaling_playground.cc +++ b/remoting/test/ftl_signaling_playground.cc
@@ -251,6 +251,7 @@ protocol::NetworkSettings::NAT_TRAVERSAL_FULL); auto transport_context = base::MakeRefCounted<protocol::TransportContext>( std::make_unique<protocol::ChromiumPortAllocatorFactory>(), + webrtc::ThreadWrapper::current()->SocketServer(), url_loader_factory_owner_->GetURLLoaderFactory(), nullptr, network_settings, transport_role_); auto close_callback =
diff --git a/remoting/test/protocol_perftest.cc b/remoting/test/protocol_perftest.cc index 79f35391..0d77fea 100644 --- a/remoting/test/protocol_perftest.cc +++ b/remoting/test/protocol_perftest.cc
@@ -296,9 +296,10 @@ port_allocator_factory->socket_factory()->set_out_of_order_rate( GetParam().out_of_order_rate); scoped_refptr<protocol::TransportContext> transport_context( - new protocol::TransportContext(std::move(port_allocator_factory), - nullptr, nullptr, network_settings, - protocol::TransportRole::SERVER)); + new protocol::TransportContext( + std::move(port_allocator_factory), + webrtc::ThreadWrapper::current()->SocketServer(), nullptr, nullptr, + network_settings, protocol::TransportRole::SERVER)); std::unique_ptr<protocol::SessionManager> session_manager( new protocol::JingleSessionManager(host_signaling_.get())); session_manager->set_protocol_config(protocol_config_->Clone()); @@ -363,9 +364,10 @@ port_allocator_factory->socket_factory()->set_out_of_order_rate( GetParam().out_of_order_rate); scoped_refptr<protocol::TransportContext> transport_context( - new protocol::TransportContext(std::move(port_allocator_factory), - nullptr, nullptr, network_settings, - protocol::TransportRole::CLIENT)); + new protocol::TransportContext( + std::move(port_allocator_factory), + webrtc::ThreadWrapper::current()->SocketServer(), nullptr, nullptr, + network_settings, protocol::TransportRole::CLIENT)); protocol::ClientAuthenticationConfig client_auth_config; client_auth_config.host_id = kHostId;
diff --git a/sandbox/BUILD.gn b/sandbox/BUILD.gn index 0a4abaa..8afcda6f 100644 --- a/sandbox/BUILD.gn +++ b/sandbox/BUILD.gn
@@ -35,13 +35,6 @@ if (is_mac) { deps += [ "//sandbox/mac:sandbox_unittests" ] - } else if (is_linux || is_android) { - deps += [ "//sandbox/linux:sandbox_unittests" ] - data_deps = [ "//testing/buildbot/filters:sandbox_unittests_filters" ] - - if (is_android) { - use_raw_android_executable = true - } } }
diff --git a/sandbox/linux/BUILD.gn b/sandbox/linux/BUILD.gn index d2692c6..ec24cd81 100644 --- a/sandbox/linux/BUILD.gn +++ b/sandbox/linux/BUILD.gn
@@ -5,6 +5,7 @@ import("//build/config/features.gni") import("//build/config/nacl/config.gni") import("//sandbox/features.gni") +import("//testing/test.gni") if (is_android) { import("//build/config/android/rules.gni") @@ -19,15 +20,11 @@ use_base_test_suite = is_linux || is_chromeos } -# We have two principal targets: sandbox and sandbox_unittests +# We have two principal targets: sandbox and sandbox_linux_unittests # All other targets are listed as dependencies. # There is one notable exception: for historical reasons, chrome_sandbox is # the setuid sandbox and is its own target. -# TODO(crbug.com/1343928): Placeholder to fix downstream -group("sandbox_linux_unittests") { -} - group("sandbox") { public_deps = [ ":sandbox_services" ] if (compile_suid_client) { @@ -75,7 +72,8 @@ } } -source_set("sandbox_unittests") { +# Sources for sandbox_linux_unittests. +source_set("sandbox_linux_unittests_sources") { testonly = true sources = [ @@ -187,6 +185,17 @@ rebase_path(outputs, root_build_dir) + rebase_path(inputs, root_build_dir) } +test("sandbox_linux_unittests") { + deps = [ + ":sandbox_linux_unittests_sources", + "//sandbox/policy:tests", + ] + data_deps = [ "//testing/buildbot/filters:sandbox_linux_unittests_filters" ] + if (is_android) { + use_raw_android_executable = true + } +} + component("seccomp_bpf") { sources = [ "bpf_dsl/bpf_dsl.cc",
diff --git a/services/data_decoder/public/cpp/data_decoder.cc b/services/data_decoder/public/cpp/data_decoder.cc index 325cd8e7..e5f42e0b4 100644 --- a/services/data_decoder/public/cpp/data_decoder.cc +++ b/services/data_decoder/public/cpp/data_decoder.cc
@@ -72,11 +72,11 @@ if (!callback() || is_cancelled_->data) return; - DataDecoder::ResultOrError<V> result; + base::expected<V, std::string> result; if (value) - result.value = std::move(value); + result = std::move(*value); else - result.error = error.value_or("unknown error"); + result = base::unexpected(error.value_or("unknown error")); // Copy the callback onto the stack before resetting the Remote, as that may // delete |this|. @@ -102,8 +102,7 @@ if (callback()) { std::move(callback()) - .Run(DataDecoder::ResultOrError<V>::Error( - "Data Decoder terminated unexpectedly")); + .Run(base::unexpected("Data Decoder terminated unexpectedly")); } } @@ -138,11 +137,9 @@ return; if (!value_with_error.has_value()) { - std::move(callback).Run( - DataDecoder::ValueOrError::Error(value_with_error.error().message)); + std::move(callback).Run(base::unexpected(value_with_error.error().message)); } else { - std::move(callback).Run( - DataDecoder::ValueOrError::Value(std::move(*value_with_error))); + std::move(callback).Run(std::move(*value_with_error)); } } @@ -209,7 +206,7 @@ return; if (!result.value) { - std::move(callback).Run(ValueOrError::Error(*result.error)); + std::move(callback).Run(base::unexpected(*result.error)); return; }
diff --git a/services/data_decoder/public/cpp/data_decoder.h b/services/data_decoder/public/cpp/data_decoder.h index cea5b7f8..e5b83f1 100644 --- a/services/data_decoder/public/cpp/data_decoder.h +++ b/services/data_decoder/public/cpp/data_decoder.h
@@ -10,6 +10,7 @@ #include "base/callback_forward.h" #include "base/memory/ref_counted.h" #include "base/time/time.h" +#include "base/types/expected.h" #include "base/values.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/remote.h" @@ -58,38 +59,12 @@ ~DataDecoder(); - // The result of a service call that can return either a value of type T or an - // error string. Exactly one of either |value| or |error| will have a value - // when returned by either operation. + using ValueOrError = base::expected<base::Value, std::string>; template <typename T> - struct ResultOrError { - ResultOrError() = default; - ResultOrError(ResultOrError&&) = default; - ~ResultOrError() = default; - - static ResultOrError Value(T value) { - ResultOrError<T> result; - result.value = std::move(value); - return result; - } - static ResultOrError Error(const std::string& error) { - ResultOrError<T> result; - result.error = error; - return result; - } - - absl::optional<T> value; - absl::optional<std::string> error; - }; - - using ValueOrError = ResultOrError<base::Value>; - - template <typename T> - using ResultCallback = base::OnceCallback<void(ResultOrError<T>)>; - using ValueParseCallback = base::OnceCallback<void(ValueOrError)>; - using GzipperCallback = - base::OnceCallback<void(ResultOrError<mojo_base::BigBuffer>)>; - + using ResultCallback = + base::OnceCallback<void(base::expected<T, std::string>)>; + using ValueParseCallback = ResultCallback<base::Value>; + using GzipperCallback = ResultCallback<mojo_base::BigBuffer>; using CancellationFlag = base::RefCountedData<bool>; // Returns a raw interface to the service instance. This launches an instance
diff --git a/services/data_decoder/public/cpp/data_decoder_unittest.cc b/services/data_decoder/public/cpp/data_decoder_unittest.cc index 0fc6dcf5..e0de610 100644 --- a/services/data_decoder/public/cpp/data_decoder_unittest.cc +++ b/services/data_decoder/public/cpp/data_decoder_unittest.cc
@@ -79,18 +79,18 @@ // a process. base::RunLoop run_loop; DataDecoder decoder; - absl::optional<base::Value> result; + DataDecoder::ValueOrError result; decoder.ParseJson( // The magic 122.416294033786585 number comes from // https://github.com/serde-rs/json/issues/707 "[ 122.416294033786585 ]", base::BindLambdaForTesting( [&run_loop, &result](DataDecoder::ValueOrError value_or_error) { - result = std::move(value_or_error.value); + result = std::move(value_or_error); run_loop.Quit(); })); run_loop.Run(); - EXPECT_TRUE(result); + ASSERT_TRUE(result.has_value()); ASSERT_TRUE(result->is_list()); base::Value::List& list = result->GetList(); ASSERT_EQ(1u, list.size());
diff --git a/services/data_decoder/public/cpp/json_sanitizer_non_android.cc b/services/data_decoder/public/cpp/json_sanitizer_non_android.cc index 5e39858..d686f76 100644 --- a/services/data_decoder/public/cpp/json_sanitizer_non_android.cc +++ b/services/data_decoder/public/cpp/json_sanitizer_non_android.cc
@@ -19,12 +19,12 @@ json, base::BindOnce( [](Callback callback, DataDecoder::ValueOrError parse_result) { - if (!parse_result.value) { - std::move(callback).Run(Result::Error(*parse_result.error)); + if (!parse_result.has_value()) { + std::move(callback).Run(Result::Error(parse_result.error())); return; } - const base::Value::Type type = parse_result.value->type(); + const base::Value::Type type = parse_result->type(); if (type != base::Value::Type::DICTIONARY && type != base::Value::Type::LIST) { std::move(callback).Run(Result::Error("Invalid top-level type")); @@ -32,7 +32,7 @@ } std::string safe_json; - if (!base::JSONWriter::Write(*parse_result.value, &safe_json)) { + if (!base::JSONWriter::Write(*parse_result, &safe_json)) { std::move(callback).Run(Result::Error("Encoding error")); return; }
diff --git a/services/network/public/cpp/corb/DIR_METADATA b/services/network/public/cpp/corb/DIR_METADATA new file mode 100644 index 0000000..b956b941 --- /dev/null +++ b/services/network/public/cpp/corb/DIR_METADATA
@@ -0,0 +1,4 @@ +monorail { + component: "Blink>SecurityFeature>ORB" +} +team_email: "site-isolation-dev@chromium.org"
diff --git a/styleguide/c++/c++.md b/styleguide/c++/c++.md index 6f95808..5ae0684dc 100644 --- a/styleguide/c++/c++.md +++ b/styleguide/c++/c++.md
@@ -36,7 +36,7 @@ * Functions used only for testing should be restricted to test-only usages with the testing suffixes supported by - [PRESUMBIT.py](https://chromium.googlesource.com/chromium/src/+/main/PRESUBMIT.py). + [PRESUBMIT.py](https://chromium.googlesource.com/chromium/src/+/main/PRESUBMIT.py). `ForTesting` is the conventional suffix although similar patterns, such as `ForTest`, are also accepted. These suffixes are checked at presubmit time to ensure the functions are called only by test files.
diff --git a/testing/PRESUBMIT.py b/testing/PRESUBMIT.py index 18edbe8..56554c2 100644 --- a/testing/PRESUBMIT.py +++ b/testing/PRESUBMIT.py
@@ -35,7 +35,8 @@ [r'^.+_unittest\.py$'], env=testing_env, run_on_python2=False, - run_on_python3=USE_PYTHON3)) + run_on_python3=USE_PYTHON3, + skip_shebang_check=True)) files_to_skip = input_api.DEFAULT_FILES_TO_SKIP if input_api.is_windows: # These scripts don't run on Windows and should not be linted on Windows -
diff --git a/testing/buildbot/chrome.json b/testing/buildbot/chrome.json index 9ccb9767..e770c451 100644 --- a/testing/buildbot/chrome.json +++ b/testing/buildbot/chrome.json
@@ -3851,8 +3851,8 @@ ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "merge": {
diff --git a/testing/buildbot/chromium.android.fyi.json b/testing/buildbot/chromium.android.fyi.json index f29b331..86a9dbfc 100644 --- a/testing/buildbot/chromium.android.fyi.json +++ b/testing/buildbot/chromium.android.fyi.json
@@ -1956,7 +1956,7 @@ "--bucket", "chromium-result-details", "--test-name", - "sandbox_unittests" + "sandbox_linux_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, @@ -2008,8 +2008,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -5822,7 +5822,7 @@ "--bucket", "chromium-result-details", "--test-name", - "sandbox_unittests" + "sandbox_linux_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, @@ -5874,8 +5874,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [
diff --git a/testing/buildbot/chromium.android.json b/testing/buildbot/chromium.android.json index 685f423d..fe1ed5b3 100644 --- a/testing/buildbot/chromium.android.json +++ b/testing/buildbot/chromium.android.json
@@ -4254,7 +4254,7 @@ "--bucket", "chromium-result-details", "--test-name", - "sandbox_unittests" + "sandbox_linux_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, @@ -4291,8 +4291,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -7873,7 +7873,7 @@ "--bucket", "chromium-result-details", "--test-name", - "sandbox_unittests" + "sandbox_linux_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, @@ -7911,8 +7911,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -13616,7 +13616,7 @@ "--bucket", "chromium-result-details", "--test-name", - "sandbox_unittests" + "sandbox_linux_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, @@ -13668,8 +13668,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -18367,14 +18367,14 @@ "--gs-results-bucket=chromium-result-details", "--recover-devices", "--avd-config=../../tools/android/avd/proto/generic_android31.textpb", - "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator_12.sandbox_unittests.filter" + "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator_12.sandbox_linux_unittests.filter" ], "merge": { "args": [ "--bucket", "chromium-result-details", "--test-name", - "sandbox_unittests" + "sandbox_linux_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, @@ -18426,8 +18426,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -22451,7 +22451,7 @@ "--bucket", "chromium-result-details", "--test-name", - "sandbox_unittests" + "sandbox_linux_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, @@ -22488,8 +22488,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -30452,7 +30452,7 @@ "--bucket", "chromium-result-details", "--test-name", - "sandbox_unittests" + "sandbox_linux_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, @@ -30489,8 +30489,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -33273,7 +33273,7 @@ "--gs-results-bucket=chromium-result-details", "--recover-devices", "--avd-config=../../tools/android/avd/proto/generic_android23.textpb", - "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.sandbox_unittests.filter" + "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.sandbox_linux_unittests.filter" ], "isolate_profile_data": true, "merge": { @@ -33281,7 +33281,7 @@ "--bucket", "chromium-result-details", "--test-name", - "sandbox_unittests" + "sandbox_linux_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, @@ -33333,8 +33333,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -38826,7 +38826,7 @@ "--bucket", "chromium-result-details", "--test-name", - "sandbox_unittests" + "sandbox_linux_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, @@ -38864,8 +38864,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -44646,14 +44646,14 @@ "--gs-results-bucket=chromium-result-details", "--recover-devices", "--avd-config=../../tools/android/avd/proto/generic_android28.textpb", - "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.sandbox_unittests.filter" + "--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.sandbox_linux_unittests.filter" ], "merge": { "args": [ "--bucket", "chromium-result-details", "--test-name", - "sandbox_unittests" + "sandbox_linux_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, @@ -44705,8 +44705,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [
diff --git a/testing/buildbot/chromium.chromiumos.json b/testing/buildbot/chromium.chromiumos.json index 3f2dc1cf..4e07eac5 100644 --- a/testing/buildbot/chromium.chromiumos.json +++ b/testing/buildbot/chromium.chromiumos.json
@@ -25,7 +25,7 @@ "ppapi_unittests", "printing_unittests", "remoting_unittests", - "sandbox_unittests", + "sandbox_linux_unittests", "sql_unittests", "ui_base_unittests", "unit_tests", @@ -2746,8 +2746,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "merge": { @@ -4468,8 +4468,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "isolate_profile_data": true, @@ -6415,8 +6415,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "isolate_profile_data": true,
diff --git a/testing/buildbot/chromium.clang.json b/testing/buildbot/chromium.clang.json index 6e09f1e..6509d90 100644 --- a/testing/buildbot/chromium.clang.json +++ b/testing/buildbot/chromium.clang.json
@@ -1121,8 +1121,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "merge": { @@ -7362,7 +7362,7 @@ "--bucket", "chromium-result-details", "--test-name", - "sandbox_unittests" + "sandbox_linux_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, @@ -7399,8 +7399,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -12536,8 +12536,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "merge": { @@ -14273,8 +14273,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -15883,8 +15883,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "merge": { @@ -17473,8 +17473,8 @@ ], "service_account": "chrome-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "merge": { @@ -19735,8 +19735,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "merge": { @@ -21278,8 +21278,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "merge": {
diff --git a/testing/buildbot/chromium.fyi.json b/testing/buildbot/chromium.fyi.json index e6d38ff..e2b7a1e 100644 --- a/testing/buildbot/chromium.fyi.json +++ b/testing/buildbot/chromium.fyi.json
@@ -1187,8 +1187,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "merge": { @@ -3190,8 +3190,8 @@ "hard_timeout": 7200, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -5180,8 +5180,8 @@ "hard_timeout": 7200, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -9085,6 +9085,28 @@ } ] }, + "Win x64 Builder reclient gVisor cross test": { + "additional_compile_targets": [ + "pdf_fuzzers" + ], + "scripts": [ + { + "name": "check_network_annotations", + "script": "check_network_annotations.py", + "swarming": {} + }, + { + "name": "metrics_python_tests", + "script": "metrics_python_tests.py", + "swarming": {} + }, + { + "name": "webkit_lint", + "script": "blink_lint_expectations.py", + "swarming": {} + } + ] + }, "Win x64 Builder reclient staging": { "additional_compile_targets": [ "pdf_fuzzers" @@ -9107,28 +9129,6 @@ } ] }, - "Win x64 Builder reclient staging untrusted": { - "additional_compile_targets": [ - "pdf_fuzzers" - ], - "scripts": [ - { - "name": "check_network_annotations", - "script": "check_network_annotations.py", - "swarming": {} - }, - { - "name": "metrics_python_tests", - "script": "metrics_python_tests.py", - "swarming": {} - }, - { - "name": "webkit_lint", - "script": "blink_lint_expectations.py", - "swarming": {} - } - ] - }, "Win x64 Builder reclient test": { "additional_compile_targets": [ "pdf_fuzzers" @@ -9151,28 +9151,6 @@ } ] }, - "Win x64 Builder reclient test untrusted": { - "additional_compile_targets": [ - "pdf_fuzzers" - ], - "scripts": [ - { - "name": "check_network_annotations", - "script": "check_network_annotations.py", - "swarming": {} - }, - { - "name": "metrics_python_tests", - "script": "metrics_python_tests.py", - "swarming": {} - }, - { - "name": "webkit_lint", - "script": "blink_lint_expectations.py", - "swarming": {} - } - ] - }, "android-backuprefptr-arm-fyi-rel": { "gtest_tests": [ { @@ -12757,7 +12735,7 @@ "--bucket", "chromium-result-details", "--test-name", - "sandbox_unittests" + "sandbox_linux_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, @@ -12794,8 +12772,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -16539,7 +16517,7 @@ "--bucket", "chromium-result-details", "--test-name", - "sandbox_unittests" + "sandbox_linux_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, @@ -16577,8 +16555,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -85464,8 +85442,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -89717,8 +89695,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "isolate_profile_data": true, @@ -91332,8 +91310,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "isolate_profile_data": true, @@ -93772,8 +93750,8 @@ "can_use_on_swarming_builders": true, "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "isolate_profile_data": true, @@ -95537,8 +95515,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "merge": { @@ -97370,8 +97348,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "merge": {
diff --git a/testing/buildbot/chromium.linux.json b/testing/buildbot/chromium.linux.json index 6d816fe..d999acd0 100644 --- a/testing/buildbot/chromium.linux.json +++ b/testing/buildbot/chromium.linux.json
@@ -696,8 +696,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "merge": { @@ -1602,8 +1602,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "merge": { @@ -3089,8 +3089,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "isolate_profile_data": true, @@ -5503,8 +5503,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -7111,8 +7111,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "merge": {
diff --git a/testing/buildbot/chromium.memory.json b/testing/buildbot/chromium.memory.json index a078ab8b..13d03715 100644 --- a/testing/buildbot/chromium.memory.json +++ b/testing/buildbot/chromium.memory.json
@@ -1341,8 +1341,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -3130,8 +3130,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -4807,8 +4807,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "merge": { @@ -6578,8 +6578,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -8510,8 +8510,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -10329,8 +10329,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -12104,8 +12104,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "args": [ @@ -21535,8 +21535,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "isolate_profile_data": true, @@ -22961,8 +22961,8 @@ ], "service_account": "chromium-tester@chops-service-accounts.iam.gserviceaccount.com" }, - "test": "sandbox_unittests", - "test_id_prefix": "ninja://sandbox:sandbox_unittests/" + "test": "sandbox_linux_unittests", + "test_id_prefix": "ninja://sandbox/linux:sandbox_linux_unittests/" }, { "merge": {
diff --git a/testing/buildbot/chromium.perf.fyi.json b/testing/buildbot/chromium.perf.fyi.json index 890176e..37d61cd 100644 --- a/testing/buildbot/chromium.perf.fyi.json +++ b/testing/buildbot/chromium.perf.fyi.json
@@ -110,7 +110,8 @@ "--use-dynamic-shards" ], "requires_simultaneous_shard_dispatch": true, - "script": "//testing/trigger_scripts/perf_device_trigger.py" + "script": "//testing/trigger_scripts/perf_device_trigger.py", + "trigger_in_py3": true } } ] @@ -450,7 +451,8 @@ "True" ], "requires_simultaneous_shard_dispatch": true, - "script": "//testing/trigger_scripts/perf_device_trigger.py" + "script": "//testing/trigger_scripts/perf_device_trigger.py", + "trigger_in_py3": true } } ]
diff --git a/testing/buildbot/chromium.reclient.fyi.json b/testing/buildbot/chromium.reclient.fyi.json index 7ee72f6..efaed22 100644 --- a/testing/buildbot/chromium.reclient.fyi.json +++ b/testing/buildbot/chromium.reclient.fyi.json
@@ -11,99 +11,49 @@ "all" ] }, - "Linux Builder reclient staging untrusted": { - "additional_compile_targets": [ - "all" - ] - }, "Linux Builder reclient test": { "additional_compile_targets": [ "all" ] }, - "Linux Builder reclient test untrusted": { - "additional_compile_targets": [ - "all" - ] - }, "Mac Builder reclient staging": { "additional_compile_targets": [ "all" ] }, - "Mac Builder reclient staging untrusted": { - "additional_compile_targets": [ - "all" - ] - }, "Mac Builder reclient test": { "additional_compile_targets": [ "all" ] }, - "Mac Builder reclient test untrusted": { - "additional_compile_targets": [ - "all" - ] - }, "Simple Chrome Builder reclient staging": { "additional_compile_targets": [ "chromiumos_preflight" ] }, - "Simple Chrome Builder reclient staging untrusted": { - "additional_compile_targets": [ - "chromiumos_preflight" - ] - }, "Simple Chrome Builder reclient test": { "additional_compile_targets": [ "chromiumos_preflight" ] }, - "Simple Chrome Builder reclient test untrusted": { - "additional_compile_targets": [ - "chromiumos_preflight" - ] - }, "ios-simulator reclient staging": { "additional_compile_targets": [ "all" ] }, - "ios-simulator reclient staging untrusted": { - "additional_compile_targets": [ - "all" - ] - }, "ios-simulator reclient test": { "additional_compile_targets": [ "all" ] }, - "ios-simulator reclient test untrusted": { - "additional_compile_targets": [ - "all" - ] - }, "mac-arm64-rel reclient staging": { "additional_compile_targets": [ "all" ] }, - "mac-arm64-rel reclient staging untrusted": { - "additional_compile_targets": [ - "all" - ] - }, "mac-arm64-rel reclient test": { "additional_compile_targets": [ "all" ] - }, - "mac-arm64-rel reclient test untrusted": { - "additional_compile_targets": [ - "all" - ] } }
diff --git a/testing/buildbot/client.v8.fyi.json b/testing/buildbot/client.v8.fyi.json index 80cc8b5..50a4bcb 100644 --- a/testing/buildbot/client.v8.fyi.json +++ b/testing/buildbot/client.v8.fyi.json
@@ -1946,7 +1946,7 @@ "ppapi_unittests", "printing_unittests", "remoting_unittests", - "sandbox_unittests", + "sandbox_linux_unittests", "skia_unittests", "sql_unittests", "storage_unittests",
diff --git a/testing/buildbot/filters/BUILD.gn b/testing/buildbot/filters/BUILD.gn index 1889222..6ae1b616 100644 --- a/testing/buildbot/filters/BUILD.gn +++ b/testing/buildbot/filters/BUILD.gn
@@ -329,10 +329,10 @@ ] } -source_set("sandbox_unittests_filters") { +source_set("sandbox_linux_unittests_filters") { data = [ - "//testing/buildbot/filters/android.emulator.sandbox_unittests.filter", - "//testing/buildbot/filters/android.emulator_12.sandbox_unittests.filter", + "//testing/buildbot/filters/android.emulator.sandbox_linux_unittests.filter", + "//testing/buildbot/filters/android.emulator_12.sandbox_linux_unittests.filter", ] }
diff --git a/testing/buildbot/filters/android.emulator.sandbox_unittests.filter b/testing/buildbot/filters/android.emulator.sandbox_linux_unittests.filter similarity index 100% rename from testing/buildbot/filters/android.emulator.sandbox_unittests.filter rename to testing/buildbot/filters/android.emulator.sandbox_linux_unittests.filter
diff --git a/testing/buildbot/filters/android.emulator_12.sandbox_unittests.filter b/testing/buildbot/filters/android.emulator_12.sandbox_linux_unittests.filter similarity index 100% rename from testing/buildbot/filters/android.emulator_12.sandbox_unittests.filter rename to testing/buildbot/filters/android.emulator_12.sandbox_linux_unittests.filter
diff --git a/testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter b/testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter index 6f92cad..b9d426c5 100644 --- a/testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter +++ b/testing/buildbot/filters/linux-lacros.interactive_ui_tests.filter
@@ -1,9 +1,16 @@ -# TODO(crbug.com/1111979) Enable all tests on lacros. +# Always on top is a feature of platform apps (aka packaged apps v2, aka chrome +# apps). It allows a window to usually, but not always, stay on top of other +# windows. It's implemented via window z-ordering, which vanilla Wayland does +# not support. Platform apps are deprecated. It's unknown how often this feature +# is used in the wild. It's unknown how much impact failing to implement this +# for Lacros will cause. See https://crbug.com/1343973. -AppWindowTest.InitAlwaysOnTopToFullscreen -AppWindowTest.InitFullscreenAndAlwaysOnTop -AppWindowTest.InitFullscreenToAlwaysOnTop -AppWindowTest.RuntimeAlwaysOnTopToFullscreen -AppWindowTest.RuntimeFullscreenToAlwaysOnTop + +# TODO(crbug.com/1111979) Enable all tests on lacros. -BookmarkBarViewTest* -ChromeVisibilityObserverInteractiveTest.VisibilityTest -CrossSiteSubframe/DragAndDropBrowserTest.CrossSiteDrag/*
diff --git a/testing/buildbot/filters/pixel_tests.filter b/testing/buildbot/filters/pixel_tests.filter index 23037c1..290bb03c 100644 --- a/testing/buildbot/filters/pixel_tests.filter +++ b/testing/buildbot/filters/pixel_tests.filter
@@ -34,6 +34,7 @@ FirstRunDialogTest.* GlobalErrorBubbleTest.* HatsBubbleTest.* +HomeButtonUiTest.* HungRendererDialogViewBrowserTest.* ImportLockDialogViewBrowserTest.* InlineLoginHelperBrowserTest.InvokeUi_*
diff --git a/testing/buildbot/gn_isolate_map.pyl b/testing/buildbot/gn_isolate_map.pyl index fd124c8..ff769890 100644 --- a/testing/buildbot/gn_isolate_map.pyl +++ b/testing/buildbot/gn_isolate_map.pyl
@@ -1608,6 +1608,10 @@ "label": "//testing/rust_gtest_interop:rust_gtest_interop_unittests", "type": "console_test_launcher", }, + "sandbox_linux_unittests": { + "label": "//sandbox/linux:sandbox_linux_unittests", + "type": "console_test_launcher", + }, "sandbox_unittests": { "label": "//sandbox:sandbox_unittests", "type": "console_test_launcher",
diff --git a/testing/buildbot/test_suite_exceptions.pyl b/testing/buildbot/test_suite_exceptions.pyl index 74515c11..72ae133 100644 --- a/testing/buildbot/test_suite_exceptions.pyl +++ b/testing/buildbot/test_suite_exceptions.pyl
@@ -3025,16 +3025,16 @@ }, }, }, - 'sandbox_unittests': { + 'sandbox_linux_unittests': { 'modifications': { 'android-12-x64-rel': { 'args': [ - '--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator_12.sandbox_unittests.filter', + '--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator_12.sandbox_linux_unittests.filter', ] }, 'android-marshmallow-x86-rel': { 'args': [ - '--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.sandbox_unittests.filter', + '--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.sandbox_linux_unittests.filter', ] }, 'android-nougat-x86-rel': { @@ -3044,7 +3044,7 @@ }, 'android-pie-x86-rel': { 'args': [ - '--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.sandbox_unittests.filter', + '--test-launcher-filter-file=../../testing/buildbot/filters/android.emulator.sandbox_linux_unittests.filter', ] }, },
diff --git a/testing/buildbot/test_suites.pyl b/testing/buildbot/test_suites.pyl index 433f206..2b24bf9 100644 --- a/testing/buildbot/test_suites.pyl +++ b/testing/buildbot/test_suites.pyl
@@ -164,7 +164,7 @@ 'gfx_unittests': { 'ci_only': True, }, - 'sandbox_unittests': { + 'sandbox_linux_unittests': { 'ci_only': True, }, 'unit_tests': { @@ -4355,7 +4355,7 @@ 'linux_flavor_specific_chromium_gtests': { # Android, Chrome OS and Linux - 'sandbox_unittests': {}, + 'sandbox_linux_unittests': {}, }, 'linux_lacros_chrome_browsertests_non_version_skew': {
diff --git a/testing/buildbot/waterfalls.pyl b/testing/buildbot/waterfalls.pyl index 8f2026e..d9b6a28 100644 --- a/testing/buildbot/waterfalls.pyl +++ b/testing/buildbot/waterfalls.pyl
@@ -1490,7 +1490,7 @@ 'ppapi_unittests', 'printing_unittests', 'remoting_unittests', - 'sandbox_unittests', + 'sandbox_linux_unittests', 'sql_unittests', 'ui_base_unittests', 'unit_tests', @@ -2984,6 +2984,16 @@ 'scripts': 'chromium_win_scripts', }, }, + 'Win x64 Builder reclient gVisor cross test': { + # Copied from + # https://source.chromium.org/chromium/chromium/src/+/7b147a6777cb32d6a12e1716c61a0ed50dc1229a:testing/buildbot/waterfalls.pyl;l=6023-6030 + 'additional_compile_targets': [ + 'pdf_fuzzers' + ], + 'test_suites': { + 'scripts': 'chromium_win_scripts', + }, + }, 'Win x64 Builder reclient staging': { # Copied from # https://source.chromium.org/chromium/chromium/src/+/7b147a6777cb32d6a12e1716c61a0ed50dc1229a:testing/buildbot/waterfalls.pyl;l=6023-6030 @@ -2994,16 +3004,6 @@ 'scripts': 'chromium_win_scripts', }, }, - 'Win x64 Builder reclient staging untrusted': { - # Copied from - # https://source.chromium.org/chromium/chromium/src/+/7b147a6777cb32d6a12e1716c61a0ed50dc1229a:testing/buildbot/waterfalls.pyl;l=6023-6030 - 'additional_compile_targets': [ - 'pdf_fuzzers' - ], - 'test_suites': { - 'scripts': 'chromium_win_scripts', - }, - }, 'Win x64 Builder reclient test': { # Copied from # https://source.chromium.org/chromium/chromium/src/+/7b147a6777cb32d6a12e1716c61a0ed50dc1229a:testing/buildbot/waterfalls.pyl;l=6023-6030 @@ -3014,16 +3014,6 @@ 'scripts': 'chromium_win_scripts', }, }, - 'Win x64 Builder reclient test untrusted': { - # Copied from - # https://source.chromium.org/chromium/chromium/src/+/7b147a6777cb32d6a12e1716c61a0ed50dc1229a:testing/buildbot/waterfalls.pyl;l=6023-6030 - 'additional_compile_targets': [ - 'pdf_fuzzers' - ], - 'test_suites': { - 'scripts': 'chromium_win_scripts', - }, - }, 'android-backuprefptr-arm-fyi-rel': { 'test_suites': { 'gtest_tests': 'backuprefptr_gtests', @@ -5444,16 +5434,6 @@ 'all' ], }, - 'Linux Builder reclient staging untrusted': { - # Copied from - # https://source.chromium.org/chromium/chromium/src/+/main:testing/buildbot/waterfalls.pyl;l=4844-4854;drc=75f767e92e86611728189739fb26f4e2cdf212d9 - 'mixins': [ - 'isolate_profile_data', - ], - 'additional_compile_targets': [ - 'all' - ], - }, 'Linux Builder reclient test': { # Copied from # https://source.chromium.org/chromium/chromium/src/+/main:testing/buildbot/waterfalls.pyl;l=4844-4854;drc=75f767e92e86611728189739fb26f4e2cdf212d9 @@ -5464,36 +5444,16 @@ 'all' ], }, - 'Linux Builder reclient test untrusted': { - # Copied from - # https://source.chromium.org/chromium/chromium/src/+/main:testing/buildbot/waterfalls.pyl;l=4844-4854;drc=75f767e92e86611728189739fb26f4e2cdf212d9 - 'mixins': [ - 'isolate_profile_data', - ], - 'additional_compile_targets': [ - 'all' - ], - }, 'Mac Builder reclient staging': { 'additional_compile_targets': [ 'all', ], }, - 'Mac Builder reclient staging untrusted': { - 'additional_compile_targets': [ - 'all', - ], - }, 'Mac Builder reclient test': { 'additional_compile_targets': [ 'all', ], }, - 'Mac Builder reclient test untrusted': { - 'additional_compile_targets': [ - 'all', - ], - }, 'Simple Chrome Builder reclient staging': { # Copied from # https://source.chromium.org/chromium/chromium/src/+/main:testing/buildbot/waterfalls.pyl;l=1567;drc=e8a03fce50115b247a6032f8ed922b6db62f11f6 @@ -5501,13 +5461,6 @@ 'chromiumos_preflight', ], }, - 'Simple Chrome Builder reclient staging untrusted': { - # Copied from - # https://source.chromium.org/chromium/chromium/src/+/main:testing/buildbot/waterfalls.pyl;l=1567;drc=e8a03fce50115b247a6032f8ed922b6db62f11f6 - 'additional_compile_targets': [ - 'chromiumos_preflight', - ], - }, 'Simple Chrome Builder reclient test': { # Copied from # https://source.chromium.org/chromium/chromium/src/+/main:testing/buildbot/waterfalls.pyl;l=1567;drc=e8a03fce50115b247a6032f8ed922b6db62f11f6 @@ -5515,13 +5468,6 @@ 'chromiumos_preflight', ], }, - 'Simple Chrome Builder reclient test untrusted': { - # Copied from - # https://source.chromium.org/chromium/chromium/src/+/main:testing/buildbot/waterfalls.pyl;l=1567;drc=e8a03fce50115b247a6032f8ed922b6db62f11f6 - 'additional_compile_targets': [ - 'chromiumos_preflight', - ], - }, 'ios-simulator reclient staging': { 'additional_compile_targets': [ 'all', @@ -5536,20 +5482,6 @@ 'xctest', ], }, - 'ios-simulator reclient staging untrusted': { - 'additional_compile_targets': [ - 'all', - ], - 'mixins': [ - 'has_native_resultdb_integration', - 'isolate_profile_data', - 'mac_11_or_12_x64', - 'mac_toolchain', - 'out_dir_arg', - 'xcode_13_main', - 'xctest', - ], - }, 'ios-simulator reclient test': { 'additional_compile_targets': [ 'all', @@ -5564,20 +5496,6 @@ 'xctest', ], }, - 'ios-simulator reclient test untrusted': { - 'additional_compile_targets': [ - 'all', - ], - 'mixins': [ - 'has_native_resultdb_integration', - 'isolate_profile_data', - 'mac_11_or_12_x64', - 'mac_toolchain', - 'out_dir_arg', - 'xcode_13_main', - 'xctest', - ], - }, 'mac-arm64-rel reclient staging': { # Copied from # https://source.chromium.org/chromium/chromium/src/+/main:testing/buildbot/waterfalls.pyl;l=5119;drc=0cad2921efb9c2d4248496f10eb24aa1d9769dd4 @@ -5585,13 +5503,6 @@ 'all', ], }, - 'mac-arm64-rel reclient staging untrusted': { - # Copied from - # https://source.chromium.org/chromium/chromium/src/+/main:testing/buildbot/waterfalls.pyl;l=5119;drc=0cad2921efb9c2d4248496f10eb24aa1d9769dd4 - 'additional_compile_targets': [ - 'all', - ], - }, 'mac-arm64-rel reclient test': { # Copied from # https://source.chromium.org/chromium/chromium/src/+/main:testing/buildbot/waterfalls.pyl;l=5119;drc=0cad2921efb9c2d4248496f10eb24aa1d9769dd4 @@ -5599,13 +5510,6 @@ 'all', ], }, - 'mac-arm64-rel reclient test untrusted': { - # Copied from - # https://source.chromium.org/chromium/chromium/src/+/main:testing/buildbot/waterfalls.pyl;l=5119;drc=0cad2921efb9c2d4248496f10eb24aa1d9769dd4 - 'additional_compile_targets': [ - 'all', - ], - }, }, }, { @@ -6535,7 +6439,7 @@ 'ppapi_unittests', 'printing_unittests', 'remoting_unittests', - 'sandbox_unittests', + 'sandbox_linux_unittests', 'skia_unittests', 'sql_unittests', 'storage_unittests',
diff --git a/testing/merge_scripts/PRESUBMIT.py b/testing/merge_scripts/PRESUBMIT.py index d078892..37bb245 100644 --- a/testing/merge_scripts/PRESUBMIT.py +++ b/testing/merge_scripts/PRESUBMIT.py
@@ -13,8 +13,7 @@ def CommonChecks(input_api, output_api): return input_api.canned_checks.RunUnitTestsInDirectory( input_api, output_api, '.', [ r'^.+_test\.py$'], - run_on_python2=False, - skip_shebang_check = True) + run_on_python2=False, skip_shebang_check=True) def CheckChangeOnUpload(input_api, output_api): return CommonChecks(input_api, output_api)
diff --git a/testing/merge_scripts/standard_isolated_script_merge.py b/testing/merge_scripts/standard_isolated_script_merge.py index 61b1692..517464a 100755 --- a/testing/merge_scripts/standard_isolated_script_merge.py +++ b/testing/merge_scripts/standard_isolated_script_merge.py
@@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Copyright 2017 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file.
diff --git a/testing/variations/fieldtrial_testing_config.json b/testing/variations/fieldtrial_testing_config.json index 703d048..97a87ab 100644 --- a/testing/variations/fieldtrial_testing_config.json +++ b/testing/variations/fieldtrial_testing_config.json
@@ -269,6 +269,21 @@ ] } ], + "AndroidScrollOptimizations": [ + { + "platforms": [ + "android" + ], + "experiments": [ + { + "name": "Enabled", + "enable_features": [ + "AndroidScrollOptimizations" + ] + } + ] + } + ], "AndroidSearchEnginePromoV2": [ { "platforms": [ @@ -6246,7 +6261,8 @@ { "name": "Enabled", "enable_features": [ - "OmniboxDocumentProviderDedupingOptimization" + "OmniboxDocumentProviderDedupingOptimization", + "OmniboxStrippedGurlOptimization" ] } ]
diff --git a/third_party/android_deps/BUILD.gn b/third_party/android_deps/BUILD.gn index eaabf9a..5b3cda05 100644 --- a/third_party/android_deps/BUILD.gn +++ b/third_party/android_deps/BUILD.gn
@@ -43,12 +43,6 @@ ":org_robolectric_utils_java", ":org_robolectric_utils_reflector_java", ] - - # Temporarily keep compiling against robolectric until every target is - # migarated to robolectric_library. See https://crbug.com/1296632 - input_jars_paths = [ - "//third_party/robolectric/lib/android-all-12-robolectric-7732740.jar", - ] } java_group("material_design_java") {
diff --git a/third_party/blink/common/features.cc b/third_party/blink/common/features.cc index 59679ced..0363153f 100644 --- a/third_party/blink/common/features.cc +++ b/third_party/blink/common/features.cc
@@ -282,14 +282,9 @@ #endif }; -const char kPrerender2MaxNumOfRunningPrerendersForSpeculationRules[] = - "max_num_of_running_prerenders"; - const base::Feature kPrerender2MemoryControls{"Prerender2MemoryControls", base::FEATURE_ENABLED_BY_DEFAULT}; const char kPrerender2MemoryThresholdParamName[] = "memory_threshold_in_mb"; -const char kPrerender2MemoryAcceptablePercentOfSystemMemoryParamName[] = - "acceptable_percent_of_system_memory"; bool IsPrerender2Enabled() { return base::FeatureList::IsEnabled(blink::features::kPrerender2);
diff --git a/third_party/blink/public/common/features.h b/third_party/blink/public/common/features.h index 0561909..25834af 100644 --- a/third_party/blink/public/common/features.h +++ b/third_party/blink/public/common/features.h
@@ -130,10 +130,6 @@ // Enables the Prerender2 feature: https://crbug.com/1126305 // But see comments in the .cc file also. BLINK_COMMON_EXPORT extern const base::Feature kPrerender2; -// The number of prerenderings that can run concurrently. This only applies for -// prerenderings triggered by speculation rules. -BLINK_COMMON_EXPORT extern const char - kPrerender2MaxNumOfRunningPrerendersForSpeculationRules[]; // Enables restrictions on how much memory is required on a device to use // Prerender2. This is a separate feature from kPrerender2 so that the // restrictions can be disabled entirely to allow bots to run the tests without @@ -142,13 +138,8 @@ BLINK_COMMON_EXPORT extern const base::Feature kPrerender2MemoryControls; // A field trial param that controls how much physical memory is required on a // device to use Prerender2. If the device's physical memory does not exceed -// this value, prerenderings are cancelled. +// this value, pages will not be prerendered even when kPrerender2 is enabled. BLINK_COMMON_EXPORT extern const char kPrerender2MemoryThresholdParamName[]; -// A field trial param that controls how much physical memory is allowed to be -// used by Chrome. If the current memory usage in Chrome exceeds this percent, -// pages will not be prerendered even when kPrerender2 is enabled. -BLINK_COMMON_EXPORT extern const char - kPrerender2MemoryAcceptablePercentOfSystemMemoryParamName[]; // Returns true when Prerender2 feature is enabled. BLINK_COMMON_EXPORT bool IsPrerender2Enabled();
diff --git a/third_party/blink/public/devtools_protocol/browser_protocol.pdl b/third_party/blink/public/devtools_protocol/browser_protocol.pdl index f204692..174745f 100644 --- a/third_party/blink/public/devtools_protocol/browser_protocol.pdl +++ b/third_party/blink/public/devtools_protocol/browser_protocol.pdl
@@ -8412,10 +8412,6 @@ EmbedderTriggeredAndSameOriginRedirected EmbedderTriggeredAndCrossOriginRedirected EmbedderTriggeredAndDestroyed - MemoryLimitExceeded - # Prerenders can be cancelled when Chrome uses excessive memory. This is - # recorded when it fails to get the memory usage. - FailToGetMemoryUsage # Fired when a prerender attempt is completed. event prerenderAttemptCompleted
diff --git a/third_party/blink/renderer/core/animation/animation.cc b/third_party/blink/renderer/core/animation/animation.cc index f0f97c5..b8a421d 100644 --- a/third_party/blink/renderer/core/animation/animation.cc +++ b/third_party/blink/renderer/core/animation/animation.cc
@@ -2233,16 +2233,20 @@ start_time_.value_or(AnimationTimeDelta()); // 3. Let effective timeline time be (animation's current time / animation's // playback rate) + effective start time + // TODO(crbug.com/1329159): Spec needs updating since a finished animation + // sets it's hold time which effectively caps current time at end time. AnimationTimeDelta effective_timeline_time = - (CurrentTimeInternal().value_or(AnimationTimeDelta()) / playback_rate_) + + (UnlimitedCurrentTime().value_or(AnimationTimeDelta()) / playback_rate_) + effective_start_time; + // 4. Let effective timeline progress be (effective timeline time / timeline // duration) // 5. If effective timeline progress is 0 or 1, return true, // We avoid the division here but it is effectively the same as 4 & 5 above. - return effective_timeline_time.is_zero() || - IsWithinAnimationTimeTolerance(effective_timeline_time, - timeline_duration.value()); + bool result = effective_timeline_time.is_zero() || + IsWithinAnimationTimeTolerance(effective_timeline_time, + timeline_duration.value()); + return result; // Issue: This procedure is not strictly correct for a paused // animation if the animation's current time is explicitly set, as this can
diff --git a/third_party/blink/renderer/core/animation/animation_effect.cc b/third_party/blink/renderer/core/animation/animation_effect.cc index 3dd2d17a..3d1ac67 100644 --- a/third_party/blink/renderer/core/animation/animation_effect.cc +++ b/third_party/blink/renderer/core/animation/animation_effect.cc
@@ -264,10 +264,17 @@ (inherited_playback_rate < 0) ? Timing::AnimationDirection::kBackwards : Timing::AnimationDirection::kForwards; - bool needs_update = needs_update_ || last_update_time_ != inherited_time || - (owner_ && owner_->EffectSuppressed()); + bool needs_update = + needs_update_ || last_update_time_ != inherited_time || + last_at_progress_timeline_boundary_ != at_progress_timeline_boundary || + (owner_ && owner_->EffectSuppressed()); needs_update_ = false; last_update_time_ = inherited_time; + // A finished animation saturates inherited time at 0 or effect end. + // If we hit a progress timeline boundary and then enter the after phase + // timeline time doesn't change. Thus, we need to track boundary transitions + // as well since this can affect the phase (active vs after). + last_at_progress_timeline_boundary_ = at_progress_timeline_boundary; if (needs_update) { Timing::CalculatedTiming calculated = SpecifiedTiming().CalculateTimings(
diff --git a/third_party/blink/renderer/core/animation/animation_effect.h b/third_party/blink/renderer/core/animation/animation_effect.h index 549989e4..b857b0b8 100644 --- a/third_party/blink/renderer/core/animation/animation_effect.h +++ b/third_party/blink/renderer/core/animation/animation_effect.h
@@ -189,6 +189,7 @@ mutable absl::optional<Timing::NormalizedTiming> normalized_; mutable bool needs_update_; mutable absl::optional<AnimationTimeDelta> last_update_time_; + mutable bool last_at_progress_timeline_boundary_ = false; AnimationTimeDelta cancel_time_; const Timing::CalculatedTiming& EnsureCalculated() const; void EnsureNormalizedTiming() const;
diff --git a/third_party/blink/renderer/core/animation/css/css_scroll_timeline.cc b/third_party/blink/renderer/core/animation/css/css_scroll_timeline.cc index 364d135..26282acc 100644 --- a/third_party/blink/renderer/core/animation/css/css_scroll_timeline.cc +++ b/third_party/blink/renderer/core/animation/css/css_scroll_timeline.cc
@@ -128,6 +128,7 @@ options.direction_), rule_(options.rule_) { DCHECK(rule_); + SnapshotState(); } bool CSSScrollTimeline::Matches(const Options& options) const {
diff --git a/third_party/blink/renderer/core/animation/scroll_timeline.cc b/third_party/blink/renderer/core/animation/scroll_timeline.cc index 8824f62..c2fbd95 100644 --- a/third_party/blink/renderer/core/animation/scroll_timeline.cc +++ b/third_party/blink/renderer/core/animation/scroll_timeline.cc
@@ -85,9 +85,18 @@ if (document.InQuirksMode()) document.UpdateStyleAndLayoutTree(); - return MakeGarbageCollected<ScrollTimeline>( - &document, ReferenceType::kSource, - source.value_or(document.ScrollingElementNoLayout()), orientation); + return Create(&document, source.value_or(document.ScrollingElementNoLayout()), + orientation); +} + +ScrollTimeline* ScrollTimeline::Create(Document* document, + Element* source, + ScrollDirection orientation) { + ScrollTimeline* scroll_timeline = MakeGarbageCollected<ScrollTimeline>( + document, ReferenceType::kSource, source, orientation); + scroll_timeline->SnapshotState(); + + return scroll_timeline; } bool ScrollTimeline::StringToScrollDirection( @@ -121,7 +130,6 @@ reference_element_(reference), orientation_(orientation) { UpdateResolvedSource(); - SnapshotState(); } bool ScrollTimeline::IsActive() const { @@ -157,8 +165,8 @@ } V8CSSNumberish* ScrollTimeline::currentTime() { - // time returns either in milliseconds or a 0 to 100 value representing the - // progress of the timeline + // Compute time as a percentage based on the relative scroll position, where + // the start offset corresponds to 0% and the end to 100%. auto current_time = timeline_state_snapshotted_.current_time; if (current_time) { @@ -218,39 +226,33 @@ // use that everywhere. current_offset = std::abs(current_offset); - // TODO(crbug.com/1329159): Override in ViewTimeline to compute offsets - // corresponding to the 'cover' range. - double start_offset = GetStartOffset(scrollable_area, physical_orientation); - double end_offset = GetEndOffset(scrollable_area, physical_orientation); + absl::optional<ScrollOffsets> scroll_offsets = + CalculateOffsets(scrollable_area, physical_orientation); + DCHECK(scroll_offsets); // TODO(crbug.com/1338167): Update once // github.com/w3c/csswg-drafts/issues/7401 is resolved. - double progress = - (end_offset == start_offset) - ? 1 - : (current_offset - start_offset) / (end_offset - start_offset); + double progress = (scroll_offsets->start == scroll_offsets->end) + ? 1 + : (current_offset - scroll_offsets->start) / + (scroll_offsets->end - scroll_offsets->start); base::TimeDelta duration = base::Seconds(GetDuration()->InSecondsF()); absl::optional<base::TimeDelta> calculated_current_time = base::Milliseconds(progress * duration.InMillisecondsF()); - return {TimelinePhase::kActive, calculated_current_time, - absl::make_optional<ScrollOffsets>(start_offset, end_offset)}; + return {TimelinePhase::kActive, calculated_current_time, scroll_offsets}; } -double ScrollTimeline::GetStartOffset( - PaintLayerScrollableArea* scrollable_area, - ScrollOrientation physical_orientation) const { - return 0; -} - -double ScrollTimeline::GetEndOffset( +absl::optional<ScrollOffsets> ScrollTimeline::CalculateOffsets( PaintLayerScrollableArea* scrollable_area, ScrollOrientation physical_orientation) const { ScrollOffset scroll_dimensions = scrollable_area->MaximumScrollOffset() - scrollable_area->MinimumScrollOffset(); - return physical_orientation == kHorizontalScroll ? scroll_dimensions.x() - : scroll_dimensions.y(); + double end_offset = physical_orientation == kHorizontalScroll + ? scroll_dimensions.x() + : scroll_dimensions.y(); + return absl::make_optional<ScrollOffsets>(0, end_offset); } // Scroll-linked animations are initialized with the start time of zero.
diff --git a/third_party/blink/renderer/core/animation/scroll_timeline.h b/third_party/blink/renderer/core/animation/scroll_timeline.h index e3cdcc5..8f896ef1 100644 --- a/third_party/blink/renderer/core/animation/scroll_timeline.h +++ b/third_party/blink/renderer/core/animation/scroll_timeline.h
@@ -36,9 +36,9 @@ class CORE_EXPORT ScrollTimeline : public AnimationTimeline { DEFINE_WRAPPERTYPEINFO(); + public: using ScrollOffsets = cc::ScrollTimeline::ScrollOffsets; - public: enum ScrollDirection { kBlock, kInline, @@ -58,6 +58,13 @@ ScrollTimelineOptions*, ExceptionState&); + static ScrollTimeline* Create(Document* document, + Element* source, + ScrollDirection orientation); + + // Construct ScrollTimeline objects through one of the Create methods, which + // perform initial snapshots, as it can't be done during the constructor due + // to possibly depending on overloaded functions. ScrollTimeline(Document*, ReferenceType reference_type, Element* reference, @@ -166,10 +173,11 @@ // Scroll offsets corresponding to 0% and 100% progress. By default, these // correspond to the scroll range of the container. - virtual double GetStartOffset(PaintLayerScrollableArea* scrollable_area, - ScrollOrientation physical_orientation) const; - virtual double GetEndOffset(PaintLayerScrollableArea* scrollable_area, - ScrollOrientation physical_orientation) const; + virtual absl::optional<ScrollOffsets> CalculateOffsets( + PaintLayerScrollableArea* scrollable_area, + ScrollOrientation physical_orientation) const; + + void SnapshotState(); private: FRIEND_TEST_ALL_PREFIXES(ScrollTimelineTest, MultipleScrollOffsetsClamping); @@ -177,14 +185,13 @@ // https://wicg.github.io/scroll-animations/#avoiding-cycles // Snapshots scroll timeline current time and phase. // Called once per animation frame. - void SnapshotState(); bool ComputeIsActive() const; PhaseAndTime ComputeCurrentPhaseAndTime() const; struct TimelineState { // TODO(crbug.com/1338167): Remove phase as it can be inferred from // current_time. - TimelinePhase phase; + TimelinePhase phase = TimelinePhase::kInactive; absl::optional<base::TimeDelta> current_time; absl::optional<ScrollOffsets> scroll_offsets;
diff --git a/third_party/blink/renderer/core/animation/scroll_timeline_test.cc b/third_party/blink/renderer/core/animation/scroll_timeline_test.cc index 5bac6d7..598ca25 100644 --- a/third_party/blink/renderer/core/animation/scroll_timeline_test.cc +++ b/third_party/blink/renderer/core/animation/scroll_timeline_test.cc
@@ -77,7 +77,9 @@ ScrollTimeline::ReferenceType::kSource, source, ScrollTimeline::kVertical), - next_service_scheduled_(false) {} + next_service_scheduled_(false) { + SnapshotState(); + } void ScheduleServiceOnNextFrame() override { ScrollTimeline::ScheduleServiceOnNextFrame(); @@ -171,10 +173,8 @@ // source. The alternative approach would require us to remove the // documentElement from the document. Element* scroll_source = nullptr; - Persistent<ScrollTimeline> scroll_timeline = - MakeGarbageCollected<ScrollTimeline>( - &GetDocument(), ScrollTimeline::ReferenceType::kSource, scroll_source, - ScrollTimeline::kBlock); + Persistent<ScrollTimeline> scroll_timeline = ScrollTimeline::Create( + &GetDocument(), scroll_source, ScrollTimeline::kBlock); // Sanity checks. ASSERT_EQ(scroll_timeline->source(), nullptr);
diff --git a/third_party/blink/renderer/core/animation/scroll_timeline_util_test.cc b/third_party/blink/renderer/core/animation/scroll_timeline_util_test.cc index dc50248..1243031 100644 --- a/third_party/blink/renderer/core/animation/scroll_timeline_util_test.cc +++ b/third_party/blink/renderer/core/animation/scroll_timeline_util_test.cc
@@ -74,9 +74,8 @@ // source. The alternative approach would require us to remove the // documentElement from the document. Element* source = nullptr; - ScrollTimeline* timeline = MakeGarbageCollected<ScrollTimeline>( - &GetDocument(), ScrollTimeline::ReferenceType::kSource, source, - ScrollTimeline::kBlock); + ScrollTimeline* timeline = + ScrollTimeline::Create(&GetDocument(), source, ScrollTimeline::kBlock); scoped_refptr<CompositorScrollTimeline> compositor_timeline = ToCompositorScrollTimeline(timeline);
diff --git a/third_party/blink/renderer/core/animation/view_timeline.cc b/third_party/blink/renderer/core/animation/view_timeline.cc index b75685a..13d12d64 100644 --- a/third_party/blink/renderer/core/animation/view_timeline.cc +++ b/third_party/blink/renderer/core/animation/view_timeline.cc
@@ -12,6 +12,24 @@ namespace blink { +namespace { + +double ComputeOffset(LayoutBox* subject, + LayoutBox* source, + ScrollOrientation physical_orientation) { + Element* source_element = DynamicTo<Element>(source->GetNode()); + MapCoordinatesFlags flags = kIgnoreScrollOffset; + gfx::PointF point = gfx::PointF( + subject->LocalToAncestorPoint(PhysicalOffset(), source, flags)); + + if (physical_orientation == kHorizontalScroll) + return point.x() - source_element->clientLeft(); + else + return point.y() - source_element->clientTop(); +} + +} // end namespace + ViewTimeline* ViewTimeline::Create(Document& document, ViewTimelineOptions* options, ExceptionState& exception_state) { @@ -23,8 +41,10 @@ "Invalid axis"); return nullptr; } - - return MakeGarbageCollected<ViewTimeline>(&document, subject, orientation); + ViewTimeline* view_timeline = + MakeGarbageCollected<ViewTimeline>(&document, subject, orientation); + view_timeline->SnapshotState(); + return view_timeline; } ViewTimeline::ViewTimeline(Document* document, @@ -33,6 +53,47 @@ : ScrollTimeline(document, ReferenceType::kNearestAncestor, subject, - orientation) {} + orientation) { + // Ensure that the timeline stays alive as long as the subject. + if (subject) + subject->RegisterScrollTimeline(this); +} + +absl::optional<ScrollTimeline::ScrollOffsets> ViewTimeline::CalculateOffsets( + PaintLayerScrollableArea* scrollable_area, + ScrollOrientation physical_orientation) const { + ScrollOffset scroll_dimensions = scrollable_area->MaximumScrollOffset() - + scrollable_area->MinimumScrollOffset(); + + DCHECK(subject()); + LayoutBox* layout_box = subject()->GetLayoutBox(); + DCHECK(layout_box); + Element* source = SourceInternal(); + DCHECK(source); + LayoutBox* source_layout = source->GetLayoutBox(); + DCHECK(source_layout); + + double target_offset = + ComputeOffset(layout_box, source_layout, physical_orientation); + double target_size = 0; + double viewport_size = 0; + double max_offset = 0; + if (physical_orientation == kHorizontalScroll) { + target_size = layout_box->Size().Width().ToDouble(); + viewport_size = scrollable_area->VisibleScrollSnapportRect().Width(); + max_offset = scroll_dimensions.x(); + } else { + target_size = layout_box->Size().Height().ToDouble(); + viewport_size = scrollable_area->VisibleScrollSnapportRect().Height(); + max_offset = scroll_dimensions.y(); + } + + // Clamping the offsets to the scrollable range. It is unclear if this is the + // desired behavior as it also makes sense not to clamp. + // TODO(crbug.com/1329159): Revisit once clarified in the spec. + double start_offset = std::max<double>(target_offset - viewport_size, 0); + double end_offset = std::min<double>(target_offset + target_size, max_offset); + return absl::make_optional<ScrollOffsets>(start_offset, end_offset); +} } // namespace blink
diff --git a/third_party/blink/renderer/core/animation/view_timeline.h b/third_party/blink/renderer/core/animation/view_timeline.h index 18a4912..c19e7127 100644 --- a/third_party/blink/renderer/core/animation/view_timeline.h +++ b/third_party/blink/renderer/core/animation/view_timeline.h
@@ -35,6 +35,11 @@ // IDL API implementation. Element* subject() const { return ReferenceElement(); } + + protected: + absl::optional<ScrollOffsets> CalculateOffsets( + PaintLayerScrollableArea* scrollable_area, + ScrollOrientation physical_orientation) const override; }; template <>
diff --git a/third_party/blink/renderer/core/css/style_engine.cc b/third_party/blink/renderer/core/css/style_engine.cc index 97227370..8300a187 100644 --- a/third_party/blink/renderer/core/css/style_engine.cc +++ b/third_party/blink/renderer/core/css/style_engine.cc
@@ -80,6 +80,7 @@ #include "third_party/blink/renderer/core/dom/shadow_root.h" #include "third_party/blink/renderer/core/dom/text.h" #include "third_party/blink/renderer/core/frame/settings.h" +#include "third_party/blink/renderer/core/frame/visual_viewport.h" #include "third_party/blink/renderer/core/html/forms/html_field_set_element.h" #include "third_party/blink/renderer/core/html/forms/html_select_element.h" #include "third_party/blink/renderer/core/html/html_body_element.h" @@ -140,13 +141,22 @@ font_selector_->RegisterForInvalidationCallbacks(this); if (const auto* owner = document.GetFrame()->Owner()) owner_color_scheme_ = owner->GetColorScheme(); - } - if (document.IsInMainFrame()) - viewport_resolver_ = MakeGarbageCollected<ViewportStyleResolver>(document); - if (auto* settings = GetDocument().GetSettings()) { - preferred_color_scheme_ = settings->GetPreferredColorScheme(); + + // Viewport styles are only processed in the main frame of a page with an + // active viewport. That is, a pages that their own independently zoomable + // viewport: the outermost main frame and portals. + DCHECK(document.GetPage()); + VisualViewport& viewport = document.GetPage()->GetVisualViewport(); + if (document.IsInMainFrame() && viewport.IsActiveViewport()) { + viewport_resolver_ = + MakeGarbageCollected<ViewportStyleResolver>(document); + } + + DCHECK(document.GetSettings()); + preferred_color_scheme_ = document.GetSettings()->GetPreferredColorScheme(); UpdateColorSchemeMetrics(); } + forced_colors_ = WebThemeEngineHelper::GetNativeThemeEngine()->GetForcedColors(); UpdateForcedBackgroundColor();
diff --git a/third_party/blink/renderer/core/frame/frame_test_helpers.cc b/third_party/blink/renderer/core/frame/frame_test_helpers.cc index 755bf03..69509fe 100644 --- a/third_party/blink/renderer/core/frame/frame_test_helpers.cc +++ b/third_party/blink/renderer/core/frame/frame_test_helpers.cc
@@ -852,7 +852,16 @@ GetWidgetInputHandlerManager()->DispatchEvent( std::make_unique<WebCoalescedInputEvent>(event.Clone(), ui::LatencyInfo()), - mojom::blink::WidgetInputHandler::DispatchEventCallback()); + base::BindOnce( + [](WeakMember<TestWebFrameWidget> widget, + mojom::blink::InputEventResultSource, const ui::LatencyInfo&, + mojom::blink::InputEventResultState, + mojom::blink::DidOverscrollParamsPtr overscroll, + mojom::blink::TouchActionOptionalPtr) { + if (widget) + widget->last_overscroll_ = std::move(overscroll); + }, + this)); FlushInputHandlerTasks(); }
diff --git a/third_party/blink/renderer/core/frame/frame_test_helpers.h b/third_party/blink/renderer/core/frame/frame_test_helpers.h index 23901e8b..a818532 100644 --- a/third_party/blink/renderer/core/frame/frame_test_helpers.h +++ b/third_party/blink/renderer/core/frame/frame_test_helpers.h
@@ -272,6 +272,9 @@ // WebFrameWidgetImpl::Resize) to set the initial size of the viewport. // void DispatchThroughCcInputHandler(const WebInputEvent& event); + const mojom::blink::DidOverscrollParamsPtr& last_overscroll() const { + return last_overscroll_; + } using WebFrameWidgetImpl::GetOriginalScreenInfo; @@ -297,6 +300,7 @@ std::unique_ptr<TestWidgetInputHandlerHost> widget_input_handler_host_; viz::FrameSinkId frame_sink_id_; std::unique_ptr<TestWebFrameWidgetHost> widget_host_; + mojom::blink::DidOverscrollParamsPtr last_overscroll_; }; class TestWebViewClient : public WebViewClient {
diff --git a/third_party/blink/renderer/core/frame/web_frame_test.cc b/third_party/blink/renderer/core/frame/web_frame_test.cc index d085b99..6af23a5 100644 --- a/third_party/blink/renderer/core/frame/web_frame_test.cc +++ b/third_party/blink/renderer/core/frame/web_frame_test.cc
@@ -37,6 +37,7 @@ #include "base/strings/stringprintf.h" #include "base/unguessable_token.h" #include "build/build_config.h" +#include "cc/base/features.h" #include "cc/input/overscroll_behavior.h" #include "cc/layers/picture_layer.h" #include "cc/paint/paint_op_buffer.h" @@ -210,6 +211,7 @@ #include "ui/base/ime/mojom/text_input_state.mojom-blink.h" #include "ui/base/mojom/ui_base_types.mojom-shared.h" #include "ui/events/keycodes/dom/dom_key.h" +#include "ui/gfx/geometry/test/geometry_util.h" #include "ui/gfx/geometry/transform.h" #include "v8/include/v8.h" @@ -10345,43 +10347,6 @@ local_child->GetDocument()->Fetcher()->GetProperties().IsPaused()); } -class OverscrollWidgetInputHandlerHost - : public frame_test_helpers::TestWidgetInputHandlerHost { - public: - MOCK_METHOD5(DidOverscroll, - void(const gfx::Vector2dF&, - const gfx::Vector2dF&, - const gfx::PointF&, - const gfx::Vector2dF&, - cc::OverscrollBehavior)); - - void DidOverscroll(mojom::blink::DidOverscrollParamsPtr params) override { - DidOverscroll(params->latest_overscroll_delta, - params->accumulated_overscroll, - params->causal_event_viewport_point, - params->current_fling_velocity, params->overscroll_behavior); - } -}; - -class OverscrollWebFrameWidget : public frame_test_helpers::TestWebFrameWidget { - public: - template <typename... Args> - explicit OverscrollWebFrameWidget(Args&&... args) - : frame_test_helpers::TestWebFrameWidget(std::forward<Args>(args)...) {} - - frame_test_helpers::TestWidgetInputHandlerHost* GetInputHandlerHost() - override { - return &input_handler_host_; - } - - OverscrollWidgetInputHandlerHost& GetOverscrollWidgetInputHandlerHost() { - return input_handler_host_; - } - - private: - OverscrollWidgetInputHandlerHost input_handler_host_; -}; - class WebFrameOverscrollTest : public WebFrameTest, public testing::WithParamInterface<WebGestureDevice> { @@ -10389,9 +10354,9 @@ WebFrameOverscrollTest() {} protected: - WebCoalescedInputEvent GenerateEvent(WebInputEvent::Type type, - float delta_x = 0.0, - float delta_y = 0.0) { + WebGestureEvent GenerateEvent(WebInputEvent::Type type, + float delta_x = 0.0, + float delta_y = 0.0) { WebGestureEvent event(type, WebInputEvent::kNoModifiers, WebInputEvent::GetStaticTimeStampForTests(), GetParam()); @@ -10405,13 +10370,13 @@ event.data.scroll_begin.delta_x_hint = delta_x; event.data.scroll_begin.delta_y_hint = delta_y; } - return WebCoalescedInputEvent(event, ui::LatencyInfo()); + return event; } void ScrollBegin(frame_test_helpers::WebViewHelper* web_view_helper, float delta_x_hint, float delta_y_hint) { - web_view_helper->GetWebView()->MainFrameWidget()->HandleInputEvent( + web_view_helper->GetMainFrameWidget()->DispatchThroughCcInputHandler( GenerateEvent(WebInputEvent::Type::kGestureScrollBegin, delta_x_hint, delta_y_hint)); } @@ -10419,15 +10384,36 @@ void ScrollUpdate(frame_test_helpers::WebViewHelper* web_view_helper, float delta_x, float delta_y) { - web_view_helper->GetWebView()->MainFrameWidget()->HandleInputEvent( + web_view_helper->GetMainFrameWidget()->DispatchThroughCcInputHandler( GenerateEvent(WebInputEvent::Type::kGestureScrollUpdate, delta_x, delta_y)); } void ScrollEnd(frame_test_helpers::WebViewHelper* web_view_helper) { - web_view_helper->GetWebView()->MainFrameWidget()->HandleInputEvent( + web_view_helper->GetMainFrameWidget()->DispatchThroughCcInputHandler( GenerateEvent(WebInputEvent::Type::kGestureScrollEnd)); } + + void ExpectOverscrollParams( + const mojom::blink::DidOverscrollParamsPtr& params, + gfx::Vector2dF expected_accumulated_overscroll, + gfx::Vector2dF expected_latest_overscroll_delta, + gfx::Vector2dF expected_current_fling_velocity, + gfx::PointF expected_causal_event_viewport_point, + cc::OverscrollBehavior expected_overscroll_behavior) { + // Rounding errors are sometimes too big for DidOverscrollParams::Equals. + const float kAbsError = 0.001; + + EXPECT_VECTOR2DF_NEAR(expected_accumulated_overscroll, + params->accumulated_overscroll, kAbsError); + EXPECT_VECTOR2DF_NEAR(expected_latest_overscroll_delta, + params->latest_overscroll_delta, kAbsError); + EXPECT_VECTOR2DF_NEAR(expected_current_fling_velocity, + params->current_fling_velocity, kAbsError); + EXPECT_POINTF_NEAR(expected_causal_event_viewport_point, + params->causal_event_viewport_point, kAbsError); + EXPECT_EQ(expected_overscroll_behavior, params->overscroll_behavior); + } }; INSTANTIATE_TEST_SUITE_P(All, @@ -10438,128 +10424,92 @@ TEST_P(WebFrameOverscrollTest, AccumulatedRootOverscrollAndUnsedDeltaValuesOnOverscroll) { RegisterMockedHttpURLLoad("overscroll/overscroll.html"); - frame_test_helpers::CreateTestWebFrameWidgetCallback create_widget_callback = - base::BindRepeating( - &frame_test_helpers::WebViewHelper::CreateTestWebFrameWidget< - OverscrollWebFrameWidget>); - frame_test_helpers::WebViewHelper web_view_helper(create_widget_callback); + frame_test_helpers::WebViewHelper web_view_helper; web_view_helper.InitializeAndLoad(base_url_ + "overscroll/overscroll.html", nullptr, nullptr, ConfigureAndroid); web_view_helper.Resize(gfx::Size(200, 200)); - OverscrollWebFrameWidget* widget = static_cast<OverscrollWebFrameWidget*>( - web_view_helper.GetMainFrameWidget()); + auto* widget = web_view_helper.GetMainFrameWidget(); + auto* layer_tree_host = web_view_helper.GetLayerTreeHost(); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); // Calculation of accumulatedRootOverscroll and unusedDelta on multiple // scrollUpdate. ScrollBegin(&web_view_helper, -300, -316); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(8, 16), gfx::Vector2dF(8, 16), - gfx::PointF(100, 100), gfx::Vector2dF(), - kOverscrollBehaviorAuto)); ScrollUpdate(&web_view_helper, -308, -316); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ExpectOverscrollParams(widget->last_overscroll(), gfx::Vector2dF(8, 16), + gfx::Vector2dF(8, 16), gfx::Vector2dF(), + gfx::PointF(100, 100), kOverscrollBehaviorAuto); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(0, 13), gfx::Vector2dF(8, 29), - gfx::PointF(100, 100), gfx::Vector2dF(), - kOverscrollBehaviorAuto)); ScrollUpdate(&web_view_helper, 0, -13); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ExpectOverscrollParams(widget->last_overscroll(), gfx::Vector2dF(8, 29), + gfx::Vector2dF(0, 13), gfx::Vector2dF(), + gfx::PointF(100, 100), kOverscrollBehaviorAuto); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(20, 13), gfx::Vector2dF(28, 42), - gfx::PointF(100, 100), gfx::Vector2dF(), - kOverscrollBehaviorAuto)); ScrollUpdate(&web_view_helper, -20, -13); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ExpectOverscrollParams(widget->last_overscroll(), gfx::Vector2dF(28, 42), + gfx::Vector2dF(20, 13), gfx::Vector2dF(), + gfx::PointF(100, 100), kOverscrollBehaviorAuto); // Overscroll is not reported. - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(_, _, _, _, _)) - .Times(0); ScrollUpdate(&web_view_helper, 0, 1); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + EXPECT_TRUE(widget->last_overscroll().is_null()); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(_, _, _, _, _)) - .Times(0); ScrollUpdate(&web_view_helper, 1, 0); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + EXPECT_TRUE(widget->last_overscroll().is_null()); // Overscroll is reported. - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(0, -701), gfx::Vector2dF(0, -701), - gfx::PointF(100, 100), gfx::Vector2dF(), - kOverscrollBehaviorAuto)); ScrollUpdate(&web_view_helper, 0, 1000); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ExpectOverscrollParams(widget->last_overscroll(), gfx::Vector2dF(0, -701), + gfx::Vector2dF(0, -701), gfx::Vector2dF(), + gfx::PointF(100, 100), kOverscrollBehaviorAuto); // Overscroll is not reported. - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(_, _, _, _, _)) - .Times(0); ScrollEnd(&web_view_helper); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + EXPECT_TRUE(widget->last_overscroll().is_null()); } TEST_P(WebFrameOverscrollTest, AccumulatedOverscrollAndUnusedDeltaValuesOnDifferentAxesOverscroll) { RegisterMockedHttpURLLoad("overscroll/div-overscroll.html"); - - frame_test_helpers::CreateTestWebFrameWidgetCallback create_widget_callback = - base::BindRepeating( - &frame_test_helpers::WebViewHelper::CreateTestWebFrameWidget< - OverscrollWebFrameWidget>); - frame_test_helpers::WebViewHelper web_view_helper(create_widget_callback); + frame_test_helpers::WebViewHelper web_view_helper; web_view_helper.InitializeAndLoad( base_url_ + "overscroll/div-overscroll.html", nullptr, nullptr, ConfigureAndroid); web_view_helper.Resize(gfx::Size(200, 200)); + auto* widget = web_view_helper.GetMainFrameWidget(); + auto* layer_tree_host = web_view_helper.GetLayerTreeHost(); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ScrollBegin(&web_view_helper, 0, -316); - OverscrollWebFrameWidget* widget = static_cast<OverscrollWebFrameWidget*>( - web_view_helper.GetMainFrameWidget()); - // Scroll the Div to the end. - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(_, _, _, _, _)) - .Times(0); ScrollUpdate(&web_view_helper, 0, -316); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + EXPECT_TRUE(widget->last_overscroll().is_null()); ScrollEnd(&web_view_helper); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ScrollBegin(&web_view_helper, 0, -100); // Now On Scrolling DIV, scroll is bubbled and root layer is over-scrolled. - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(0, 100), gfx::Vector2dF(0, 100), - gfx::PointF(100, 100), gfx::Vector2dF(), - kOverscrollBehaviorAuto)); ScrollUpdate(&web_view_helper, 0, -100); ScrollUpdate(&web_view_helper, 0, -100); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ExpectOverscrollParams(widget->last_overscroll(), gfx::Vector2dF(0, 100), + gfx::Vector2dF(0, 100), gfx::Vector2dF(), + gfx::PointF(100, 100), kOverscrollBehaviorAuto); // TODO(bokan): This has never worked but by the accident that this test was // being run in a WebView without a size. This test should be fixed along with @@ -10584,100 +10534,83 @@ TEST_P(WebFrameOverscrollTest, RootLayerOverscrolledOnInnerDivOverScroll) { RegisterMockedHttpURLLoad("overscroll/div-overscroll.html"); - frame_test_helpers::CreateTestWebFrameWidgetCallback create_widget_callback = - base::BindRepeating( - &frame_test_helpers::WebViewHelper::CreateTestWebFrameWidget< - OverscrollWebFrameWidget>); - frame_test_helpers::WebViewHelper web_view_helper(create_widget_callback); + frame_test_helpers::WebViewHelper web_view_helper; web_view_helper.InitializeAndLoad( base_url_ + "overscroll/div-overscroll.html", nullptr, nullptr, ConfigureAndroid); web_view_helper.Resize(gfx::Size(200, 200)); + auto* widget = web_view_helper.GetMainFrameWidget(); + auto* layer_tree_host = web_view_helper.GetLayerTreeHost(); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ScrollBegin(&web_view_helper, 0, -316); - OverscrollWebFrameWidget* widget = static_cast<OverscrollWebFrameWidget*>( - web_view_helper.GetMainFrameWidget()); // Scroll the Div to the end. - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(_, _, _, _, _)) - .Times(0); ScrollUpdate(&web_view_helper, 0, -316); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + EXPECT_TRUE(widget->last_overscroll().is_null()); ScrollEnd(&web_view_helper); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ScrollBegin(&web_view_helper, 0, -150); // Now On Scrolling DIV, scroll is bubbled and root layer is over-scrolled. - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(0, 50), gfx::Vector2dF(0, 50), - gfx::PointF(100, 100), gfx::Vector2dF(), - kOverscrollBehaviorAuto)); ScrollUpdate(&web_view_helper, 0, -150); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ExpectOverscrollParams(widget->last_overscroll(), gfx::Vector2dF(0, 50), + gfx::Vector2dF(0, 50), gfx::Vector2dF(), + gfx::PointF(100, 100), kOverscrollBehaviorAuto); } TEST_P(WebFrameOverscrollTest, RootLayerOverscrolledOnInnerIFrameOverScroll) { RegisterMockedHttpURLLoad("overscroll/iframe-overscroll.html"); RegisterMockedHttpURLLoad("overscroll/scrollable-iframe.html"); - frame_test_helpers::CreateTestWebFrameWidgetCallback create_widget_callback = - base::BindRepeating( - &frame_test_helpers::WebViewHelper::CreateTestWebFrameWidget< - OverscrollWebFrameWidget>); - frame_test_helpers::WebViewHelper web_view_helper(create_widget_callback); + frame_test_helpers::WebViewHelper web_view_helper; web_view_helper.InitializeAndLoad( base_url_ + "overscroll/iframe-overscroll.html", nullptr, nullptr, ConfigureAndroid); web_view_helper.Resize(gfx::Size(200, 200)); - OverscrollWebFrameWidget* widget = static_cast<OverscrollWebFrameWidget*>( - web_view_helper.GetMainFrameWidget()); + auto* widget = web_view_helper.GetMainFrameWidget(); + auto* layer_tree_host = web_view_helper.GetLayerTreeHost(); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ScrollBegin(&web_view_helper, 0, -320); // Scroll the IFrame to the end. - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(_, _, _, _, _)) - .Times(0); - // This scroll will fully scroll the iframe but will be consumed before being // counted as overscroll. ScrollUpdate(&web_view_helper, 0, -320); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + EXPECT_TRUE(widget->last_overscroll().is_null()); // This scroll will again target the iframe but wont bubble further up. Make // sure that the unused scroll isn't handled as overscroll. ScrollUpdate(&web_view_helper, 0, -50); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + EXPECT_TRUE(widget->last_overscroll().is_null()); ScrollEnd(&web_view_helper); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ScrollBegin(&web_view_helper, 0, -150); // Now On Scrolling IFrame, scroll is bubbled and root layer is over-scrolled. - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(0, 50), gfx::Vector2dF(0, 50), - gfx::PointF(100, 100), gfx::Vector2dF(), - kOverscrollBehaviorAuto)); ScrollUpdate(&web_view_helper, 0, -150); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ExpectOverscrollParams(widget->last_overscroll(), gfx::Vector2dF(0, 50), + gfx::Vector2dF(0, 50), gfx::Vector2dF(), + gfx::PointF(100, 100), kOverscrollBehaviorAuto); ScrollEnd(&web_view_helper); } TEST_P(WebFrameOverscrollTest, ScaledPageRootLayerOverscrolled) { RegisterMockedHttpURLLoad("overscroll/overscroll.html"); - frame_test_helpers::CreateTestWebFrameWidgetCallback create_widget_callback = - base::BindRepeating( - &frame_test_helpers::WebViewHelper::CreateTestWebFrameWidget< - OverscrollWebFrameWidget>); - frame_test_helpers::WebViewHelper web_view_helper(create_widget_callback); + frame_test_helpers::WebViewHelper web_view_helper; WebViewImpl* web_view_impl = web_view_helper.InitializeAndLoad( base_url_ + "overscroll/overscroll.html", nullptr, nullptr, @@ -10685,174 +10618,117 @@ web_view_helper.Resize(gfx::Size(200, 200)); web_view_impl->SetPageScaleFactor(3.0); - OverscrollWebFrameWidget* widget = static_cast<OverscrollWebFrameWidget*>( - web_view_helper.GetMainFrameWidget()); + auto* widget = web_view_helper.GetMainFrameWidget(); + auto* layer_tree_host = web_view_helper.GetLayerTreeHost(); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + // Calculation of accumulatedRootOverscroll and unusedDelta on scaled page. - // The point is (99, 99) because we clamp in the division by 3 to 33 so when - // we go back to viewport coordinates it becomes (99, 99). + // The point is (100, 100) because that is the position GenerateEvent uses. ScrollBegin(&web_view_helper, 0, 30); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(0, -30), gfx::Vector2dF(0, -30), - gfx::PointF(99, 99), gfx::Vector2dF(), - kOverscrollBehaviorAuto)); ScrollUpdate(&web_view_helper, 0, 30); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ExpectOverscrollParams(widget->last_overscroll(), gfx::Vector2dF(0, -30), + gfx::Vector2dF(0, -30), gfx::Vector2dF(), + gfx::PointF(100, 100), kOverscrollBehaviorAuto); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(0, -30), gfx::Vector2dF(0, -60), - gfx::PointF(99, 99), gfx::Vector2dF(), - kOverscrollBehaviorAuto)); ScrollUpdate(&web_view_helper, 0, 30); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ExpectOverscrollParams(widget->last_overscroll(), gfx::Vector2dF(0, -60), + gfx::Vector2dF(0, -30), gfx::Vector2dF(), + gfx::PointF(100, 100), kOverscrollBehaviorAuto); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(-30, -30), gfx::Vector2dF(-30, -90), - gfx::PointF(99, 99), gfx::Vector2dF(), - kOverscrollBehaviorAuto)); ScrollUpdate(&web_view_helper, 30, 30); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ExpectOverscrollParams(widget->last_overscroll(), gfx::Vector2dF(-30, -90), + gfx::Vector2dF(-30, -30), gfx::Vector2dF(), + gfx::PointF(100, 100), kOverscrollBehaviorAuto); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(-30, 0), gfx::Vector2dF(-60, -90), - gfx::PointF(99, 99), gfx::Vector2dF(), - kOverscrollBehaviorAuto)); ScrollUpdate(&web_view_helper, 30, 0); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ExpectOverscrollParams(widget->last_overscroll(), gfx::Vector2dF(-60, -90), + gfx::Vector2dF(-30, 0), gfx::Vector2dF(), + gfx::PointF(100, 100), kOverscrollBehaviorAuto); // Overscroll is not reported. - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(_, _, _, _, _)) - .Times(0); ScrollEnd(&web_view_helper); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + EXPECT_TRUE(widget->last_overscroll().is_null()); } TEST_P(WebFrameOverscrollTest, NoOverscrollForSmallvalues) { RegisterMockedHttpURLLoad("overscroll/overscroll.html"); - frame_test_helpers::CreateTestWebFrameWidgetCallback create_widget_callback = - base::BindRepeating( - &frame_test_helpers::WebViewHelper::CreateTestWebFrameWidget< - OverscrollWebFrameWidget>); - frame_test_helpers::WebViewHelper web_view_helper(create_widget_callback); + frame_test_helpers::WebViewHelper web_view_helper; web_view_helper.InitializeAndLoad(base_url_ + "overscroll/overscroll.html", nullptr, nullptr, ConfigureAndroid); web_view_helper.Resize(gfx::Size(200, 200)); - OverscrollWebFrameWidget* widget = static_cast<OverscrollWebFrameWidget*>( - web_view_helper.GetMainFrameWidget()); + auto* widget = web_view_helper.GetMainFrameWidget(); + auto* layer_tree_host = web_view_helper.GetLayerTreeHost(); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ScrollBegin(&web_view_helper, 10, 10); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(-10, -10), gfx::Vector2dF(-10, -10), - gfx::PointF(100, 100), gfx::Vector2dF(), - kOverscrollBehaviorAuto)); ScrollUpdate(&web_view_helper, 10, 10); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ExpectOverscrollParams(widget->last_overscroll(), gfx::Vector2dF(-10, -10), + gfx::Vector2dF(-10, -10), gfx::Vector2dF(), + gfx::PointF(100, 100), kOverscrollBehaviorAuto); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(0, -0.10), - gfx::Vector2dF(-10, -10.10), gfx::PointF(100, 100), - gfx::Vector2dF(), kOverscrollBehaviorAuto)); ScrollUpdate(&web_view_helper, 0, 0.10); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ExpectOverscrollParams(widget->last_overscroll(), gfx::Vector2dF(-10, -10.10), + gfx::Vector2dF(0, -0.10), gfx::Vector2dF(), + gfx::PointF(100, 100), kOverscrollBehaviorAuto); - EXPECT_CALL( - widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(-0.10, 0), gfx::Vector2dF(-10.10, -10.10), - gfx::PointF(100, 100), gfx::Vector2dF(), - kOverscrollBehaviorAuto)); ScrollUpdate(&web_view_helper, 0.10, 0); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ExpectOverscrollParams(widget->last_overscroll(), + gfx::Vector2dF(-10.10, -10.10), + gfx::Vector2dF(-0.10, 0), gfx::Vector2dF(), + gfx::PointF(100, 100), kOverscrollBehaviorAuto); // For residual values overscrollDelta should be reset and DidOverscroll // shouldn't be called. - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(_, _, _, _, _)) - .Times(0); ScrollUpdate(&web_view_helper, 0, 0.09); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + EXPECT_TRUE(widget->last_overscroll().is_null()); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(_, _, _, _, _)) - .Times(0); ScrollUpdate(&web_view_helper, 0.09, 0.09); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + EXPECT_TRUE(widget->last_overscroll().is_null()); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(_, _, _, _, _)) - .Times(0); ScrollUpdate(&web_view_helper, 0.09, 0); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + EXPECT_TRUE(widget->last_overscroll().is_null()); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(_, _, _, _, _)) - .Times(0); ScrollUpdate(&web_view_helper, 0, -0.09); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + EXPECT_TRUE(widget->last_overscroll().is_null()); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(_, _, _, _, _)) - .Times(0); ScrollUpdate(&web_view_helper, -0.09, -0.09); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + EXPECT_TRUE(widget->last_overscroll().is_null()); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(_, _, _, _, _)) - .Times(0); ScrollUpdate(&web_view_helper, -0.09, 0); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + EXPECT_TRUE(widget->last_overscroll().is_null()); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(_, _, _, _, _)) - .Times(0); ScrollEnd(&web_view_helper); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + EXPECT_TRUE(widget->last_overscroll().is_null()); } TEST_P(WebFrameOverscrollTest, OverscrollBehaviorGoesToCompositor) { RegisterMockedHttpURLLoad("overscroll/overscroll.html"); - frame_test_helpers::CreateTestWebFrameWidgetCallback create_widget_callback = - base::BindRepeating( - &frame_test_helpers::WebViewHelper::CreateTestWebFrameWidget< - OverscrollWebFrameWidget>); - frame_test_helpers::WebViewHelper web_view_helper(create_widget_callback); + frame_test_helpers::WebViewHelper web_view_helper; web_view_helper.InitializeAndLoad(base_url_ + "overscroll/overscroll.html", nullptr, nullptr, ConfigureAndroid); web_view_helper.Resize(gfx::Size(200, 200)); - OverscrollWebFrameWidget* widget = static_cast<OverscrollWebFrameWidget*>( - web_view_helper.GetMainFrameWidget()); + auto* widget = web_view_helper.GetMainFrameWidget(); + auto* layer_tree_host = web_view_helper.GetLayerTreeHost(); + WebLocalFrame* mainFrame = web_view_helper.GetWebView()->MainFrame()->ToWebLocalFrame(); EXPECT_EQ(web_view_helper.GetLayerTreeHost()->overscroll_behavior(), @@ -10860,65 +10736,61 @@ mainFrame->ExecuteScript( WebScriptSource(WebString("document.body.style=" "'overscroll-behavior: auto;'"))); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ScrollBegin(&web_view_helper, 100, 116); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(-100, -100), - gfx::Vector2dF(-100, -100), gfx::PointF(100, 100), - gfx::Vector2dF(), kOverscrollBehaviorAuto)); ScrollUpdate(&web_view_helper, 100, 100); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ExpectOverscrollParams(widget->last_overscroll(), gfx::Vector2dF(-100, -100), + gfx::Vector2dF(-100, -100), gfx::Vector2dF(), + gfx::PointF(100, 100), kOverscrollBehaviorAuto); EXPECT_EQ(web_view_helper.GetLayerTreeHost()->overscroll_behavior(), kOverscrollBehaviorAuto); mainFrame->ExecuteScript( WebScriptSource(WebString("document.body.style=" "'overscroll-behavior: contain;'"))); - ScrollBegin(&web_view_helper, 100, 116); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(-100, -100), - gfx::Vector2dF(-200, -200), gfx::PointF(100, 100), - gfx::Vector2dF(), kOverscrollBehaviorContain)); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ScrollUpdate(&web_view_helper, 100, 100); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ExpectOverscrollParams(widget->last_overscroll(), gfx::Vector2dF(-200, -200), + gfx::Vector2dF(-100, -100), gfx::Vector2dF(), + gfx::PointF(100, 100), kOverscrollBehaviorContain); EXPECT_EQ(web_view_helper.GetLayerTreeHost()->overscroll_behavior(), kOverscrollBehaviorContain); mainFrame->ExecuteScript( WebScriptSource(WebString("document.body.style=" "'overscroll-behavior: none;'"))); - ScrollBegin(&web_view_helper, 100, 116); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(-100, -100), - gfx::Vector2dF(-300, -300), gfx::PointF(100, 100), - gfx::Vector2dF(), kOverscrollBehaviorNone)); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ScrollUpdate(&web_view_helper, 100, 100); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ExpectOverscrollParams(widget->last_overscroll(), gfx::Vector2dF(-300, -300), + gfx::Vector2dF(-100, -100), gfx::Vector2dF(), + gfx::PointF(100, 100), kOverscrollBehaviorNone); EXPECT_EQ(web_view_helper.GetLayerTreeHost()->overscroll_behavior(), kOverscrollBehaviorNone); } -TEST_P(WebFrameOverscrollTest, OnlyMainFrameOverscrollBehaviorHasEffect) { +TEST_P(WebFrameOverscrollTest, SubframeOverscrollBehaviorPreventsChaining) { + // This test fails without scroll unification (crbug.com/1222427). + if (!base::FeatureList::IsEnabled(::features::kScrollUnification)) + return; + RegisterMockedHttpURLLoad("overscroll/iframe-overscroll.html"); RegisterMockedHttpURLLoad("overscroll/scrollable-iframe.html"); - frame_test_helpers::CreateTestWebFrameWidgetCallback create_widget_callback = - base::BindRepeating( - &frame_test_helpers::WebViewHelper::CreateTestWebFrameWidget< - OverscrollWebFrameWidget>); - frame_test_helpers::WebViewHelper web_view_helper(create_widget_callback); + frame_test_helpers::WebViewHelper web_view_helper; web_view_helper.InitializeAndLoad( base_url_ + "overscroll/iframe-overscroll.html", nullptr, nullptr, ConfigureAndroid); web_view_helper.Resize(gfx::Size(200, 200)); - OverscrollWebFrameWidget* widget = static_cast<OverscrollWebFrameWidget*>( - web_view_helper.GetMainFrameWidget()); + auto* widget = web_view_helper.GetMainFrameWidget(); + auto* layer_tree_host = web_view_helper.GetLayerTreeHost(); + WebLocalFrame* mainFrame = web_view_helper.GetWebView()->MainFrame()->ToWebLocalFrame(); mainFrame->ExecuteScript( @@ -10931,32 +10803,25 @@ subframe->ExecuteScript( WebScriptSource(WebString("document.body.style=" "'overscroll-behavior: none;'"))); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); ScrollBegin(&web_view_helper, 100, 116); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(-100, -100), - gfx::Vector2dF(-100, -100), gfx::PointF(100, 100), - gfx::Vector2dF(), kOverscrollBehaviorAuto)); ScrollUpdate(&web_view_helper, 100, 100); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + EXPECT_TRUE(widget->last_overscroll().is_null()); EXPECT_EQ(web_view_helper.GetLayerTreeHost()->overscroll_behavior(), kOverscrollBehaviorAuto); - mainFrame->ExecuteScript( + subframe->ExecuteScript( WebScriptSource(WebString("document.body.style=" "'overscroll-behavior: contain;'"))); - EXPECT_CALL(widget->GetOverscrollWidgetInputHandlerHost(), - DidOverscroll(gfx::Vector2dF(-100, -100), - gfx::Vector2dF(-200, -200), gfx::PointF(100, 100), - gfx::Vector2dF(), kOverscrollBehaviorContain)); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + ScrollUpdate(&web_view_helper, 100, 100); - base::RunLoop().RunUntilIdle(); - Mock::VerifyAndClearExpectations( - &widget->GetOverscrollWidgetInputHandlerHost()); + layer_tree_host->CompositeForTest(base::TimeTicks::Now(), false); + EXPECT_TRUE(widget->last_overscroll().is_null()); EXPECT_EQ(web_view_helper.GetLayerTreeHost()->overscroll_behavior(), - kOverscrollBehaviorContain); + kOverscrollBehaviorAuto); } TEST_F(WebFrameTest, OrientationFrameDetach) { @@ -11919,18 +11784,18 @@ // Try GestureScrollEnd and GestureScrollUpdate first to make sure that not // seeing a Begin first doesn't break anything. (This currently happens). - web_view_helper.GetWebView()->MainFrameWidget()->HandleInputEvent( - WebCoalescedInputEvent(end_event, ui::LatencyInfo())); - web_view_helper.GetWebView()->MainFrameWidget()->HandleInputEvent( - WebCoalescedInputEvent(update_event, ui::LatencyInfo())); + auto* widget = web_view_helper.GetMainFrameWidget(); + widget->DispatchThroughCcInputHandler(end_event); + widget->DispatchThroughCcInputHandler(update_event); + web_view_helper.GetLayerTreeHost()->CompositeForTest(base::TimeTicks::Now(), + false); // Try a full Begin/Update/End cycle. - web_view_helper.GetWebView()->MainFrameWidget()->HandleInputEvent( - WebCoalescedInputEvent(begin_event, ui::LatencyInfo())); - web_view_helper.GetWebView()->MainFrameWidget()->HandleInputEvent( - WebCoalescedInputEvent(update_event, ui::LatencyInfo())); - web_view_helper.GetWebView()->MainFrameWidget()->HandleInputEvent( - WebCoalescedInputEvent(end_event, ui::LatencyInfo())); + widget->DispatchThroughCcInputHandler(begin_event); + widget->DispatchThroughCcInputHandler(update_event); + widget->DispatchThroughCcInputHandler(end_event); + web_view_helper.GetLayerTreeHost()->CompositeForTest(base::TimeTicks::Now(), + false); } TEST_F(WebFrameTest, MouseOverDifferntNodeClearsTooltip) {
diff --git a/third_party/blink/renderer/core/timing/performance_user_timing.cc b/third_party/blink/renderer/core/timing/performance_user_timing.cc index 4e4b697..f72511f 100644 --- a/third_party/blink/renderer/core/timing/performance_user_timing.cc +++ b/third_party/blink/renderer/core/timing/performance_user_timing.cc
@@ -94,6 +94,8 @@ void UserTiming::ClearMarks(const AtomicString& mark_name) { ClearPeformanceEntries(marks_map_, mark_name); + TRACE_EVENT_COPY_MARK1("blink.user_timing", "clearMarks", "name", + mark_name.Utf8().c_str()); } const PerformanceMark* UserTiming::FindExistingMark( @@ -252,6 +254,8 @@ void UserTiming::ClearMeasures(const AtomicString& measure_name) { ClearPeformanceEntries(measures_map_, measure_name); + TRACE_EVENT_COPY_MARK1("blink.user_timing", "clearMeasures", "name", + measure_name.Utf8().c_str()); } static PerformanceEntryVector ConvertToEntrySequence(
diff --git a/third_party/blink/renderer/core/timing/window_performance_test.cc b/third_party/blink/renderer/core/timing/window_performance_test.cc index 442c93f..43d3787 100644 --- a/third_party/blink/renderer/core/timing/window_performance_test.cc +++ b/third_party/blink/renderer/core/timing/window_performance_test.cc
@@ -1071,6 +1071,59 @@ ASSERT_FALSE(events[5]->HasDictArg("data")); } +bool CompareTraceEventTimestamp(const trace_analyzer::TraceEvent* e1, + const trace_analyzer::TraceEvent* e2) { + return (e1->thread_timestamp < e2->thread_timestamp); +} + +TEST_F(WindowPerformanceTest, UserTimingTraceEvents) { + using trace_analyzer::Query; + trace_analyzer::Start("*"); + // Need to have an active V8 context for ScriptValues to operate. + ScriptState* script_state = GetScriptState(); + v8::HandleScope handle_scope(script_state->GetIsolate()); + v8::Local<v8::Context> context = script_state->GetContext(); + v8::Context::Scope context_scope(context); + DummyExceptionStateForTesting exception_state; + performance_->measure(script_state, "my_first_measure", exception_state); + test_task_runner_->FastForwardBy(base::Seconds(2)); + performance_->mark(script_state, "my_first_mark", nullptr, exception_state); + test_task_runner_->FastForwardBy(base::Seconds(2)); + performance_->clearMarks("my_first_mark"); + test_task_runner_->FastForwardBy(base::Seconds(2)); + performance_->mark(script_state, "my_second_mark", nullptr, exception_state); + test_task_runner_->FastForwardBy(base::Seconds(2)); + performance_->clearMeasures(); + auto analyzer = trace_analyzer::Stop(); + + trace_analyzer::TraceEventVector events; + Query q = Query::EventCategoryIs("blink.user_timing"); + analyzer->FindEvents(q, &events); + EXPECT_EQ(6u, events.size()); + // Explicitly sort trace events by timestamp to get comparable results + // cross-platform. + // TODO(sullivan): investigate why this sort is needed--why doesn't + // TraceAnalyzer::FindEvents return events in the same order across platforms? + sort(events.begin(), events.end(), CompareTraceEventTimestamp); + + // Note: the "name" attribute of the event is the title of the trace event. + // For mark() and measure(), that is the mark/measure name. + // But for clearMarks() and clearMeasures(), "clearMarks" and "clearMeasures" + // are the trace event title, and there is a "name" field in the trace with + // the name of the trace event to be cleared (or "" if not specified). + // Also note that performance.measure() adds two trace events (for the start + // and end of the measure). + EXPECT_EQ("my_first_measure", events[0]->name); + EXPECT_EQ("my_first_measure", events[1]->name); + EXPECT_EQ("my_first_mark", events[2]->name); + EXPECT_EQ("clearMarks", events[3]->name); + ASSERT_TRUE(events[3]->HasStringArg("name")); + EXPECT_EQ("my_first_mark", events[3]->GetKnownArgAsString("name")); + EXPECT_EQ("my_second_mark", events[4]->name); + EXPECT_EQ("clearMeasures", events[5]->name); + EXPECT_EQ("", events[5]->GetKnownArgAsString("name")); +} + TEST_F(WindowPerformanceTest, InteractionID) { // Keyboard with max duration 25, total duration 40. PerformanceEventTiming* keydown_entry =
diff --git a/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents.cc b/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents.cc index 7a0339b..7fd865a 100644 --- a/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents.cc +++ b/third_party/blink/renderer/core/typed_arrays/array_buffer/array_buffer_contents.cc
@@ -152,7 +152,7 @@ // // `partition_alloc::internal::kAlignment` is a compile-time constant. if (partition_alloc::internal::kAlignment < 16) { - size_t aligned_size = base::bits::AlignUp(size, 16); + size_t aligned_size = base::bits::AlignUp(size, size_t{16}); if (size == 0) { aligned_size = 16; }
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_client_test.cc b/third_party/blink/renderer/modules/mediastream/user_media_client_test.cc index 6efdb3b..8567c72 100644 --- a/third_party/blink/renderer/modules/mediastream/user_media_client_test.cc +++ b/third_party/blink/renderer/modules/mediastream/user_media_client_test.cc
@@ -15,6 +15,7 @@ #include "base/memory/ptr_util.h" #include "base/run_loop.h" #include "base/strings/utf_string_conversions.h" +#include "base/test/bind.h" #include "build/build_config.h" #include "media/audio/audio_device_description.h" #include "mojo/public/cpp/bindings/receiver.h" @@ -38,6 +39,7 @@ #include "third_party/blink/renderer/modules/mediastream/mock_constraint_factory.h" #include "third_party/blink/renderer/modules/mediastream/mock_media_stream_video_source.h" #include "third_party/blink/renderer/modules/mediastream/mock_mojo_media_stream_dispatcher_host.h" +#include "third_party/blink/renderer/modules/mediastream/user_media_request.h" #include "third_party/blink/renderer/platform/heap/garbage_collected.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_audio_processor_options.h" #include "third_party/blink/renderer/platform/mediastream/media_stream_audio_source.h" @@ -175,6 +177,68 @@ const char kFakeVideoInputDeviceId1[] = "fake_video_input 1"; const char kFakeVideoInputDeviceId2[] = "fake_video_input 2"; +class MediaDevicesDispatcherHostMock + : public mojom::blink::MediaDevicesDispatcherHost { + public: + explicit MediaDevicesDispatcherHostMock() {} + void EnumerateDevices(bool request_audio_input, + bool request_video_input, + bool request_audio_output, + bool request_video_input_capabilities, + bool request_audio_input_capabilities, + EnumerateDevicesCallback callback) override { + NOTREACHED(); + } + + void GetVideoInputCapabilities( + GetVideoInputCapabilitiesCallback client_callback) override { + NOTREACHED(); + } + + void GetAudioInputCapabilities( + GetAudioInputCapabilitiesCallback client_callback) override { + NOTREACHED(); + } + + void AddMediaDevicesListener( + bool subscribe_audio_input, + bool subscribe_video_input, + bool subscribe_audio_output, + mojo::PendingRemote<blink::mojom::blink::MediaDevicesListener> listener) + override { + NOTREACHED(); + } + + void SetCaptureHandleConfig(mojom::blink::CaptureHandleConfigPtr) override { + NOTREACHED(); + } + +#if !BUILDFLAG(IS_ANDROID) + void CloseFocusWindowOfOpportunity(const String& label) override { + NOTREACHED(); + } + + void ProduceCropId(ProduceCropIdCallback callback) override { NOTREACHED(); } +#endif + + void GetAllVideoInputDeviceFormats( + const String& device_id, + GetAllVideoInputDeviceFormatsCallback callback) override { + devices_count_++; + } + + void GetAvailableVideoInputDeviceFormats( + const String& device_id, + GetAvailableVideoInputDeviceFormatsCallback callback) override { + devices_count_++; + } + + size_t devices_count() const { return devices_count_; } + + private: + size_t devices_count_ = 0; +}; + class MockMediaDevicesDispatcherHost : public mojom::blink::MediaDevicesDispatcherHost { public: @@ -1511,4 +1575,36 @@ advanced_factory.CreateMediaConstraints())); } +TEST_F(UserMediaClientTest, MultiDeviceOnStreamGenerated) { + const size_t devices_count = 5u; + const int32_t request_id = 0; + std::unique_ptr<blink::MediaDevicesDispatcherHostMock> + media_devices_dispatcher_host_mock = + std::make_unique<blink::MediaDevicesDispatcherHostMock>(); + blink::Member<blink::UserMediaRequest> user_media_request = + blink::UserMediaRequest::CreateForTesting(CreateDefaultConstraints(), + CreateDefaultConstraints()); + user_media_request->set_request_id(request_id); + user_media_processor_->ProcessRequest(user_media_request, base::DoNothing()); + user_media_processor_->media_devices_dispatcher_cb_ = + base::BindLambdaForTesting( + [&media_devices_dispatcher_host_mock]() + -> blink::mojom::blink::MediaDevicesDispatcherHost* { + return media_devices_dispatcher_host_mock.get(); + }); + + blink::mojom::blink::StreamDevicesSetPtr stream_devices_set = + blink::mojom::blink::StreamDevicesSet::New(); + for (size_t stream_index = 0; stream_index < devices_count; ++stream_index) { + stream_devices_set->stream_devices.emplace_back( + blink::mojom::blink::StreamDevices::New(absl::nullopt, + blink::MediaStreamDevice())); + } + user_media_processor_->OnStreamGenerated( + request_id, blink::mojom::MediaStreamRequestResult::OK, "", + std::move(stream_devices_set), /*pan_tilt_zoom_allowed=*/false); + base::RunLoop run_loop; + DCHECK_EQ(devices_count, media_devices_dispatcher_host_mock->devices_count()); +} + } // namespace blink
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_processor.cc b/third_party/blink/renderer/modules/mediastream/user_media_processor.cc index 5585d8bf..6c24892 100644 --- a/third_party/blink/renderer/modules/mediastream/user_media_processor.cc +++ b/third_party/blink/renderer/modules/mediastream/user_media_processor.cc
@@ -1121,33 +1121,34 @@ return; } - // TODO(crbug.com/1336564): Remove the assumption that all devices support - // the same video formats. - if (stream_devices_set->stream_devices[0]->video_device.has_value()) { - const MediaStreamDevice& video_device = - stream_devices_set->stream_devices[0]->video_device.value(); + for (const blink::mojom::blink::StreamDevicesPtr& stream_devices_ptr : + stream_devices_set->stream_devices) { + if (stream_devices_ptr->video_device.has_value()) { + const MediaStreamDevice& video_device = + stream_devices_ptr->video_device.value(); - Vector<String> video_device_ids; - for (const mojom::blink::StreamDevicesPtr& stream_devices : - stream_devices_set->stream_devices) { - if (stream_devices->video_device.has_value()) { - video_device_ids.push_back( - stream_devices->video_device.value().id.data()); + Vector<String> video_device_ids; + for (const mojom::blink::StreamDevicesPtr& stream_devices : + stream_devices_set->stream_devices) { + if (stream_devices->video_device.has_value()) { + video_device_ids.push_back( + stream_devices->video_device.value().id.data()); + } } - } - SendLogMessage(base::StringPrintf( - "OnStreamGenerated({request_id=%d}, {label=%s}, {device=[id: %s, " - "name: %s]}) => (Requesting video device formats)", - request_id, label.Utf8().c_str(), video_device.id.c_str(), - video_device.name.c_str())); - String video_device_id(video_device.id.data()); - GetMediaDevicesDispatcher()->GetAllVideoInputDeviceFormats( - video_device_id, - WTF::Bind(&UserMediaProcessor::GotAllVideoInputFormatsForDevice, - WrapWeakPersistent(this), - WrapPersistent(current_request_info_->request()), label, - video_device_ids)); + SendLogMessage(base::StringPrintf( + "OnStreamGenerated({request_id=%d}, {label=%s}, {device=[id: %s, " + "name: %s]}) => (Requesting video device formats)", + request_id, label.Utf8().c_str(), video_device.id.c_str(), + video_device.name.c_str())); + String video_device_id(video_device.id.data()); + GetMediaDevicesDispatcher()->GetAllVideoInputDeviceFormats( + video_device_id, + WTF::Bind(&UserMediaProcessor::GotAllVideoInputFormatsForDevice, + WrapWeakPersistent(this), + WrapPersistent(current_request_info_->request()), label, + video_device_ids)); + } } }
diff --git a/third_party/blink/renderer/modules/mediastream/user_media_processor.h b/third_party/blink/renderer/modules/mediastream/user_media_processor.h index 96e6336..699201a 100644 --- a/third_party/blink/renderer/modules/mediastream/user_media_processor.h +++ b/third_party/blink/renderer/modules/mediastream/user_media_processor.h
@@ -145,6 +145,7 @@ TiltConstraintRequestPanTiltZoomPermission); FRIEND_TEST_ALL_PREFIXES(UserMediaClientTest, ZoomConstraintRequestPanTiltZoomPermission); + FRIEND_TEST_ALL_PREFIXES(UserMediaClientTest, MultiDeviceOnStreamGenerated); class RequestInfo; using LocalStreamSources = HeapVector<Member<MediaStreamSource>>;
diff --git a/third_party/blink/web_tests/TestExpectations b/third_party/blink/web_tests/TestExpectations index 77abff8..29d45c6 100644 --- a/third_party/blink/web_tests/TestExpectations +++ b/third_party/blink/web_tests/TestExpectations
@@ -6161,12 +6161,10 @@ # Other devtools flaky tests outside of http/tests/inspector-protocol/network. crbug.com/1228261 http/tests/inspector-protocol/browser-grant-permissions.js [ Failure Pass Timeout ] crbug.com/1228261 http/tests/inspector-protocol/network-fetch-content-with-error-status-code.js [ Failure Pass Timeout ] -crbug.com/1228261 http/tests/inspector-protocol/fetch/request-paused-network-id-cors.js [ Failure Pass Timeout ] # Flakes that might be caused or aggravated by PlzServiceWorker crbug.com/996511 external/wpt/service-workers/cache-storage/window/cache-abort.https.html [ Crash Failure Pass ] crbug.com/996511 external/wpt/service-workers/service-worker/getregistrations.https.html [ Crash Failure Pass Timeout ] -crbug.com/996511 http/tests/inspector-protocol/fetch/fetch-cors-preflight-sw.js [ Crash Failure Pass Timeout ] # Sheriff 2021-07-14 crbug.com/1229039 [ Linux ] external/wpt/webrtc/RTCDTMFSender-ontonechange.https.html [ Pass Timeout ] @@ -7148,7 +7146,6 @@ crbug.com/1340981 virtual/conversions-debug-mode/wpt_internal/attribution-reporting/source-registration.sub.https.html [ Timeout ] # Sheriff 2022-07-05 -crbug.com/1321217 [ Mac ] http/tests/devtools/layers/layer-canvas-log.js [ Failure Pass ] crbug.com/1342050 [ Mac10.15 ] virtual/prerender/wpt_internal/prerender/activate-from-iframe.html [ Failure Pass ] crbug.com/1340763 external/wpt/pointerevents/pointerevent_capture_mouse.html [ Failure Pass ] crbug.com/1341090 external/wpt/webmessaging/with-ports/021.html [ Failure Pass ] @@ -7192,3 +7189,7 @@ crbug.com/1221127 virtual/coop-restrict-properties/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-un.https.html?5-6 [ Failure Crash ] crbug.com/1221127 virtual/coop-restrict-properties/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-un.https.html?7-8 [ Failure Crash ] crbug.com/1221127 virtual/coop-restrict-properties/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/iframe-popup-to-un.https.html?9-last [ Failure Crash ] + +# Sheriff 2022-07-13 +crbug.com/1344128 [ Mac10.14 ] external/wpt/html/webappapis/scripting/events/event-handler-attributes-body-window.html [ Failure ] +crbug.com/1204176 [ Linux ] fast/scrolling/overflow-scrollability.html [ Failure Pass ]
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html new file mode 100644 index 0000000..00eb650 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html
@@ -0,0 +1,40 @@ +<!doctype html> +<meta charset=utf-8> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<script src="/common/dispatcher/dispatcher.js"></script> +<script src="/common/get-host-info.sub.js"></script> +<script src="/common/utils.js"></script> +<script src="../../resources/common.js"></script> + +<script> + +async function createCoopRestrictPropertiesPopup(name) { + const popupToken = token(); + const url = SAME_ORIGIN.origin + '/common/dispatcher/executor.html' + + `?uuid=${popupToken}` + + '&pipe=|header(Cross-Origin-Opener-Policy, restrict-properties)'; + const popup = window.open(url, name); + add_completion_callback(() => popup.close()); + + // Wait for the popup to be loaded. + const replyToken = token(); + send(popupToken, `send('${replyToken}', 'Done loading')`); + assert_equals(await receive(replyToken), 'Done loading'); + + return popup; +} + +promise_test(async t => { + // Open two COOP: restrict-properties popups with the same name. + const name = token(); + const popup1 = await createCoopRestrictPropertiesPopup(name); + const popup2 = await createCoopRestrictPropertiesPopup(name); + + // Check that named targeting did not cross isolation boundaries. Two popups + // should have been created. + assert_not_equals(popup1, popup2, + 'Named targeting resolved across isolation boundaries'); +}, 'Verify that named targeting does not work across isolation boundaries.'); + +</script>
diff --git a/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html.headers b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html.headers new file mode 100644 index 0000000..d5c99062 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https.html.headers
@@ -0,0 +1 @@ +Cross-Origin-Opener-Policy: restrict-properties
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/testcommon.js b/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/testcommon.js index 0eadb54a..97e81f4 100644 --- a/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/testcommon.js +++ b/third_party/blink/web_tests/external/wpt/scroll-animations/scroll-timelines/testcommon.js
@@ -73,14 +73,6 @@ return new ScrollTimeline(options); } -function createScrollTimelineWithOffsets(test, startOffset, endOffset) { - return createScrollTimeline(test, { - source: createScroller(test), - orientation: "vertical", - scrollOffsets: [startOffset, endOffset] - }); -} - function createScrollLinkedAnimation(test, timeline) { return createScrollLinkedAnimationWithTiming(test, /* duration in ms*/ 1000, timeline); }
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-current-time-vertical-rl.tentative.html b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-current-time-vertical-rl.tentative.html new file mode 100644 index 0000000..2c2e02b --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-current-time-vertical-rl.tentative.html
@@ -0,0 +1,98 @@ +<!DOCTYPE html> +<html id="top"> +<meta charset="utf-8"> +<title>View timeline current-time with vertical-rl writing mode</title> +<!-- TODO(crbug.com/1329159): Update link once ratified --> +<link rel="help" href="https://drafts.csswg.org/scroll-animations-1/rewrite#viewtimeline-interface"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/web-animations/testcommon.js"></script> +<script src="/scroll-animations/scroll-timelines/testcommon.js"></script> +<script src="/scroll-animations/view-timelines/testcommon.js"></script> +<style> + #container { + writing-mode: vertical-rl; + overflow-x: scroll; + height: 200px; + width: 200px; + } + .spacer { + width: 800px; + } + #target { + background-color: green; + height: 100px; + width: 200px; + } +</style> +<body> + <div id="container"> + <div id="leading-space" class="spacer"></div> + <div id="target"></div> + <div id="trailing-space" class="spacer"></div> + </div> +</body> +<script type="text/javascript"> + promise_test(async t => { + container.scrollLeft = 0; + await waitForNextFrame(); + + const anim = CreateViewTimelineOpacityAnimation(t, target, 'block'); + const timeline = anim.timeline; + await anim.ready; + + // Initially before start-offset and animation effect is in the before + // phase. + assert_percents_equal(timeline.currentTime, -150, + "Timeline's currentTime at container start boundary"); + assert_percents_equal(anim.currentTime, -150, + "Animation's currentTime at container start boundary"); + assert_equals(getComputedStyle(target).opacity, "1", + 'Effect is inactive in the before phase'); + + // Advance to the start offset, which triggers entry to the active phase. + container.scrollLeft = -600; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 0, + "Timeline's current time at start offset"); + assert_percents_equal(anim.currentTime, 0, + "Animation's current time at start offset"); + assert_equals(getComputedStyle(target).opacity, '0.3', + 'Effect at the start of the active phase'); + + // Advance to the midpoint of the animation. + container.scrollLeft = -800; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 50, + "Timeline's currentTime at midpoint"); + assert_percents_equal(anim.currentTime, 50, + "Animation's currentTime at midpoint"); + assert_equals(getComputedStyle(target).opacity,'0.5', + 'Effect at the midpoint of the active range'); + + // Advance to the end of the animation. + container.scrollLeft = -1000; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 100, + "Timeline's currentTime at end offset"); + assert_percents_equal(anim.currentTime, 100, + "Animation's currentTime at end offset"); + assert_equals(getComputedStyle(target).opacity, '0.7', + 'Effect is in the active phase at effect end time'); + + // Advance to the scroll limit. + container.scrollLeft = -1600; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 250, + "Timeline's currentTime at scroll limit"); + // Hold time set when the animation finishes, which clamps the value of + // the animation's currentTime. + assert_percents_equal(anim.currentTime, 100, + "Animation's currentTime at scroll limit"); + // In the after phase, so the effect should not be applied. + assert_equals(getComputedStyle(target).opacity, '1', + 'After phase at scroll limit'); + }, 'View timeline with container having vertical-rl layout' ); + +</script> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-current-time.tentative.html b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-current-time.tentative.html new file mode 100644 index 0000000..6e60db2 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-current-time.tentative.html
@@ -0,0 +1,206 @@ +<!DOCTYPE html> +<html id="top"> +<meta charset="utf-8"> +<title>View timeline current-time</title> +<!-- TODO(crbug.com/1329159): Update link once ratified --> +<link rel="help" href="https://drafts.csswg.org/scroll-animations-1/rewrite#viewtimeline-interface"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/web-animations/testcommon.js"></script> +<script src="/scroll-animations/scroll-timelines/testcommon.js"></script> +<script src="/scroll-animations/view-timelines/testcommon.js"></script> +<style> + #container { + border: 10px solid lightgray; + overflow-y: scroll; + height: 200px; + width: 200px; + } + .spacer { + height: 800px; + } + #target { + background-color: green; + height: 200px; + width: 100px; + } +</style> +<body> + <div id="container"> + <div id="leading-space" class="spacer"></div> + <div id="target"></div> + <div id="trailing-space" class="spacer"></div> + </div> +</body> +<script type="text/javascript"> + promise_test(async t => { + container.scrollTop = 0; + await waitForNextFrame(); + + const anim = CreateViewTimelineOpacityAnimation(t, target); + const timeline = anim.timeline; + await anim.ready; + + // Initially before start-offset and animation effect is in the before + // phase. + assert_percents_equal(timeline.currentTime, -150, + "Timeline's currentTime at container start boundary"); + assert_percents_equal(anim.currentTime, -150, + "Animation's currentTime at container start boundary"); + assert_equals(getComputedStyle(target).opacity, "1", + 'Effect is inactive in the before phase'); + + // Advance to the start offset, which triggers entry to the active phase. + container.scrollTop = 600; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 0, + "Timeline's current time at start offset"); + assert_percents_equal(anim.currentTime, 0, + "Animation's current time at start offset"); + assert_equals(getComputedStyle(target).opacity, '0.3', + 'Effect at the start of the active phase'); + + // Advance to the midpoint of the animation. + container.scrollTop = 800; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 50, + "Timeline's currentTime at midpoint"); + assert_percents_equal(anim.currentTime, 50, + "Animation's currentTime at midpoint"); + assert_equals(getComputedStyle(target).opacity,'0.5', + 'Effect at the midpoint of the active range'); + + // Advance to the end of the animation. + container.scrollTop = 1000; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 100, + "Timeline's currentTime at end offset"); + assert_percents_equal(anim.currentTime, 100, + "Animation's currentTime at end offset"); + assert_equals(getComputedStyle(target).opacity, '0.7', + 'Effect is in the active phase at effect end time'); + + // Advance to the scroll limit. + container.scrollTop = 1600; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 250, + "Timeline's currentTime at scroll limit"); + // Hold time set when the animation finishes, which clamps the value of + // the animation's currentTime. + assert_percents_equal(anim.currentTime, 100, + "Animation's currentTime at scroll limit"); + // In the after phase, so the effect should not be applied. + assert_equals(getComputedStyle(target).opacity, '1', + 'After phase at scroll limit'); + }, 'View timeline with start and end scroll offsets that do not align with ' + + 'the scroll boundaries' ); + + promise_test(async t => { + const leading = document.getElementById('leading-space'); + leading.style = 'display: none'; + t.add_cleanup(() => { + leading.style = null; + }); + + container.scrollTop = 0; + await waitForNextFrame(); + + const anim = CreateViewTimelineOpacityAnimation(t, target); + const timeline = anim.timeline; + await anim.ready; + + assert_percents_equal(timeline.currentTime, 0, + "Timeline's currentTime at container start boundary"); + assert_percents_equal(anim.currentTime, 0, + "Animation's currentTime at container start boundary"); + assert_equals(getComputedStyle(target).opacity, "0.3", + 'Effect enters active phase at container start boundary'); + + + // Advance to midpoint + container.scrollTop = 100; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 50, + "Timeline's current time at start offset"); + assert_percents_equal(anim.currentTime, 50, + "Animation's current time at start offset"); + assert_equals(getComputedStyle(target).opacity, '0.5', + 'Effect at the start of the active phase'); + + // Advance to end-offset + container.scrollTop = 200; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 100, + "Timeline's current time at start offset"); + assert_percents_equal(anim.currentTime, 100, + "Animation's current time at start offset"); + assert_equals(getComputedStyle(target).opacity, '0.7', + 'Effect at the start of the active phase'); + + // Advance to scroll limit. + container.scrollTop = 800; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 400, + "Timeline's current time at start offset"); + assert_percents_equal(anim.currentTime, 100, + "Animation's current time at start offset"); + assert_equals(getComputedStyle(target).opacity, '1', + 'Effect at the start of the active phase'); + + }, 'View timeline clamps starting scroll offset at 0px'); + + promise_test(async t => { + const trailing = document.getElementById('trailing-space'); + trailing.style = 'display: none'; + t.add_cleanup(() => { + trailing.style = null; + }); + + container.scrollTop = 0; + await waitForNextFrame(); + + const anim = CreateViewTimelineOpacityAnimation(t, target); + const timeline = anim.timeline; + await anim.ready; + + // Initially in before phase. + assert_percents_equal(timeline.currentTime, -300, + "Timeline's currentTime at container start boundary"); + assert_percents_equal(anim.currentTime, -300, + "Animation's currentTime at container start boundary"); + assert_equals(getComputedStyle(target).opacity, "1", + 'Effect enters active phase at container start boundary'); + + // Advance to start offset. + container.scrollTop = 600; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 0, + "Timeline's current time at start offset"); + assert_percents_equal(anim.currentTime, 0, + "Animation's current time at start offset"); + assert_equals(getComputedStyle(target).opacity, '0.3', + 'Effect at the start of the active phase'); + + // Advance to midpoint + container.scrollTop = 700; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 50, + "Timeline's current time at start offset"); + assert_percents_equal(anim.currentTime, 50, + "Animation's current time at start offset"); + assert_equals(getComputedStyle(target).opacity, '0.5', + 'Effect at the start of the active phase'); + + // Advance to end offset. + container.scrollTop = 800; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 100, + "Timeline's currentTime at max scroll offset"); + assert_percents_equal(anim.currentTime, 100, + "Animation's currentTime at max scroll offset"); + assert_equals(getComputedStyle(target).opacity, "0.7", + 'Effect at end of active phase'); + }, 'View timeline clamps end scroll offset at max scroll'); + +</script> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-nested-subject.tentative.html b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-nested-subject.tentative.html new file mode 100644 index 0000000..720b33aa --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/block-view-timeline-nested-subject.tentative.html
@@ -0,0 +1,114 @@ +<!DOCTYPE html> +<html id="top"> +<meta charset="utf-8"> +<title>View timeline nested subject</title> +<!-- TODO(crbug.com/1329159): Update link once ratified --> +<link rel="help" href="https://drafts.csswg.org/scroll-animations-1/rewrite#viewtimeline-interface"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/web-animations/testcommon.js"></script> +<script src="/scroll-animations/scroll-timelines/testcommon.js"></script> +<script src="/scroll-animations/view-timelines/testcommon.js"></script> +<style type="text/css"> + #container { + overflow-y: scroll; + height: 300px; + width: 300px; + } + .big-spacer { + height: 800px; + } + .small-spacer { + height: 100px; + } + #block { + background-color: #ddd; + } + #target { + background-color: green; + height: 100px; + width: 100px; + } +</style> +<body> + <div id="container"> + <div class="big-spacer"></div> + <div id="block"> + <div class="small-spacer"></div> + <div id="target"></div> + </div> + <div class="big-spacer"></div> + </div> +</body> +<script type="text/javascript"> + promise_test(async t => { + container.scrollTop = 0; + await waitForNextFrame(); + + const anim = CreateViewTimelineOpacityAnimation(t, target); + const timeline = anim.timeline; + await anim.ready; + + // start offset = 800 + 100 - 300 = 600 + // end offset = 800 + 100 + 100 = 1000 + // scroll limit = L = 800 + 200 + 800 - 300 = 1500 + // progress = P = (current - start) / (end - start) + // P(0) = -600 / 400 = -1.5 + // P(L) = 900 / 400 = 2.5 + + // Initially before start-offset and animation effect is in the before + // phase. + assert_percents_equal(timeline.currentTime, -150, + "Timeline's currentTime at container start boundary"); + assert_percents_equal(anim.currentTime, -150, + "Animation's currentTime at container start boundary"); + assert_equals(getComputedStyle(target).opacity, "1", + 'Effect is inactive in the before phase'); + + + // Advance to the start offset, which triggers entry to the active phase. + container.scrollTop = 600; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 0, + "Timeline's current time at start offset"); + assert_percents_equal(anim.currentTime, 0, + "Animation's current time at start offset"); + assert_equals(getComputedStyle(target).opacity, '0.3', + 'Effect at the start of the active phase'); + + // Advance to the midpoint of the animation. + container.scrollTop = 800; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 50, + "Timeline's currentTime at midpoint"); + assert_percents_equal(anim.currentTime, 50, + "Animation's currentTime at midpoint"); + assert_equals(getComputedStyle(target).opacity,'0.5', + 'Effect at the midpoint of the active range'); + + // Advance to the end of the animation. + container.scrollTop = 1000; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 100, + "Timeline's currentTime at end offset"); + assert_percents_equal(anim.currentTime, 100, + "Animation's currentTime at end offset"); + assert_equals(getComputedStyle(target).opacity, '0.7', + 'Effect is in the active phase at effect end time'); + + // Advance to the scroll limit. + container.scrollTop = 1600; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 225, + "Timeline's currentTime at scroll limit"); + // Hold time set when the animation finishes, which clamps the value of + // the animation's currentTime. + assert_percents_equal(anim.currentTime, 100, + "Animation's currentTime at scroll limit"); + // In the after phase, so the effect should not be applied. + assert_equals(getComputedStyle(target).opacity, '1', + 'After phase at scroll limit'); + }, 'View timeline with subject that is not a direct descendant of the ' + + 'scroll container'); +</script> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/inline-view-timeline-current-time.tentative.html b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/inline-view-timeline-current-time.tentative.html new file mode 100644 index 0000000..4cd6394 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/inline-view-timeline-current-time.tentative.html
@@ -0,0 +1,286 @@ +<!DOCTYPE html> +<html id="top"> +<meta charset="utf-8"> +<title>View timeline current-time</title> +<!-- TODO(crbug.com/1329159): Update link once ratified --> +<link rel="help" href="https://drafts.csswg.org/scroll-animations-1/rewrite#viewtimeline-interface"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<script src="/web-animations/testcommon.js"></script> +<script src="/scroll-animations/scroll-timelines/testcommon.js"></script> +<script src="/scroll-animations/view-timelines/testcommon.js"></script> +<style> + #container { + border: 10px solid lightgray; + overflow-x: scroll; + height: 200px; + width: 200px; + } + #content { + display: flex; + flex-flow: row nowrap; + justify-content: flex-start; + width: 1800px; + margin: 0; + } + .spacer { + width: 800px; + display: inline-block; + } + #target { + background-color: green; + height: 100px; + width: 200px; + display: inline-block; + } +</style> +<body> + <div id="container"> + <div id="content"> + <div id="leading-space" class="spacer"></div> + <div id="target"></div> + <div id="trailing-space" class="spacer"></div> + </div> + </div> +</body> +<script type="text/javascript"> + promise_test(async t => { + container.scrollLeft = 0; + await waitForNextFrame(); + + const anim = CreateViewTimelineOpacityAnimation(t, target, 'inline'); + const timeline = anim.timeline; + await anim.ready; + + // Initially before start-offset and animation effect is in the before + // phase. + assert_percents_equal(timeline.currentTime, -150, + "Timeline's currentTime at container start boundary"); + assert_percents_equal(anim.currentTime, -150, + "Animation's currentTime at container start boundary"); + assert_equals(getComputedStyle(target).opacity, "1", + 'Effect is inactive in the before phase'); + + // Advance to the start offset, which triggers entry to the active phase. + container.scrollLeft = 600; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 0, + "Timeline's current time at start offset"); + assert_percents_equal(anim.currentTime, 0, + "Animation's current time at start offset"); + assert_equals(getComputedStyle(target).opacity, '0.3', + 'Effect at the start of the active phase'); + + // Advance to the midpoint of the animation. + container.scrollLeft = 800; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 50, + "Timeline's currentTime at midpoint"); + assert_percents_equal(anim.currentTime, 50, + "Animation's currentTime at midpoint"); + assert_equals(getComputedStyle(target).opacity,'0.5', + 'Effect at the midpoint of the active range'); + + // Advance to the end of the animation. + container.scrollLeft = 1000; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 100, + "Timeline's currentTime at end offset"); + assert_percents_equal(anim.currentTime, 100, + "Animation's currentTime at end offset"); + assert_equals(getComputedStyle(target).opacity, '0.7', + 'Effect is in the active phase at effect end time'); + + // Advance to the scroll limit. + container.scrollLeft = 1600; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 250, + "Timeline's currentTime at scroll limit"); + // Hold time set when the animation finishes, which clamps the value of + // the animation's currentTime. + assert_percents_equal(anim.currentTime, 100, + "Animation's currentTime at scroll limit"); + // In the after phase, so the effect should not be applied. + assert_equals(getComputedStyle(target).opacity, '1', + 'After phase at scroll limit'); + }, 'View timeline with start and end scroll offsets that do not align with ' + + 'the scroll boundaries' ); + + promise_test(async t => { + const leading = document.getElementById('leading-space'); + leading.style = 'display: none'; + content.style = 'width: 1000px'; + t.add_cleanup(() => { + leading.style = null; + content.style = null; + }); + + container.scrollLeft = 0; + await waitForNextFrame(); + + const anim = CreateViewTimelineOpacityAnimation(t, target, 'inline'); + const timeline = anim.timeline; + await anim.ready; + + assert_percents_equal(timeline.currentTime, 0, + "Timeline's currentTime at container start boundary"); + assert_percents_equal(anim.currentTime, 0, + "Animation's currentTime at container start boundary"); + assert_equals(getComputedStyle(target).opacity, "0.3", + 'Effect enters active phase at container start boundary'); + + + // Advance to midpoint + container.scrollLeft = 100; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 50, + "Timeline's current time at start offset"); + assert_percents_equal(anim.currentTime, 50, + "Animation's current time at start offset"); + assert_equals(getComputedStyle(target).opacity, '0.5', + 'Effect at the start of the active phase'); + + // Advance to end-offset + container.scrollLeft = 200; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 100, + "Timeline's current time at start offset"); + assert_percents_equal(anim.currentTime, 100, + "Animation's current time at start offset"); + assert_equals(getComputedStyle(target).opacity, '0.7', + 'Effect at the start of the active phase'); + + // Advance to scroll limit. + container.scrollLeft = 800; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 400, + "Timeline's current time at start offset"); + assert_percents_equal(anim.currentTime, 100, + "Animation's current time at start offset"); + assert_equals(getComputedStyle(target).opacity, '1', + 'Effect at the start of the active phase'); + + }, 'View timeline clamps starting scroll offset at 0px'); + + promise_test(async t => { + const trailing = document.getElementById('trailing-space'); + trailing.style = 'display: none'; + content.style = 'width: 1000px'; + t.add_cleanup(() => { + trailing.style = null; + content.style = null; + }); + + container.scrollLeft = 0; + await waitForNextFrame(); + + const anim = CreateViewTimelineOpacityAnimation(t, target, 'inline'); + const timeline = anim.timeline; + await anim.ready; + + // Initially in before phase. + assert_percents_equal(timeline.currentTime, -300, + "Timeline's currentTime at container start boundary"); + assert_percents_equal(anim.currentTime, -300, + "Animation's currentTime at container start boundary"); + assert_equals(getComputedStyle(target).opacity, "1", + 'Effect enters active phase at container start boundary'); + + // Advance to start offset. + container.scrollLeft = 600; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 0, + "Timeline's current time at start offset"); + assert_percents_equal(anim.currentTime, 0, + "Animation's current time at start offset"); + assert_equals(getComputedStyle(target).opacity, '0.3', + 'Effect at the start of the active phase'); + + // Advance to midpoint + container.scrollLeft = 700; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 50, + "Timeline's current time at start offset"); + assert_percents_equal(anim.currentTime, 50, + "Animation's current time at start offset"); + assert_equals(getComputedStyle(target).opacity, '0.5', + 'Effect at the start of the active phase'); + + // Advance to end offset. + container.scrollLeft = 800; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 100, + "Timeline's currentTime at max scroll offset"); + assert_percents_equal(anim.currentTime, 100, + "Animation's currentTime at max scroll offset"); + assert_equals(getComputedStyle(target).opacity, "0.7", + 'Effect at end of active phase'); + }, 'View timeline clamps end scroll offset at max scroll'); + + + promise_test(async t => { + container.style = "direction: rtl"; + container.scrollLeft = 0; + t.add_cleanup(() => { + content.style = null; + }); + await waitForNextFrame(); + + const anim = CreateViewTimelineOpacityAnimation(t, target, 'inline'); + const timeline = anim.timeline; + await anim.ready; + + // Initially before start-offset and animation effect is in the before + // phase. + assert_percents_equal(timeline.currentTime, -150, + "Timeline's currentTime at container start boundary"); + assert_percents_equal(anim.currentTime, -150, + "Animation's currentTime at container start boundary"); + assert_equals(getComputedStyle(target).opacity, "1", + 'Effect is inactive in the before phase'); + + // Advance to the start offset, which triggers entry to the active phase. + container.scrollLeft = -600; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 0, + "Timeline's current time at start offset"); + assert_percents_equal(anim.currentTime, 0, + "Animation's current time at start offset"); + assert_equals(getComputedStyle(target).opacity, '0.3', + 'Effect at the start of the active phase'); + + // Advance to the midpoint of the animation. + container.scrollLeft = -800; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 50, + "Timeline's currentTime at midpoint"); + assert_percents_equal(anim.currentTime, 50, + "Animation's currentTime at midpoint"); + assert_equals(getComputedStyle(target).opacity,'0.5', + 'Effect at the midpoint of the active range'); + + // Advance to the end of the animation. + container.scrollLeft = -1000; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 100, + "Timeline's currentTime at end offset"); + assert_percents_equal(anim.currentTime, 100, + "Animation's currentTime at end offset"); + assert_equals(getComputedStyle(target).opacity, '0.7', + 'Effect is in the active phase at effect end time'); + + // Advance to the scroll limit. + container.scrollLeft = -1600; + await waitForNextFrame(); + assert_percents_equal(timeline.currentTime, 250, + "Timeline's currentTime at scroll limit"); + // Hold time set when the animation finishes, which clamps the value of + // the animation's currentTime. + assert_percents_equal(anim.currentTime, 100, + "Animation's currentTime at scroll limit"); + // In the after phase, so the effect should not be applied. + assert_equals(getComputedStyle(target).opacity, '1', + 'After phase at scroll limit'); + }, 'View timeline with container having RTL layout' ); +</script> +</html>
diff --git a/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/testcommon.js b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/testcommon.js new file mode 100644 index 0000000..c49caf1 --- /dev/null +++ b/third_party/blink/web_tests/external/wpt/scroll-animations/view-timelines/testcommon.js
@@ -0,0 +1,19 @@ +'use strict'; + +function CreateViewTimelineOpacityAnimation(test, target, + orientation = 'block') { + const anim = + target.animate( + { opacity: [0.3, 0.7] }, + { + timeline: new ViewTimeline({ + subject: target, + axis: orientation + }), + fill: 'none' + }); + test.add_cleanup(() => { + // anim.cancel(); + }); + return anim; +}
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/fetch-cors-preflight-sw.js b/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/fetch-cors-preflight-sw.js index c135e132..057f48a6 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/fetch-cors-preflight-sw.js +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/fetch-cors-preflight-sw.js
@@ -1,8 +1,8 @@ (async function(testRunner) { - var {page, session, dp} = await testRunner.startBlank( + const {session, dp} = await testRunner.startBlank( `Tests that Fetch intercepts CORS preflight requests from service workers correctly.`); - const url = 'http://localhost:8000/inspector-protocol/network/resources/post-echo.pl'; + const url = 'http://localhost:8000/inspector-protocol/fetch/resources/post-echo.pl'; const FetchHelper = await testRunner.loadScript('resources/fetch-test.js'); let swSession;
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/fetch-cors-preflight.js b/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/fetch-cors-preflight.js index 14d8b49..8f3b438 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/fetch-cors-preflight.js +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/fetch-cors-preflight.js
@@ -1,8 +1,8 @@ (async function(testRunner) { - var {page, session, dp} = await testRunner.startBlank( + const {session, dp} = await testRunner.startBlank( `Tests that Fetch intercepts CORS preflight requests correctly.`); - const url = 'http://localhost:8000/inspector-protocol/network/resources/post-echo.pl'; + const url = 'http://localhost:8000/inspector-protocol/fetch/resources/post-echo.pl'; await dp.Fetch.enable();
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/request-paused-network-id-cors.js b/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/request-paused-network-id-cors.js index 7d2a6ed..3220315e 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/request-paused-network-id-cors.js +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/request-paused-network-id-cors.js
@@ -2,7 +2,7 @@ const {session, dp} = await testRunner.startBlank( `Tests interoperation of Fetch interception with Network instrumentation for CORS preflight requests.`); - const url = 'http://localhost:8000/inspector-protocol/network/resources/post-echo.pl'; + const url = 'http://localhost:8000/inspector-protocol/fetch/resources/post-echo.pl'; await dp.Network.enable(); await dp.Fetch.enable();
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/resources/post-echo.pl b/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/resources/post-echo.pl index e224ad75..559a6479 100755 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/resources/post-echo.pl +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/fetch/resources/post-echo.pl
@@ -1,4 +1,5 @@ #!/usr/bin/perl +print "Cache-control: no-cache\r\n"; print "Content-type: text/plain\r\n\r\n"; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $request, $ENV{'CONTENT_LENGTH'})
diff --git a/third_party/blink/web_tests/http/tests/inspector-protocol/network/cross-origin-isolation/coop-coep-get-security-isolation-info.js b/third_party/blink/web_tests/http/tests/inspector-protocol/network/cross-origin-isolation/coop-coep-get-security-isolation-info.js index 64cd288..d9040a8 100644 --- a/third_party/blink/web_tests/http/tests/inspector-protocol/network/cross-origin-isolation/coop-coep-get-security-isolation-info.js +++ b/third_party/blink/web_tests/http/tests/inspector-protocol/network/cross-origin-isolation/coop-coep-get-security-isolation-info.js
@@ -1,6 +1,13 @@ (async function(testRunner) { var {page, session, dp} = await testRunner.startBlank('Tests that isolation status is reported correctly'); + const protocolMessages = []; + const originalDispatchMessage = DevToolsAPI.dispatchMessage; + DevToolsAPI.dispatchMessage = (message) => { + protocolMessages.push(message); + originalDispatchMessage(message); + } + await dp.Page.enable(); const results = new Map(); @@ -39,7 +46,11 @@ await frameNavigatedPromise; + dumpProtocolMessages = false; for (const key of Array.from(results.keys()).sort()) { + if (key == 'chrome-error://chromewebdata/') { + dumpProtocolMessages = true; + } testRunner.log(key); testRunner.log(`COEP status`); const {coep, coop} = results.get(key); @@ -47,6 +58,9 @@ testRunner.log(`COOP status`); testRunner.log(coop); } + if (dumpProtocolMessages) { + testRunner.log(protocolMessages); + } testRunner.completeTest(); })
diff --git a/third_party/blink/web_tests/platform/generic/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https-expected.txt b/third_party/blink/web_tests/platform/generic/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https-expected.txt new file mode 100644 index 0000000..451ebcb --- /dev/null +++ b/third_party/blink/web_tests/platform/generic/external/wpt/html/cross-origin-opener-policy/tentative/restrict-properties/named_targeting.https-expected.txt
@@ -0,0 +1,4 @@ +This is a testharness.js-based test. +FAIL Verify that named targeting does not work across isolation boundaries. assert_not_equals: Named targeting resolved across isolation boundaries got disallowed value object "[object Window]" +Harness: the test ran to completion. +
diff --git a/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/fetch/fetch-cors-preflight-expected.txt b/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/fetch/fetch-cors-preflight-expected.txt index 0dd19e84..0749143 100644 --- a/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/fetch/fetch-cors-preflight-expected.txt +++ b/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/fetch/fetch-cors-preflight-expected.txt
@@ -1,5 +1,5 @@ Tests that Fetch intercepts CORS preflight requests correctly. -request 1: OPTIONS http://localhost:8000/inspector-protocol/network/resources/post-echo.pl -request 2: POST http://localhost:8000/inspector-protocol/network/resources/post-echo.pl +request 1: OPTIONS http://localhost:8000/inspector-protocol/fetch/resources/post-echo.pl +request 2: POST http://localhost:8000/inspector-protocol/fetch/resources/post-echo.pl response content: response body
diff --git a/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/fetch/fetch-cors-preflight-sw-expected.txt b/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/fetch/fetch-cors-preflight-sw-expected.txt index 9105232..12e2e655 100644 --- a/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/fetch/fetch-cors-preflight-sw-expected.txt +++ b/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/fetch/fetch-cors-preflight-sw-expected.txt
@@ -1,7 +1,7 @@ Tests that Fetch intercepts CORS preflight requests from service workers correctly. [sw] Request to http://127.0.0.1:8000/inspector-protocol/fetch/resources/service-worker.js, type: Other [sw] Request to http://127.0.0.1:8000/inspector-protocol/fetch/resources/service-worker.html, type: XHR -[sw] Request to http://localhost:8000/inspector-protocol/network/resources/post-echo.pl, type: XHR -[sw] Request to http://localhost:8000/inspector-protocol/network/resources/post-echo.pl, type: XHR +[sw] Request to http://localhost:8000/inspector-protocol/fetch/resources/post-echo.pl, type: XHR +[sw] Request to http://localhost:8000/inspector-protocol/fetch/resources/post-echo.pl, type: XHR fetch response: response body
diff --git a/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/fetch/request-paused-network-id-cors-expected.txt b/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/fetch/request-paused-network-id-cors-expected.txt index 7435d958..ab0357b2 100644 --- a/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/fetch/request-paused-network-id-cors-expected.txt +++ b/third_party/blink/web_tests/platform/generic/http/tests/inspector-protocol/fetch/request-paused-network-id-cors-expected.txt
@@ -1,6 +1,6 @@ Tests interoperation of Fetch interception with Network instrumentation for CORS preflight requests. -request 1: OPTIONS http://localhost:8000/inspector-protocol/network/resources/post-echo.pl networkId: string -request 2: POST http://localhost:8000/inspector-protocol/network/resources/post-echo.pl networkId: string +request 1: OPTIONS http://localhost:8000/inspector-protocol/fetch/resources/post-echo.pl networkId: string +request 2: POST http://localhost:8000/inspector-protocol/fetch/resources/post-echo.pl networkId: string Preflight request network events: [ [0] : Network.requestWillBeSent [1] : Network.responseReceived
diff --git a/third_party/blink/web_tests/platform/mac-mac12-arm64/http/tests/devtools/layers/layer-canvas-log-expected.txt b/third_party/blink/web_tests/platform/mac-mac12-arm64/http/tests/devtools/layers/layer-canvas-log-expected.txt deleted file mode 100644 index c458c28..0000000 --- a/third_party/blink/web_tests/platform/mac-mac12-arm64/http/tests/devtools/layers/layer-canvas-log-expected.txt +++ /dev/null
@@ -1,177 +0,0 @@ -Tests layer command log - -Canvas log: -{ - 0 : { - commandIndex : 0 - method : "drawPaint" - params : { - paint : { - blendMode : "Src" - color : "#00000000" - flags : "none" - strokeCap : "Butt" - strokeJoin : "Miter" - strokeMiter : 4 - strokeWidth : 0 - styleName : "Fill" - } - } - } - 1 : { - commandIndex : 1 - method : "drawRect" - params : { - paint : { - color : "#FF0000FF" - flags : "AntiAlias" - strokeCap : "Butt" - strokeJoin : "Miter" - strokeMiter : 4 - strokeWidth : 0 - styleName : "Fill" - } - rect : { - bottom : 100 - left : 0 - right : 100 - top : 0 - } - } - } - 10 : { - commandIndex : 10 - method : "drawRect" - params : { - paint : { - color : "#7F000000" - flags : "AntiAlias" - strokeCap : "Butt" - strokeJoin : "Miter" - strokeMiter : 4 - strokeWidth : 0 - styleName : "Fill" - } - rect : { - bottom : 10 - left : 0 - right : 10 - top : 0 - } - } - } - 11 : { - commandIndex : 11 - method : "restore" - params : undefined - } - 2 : { - commandIndex : 2 - method : "drawRect" - params : { - paint : { - color : "#FFFF0000" - flags : "AntiAlias" - strokeCap : "Butt" - strokeJoin : "Miter" - strokeMiter : 4 - strokeWidth : 0 - styleName : "Fill" - } - rect : { - bottom : 50 - left : 0 - right : 50 - top : 0 - } - } - } - 3 : { - commandIndex : 3 - method : "save" - params : undefined - } - 4 : { - commandIndex : 4 - method : "concat44" - params : { - matrix44 : [ - 1 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 0 - 0 - 1 - 0 - 0 - 50 - 0 - 1 - ] - } - } - 5 : { - commandIndex : 5 - method : "drawImage" - params : { - image : { - height : 21 - opaque : false - width : 19 - } - left : 0 - paint : { - color : "#FF000000" - flags : "AntiAlias" - strokeCap : "Butt" - strokeJoin : "Miter" - strokeMiter : 4 - strokeWidth : 0 - styleName : "Fill" - } - sampling : { - filter : "kLinear" - mipmap : "kNearest" - } - top : 0 - } - } - 6 : { - commandIndex : 6 - method : "restore" - params : undefined - } - 7 : { - commandIndex : 7 - method : "save" - params : undefined - } - 8 : { - commandIndex : 8 - method : "translate" - params : { - dx : 0 - dy : 71 - } - } - 9 : { - commandIndex : 9 - method : "clipRect" - params : { - SkRegion::Op : "kIntersect_Op" - rect : { - bottom : 150 - left : 0 - right : 300 - top : 0 - } - softClipEdgeStyle : true - } - } -} -
diff --git a/third_party/pyjson5/src/benchmarks/chromium.linux.json b/third_party/pyjson5/src/benchmarks/chromium.linux.json index fa4eea7..86d10eb 100644 --- a/third_party/pyjson5/src/benchmarks/chromium.linux.json +++ b/third_party/pyjson5/src/benchmarks/chromium.linux.json
@@ -1181,7 +1181,7 @@ "--bucket", "chromium-result-details", "--test-name", - "sandbox_unittests" + "sandbox_linux_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, @@ -1212,7 +1212,7 @@ } ] }, - "test": "sandbox_unittests" + "test": "sandbox_linux_unittests" }, { "merge": { @@ -2740,7 +2740,7 @@ "--bucket", "chromium-result-details", "--test-name", - "sandbox_unittests" + "sandbox_linux_unittests" ], "script": "//build/android/pylib/results/presentation/test_results_presentation.py" }, @@ -2771,7 +2771,7 @@ } ] }, - "test": "sandbox_unittests" + "test": "sandbox_linux_unittests" }, { "merge": { @@ -3289,7 +3289,7 @@ "swarming": { "can_use_on_swarming_builders": true }, - "test": "sandbox_unittests" + "test": "sandbox_linux_unittests" }, { "swarming": { @@ -3479,7 +3479,7 @@ "swarming": { "can_use_on_swarming_builders": true }, - "test": "sandbox_unittests" + "test": "sandbox_linux_unittests" }, { "swarming": { @@ -3999,7 +3999,7 @@ "swarming": { "can_use_on_swarming_builders": true }, - "test": "sandbox_unittests" + "test": "sandbox_linux_unittests" }, { "swarming": { @@ -4684,7 +4684,7 @@ "swarming": { "can_use_on_swarming_builders": true }, - "test": "sandbox_unittests" + "test": "sandbox_linux_unittests" }, { "swarming": { @@ -5099,7 +5099,7 @@ "swarming": { "can_use_on_swarming_builders": true }, - "test": "sandbox_unittests" + "test": "sandbox_linux_unittests" }, { "swarming": {
diff --git a/third_party/swift-toolchain/3pp/install-mac.sh b/third_party/swift-toolchain/3pp/install-mac.sh index 5539bcb..9e27bb1 100755 --- a/third_party/swift-toolchain/3pp/install-mac.sh +++ b/third_party/swift-toolchain/3pp/install-mac.sh
@@ -16,4 +16,4 @@ mv raw_source_0.tar.gz $PACKAGE_NAME.pkg pkgutil --expand-full $PACKAGE_NAME.pkg output -cp -r output/$PACKAGE_NAME-package.pkg/Payload/* "$PREFIX" +cp -R output/$PACKAGE_NAME-package.pkg/Payload/* "$PREFIX"
diff --git a/tools/binary_size/sizes.py b/tools/binary_size/sizes.py index a6b2c50..938de696 100755 --- a/tools/binary_size/sizes.py +++ b/tools/binary_size/sizes.py
@@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Copyright 2019 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file.
diff --git a/tools/mb/mb_config.pyl b/tools/mb/mb_config.pyl index 5dfefaee..e3328e3 100644 --- a/tools/mb/mb_config.pyl +++ b/tools/mb/mb_config.pyl
@@ -672,29 +672,18 @@ 'chromium.reclient.fyi': { 'Linux Builder reclient staging': 'gpu_tests_release_bot_reclient', - 'Linux Builder reclient staging untrusted': 'gpu_tests_release_bot_reclient', 'Linux Builder reclient test': 'gpu_tests_release_bot_reclient', - 'Linux Builder reclient test untrusted': 'gpu_tests_release_bot_reclient', 'Mac Builder reclient staging': 'gpu_tests_release_bot_minimal_symbols_reclient', - 'Mac Builder reclient staging untrusted': 'gpu_tests_release_bot_minimal_symbols_reclient', 'Mac Builder reclient test': 'gpu_tests_release_bot_minimal_symbols_reclient', - 'Mac Builder reclient test untrusted': 'gpu_tests_release_bot_minimal_symbols_reclient', 'Simple Chrome Builder reclient staging': 'chromeos_amd64-generic-vm_use_fake_dbus_clients_reclient', - 'Simple Chrome Builder reclient staging untrusted': 'chromeos_amd64-generic-vm_use_fake_dbus_clients_reclient', 'Simple Chrome Builder reclient test': 'chromeos_amd64-generic-vm_use_fake_dbus_clients_reclient', - 'Simple Chrome Builder reclient test untrusted': 'chromeos_amd64-generic-vm_use_fake_dbus_clients_reclient', + 'Win x64 Builder reclient gVisor cross test': 'gpu_tests_release_bot_minimal_symbols_reclient', 'Win x64 Builder reclient staging': 'gpu_tests_release_bot_minimal_symbols_reclient', - 'Win x64 Builder reclient staging untrusted': 'gpu_tests_release_bot_minimal_symbols_reclient', 'Win x64 Builder reclient test': 'gpu_tests_release_bot_minimal_symbols_reclient', - 'Win x64 Builder reclient test untrusted': 'gpu_tests_release_bot_minimal_symbols_reclient', 'ios-simulator reclient staging': 'ios_simulator_debug_static_bot_xctest_reclient', - 'ios-simulator reclient staging untrusted': 'ios_simulator_debug_static_bot_xctest_reclient', 'ios-simulator reclient test': 'ios_simulator_debug_static_bot_xctest_reclient', - 'ios-simulator reclient test untrusted': 'ios_simulator_debug_static_bot_xctest_reclient', 'mac-arm64-rel reclient staging': 'mac_arm64_gpu_tests_release_bot_minimal_symbols_no_nacl_reclient', - 'mac-arm64-rel reclient staging untrusted': 'mac_arm64_gpu_tests_release_bot_minimal_symbols_no_nacl_reclient', 'mac-arm64-rel reclient test': 'mac_arm64_gpu_tests_release_bot_minimal_symbols_no_nacl_reclient', - 'mac-arm64-rel reclient test untrusted': 'mac_arm64_gpu_tests_release_bot_minimal_symbols_no_nacl_reclient', }, 'chromium.rust': {
diff --git a/tools/mb/mb_config_expectations/chromium.reclient.fyi.json b/tools/mb/mb_config_expectations/chromium.reclient.fyi.json index 7d08db2..d3960a6 100644 --- a/tools/mb/mb_config_expectations/chromium.reclient.fyi.json +++ b/tools/mb/mb_config_expectations/chromium.reclient.fyi.json
@@ -9,16 +9,6 @@ "use_remoteexec": true } }, - "Linux Builder reclient staging untrusted": { - "gn_args": { - "dcheck_always_on": false, - "ffmpeg_branding": "Chrome", - "is_component_build": false, - "is_debug": false, - "proprietary_codecs": true, - "use_remoteexec": true - } - }, "Linux Builder reclient test": { "gn_args": { "dcheck_always_on": false, @@ -29,16 +19,6 @@ "use_remoteexec": true } }, - "Linux Builder reclient test untrusted": { - "gn_args": { - "dcheck_always_on": false, - "ffmpeg_branding": "Chrome", - "is_component_build": false, - "is_debug": false, - "proprietary_codecs": true, - "use_remoteexec": true - } - }, "Mac Builder reclient staging": { "gn_args": { "dcheck_always_on": false, @@ -50,17 +30,6 @@ "use_remoteexec": true } }, - "Mac Builder reclient staging untrusted": { - "gn_args": { - "dcheck_always_on": false, - "ffmpeg_branding": "Chrome", - "is_component_build": false, - "is_debug": false, - "proprietary_codecs": true, - "symbol_level": 1, - "use_remoteexec": true - } - }, "Mac Builder reclient test": { "gn_args": { "dcheck_always_on": false, @@ -72,17 +41,6 @@ "use_remoteexec": true } }, - "Mac Builder reclient test untrusted": { - "gn_args": { - "dcheck_always_on": false, - "ffmpeg_branding": "Chrome", - "is_component_build": false, - "is_debug": false, - "proprietary_codecs": true, - "symbol_level": 1, - "use_remoteexec": true - } - }, "Simple Chrome Builder reclient staging": { "args_file": "//build/args/chromeos/amd64-generic-vm.gni", "gn_args": { @@ -93,16 +51,6 @@ "use_remoteexec": true } }, - "Simple Chrome Builder reclient staging untrusted": { - "args_file": "//build/args/chromeos/amd64-generic-vm.gni", - "gn_args": { - "dcheck_always_on": false, - "is_chromeos_device": true, - "ozone_platform_headless": true, - "use_real_dbus_clients": false, - "use_remoteexec": true - } - }, "Simple Chrome Builder reclient test": { "args_file": "//build/args/chromeos/amd64-generic-vm.gni", "gn_args": { @@ -113,17 +61,7 @@ "use_remoteexec": true } }, - "Simple Chrome Builder reclient test untrusted": { - "args_file": "//build/args/chromeos/amd64-generic-vm.gni", - "gn_args": { - "dcheck_always_on": false, - "is_chromeos_device": true, - "ozone_platform_headless": true, - "use_real_dbus_clients": false, - "use_remoteexec": true - } - }, - "Win x64 Builder reclient staging": { + "Win x64 Builder reclient gVisor cross test": { "gn_args": { "dcheck_always_on": false, "ffmpeg_branding": "Chrome", @@ -134,7 +72,7 @@ "use_remoteexec": true } }, - "Win x64 Builder reclient staging untrusted": { + "Win x64 Builder reclient staging": { "gn_args": { "dcheck_always_on": false, "ffmpeg_branding": "Chrome", @@ -156,17 +94,6 @@ "use_remoteexec": true } }, - "Win x64 Builder reclient test untrusted": { - "gn_args": { - "dcheck_always_on": false, - "ffmpeg_branding": "Chrome", - "is_component_build": false, - "is_debug": false, - "proprietary_codecs": true, - "symbol_level": 1, - "use_remoteexec": true - } - }, "ios-simulator reclient staging": { "gn_args": { "enable_run_ios_unittests_with_xctest": true, @@ -180,19 +107,6 @@ "use_remoteexec": true } }, - "ios-simulator reclient staging untrusted": { - "gn_args": { - "enable_run_ios_unittests_with_xctest": true, - "ios_set_attributes_for_xcode_project_generation": false, - "is_component_build": false, - "is_debug": true, - "symbol_level": 1, - "target_cpu": "x64", - "target_environment": "simulator", - "target_os": "ios", - "use_remoteexec": true - } - }, "ios-simulator reclient test": { "gn_args": { "enable_run_ios_unittests_with_xctest": true, @@ -206,19 +120,6 @@ "use_remoteexec": true } }, - "ios-simulator reclient test untrusted": { - "gn_args": { - "enable_run_ios_unittests_with_xctest": true, - "ios_set_attributes_for_xcode_project_generation": false, - "is_component_build": false, - "is_debug": true, - "symbol_level": 1, - "target_cpu": "x64", - "target_environment": "simulator", - "target_os": "ios", - "use_remoteexec": true - } - }, "mac-arm64-rel reclient staging": { "gn_args": { "dcheck_always_on": false, @@ -232,19 +133,6 @@ "use_remoteexec": true } }, - "mac-arm64-rel reclient staging untrusted": { - "gn_args": { - "dcheck_always_on": false, - "enable_nacl": false, - "ffmpeg_branding": "Chrome", - "is_component_build": false, - "is_debug": false, - "proprietary_codecs": true, - "symbol_level": 1, - "target_cpu": "arm64", - "use_remoteexec": true - } - }, "mac-arm64-rel reclient test": { "gn_args": { "dcheck_always_on": false, @@ -257,18 +145,5 @@ "target_cpu": "arm64", "use_remoteexec": true } - }, - "mac-arm64-rel reclient test untrusted": { - "gn_args": { - "dcheck_always_on": false, - "enable_nacl": false, - "ffmpeg_branding": "Chrome", - "is_component_build": false, - "is_debug": false, - "proprietary_codecs": true, - "symbol_level": 1, - "target_cpu": "arm64", - "use_remoteexec": true - } } } \ No newline at end of file
diff --git a/tools/metrics/histograms/enums.xml b/tools/metrics/histograms/enums.xml index b709b5f..aa5060e 100644 --- a/tools/metrics/histograms/enums.xml +++ b/tools/metrics/histograms/enums.xml
@@ -6687,8 +6687,8 @@ <int value="1889" label="BIRTHDATE_DAY: accepted"/> <int value="1904" label="BIRTHDATE_MONTH: edited"/> <int value="1905" label="BIRTHDATE_MONTH: accepted"/> - <int value="1920" label="BIRTHDATE_YEAR_4_DIGITS: edited"/> - <int value="1921" label="BIRTHDATE_YEAR_4_DIGITS: accepted"/> + <int value="1920" label="BIRTHDATE_4_DIGIT_YEAR: edited"/> + <int value="1921" label="BIRTHDATE_4_DIGIT_YEAR: accepted"/> <int value="1936" label="PHONE_HOME_CITY_CODE_WITH_TRUNK_PREFIX: edited"/> <int value="1937" label="PHONE_HOME_CITY_CODE_WITH_TRUNK_PREFIX: accepted"/> <int value="1952" @@ -8967,20 +8967,20 @@ label="BIRTHDATE_MONTH - Predictions different - Value agrees with both predictions"/> <int value="721" - label="BIRTHDATE_YEAR_4_DIGITS - Predictions equal - Value agrees"/> + label="BIRTHDATE_4_DIGIT_YEAR - Predictions equal - Value agrees"/> <int value="722" - label="BIRTHDATE_YEAR_4_DIGITS - Predictions equal - Value disagrees"/> + label="BIRTHDATE_4_DIGIT_YEAR - Predictions equal - Value disagrees"/> <int value="723" - label="BIRTHDATE_YEAR_4_DIGITS - Predictions different - Value agrees + label="BIRTHDATE_4_DIGIT_YEAR - Predictions different - Value agrees with old prediction"/> <int value="724" - label="BIRTHDATE_YEAR_4_DIGITS - Predictions different - Value agrees + label="BIRTHDATE_4_DIGIT_YEAR - Predictions different - Value agrees with new prediction"/> <int value="725" - label="BIRTHDATE_YEAR_4_DIGITS - Predictions different - Value agrees + label="BIRTHDATE_4_DIGIT_YEAR - Predictions different - Value agrees with neither prediction"/> <int value="726" - label="BIRTHDATE_YEAR_4_DIGITS - Predictions different - Value agrees + label="BIRTHDATE_4_DIGIT_YEAR - Predictions different - Value agrees with both predictions"/> <int value="727" label="PHONE_HOME_CITY_CODE_WITH_TRUNK_PREFIX - Predictions equal - @@ -9336,7 +9336,7 @@ <int value="117" label="NAME_FULL_WITH_HONORIFIC_PREFIX"/> <int value="118" label="BIRTHDATE_DAY"/> <int value="119" label="BIRTHDATE_MONTH"/> - <int value="120" label="BIRTHDATE_YEAR_4_DIGITS"/> + <int value="120" label="BIRTHDATE_4_DIGIT_YEAR"/> <int value="121" label="PHONE_HOME_CITY_CODE_WITH_TRUNK_PREFIX"/> <int value="122" label="PHONE_HOME_CITY_AND_NUMBER_WITHOUT_TRUNK_PREFIX"/> </enum> @@ -72818,6 +72818,7 @@ <int value="405" label="External Storage"/> <int value="406" label="DLC (Deprecated)"/> <int value="407" label="Power"/> + <int value="408" label="Audio"/> <int value="500" label="Change Picture"/> <int value="501" label="Ambient Mode"/> <int value="502" label="Ambient Mode Photos (Deprecated)"/> @@ -78016,8 +78017,6 @@ <int value="33" label="kEmbedderTriggeredAndSameOriginRedirected"/> <int value="34" label="kEmbedderTriggeredAndCrossOriginRedirected"/> <int value="35" label="kEmbedderTriggeredAndDestroyed"/> - <int value="36" label="kMemoryLimitExceeded"/> - <int value="37" label="kFailToGetMemoryUsage"/> </enum> <enum name="PrerenderHoverEvent">
diff --git a/tools/metrics/histograms/metadata/account_manager/histograms.xml b/tools/metrics/histograms/metadata/account_manager/histograms.xml index b2c27f10..a6aa037 100644 --- a/tools/metrics/histograms/metadata/account_manager/histograms.xml +++ b/tools/metrics/histograms/metadata/account_manager/histograms.xml
@@ -116,6 +116,19 @@ </summary> </histogram> +<histogram name="AccountManager.MojoDisconnections.AccessTokenFetcherRemote" + units="count" expires_after="2023-01-31"> + <owner>sinhak@chromium.org</owner> + <owner>anastasiian@chromium.org</owner> + <summary> + Tracks the number of Mojo pipe disconnections observed by the access token + fetcher Mojo remote in `AccountManagerFacadeImpl`. This is logged at the end + of the destruction of `AccountManagerFacadeImpl::AccessTokenFetcher`. This + will correspond to the end of an access token fetch request. This is logged + for Ash - ChromeOS and Lacros - ChromeOS. + </summary> +</histogram> + <histogram name="AccountManager.MojoDisconnections.AccountManagerObserverReceiver" units="count" expires_after="2023-01-31">
diff --git a/tools/metrics/histograms/metadata/v8/histograms.xml b/tools/metrics/histograms/metadata/v8/histograms.xml index e2e250ede..d4755ea5 100644 --- a/tools/metrics/histograms/metadata/v8/histograms.xml +++ b/tools/metrics/histograms/metadata/v8/histograms.xml
@@ -1417,6 +1417,21 @@ </summary> </histogram> +<histogram name="V8.SandboxedExternalPointersCount" units="count" + expires_after="2022-12-04"> + <owner>saelo@chromium.org</owner> + <owner>ishell@chromium.org</owner> + <summary> + The number of in-use external pointers in an Isolate's ExternalPointerTable. + + When the V8 Sandbox is enabled, objects located outside of the sandbox are + referenced through a per-Isolate ExternalPointerTable to ensure memory-safe + access to them. This histogram records the number of active external + pointers in a single table, which is determined by counting the number of + alive entries during garbage collection of an ExternalPointerTable. + </summary> +</histogram> + <histogram name="V8.SandboxMode" enum="V8SandboxMode" expires_after="2022-12-04"> <owner>saelo@chromium.org</owner>
diff --git a/tools/metrics/ukm/ukm.xml b/tools/metrics/ukm/ukm.xml index a0fa8c82..7d29ba16 100644 --- a/tools/metrics/ukm/ukm.xml +++ b/tools/metrics/ukm/ukm.xml
@@ -464,9 +464,41 @@ </summary> <metric name="AverageViewportAdDensity"> <summary> - The estimated average density of ads within the viewport by area. - Calculated as the moving average of area of ads within the viewport * 100 - / viewport area. This counts each overlapping area once. + The estimated average viewport ad density. Each density value is + calculated as the area of ads within the viewport * 100 / viewport area, + where each overlapping area is counted once. And this returns the average + of the densities accumulated over the page load time rounded to the + nearest integer. + </summary> + </metric> + <metric name="KurtosisViewportAdDensity"> + <summary> + The estimated kurtosis of the viewport ad density. Each density value is + calculated as the area of ads within the viewport * 100 / viewport area, + where each overlapping area is counted once. And this returns the kurtosis + of the densities accumulated over the page load time rounded to the + nearest exponential bucket integer with bucket spacing 1.3. For negative + values, the bucketing will be taken on its magnitude part. + </summary> + </metric> + <metric name="SkewnessViewportAdDensity"> + <summary> + The estimated skewness of the viewport ad density. Each density value is + calculated as the area of ads within the viewport * 100 / viewport area, + where each overlapping area is counted once. And this returns the skewness + of the densities accumulated over the page load time rounded to the + nearest exponential bucket integer with bucket spacing 1.3. For negative + values, the bucketing will be taken on its magnitude part. + </summary> + </metric> + <metric name="VarianceViewportAdDensity"> + <summary> + The estimated variance of the viewport ad density. Each density value is + calculated as the area of ads within the viewport * 100 / viewport area, + where each overlapping area is counted once. And this returns the variance + of the densities accumulated over the page load time rounded to the + nearest exponential bucket integer with bucket spacing 1.3. For negative + values, the bucketing will be taken on its magnitude part. </summary> </metric> </event>
diff --git a/tools/perf/core/perf_data_generator.py b/tools/perf/core/perf_data_generator.py index e8e35f8..f98a2e15 100755 --- a/tools/perf/core/perf_data_generator.py +++ b/tools/perf/core/perf_data_generator.py
@@ -111,7 +111,10 @@ 'android-pixel2-perf-calibration', 'linux-perf-calibration' ] -TESTERS_OPT_IN_FOR_PY3 = ['linux-perf-fyi'] +TESTERS_OPT_IN_FOR_PY3 = [ + 'linux-perf-fyi', 'android-pixel2-perf-fyi', + 'win-10_laptop_low_end-perf_HP-Candidate' +] CALIBRATION_BUILDERS = { 'linux-perf-calibration': {
diff --git a/ui/android/java/strings/translations/android_ui_strings_as.xtb b/ui/android/java/strings/translations/android_ui_strings_as.xtb index d2c67fb..c580f99 100644 --- a/ui/android/java/strings/translations/android_ui_strings_as.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_as.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="as"> +<translation id="2405260961377511836">ফট’ পিকাৰ খুলিব পৰা নগ’ল</translation> <translation id="3240426699337459095">লিংকটোৰ প্ৰতিলিপি কৰা হ’ল</translation> <translation id="6315516427814392808">খালী ঠাই কম থকাৰ বাবে পূর্বৰ কার্য সম্পূর্ণ কৰিব নোৱাৰিলে</translation> <translation id="6555463879959038093">ক্লিপব’ৰ্ডলৈ প্ৰতিলিপি কৰিব পৰা নগ’ল</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_ca.xtb b/ui/android/java/strings/translations/android_ui_strings_ca.xtb index cd4ba730..7dc7857 100644 --- a/ui/android/java/strings/translations/android_ui_strings_ca.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_ca.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ca"> +<translation id="2405260961377511836">El selector de fotos no s'obre</translation> <translation id="3240426699337459095">S'ha copiat l'enllaç.</translation> <translation id="6315516427814392808">No es pot completar l'operació anterior perquè hi ha poca memòria.</translation> <translation id="6555463879959038093">No s'ha pogut copiar el contingut al porta-retalls.</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_cs.xtb b/ui/android/java/strings/translations/android_ui_strings_cs.xtb index dc77e147..31ae934d 100644 --- a/ui/android/java/strings/translations/android_ui_strings_cs.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_cs.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="cs"> +<translation id="2405260961377511836">Výběr fotek nelze otevřít</translation> <translation id="3240426699337459095">Odkaz byl zkopírován</translation> <translation id="6315516427814392808">Předchozí operaci nelze dokončit z důvodu nedostatku paměti</translation> <translation id="6555463879959038093">Zkopírování obsahu do schránky se nezdařilo</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_cy.xtb b/ui/android/java/strings/translations/android_ui_strings_cy.xtb index 6cbfcfc..75d8998 100644 --- a/ui/android/java/strings/translations/android_ui_strings_cy.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_cy.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="cy"> +<translation id="2405260961377511836">Methu ag agor y dewisydd lluniau</translation> <translation id="3240426699337459095">Cafodd y ddolen ei chopïo</translation> <translation id="6315516427814392808">Methu â chwblhau'r weithred flaenorol oherwydd cof isel</translation> <translation id="6555463879959038093">Methwyd â chopïo i'r clipfwrdd</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_da.xtb b/ui/android/java/strings/translations/android_ui_strings_da.xtb index 35479224..b008f623 100644 --- a/ui/android/java/strings/translations/android_ui_strings_da.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_da.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="da"> +<translation id="2405260961377511836">Billedvælgeren kan ikke åbnes</translation> <translation id="3240426699337459095">Linket er kopieret</translation> <translation id="6315516427814392808">Den tidligerere handling kunne ikke fuldføres på grund af manglende hukommelse</translation> <translation id="6555463879959038093">Der kunne ikke kopieres til udklipsholder</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_es.xtb b/ui/android/java/strings/translations/android_ui_strings_es.xtb index c550a76..6a960e4 100644 --- a/ui/android/java/strings/translations/android_ui_strings_es.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_es.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="es"> +<translation id="2405260961377511836">No se puede abrir el selector de fotos</translation> <translation id="3240426699337459095">Enlace copiado</translation> <translation id="6315516427814392808">No se ha podido completar la operación anterior por falta de memoria</translation> <translation id="6555463879959038093">Error al copiar en el portapapeles</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_et.xtb b/ui/android/java/strings/translations/android_ui_strings_et.xtb index 42c2d00..d7dd060 100644 --- a/ui/android/java/strings/translations/android_ui_strings_et.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_et.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="et"> +<translation id="2405260961377511836">Ei saa fotovalijat avada</translation> <translation id="3240426699337459095">Link on kopeeritud</translation> <translation id="6315516427814392808">Eelmist toimingut ei saa vähese mälu tõttu lõpetada</translation> <translation id="6555463879959038093">Lõikelauale kopeerimine ebaõnnestus</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_eu.xtb b/ui/android/java/strings/translations/android_ui_strings_eu.xtb index a2afdf4..2771dcc4 100644 --- a/ui/android/java/strings/translations/android_ui_strings_eu.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_eu.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="eu"> +<translation id="2405260961377511836">Ezin da ireki argazki-hautatzailea</translation> <translation id="3240426699337459095">Esteka kopiatu da</translation> <translation id="6315516427814392808">Ezin izan da osatu aurreko eragiketa memoria gutxi dagoelako</translation> <translation id="6555463879959038093">Ezin izan dira datuak arbelean kopiatu</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_fi.xtb b/ui/android/java/strings/translations/android_ui_strings_fi.xtb index fe47f46..eef6184 100644 --- a/ui/android/java/strings/translations/android_ui_strings_fi.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_fi.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="fi"> +<translation id="2405260961377511836">Kuvanvalitsinta ei voi avata</translation> <translation id="3240426699337459095">Linkki kopioitu</translation> <translation id="6315516427814392808">Edellistä toimintoa ei voi suorittaa. Muisti ei riitä.</translation> <translation id="6555463879959038093">Kopiointi leikepöydälle epäonnistui</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_fil.xtb b/ui/android/java/strings/translations/android_ui_strings_fil.xtb index 5c5a042..e360715e 100644 --- a/ui/android/java/strings/translations/android_ui_strings_fil.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_fil.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="fil"> +<translation id="2405260961377511836">Ayaw magbukas ng tagapili ng larawan</translation> <translation id="3240426699337459095">Nakopya ang link</translation> <translation id="6315516427814392808">Hindi makumpleto ang nakaraang operasyon dahil sa mababang memory</translation> <translation id="6555463879959038093">Nabigong kopyahin sa clipboard</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_gu.xtb b/ui/android/java/strings/translations/android_ui_strings_gu.xtb index 4e9ddb39..25e1989 100644 --- a/ui/android/java/strings/translations/android_ui_strings_gu.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_gu.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="gu"> +<translation id="2405260961377511836">ફોટો પિકર ખોલી શકાતું નથી</translation> <translation id="3240426699337459095">લિંક કૉપિ કરી</translation> <translation id="6315516427814392808">ઓછી મેમરીને કારણે અગાઉની કામગીરી પૂર્ણ કરી શક્યા નથી</translation> <translation id="6555463879959038093">ક્લિપબોર્ડ પર કૉપિ કરવામાં નિષ્ફળ</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_hu.xtb b/ui/android/java/strings/translations/android_ui_strings_hu.xtb index 7fded508..a07f42d99f 100644 --- a/ui/android/java/strings/translations/android_ui_strings_hu.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_hu.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="hu"> +<translation id="2405260961377511836">Nem sikerült a választó indítása</translation> <translation id="3240426699337459095">Link másolva</translation> <translation id="6315516427814392808">Az előző műveletet memóriahiány miatt nem lehet elvégezni</translation> <translation id="6555463879959038093">Nem sikerült a vágólapra másolni</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_hy.xtb b/ui/android/java/strings/translations/android_ui_strings_hy.xtb index 065804f..fae47b3 100644 --- a/ui/android/java/strings/translations/android_ui_strings_hy.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_hy.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="hy"> +<translation id="2405260961377511836">Լուսանկարների ընտրիչը չբացվեց</translation> <translation id="3240426699337459095">Հղումը պատճենվեց</translation> <translation id="6315516427814392808">Հնարավոր չէ ավարտել նախորդ գործողությունը, քանի որ հիշողությունը բավարար չէ</translation> <translation id="6555463879959038093">Չհաջողվեց պատճենել սեղմատախտակին</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_id.xtb b/ui/android/java/strings/translations/android_ui_strings_id.xtb index 1c76b08..a8e75f1 100644 --- a/ui/android/java/strings/translations/android_ui_strings_id.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_id.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="id"> +<translation id="2405260961377511836">Tidak dapat membuka pemilih foto</translation> <translation id="3240426699337459095">Tautan disalin</translation> <translation id="6315516427814392808">Tidak dapat menyelesaikan operasi sebelumnya karena sisa memori sedikit</translation> <translation id="6555463879959038093">Gagal menyalin ke papan klip</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_ja.xtb b/ui/android/java/strings/translations/android_ui_strings_ja.xtb index b41deb5..1fc0765 100644 --- a/ui/android/java/strings/translations/android_ui_strings_ja.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_ja.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ja"> +<translation id="2405260961377511836">写真選択ツールを開けません</translation> <translation id="3240426699337459095">リンクをコピーしました</translation> <translation id="6315516427814392808">メモリ不足のため直前の操作を完了できません</translation> <translation id="6555463879959038093">クリップボードにコピーできませんでした</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_kk.xtb b/ui/android/java/strings/translations/android_ui_strings_kk.xtb index 968b3ee9..d026f7d 100644 --- a/ui/android/java/strings/translations/android_ui_strings_kk.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_kk.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="kk"> +<translation id="2405260961377511836">Сурет таңдағышты ашу мүмкін емес</translation> <translation id="3240426699337459095">Сілтеме көшірілді</translation> <translation id="6315516427814392808">Жад көлемі аз болғандықтан алдыңғы операцияны аяқтау мүмкін емес</translation> <translation id="6555463879959038093">Буферге көшіру сәтсіз аяқталды</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_ko.xtb b/ui/android/java/strings/translations/android_ui_strings_ko.xtb index 13aed4fa..fa12b65 100644 --- a/ui/android/java/strings/translations/android_ui_strings_ko.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_ko.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ko"> +<translation id="2405260961377511836">사진 선택 도구를 열 수 없음</translation> <translation id="3240426699337459095">링크 복사됨</translation> <translation id="6315516427814392808">메모리가 부족하여 이전 작업을 완료할 수 없습니다.</translation> <translation id="6555463879959038093">클립보드로 복사하지 못했습니다.</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_ms.xtb b/ui/android/java/strings/translations/android_ui_strings_ms.xtb index ffd4699..b3bcf48 100644 --- a/ui/android/java/strings/translations/android_ui_strings_ms.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_ms.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ms"> +<translation id="2405260961377511836">Tidak dapat membuka pemilih foto</translation> <translation id="3240426699337459095">Pautan disalin</translation> <translation id="6315516427814392808">Gagal melengkapkan operasi terdahulu disebabkan kekurangan memori</translation> <translation id="6555463879959038093">Gagal menyalin ke papan keratan</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_ne.xtb b/ui/android/java/strings/translations/android_ui_strings_ne.xtb index 49fcdb5..36293bf 100644 --- a/ui/android/java/strings/translations/android_ui_strings_ne.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_ne.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ne"> +<translation id="2405260961377511836">फोटो पिकर खोल्न सकिएन</translation> <translation id="3240426699337459095">लिंक प्रतिलिपि गरियो</translation> <translation id="6315516427814392808">न्यून मेमोरीको कारण अघिल्लो कार्य पूरा गर्न सकिएन</translation> <translation id="6555463879959038093">क्लिपबोर्डमा प्रतिलिपि गर्न असफल भयो</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_no.xtb b/ui/android/java/strings/translations/android_ui_strings_no.xtb index 7847101..3a738a1 100644 --- a/ui/android/java/strings/translations/android_ui_strings_no.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_no.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="no"> +<translation id="2405260961377511836">Kan ikke åpne bildevelgeren</translation> <translation id="3240426699337459095">Linken er kopiert</translation> <translation id="6315516427814392808">Kan ikke fullføre forrige handling på grunn av lite minne</translation> <translation id="6555463879959038093">Kunne ikke kopiere til utklippstavlen</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_or.xtb b/ui/android/java/strings/translations/android_ui_strings_or.xtb index cb04fc3..fef1d03 100644 --- a/ui/android/java/strings/translations/android_ui_strings_or.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_or.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="or"> +<translation id="2405260961377511836">ଫଟୋ ପିକର ଖୋଲିବାକୁ ଅସମର୍ଥ</translation> <translation id="3240426699337459095">ଲିଙ୍କ୍ କପି ହୋଇଛି</translation> <translation id="6315516427814392808">ମେମୋରି କମ୍ ଥିବା କାରଣରୁ ପୂର୍ବ କାର୍ଯ୍ୟ ସମ୍ପୂର୍ଣ୍ଣ କରିହେଲା ନାହିଁ</translation> <translation id="6555463879959038093">କ୍ଲିପ୍ବୋର୍ଡକୁ କପି କରିବାରେ ବିଫଳ</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_pa.xtb b/ui/android/java/strings/translations/android_ui_strings_pa.xtb index 6933891..8701deb6 100644 --- a/ui/android/java/strings/translations/android_ui_strings_pa.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_pa.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="pa"> +<translation id="2405260961377511836">ਫ਼ੋਟੋ ਚੋਣਕਾਰ ਖੁੱਲ੍ਹਿਆ ਨਹੀਂ</translation> <translation id="3240426699337459095">ਲਿੰਕ ਕਾਪੀ ਕੀਤਾ</translation> <translation id="6315516427814392808">ਘੱਟ ਮੈਮੋਰੀ ਦੇ ਕਾਰਨ ਪਿਛਲਾ ਓਪਰੇਸ਼ਨ ਪੂਰਾ ਕਰਨ ਵਿੱਚ ਅਸਮਰੱਥ</translation> <translation id="6555463879959038093">ਕਲਿੱਪਬੋਰਡ 'ਤੇ ਕਾਪੀ ਕਰਨ ਵਿੱਚ ਅਸਫਲ</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_pl.xtb b/ui/android/java/strings/translations/android_ui_strings_pl.xtb index 57c64e4..0492af1 100644 --- a/ui/android/java/strings/translations/android_ui_strings_pl.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_pl.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="pl"> +<translation id="2405260961377511836">Nie można otworzyć selektora zdjęć</translation> <translation id="3240426699337459095">Link skopiowany</translation> <translation id="6315516427814392808">Zbyt mało pamięci, by ukończyć poprzednią operację</translation> <translation id="6555463879959038093">Nie udało się skopiować do schowka</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_pt-BR.xtb b/ui/android/java/strings/translations/android_ui_strings_pt-BR.xtb index 192a974..5a9c828 100644 --- a/ui/android/java/strings/translations/android_ui_strings_pt-BR.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_pt-BR.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="pt-BR"> +<translation id="2405260961377511836">Falha ao abrir o seletor de fotos</translation> <translation id="3240426699337459095">Link copiado</translation> <translation id="6315516427814392808">Devido à insuficiência de memória, não foi possível concluir a operação anterior</translation> <translation id="6555463879959038093">Falha ao copiar para a área de transferência</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_sk.xtb b/ui/android/java/strings/translations/android_ui_strings_sk.xtb index cff30439..7825b926 100644 --- a/ui/android/java/strings/translations/android_ui_strings_sk.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_sk.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sk"> +<translation id="2405260961377511836">Výber fotiek sa nedá otvoriť</translation> <translation id="3240426699337459095">Odkaz bol skopírovaný</translation> <translation id="6315516427814392808">Predchádzajúca operácia sa nedokončila z dôvodu nedostatku pamäte</translation> <translation id="6555463879959038093">Skopírovanie do schránky sa nepodarilo</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_sl.xtb b/ui/android/java/strings/translations/android_ui_strings_sl.xtb index b374b21f..ec89c46b 100644 --- a/ui/android/java/strings/translations/android_ui_strings_sl.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_sl.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="sl"> +<translation id="2405260961377511836">Izbirnika fotografij ni mogoče odpreti</translation> <translation id="3240426699337459095">Povezava kopirana</translation> <translation id="6315516427814392808">Prejšnjega dejanja ni mogoče končati, ker primanjkuje pomnilnika</translation> <translation id="6555463879959038093">Kopiranje v odložišče ni uspelo</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_ta.xtb b/ui/android/java/strings/translations/android_ui_strings_ta.xtb index 8deaee0..d0db37b 100644 --- a/ui/android/java/strings/translations/android_ui_strings_ta.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_ta.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ta"> +<translation id="2405260961377511836">படத்தேர்வியை திறக்க முடியவில்லை</translation> <translation id="3240426699337459095">இணைப்பு நகலெடுக்கப்பட்டது</translation> <translation id="6315516427814392808">குறைந்த நினைவகம் காரணமாக முந்தைய செயலை நிறைவு செய்ய முடியவில்லை</translation> <translation id="6555463879959038093">கிளிப்போர்டிற்கு நகலெடுப்பதில் தோல்வி</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_te.xtb b/ui/android/java/strings/translations/android_ui_strings_te.xtb index 6b805c0..f244de2 100644 --- a/ui/android/java/strings/translations/android_ui_strings_te.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_te.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="te"> +<translation id="2405260961377511836">ఫోటో సెలెక్టర్ను తెరవలేకపోయింది</translation> <translation id="3240426699337459095">లింక్ కాపీ చేయబడింది</translation> <translation id="6315516427814392808">తక్కువ మెమరీ కారణంగా మునుపటి ఆపరేషన్ను పూర్తి చేయడం సాధ్యపడలేదు</translation> <translation id="6555463879959038093">క్లిప్బోర్డ్కు కాపీ చేయడంలో విఫలమైంది</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_ur.xtb b/ui/android/java/strings/translations/android_ui_strings_ur.xtb index be3d25d6..1d178f3 100644 --- a/ui/android/java/strings/translations/android_ui_strings_ur.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_ur.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="ur"> +<translation id="2405260961377511836">تصاویر منتخب کرنے کا ٹول کھولنے سے قاصر</translation> <translation id="3240426699337459095">لنک کاپی ہوگیا</translation> <translation id="6315516427814392808">کم میموری ہونے کی وجہ سے پچھلی کارروائی کو مکمل کرنے سے قاصر</translation> <translation id="6555463879959038093">کلپ بورڈ میں کاپی کرنے میں ناکام ہوگیا</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_vi.xtb b/ui/android/java/strings/translations/android_ui_strings_vi.xtb index 010f2a3b..2f387c1 100644 --- a/ui/android/java/strings/translations/android_ui_strings_vi.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_vi.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="vi"> +<translation id="2405260961377511836">Không thể mở công cụ chọn ảnh</translation> <translation id="3240426699337459095">Đã sao chép đường liên kết</translation> <translation id="6315516427814392808">Không thể hoàn tất thao tác trước do bộ nhớ thấp</translation> <translation id="6555463879959038093">Sao chép sang bảng nhớ tạm không thành công</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_zh-CN.xtb b/ui/android/java/strings/translations/android_ui_strings_zh-CN.xtb index af558be..7cfd902 100644 --- a/ui/android/java/strings/translations/android_ui_strings_zh-CN.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_zh-CN.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="zh-CN"> +<translation id="2405260961377511836">无法打开照片选择器</translation> <translation id="3240426699337459095">已复制链接</translation> <translation id="6315516427814392808">内存不足,无法完成上一操作</translation> <translation id="6555463879959038093">未能复制到剪贴板</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_zh-HK.xtb b/ui/android/java/strings/translations/android_ui_strings_zh-HK.xtb index a7d6fea..382c85e 100644 --- a/ui/android/java/strings/translations/android_ui_strings_zh-HK.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_zh-HK.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="zh-HK"> +<translation id="2405260961377511836">無法開啟相片挑選工具</translation> <translation id="3240426699337459095">連結已複製</translation> <translation id="6315516427814392808">記憶體不足,無法完成前一項操作</translation> <translation id="6555463879959038093">無法複製到剪貼簿</translation>
diff --git a/ui/android/java/strings/translations/android_ui_strings_zh-TW.xtb b/ui/android/java/strings/translations/android_ui_strings_zh-TW.xtb index 37bfa9d..fc9b6d5 100644 --- a/ui/android/java/strings/translations/android_ui_strings_zh-TW.xtb +++ b/ui/android/java/strings/translations/android_ui_strings_zh-TW.xtb
@@ -1,6 +1,7 @@ <?xml version="1.0" ?> <!DOCTYPE translationbundle> <translationbundle lang="zh-TW"> +<translation id="2405260961377511836">無法開啟相片挑選工具</translation> <translation id="3240426699337459095">連結已複製</translation> <translation id="6315516427814392808">記憶體不足,無法完成前一項操作</translation> <translation id="6555463879959038093">無法複製到剪貼簿</translation>
diff --git a/ui/base/ime/ash/mock_input_method_manager.cc b/ui/base/ime/ash/mock_input_method_manager.cc index c0050a9..09a6115 100644 --- a/ui/base/ime/ash/mock_input_method_manager.cc +++ b/ui/base/ime/ash/mock_input_method_manager.cc
@@ -236,7 +236,7 @@ ui::VirtualKeyboardController* MockInputMethodManager::GetVirtualKeyboardController() { - return this; + return virtual_keyboard_enabled_ ? this : nullptr; } void MockInputMethodManager::NotifyInputMethodExtensionAdded( @@ -249,13 +249,20 @@ return false; } -void MockInputMethodManager::DismissVirtualKeyboard() {} +void MockInputMethodManager::DismissVirtualKeyboard() { + for (auto& observer : observer_list_) + observer.OnKeyboardHidden(); +} void MockInputMethodManager::AddObserver( - ui::VirtualKeyboardControllerObserver* observer) {} + ui::VirtualKeyboardControllerObserver* observer) { + observer_list_.AddObserver(observer); +} void MockInputMethodManager::RemoveObserver( - ui::VirtualKeyboardControllerObserver* observer) {} + ui::VirtualKeyboardControllerObserver* observer) { + observer_list_.RemoveObserver(observer); +} bool MockInputMethodManager::IsKeyboardVisible() { return false;
diff --git a/ui/base/ime/ash/mock_input_method_manager.h b/ui/base/ime/ash/mock_input_method_manager.h index fd46651..c58ffde 100644 --- a/ui/base/ime/ash/mock_input_method_manager.h +++ b/ui/base/ime/ash/mock_input_method_manager.h
@@ -6,10 +6,12 @@ #define UI_BASE_IME_ASH_MOCK_INPUT_METHOD_MANAGER_H_ #include "base/component_export.h" +#include "base/observer_list.h" #include "ui/base/ime/ash/input_method_manager.h" // TODO(https://crbug.com/1164001): remove and use forward declaration. #include "ui/base/ime/ash/input_method_util.h" #include "ui/base/ime/virtual_keyboard_controller.h" +#include "ui/base/ime/virtual_keyboard_controller_observer.h" namespace ash { namespace input_method { @@ -95,6 +97,10 @@ ~MockInputMethodManager() override; + void SetVirtualKeyboardEnabled(bool enabled) { + virtual_keyboard_enabled_ = enabled; + } + // InputMethodManager: void AddObserver(InputMethodManager::Observer* observer) override; void AddCandidateWindowObserver( @@ -146,6 +152,9 @@ private: scoped_refptr<State> state_; uint32_t features_enabled_state_; + bool virtual_keyboard_enabled_ = true; + base::ObserverList<ui::VirtualKeyboardControllerObserver>::Unchecked + observer_list_; }; } // namespace input_method
diff --git a/ui/base/models/list_selection_model.cc b/ui/base/models/list_selection_model.cc index 6823713..154b70a1 100644 --- a/ui/base/models/list_selection_model.cc +++ b/ui/base/models/list_selection_model.cc
@@ -230,7 +230,7 @@ return opt.has_value() ? base::NumberToString(opt.value()) : std::string("<none>"); }; - std::vector<const std::string> index_strings; + std::vector<std::string> index_strings; base::ranges::transform( selected_indices_, std::back_inserter(index_strings), [](const auto& index) { return base::NumberToString(index); });
diff --git a/ui/chromeos/translations/ui_chromeos_strings_af.xtb b/ui/chromeos/translations/ui_chromeos_strings_af.xtb index 36551c3..fc088099 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_af.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_af.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Deel vouer met Parallels Desktop</translation> <translation id="1439919885608649279">Persoon met blomme</translation> <translation id="1471718551822868769">Slowaaks</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" is nie opgelaai nie. Daar is nie genoeg spasie in jou Google Drive nie.</translation> <translation id="1482884275703521657">Fins</translation> <translation id="148466539719134488">Switsers</translation> <translation id="1497522201463361063">Kan nie "<ph name="FILE_NAME" />" hernoem nie. <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">Maak asblik leeg</translation> <translation id="5163869187418756376">Deling het misluk. Gaan jou verbinding na en probeer later weer.</translation> <translation id="516592729076796170">VSA-programmeerder-Dvorak</translation> -<translation id="5170477580121653719">Google Drive-spasie oor: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Miniprent-aansig</translation> <translation id="5194713942430106590">Kies om die kolom in stygende volgorde te rangskik.</translation> <translation id="5211614973734216083">Faroëes</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_am.xtb b/ui/chromeos/translations/ui_chromeos_strings_am.xtb index 3e4dcc8..8c7f5f2 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_am.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_am.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">አቃፊን ለParallels ዴስክቶፕ አጋራ</translation> <translation id="1439919885608649279">አበቦች የያዘ ሰው</translation> <translation id="1471718551822868769">ስሎቫክኛ</translation> -<translation id="1474339897586437869">«<ph name="FILENAME" />» አልተሰቀለም። በእርስዎ Google Drive ውስጥ በቂ የሆነ ነፃ ቦታ የለም።</translation> <translation id="1482884275703521657">ፊንላንድኛ</translation> <translation id="148466539719134488">ስዊስ</translation> <translation id="1497522201463361063">«<ph name="FILE_NAME" />»ን ዳግም መሰየም አልተቻለም። <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">መጣያውን አጽዳ</translation> <translation id="5163869187418756376">ማጋራት አልተሳካም። ግንኙነትዎን ይፈትሹ እና ቆይተው እንደገና ይሞክሩ።</translation> <translation id="516592729076796170">የአሜሪካ Dvorak ፕሮግራመር</translation> -<translation id="5170477580121653719">የቀረው የGoogle Drive ማከማቻ ቦታ፦ <ph name="SPACE_AVAILABLE" />።</translation> <translation id="5177526793333269655">ድንክዬ ትይታ</translation> <translation id="5194713942430106590">በሽቅብታ ቅደም ተከተል ዓምዱን ለመደርደር ጠቅ ያድርጉ።</translation> <translation id="5211614973734216083">ፋሮኛ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb index b2f542a6..92f1ca58 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ar.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ar.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">مشاركة المجلد مع نظام Parallels Desktop</translation> <translation id="1439919885608649279">شخص يحمل أزهارًا</translation> <translation id="1471718551822868769">السلوفاكية</translation> -<translation id="1474339897586437869">لم يتم تحميل "<ph name="FILENAME" />". حيث لا توجد لديك مساحة فارغة كافية في Google Drive.</translation> <translation id="1482884275703521657">الفنلندية</translation> <translation id="148466539719134488">السويسرية</translation> <translation id="1497522201463361063">تعذرت إعادة تسمية "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">إفراغ المهملات</translation> <translation id="5163869187418756376">تعذّرت المشاركة. تحقق من اتصالك وأعد المحاولة لاحقًا.</translation> <translation id="516592729076796170">لوحة مفاتيح المطور الأمريكية Dvorak</translation> -<translation id="5170477580121653719">المساحة المتبقية في Google Drive: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">عرض الصور المصغرة</translation> <translation id="5194713942430106590">انقر لترتيب محتوى العمود ترتيبًا تصاعديًا.</translation> <translation id="5211614973734216083">الفاروية</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_as.xtb b/ui/chromeos/translations/ui_chromeos_strings_as.xtb index b52a7539..e018bde1 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_as.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_as.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Parallels Desktopৰ জৰিয়তে ফ’ল্ডাৰটো শ্বেয়াৰ কৰক</translation> <translation id="1439919885608649279">ফুলৰ সৈতে ব্যক্তিৰ ছবি</translation> <translation id="1471718551822868769">শ্ল’ভাক</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" আপল'ড কৰা হোৱা নাই। Google Driveত পর্যাপ্ত পৰিমাণৰ খালী ঠাই নাই।</translation> <translation id="1482884275703521657">ফিনিশ্ব</translation> <translation id="148466539719134488">ছুইচ্ছ</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />"ৰ নাম সলনি কৰিব পৰা নগ'ল।<ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">সুৰক্ষিত</translation> <translation id="2638942478653899953">Google Drive পাব পৰা অৱস্থাত নাই। অনুগ্ৰহ কৰি <ph name="BEGIN_LINK" />লগ আউট কৰক<ph name="END_LINK" /> আৰু পুনৰ লগ ইন কৰক।</translation> <translation id="2649120831653069427">Rainbowfish</translation> +<translation id="2653059201992392941">আপোনাৰ <ph name="RETRIES" /> টা প্ৰয়াস বাকী আছে।</translation> <translation id="2663066752008346276">Myansan কীব’ৰ্ডৰ সৈতে বাৰ্মীজ/ম্যানমাৰ</translation> <translation id="2664412712123763093">ফাইলৰ অৱস্থান</translation> <translation id="2718540689505416944">Linuxৰ জৰিয়তে এপ্ ইনষ্টল কৰক</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">ট্ৰেশ্ব খালী কৰক</translation> <translation id="5163869187418756376">শ্বেয়াৰ কৰিব পৰা নগ'ল। ইণ্টাৰনেট সংযোগ পৰীক্ষা কৰি আকৌ চেষ্টা কৰক।</translation> <translation id="516592729076796170">ইউ.এছ. প্ৰ‘গ্ৰামাৰ ডভ‘ৰাক</translation> -<translation id="5170477580121653719">Google Driveৰ খালী ঠাই: <ph name="SPACE_AVAILABLE" />।</translation> <translation id="5177526793333269655">থাম্বনেইল ভিউ</translation> <translation id="5194713942430106590">স্তম্ভটো ঊৰ্ধ্বক্ৰমিক ভাৱে সজাবলৈ ক্লিক কৰক।</translation> <translation id="5211614973734216083">ফেৰ’ইজ</translation> @@ -529,6 +528,7 @@ <translation id="5489067830765222292">লাটভিয়ান</translation> <translation id="5489965683297092283"><ph name="FILTER_NAME" /> ফিল্টাৰটো অফ হৈ আছে।</translation> <translation id="5494920125229734069">সকলো বাছনি কৰক</translation> +<translation id="5500104704744051184">আপুনি PUKটো নিদিয়া পৰ্যন্ত এই নেটৱৰ্কটো ব্যৱহাৰ কৰিব নোৱাৰিব</translation> <translation id="5500122897333236901">আইচলেণ্ডীয়</translation> <translation id="5508696409934741614">ডট্</translation> <translation id="5522908512596376669">ফাইলৰ সূচীখন সূচী ভিউ ম'ডলৈ সলনি কৰা হৈছে।</translation> @@ -634,6 +634,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" />টা বস্তু</translation> <translation id="642282551015776456">এই নামটো ফ'ল্ডাৰ নামৰ ফাইল হিচাপে ব্যৱহাৰ কৰা নহ'ব পাৰে</translation> <translation id="6423031066725912715">TCVN কীব’ৰ্ডৰ সৈতে ভিয়েটনামিজ</translation> +<translation id="6430271654280079150">আপোনাৰ ১ টা প্ৰয়াস বাকী আছে।</translation> <translation id="6485131920355264772">খালী ঠাইৰ বিষয়ে তথ্য সংগ্ৰহ কৰিব পৰা নগ’ল</translation> <translation id="6495925982925244349"><ph name="NETWORK_COUNT" />টা নেটৱৰ্কৰ <ph name="NETWORK_INDEX" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, ছিগনেলৰ ক্ষমতা <ph name="SIGNAL_STRENGTH" />%, আপোনাৰ প্ৰশাসকে পৰিচালনা কৰে, সবিশেষ</translation> <translation id="649877868557234318"><ph name="FILE_NAME" />ক <ph name="FOLDER_NAME" />ত আহৰণ কৰি থকা হৈছে</translation> @@ -900,6 +901,7 @@ <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" />টা বস্তু ছিংক কৰি থকা হৈছে...</translation> <translation id="8600173386174225982">ফাইলৰ সূচীখন থাম্বনেইল ভিউ ম'ডলৈ সলনি কৰা হৈছে।</translation> <translation id="8601932370724196034">Crostini প্ৰতিচ্ছবিৰ ফাইল</translation> +<translation id="8608515571837163082">বহুবাৰ এটা ভুল পিন দিয়া হৈছে। বাহকে প্ৰদান কৰা ৮ টা অংকৰ অৱৰোধৰ পৰা আঁতৰোৱাৰ ব্যক্তিগত কীটো (PUK) দিয়ক।</translation> <translation id="8609695766746872526">আইচলেণ্ডীয়</translation> <translation id="863903787380594467">ভুল পিন। আপোনাৰ <ph name="RETRIES" /> টা প্ৰয়াস বাকী আছে।</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - প’ৰ্ট</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_az.xtb b/ui/chromeos/translations/ui_chromeos_strings_az.xtb index ddd73520..aaac7c4d 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_az.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_az.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Qovluğu Parallels Desktop ilə paylaşın</translation> <translation id="1439919885608649279">Əlində gül olan adam</translation> <translation id="1471718551822868769">Slovak</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" yüklənmədi. Google Diskdə kifayət qədər boş yer yoxdur.</translation> <translation id="1482884275703521657">Fin</translation> <translation id="148466539719134488">İsveçrəyə aid</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" faylını adlandırmaq mümkün deyil. <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">Zibil qutusunu boşaldın</translation> <translation id="5163869187418756376">Paylaşma alınmadı. Bağlantını yoxlayın və yenidən cəhd edin.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> -<translation id="5170477580121653719">Google Disk qalmış boşluq <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Eskiz görünüşü</translation> <translation id="5194713942430106590">Sütunu azalan sıra ilə çeşidləmək üçün klikləyin.</translation> <translation id="5211614973734216083">Farer</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_be.xtb b/ui/chromeos/translations/ui_chromeos_strings_be.xtb index fb0db106..de9ccc2 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_be.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_be.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Абагульванне папкі з Parallels Desktop</translation> <translation id="1439919885608649279">Чалавек з кветкамі</translation> <translation id="1471718551822868769">Славацкая</translation> -<translation id="1474339897586437869">Файл "<ph name="FILENAME" />" не запампаваны: на Google Дыску недастаткова месца.</translation> <translation id="1482884275703521657">Фінская</translation> <translation id="148466539719134488">Швейцарская</translation> <translation id="1497522201463361063">Не ўдалося перайменаваць файл "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">Ачысціць сметніцу</translation> <translation id="5163869187418756376">Збой абагульвання. Праверце падключэнне і паўтарыце спробу пазней.</translation> <translation id="516592729076796170">Праграмісцкая Дворака для ЗША</translation> -<translation id="5170477580121653719">Вольнага месца на Google Дыску засталося: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Рэжым мініяцюр</translation> <translation id="5194713942430106590">Каб адсартаваць слупок па ўзрастанні, націсніце тут.</translation> <translation id="5211614973734216083">Фарэрская</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb index 1a1ae42..0615d06 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_bg.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_bg.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Споделяне на папката с Parallels Desktop</translation> <translation id="1439919885608649279">Човек с цветя</translation> <translation id="1471718551822868769">Словашки</translation> -<translation id="1474339897586437869">Файлът „<ph name="FILENAME" />“ не бе качен. Нямате достатъчно свободно място в Google Диск.</translation> <translation id="1482884275703521657">Финландски</translation> <translation id="148466539719134488">Швейцарска клавиатура</translation> <translation id="1497522201463361063">„<ph name="FILE_NAME" />“ не може да се преименува. <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">Изчистване на кошчето</translation> <translation id="5163869187418756376">Споделянето не бе успешно. Проверете връзката си и опитайте отново по-късно.</translation> <translation id="516592729076796170">Американска (Дворак) клавиатура за програмисти</translation> -<translation id="5170477580121653719">Оставащо място в Google Диск: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Изглед с миниизображения</translation> <translation id="5194713942430106590">Кликнете, за да сортирате колоната във възходящ ред.</translation> <translation id="5211614973734216083">Фарьорски</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb index 38fc210d..b33d9cf0 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_bn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_bn.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Parallels Desktop-এর সাথে ফোল্ডার শেয়ার করুন</translation> <translation id="1439919885608649279">ফুলের সাথে ব্যক্তির ছবি</translation> <translation id="1471718551822868769">স্লোভাক</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" আপলোড করা হয়নি। আপনার Google ড্রাইভে পর্যাপ্ত ফাঁকা স্থান নেই।</translation> <translation id="1482884275703521657">ফিনিশ</translation> <translation id="148466539719134488">সুইস</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" পুনঃনাম দিতে অসমর্থ৷ <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">ট্র্যাশ খালি করুন</translation> <translation id="5163869187418756376">শেয়ার করে ব্যর্থ হয়েছে৷ আপনার সংযোগটি পরীক্ষা করে পরে আবার চেষ্টা করুন৷</translation> <translation id="516592729076796170">মার্কিন যুক্তরাষ্ট্র প্রোগ্রামার ডিভোরাক</translation> -<translation id="5170477580121653719">Google ড্রাইভ অবশিষ্ট স্থান: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">থাম্বনেল ভিউ</translation> <translation id="5194713942430106590">কলামের মানগুলি ছোট থেকে বড় ক্রমানুযায়ী সাজাতে ক্লিক করুন।</translation> <translation id="5211614973734216083">ফ্যারোইজ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb index d0148b6..a3b516c 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_bs.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_bs.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Dijeljenje foldera pomoću aplikacije Parallels Desktop</translation> <translation id="1439919885608649279">Osoba s cvijećem</translation> <translation id="1471718551822868769">slovački</translation> -<translation id="1474339897586437869">Fajl "<ph name="FILENAME" />" nije otpremljen. Nemate dovoljno slobodnog prostora na Google Disku.</translation> <translation id="1482884275703521657">finski</translation> <translation id="148466539719134488">švicarska</translation> <translation id="1497522201463361063">Nije moguće promijeniti naziv fajla "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">Isprazni Otpad</translation> <translation id="5163869187418756376">Dijeljenje nije uspjelo. Provjerite vezu i pokušajte ponovo kasnije.</translation> <translation id="516592729076796170">SAD programer Dvorak</translation> -<translation id="5170477580121653719">Slobodan prostor na Google Disku: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Prikaz minijatura</translation> <translation id="5194713942430106590">Kliknite da poredate kolonu uzlaznim poretkom.</translation> <translation id="5211614973734216083">farski</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb index 9be47ba..87fc2a8f 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ca.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ca.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Comparteix la carpeta amb Parallels Desktop</translation> <translation id="1439919885608649279">Persona amb flors</translation> <translation id="1471718551822868769">Eslovac</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" no s'ha penjat. No hi ha prou espai lliure al vostre compte de Google Drive.</translation> <translation id="1482884275703521657">Finès</translation> <translation id="148466539719134488">Suís</translation> <translation id="1497522201463361063">No es pot canviar el nom a "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Segura</translation> <translation id="2638942478653899953">No s'ha pogut accedir a Google Drive. <ph name="BEGIN_LINK" />Tanqueu la sessió<ph name="END_LINK" /> i torneu-la a iniciar.</translation> <translation id="2649120831653069427">Peix arc iris</translation> +<translation id="2653059201992392941">Et queden <ph name="RETRIES" /> intents.</translation> <translation id="2663066752008346276">Birmà (Birmània) amb teclat myansan</translation> <translation id="2664412712123763093">Ubicació del fitxer</translation> <translation id="2718540689505416944">Instal·la l'aplicació per a Linux</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Buida la paperera</translation> <translation id="5163869187418756376">S'ha produït un error en compartir. Comproveu la connexió i torneu-ho a provar més tard.</translation> <translation id="516592729076796170">Dvorak nord-americà per a programadors</translation> -<translation id="5170477580121653719">Espai que queda a Google Drive: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Visualització de miniatures</translation> <translation id="5194713942430106590">Fes clic per veure les dades de la columna en ordre ascendent.</translation> <translation id="5211614973734216083">Feroès</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">Letó</translation> <translation id="5489965683297092283">El filtre <ph name="FILTER_NAME" /> està desactivat.</translation> <translation id="5494920125229734069">Selecciona-ho tot</translation> +<translation id="5500104704744051184">No podràs utilitzar aquesta xarxa fins que no introdueixis el PUK</translation> <translation id="5500122897333236901">Islandès</translation> <translation id="5508696409934741614">Punts</translation> <translation id="5522908512596376669">La llista de fitxers ha canviat a la visualització de llista.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> elements</translation> <translation id="642282551015776456">Aquest nom no es pot utilitzar com a nom de fitxer o de carpeta</translation> <translation id="6423031066725912715">Vietnamita amb teclat TCVN</translation> +<translation id="6430271654280079150">Et queda 1 intent.</translation> <translation id="6485131920355264772">No s'ha pogut recuperar informació sobre l'espai</translation> <translation id="6495925982925244349">Xarxa <ph name="NETWORK_INDEX" /> de <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, <ph name="SIGNAL_STRENGTH" />% d'intensitat del senyal, gestionada per l'administrador, detalls</translation> <translation id="649877868557234318">S'està extraient <ph name="FILE_NAME" /> a la carpeta <ph name="FOLDER_NAME" /></translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903">S'estan sincronitzant <ph name="NUMBER_OF_FILES" /> elements...</translation> <translation id="8600173386174225982">La llista de fitxers ha canviat a la visualització de miniatures.</translation> <translation id="8601932370724196034">Fitxer d'imatge de Crostini</translation> +<translation id="8608515571837163082">S'ha introduït un PIN incorrecte massa vegades. Introdueix el número personal de desbloqueig (PUK) de 8 dígits proporcionat per l'operador.</translation> <translation id="8609695766746872526">Islandès</translation> <translation id="863903787380594467">El PIN no és correcte. Et queden <ph name="RETRIES" /> intents.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - Port</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb index edf65ed92..99637d8bd 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_cs.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_cs.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Sdílení složky s nástrojem Parallels Desktop</translation> <translation id="1439919885608649279">Člověk s květinami</translation> <translation id="1471718551822868769">slovenština</translation> -<translation id="1474339897586437869">Soubor <ph name="FILENAME" /> nelze nahrát. Na Disku Google je nedostatek místa.</translation> <translation id="1482884275703521657">finština</translation> <translation id="148466539719134488">Švýcarská klávesnice</translation> <translation id="1497522201463361063">Soubor „<ph name="FILE_NAME" />“ se nepodařilo přejmenovat. <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Zabezpečeno</translation> <translation id="2638942478653899953">Disk Google nelze použít. <ph name="BEGIN_LINK" />Odhlaste se prosím<ph name="END_LINK" /> a opět se přihlaste.</translation> <translation id="2649120831653069427">Duhovka</translation> +<translation id="2653059201992392941">Počet zbývajících pokusů: <ph name="RETRIES" />.</translation> <translation id="2663066752008346276">barmština/myanmarština s myansanskou klávesnicí</translation> <translation id="2664412712123763093">Umístění souboru</translation> <translation id="2718540689505416944">Nainstalujte aplikaci pro Linux</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Vysypat koš</translation> <translation id="5163869187418756376">Sdílení se nezdařilo. Zkontrolujte připojení k síti a zkuste to znovu.</translation> <translation id="516592729076796170">Americká klávesnice Dvorak</translation> -<translation id="5170477580121653719">Volné místo na Disku Google: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Zobrazení miniatur</translation> <translation id="5194713942430106590">Kliknutím sloupec seřadíte vzestupně.</translation> <translation id="5211614973734216083">faerština</translation> @@ -529,6 +528,7 @@ <translation id="5489067830765222292">lotyština</translation> <translation id="5489965683297092283">Filtr <ph name="FILTER_NAME" /> je vypnutý.</translation> <translation id="5494920125229734069">Vybrat vše</translation> +<translation id="5500104704744051184">Tuto síť budete moci používat až po zadání kódu PUK</translation> <translation id="5500122897333236901">islandština</translation> <translation id="5508696409934741614">Tečky</translation> <translation id="5522908512596376669">Seznam souborů byl změněn na seznamové zobrazení.</translation> @@ -634,6 +634,7 @@ <translation id="6395575651121294044">Počet položek: <ph name="NUMBER_OF_FILES" /></translation> <translation id="642282551015776456">Tento název nelze použít k pojmenování souboru ani složky.</translation> <translation id="6423031066725912715">vietnamština s klávesnicí TCVN</translation> +<translation id="6430271654280079150">Zbývá vám jeden pokus.</translation> <translation id="6485131920355264772">Informace o volném místě se nepodařilo načíst</translation> <translation id="6495925982925244349">Síť <ph name="NETWORK_INDEX" /> z <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" /> síla signálu: <ph name="SIGNAL_STRENGTH" /> %, spravováno administrátorem, podrobnosti</translation> <translation id="649877868557234318">Rozbalování souboru <ph name="FILE_NAME" /> do složky <ph name="FOLDER_NAME" /></translation> @@ -900,6 +901,7 @@ <translation id="8579285237314169903">Synchronizace <ph name="NUMBER_OF_FILES" /> položek...</translation> <translation id="8600173386174225982">Seznam souborů se změnil na zobrazení miniatur.</translation> <translation id="8601932370724196034">Soubor obrazu Crostini</translation> +<translation id="8608515571837163082">Příliš mnohokrát jste zadali nesprávný PIN. Zadejte osmimístný kód PUK, který vám poskytl operátor.</translation> <translation id="8609695766746872526">islandština</translation> <translation id="863903787380594467">Nesprávný PIN. Počet zbývajících pokusů: <ph name="RETRIES" />.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> – port</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_cy.xtb b/ui/chromeos/translations/ui_chromeos_strings_cy.xtb index ab64f0b..d853892 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_cy.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_cy.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Rhannu'r ffolder gyda Parallels Desktop</translation> <translation id="1439919885608649279">Person â blodau</translation> <translation id="1471718551822868769">Slofac</translation> -<translation id="1474339897586437869">Ni chafodd "<ph name="FILENAME" />" ei uwchlwytho. Nid oes digon o le ar gael yn eich Google Drive.</translation> <translation id="1482884275703521657">Ffineg</translation> <translation id="148466539719134488">Y Swistir</translation> <translation id="1497522201463361063">Methu ag ailenwi "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Diogel</translation> <translation id="2638942478653899953">Ni ellid cyrraedd Google Drive. <ph name="BEGIN_LINK" />Allgofnodwch<ph name="END_LINK" /> a mewngofnodwch eto.</translation> <translation id="2649120831653069427">Pysgodyn seithliw</translation> +<translation id="2653059201992392941">Mae gennych <ph name="RETRIES" /> ymgais ar ôl.</translation> <translation id="2663066752008346276">Byrmaneg/Myanmar gyda bysellfwrdd Myansan</translation> <translation id="2664412712123763093">Lleoliad ffeil</translation> <translation id="2718540689505416944">Gosod yr ap gyda Linux</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Gwagio'r Bin Sbwriel</translation> <translation id="5163869187418756376">Wedi methu â rhannu. Gwiriwch eich cysylltiad a rhowch gynnig arall arni'n nes ymlaen.</translation> <translation id="516592729076796170">Dvorak Rhaglennwr UDA</translation> -<translation id="5170477580121653719">Lle storio Google Drive sydd ar ôl: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Gwedd fân-lun</translation> <translation id="5194713942430106590">Cliciwch i drefnu'r golofn mewn trefn esgynnol.</translation> <translation id="5211614973734216083">Ffaroes</translation> @@ -529,6 +528,7 @@ <translation id="5489067830765222292">Latfieg</translation> <translation id="5489965683297092283">Mae'r hidlydd <ph name="FILTER_NAME" /> wedi'i ddiffodd.</translation> <translation id="5494920125229734069">Dewis pob un</translation> +<translation id="5500104704744051184">Ni fyddwch yn gallu defnyddio'r rhwydwaith hwn nes i chi roi'r PUK</translation> <translation id="5500122897333236901">Islandeg</translation> <translation id="5508696409934741614">Dotiau</translation> <translation id="5522908512596376669">Mae'r rhestr ffeiliau wedi newid i wedd rhestr.</translation> @@ -634,6 +634,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> eitem</translation> <translation id="642282551015776456">Ni chaniateir defnyddio'r enw hwn fel enw ffeil neu ffolder</translation> <translation id="6423031066725912715">Fietnameg gyda bysellfwrdd TCVN</translation> +<translation id="6430271654280079150">Mae gennych 1 ymgais ar ôl.</translation> <translation id="6485131920355264772">Methwyd ag adfer gwybodaeth am le</translation> <translation id="6495925982925244349">Rhwydwaith <ph name="NETWORK_INDEX" /> o <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, Cryfder Signal <ph name="SIGNAL_STRENGTH" />%, Rheolir gan eich Gweinyddwr, Manylion</translation> <translation id="649877868557234318">Yn echdynnu <ph name="FILE_NAME" /> i <ph name="FOLDER_NAME" /></translation> @@ -900,6 +901,7 @@ <translation id="8579285237314169903">Wrthi'n cysoni <ph name="NUMBER_OF_FILES" /> o eitemau…</translation> <translation id="8600173386174225982">Mae'r rhestr ffeiliau wedi newid i olwg mân-luniau.</translation> <translation id="8601932370724196034">Ffeil llun Crostini</translation> +<translation id="8608515571837163082">Rhoddwyd y PIN anghywir gormod o weithiau. Rhowch yr Allwedd Ddadrwystro Bersonol (PUK) 8-digid a ddarperir gan y cludwr.</translation> <translation id="8609695766746872526">Islandeg</translation> <translation id="863903787380594467">PIN anghywir. Mae gennych <ph name="RETRIES" /> ymgais ar ôl.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - Porth</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_da.xtb b/ui/chromeos/translations/ui_chromeos_strings_da.xtb index 3c3dafb3..a580ec9 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_da.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_da.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Del mappe med Parallels Desktop</translation> <translation id="1439919885608649279">Person med blomster</translation> <translation id="1471718551822868769">Slovakisk</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" blev ikke uploadet. Der er ikke plads nok i Google Drev.</translation> <translation id="1482884275703521657">Finsk</translation> <translation id="148466539719134488">Schweizisk</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" kunne ikke omdøbes. <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Beskyttet</translation> <translation id="2638942478653899953">Der kunne ikke oprettes forbindelse til Google Drev. <ph name="BEGIN_LINK" />Log ud <ph name="END_LINK" />, og log ind igen.</translation> <translation id="2649120831653069427">Regnbuefisk</translation> +<translation id="2653059201992392941">Du har <ph name="RETRIES" /> forsøg tilbage.</translation> <translation id="2663066752008346276">Burmesisk/myanmarsk Myansan-tastatur</translation> <translation id="2664412712123763093">Filplacering</translation> <translation id="2718540689505416944">Installer app med Linux</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Tøm papirkurv</translation> <translation id="5163869187418756376">Deling mislykkedes. Kontrollér din forbindelse, og prøv igen senere.</translation> <translation id="516592729076796170">Amerikansk (Programmer Dvorak) tastatur</translation> -<translation id="5170477580121653719">Ledig plads på Google Drev: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Miniaturevisning</translation> <translation id="5194713942430106590">Klik for at sortere kolonnen i stigende rækkefølge.</translation> <translation id="5211614973734216083">Færøsk</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">Lettisk</translation> <translation id="5489965683297092283">Filteret <ph name="FILTER_NAME" /> er deaktiveret.</translation> <translation id="5494920125229734069">Vælg alle</translation> +<translation id="5500104704744051184">Du kan ikke bruge dette netværk, før du har angivet PUK-koden</translation> <translation id="5500122897333236901">Islandsk</translation> <translation id="5508696409934741614">Prikker</translation> <translation id="5522908512596376669">Der blev skiftet til listevisning for listen med filer.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> elementer</translation> <translation id="642282551015776456">Dette navn kan ikke bruges som fil- eller mappenavn</translation> <translation id="6423031066725912715">Vietnamesisk med TCVN-tastatur</translation> +<translation id="6430271654280079150">Du har 1 forsøg tilbage.</translation> <translation id="6485131920355264772">Pladsoplysningerne kunne ikke hentes</translation> <translation id="6495925982925244349">Netværk <ph name="NETWORK_INDEX" /> af <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, signalstyrke <ph name="SIGNAL_STRENGTH" /> %, administreret af din administrator, info</translation> <translation id="649877868557234318">Pakker <ph name="FILE_NAME" /> ud i <ph name="FOLDER_NAME" /></translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> elementer synkroniseres...</translation> <translation id="8600173386174225982">Der blev skiftet til miniaturevisning for listen med filer.</translation> <translation id="8601932370724196034">Crostini-billedfil</translation> +<translation id="8608515571837163082">Der blev angivet en forkert pinkode for mange gange. Angiv den 8-cifrede PUK-kode, du har fået af dit mobilselskab.</translation> <translation id="8609695766746872526">Islandsk</translation> <translation id="863903787380594467">Forkert pinkode. Du har <ph name="RETRIES" /> forsøg tilbage.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> – port</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_de.xtb b/ui/chromeos/translations/ui_chromeos_strings_de.xtb index 7e1d065..79afc3b 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_de.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_de.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Ordner für Parallels Desktop freigeben</translation> <translation id="1439919885608649279">Person mit Blumen</translation> <translation id="1471718551822868769">Slowakisch</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" konnte nicht hochgeladen werden. In deinem Google Drive-Konto ist nicht genügend Speicherplatz verfügbar.</translation> <translation id="1482884275703521657">Finnisch</translation> <translation id="148466539719134488">Schweizerdeutsch</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" kann nicht umbenannt werden. <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">Papierkorb leeren</translation> <translation id="5163869187418756376">Fehler bei der Freigabe. Bitte überprüfe deine Verbindung und versuche es später erneut.</translation> <translation id="516592729076796170">USA – Programmer Dvorak</translation> -<translation id="5170477580121653719">Verbleibender Speicherplatz in Google Drive: <ph name="SPACE_AVAILABLE" /></translation> <translation id="5177526793333269655">Miniaturbildansicht</translation> <translation id="5194713942430106590">Klicken, um die Spalte in aufsteigender Reihenfolge zu sortieren.</translation> <translation id="5211614973734216083">Färöisch</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_el.xtb b/ui/chromeos/translations/ui_chromeos_strings_el.xtb index be14c52..f5daa149 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_el.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_el.xtb
@@ -55,7 +55,6 @@ <translation id="1435838927755162558">Κοινή χρήση φακέλου με το Parallels Desktop</translation> <translation id="1439919885608649279">Άτομο με λουλούδια</translation> <translation id="1471718551822868769">Σλοβακικά</translation> -<translation id="1474339897586437869">Το αρχείο "<ph name="FILENAME" />" δεν ανέβηκε. Δεν υπάρχει επαρκής ελεύθερος χώρος στο Google Drive σας.</translation> <translation id="1482884275703521657">Φινλανδικά</translation> <translation id="148466539719134488">Ελβετικά</translation> <translation id="1497522201463361063">Δεν είναι δυνατή η μετονομασία του "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -501,7 +500,6 @@ <translation id="5159560892333415631">Άδειασμα Κάδου απορριμάτων</translation> <translation id="5163869187418756376">Αποτυχία κοινής χρήσης. Ελέγξτε τη σύνδεσή σας και δοκιμάστε ξανά αργότερα.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> -<translation id="5170477580121653719">Χώρος που απομένει στο Google Drive: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Προβολή μικρογραφιών</translation> <translation id="5194713942430106590">Κάντε κλικ για ταξινόμηση της στήλης σε αύξουσα σειρά.</translation> <translation id="5211614973734216083">Φερόε</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb index 705b8fdd..98b5245 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_en-GB.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Share folder with Parallels Desktop</translation> <translation id="1439919885608649279">Person with flowers</translation> <translation id="1471718551822868769">Slovak</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" was not uploaded. There is not enough free space in your Google Drive.</translation> <translation id="1482884275703521657">Finnish</translation> <translation id="148466539719134488">Swiss</translation> <translation id="1497522201463361063">Unable to rename "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">Empty bin</translation> <translation id="5163869187418756376">Sharing failed. Please check your connection and try again later.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> -<translation id="5170477580121653719">Google Drive space left: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Thumbnail view</translation> <translation id="5194713942430106590">Click to sort the column in ascending order.</translation> <translation id="5211614973734216083">Faroese</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb index 012e844..5d3cec5 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_es-419.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Compartir carpeta con Parallels Desktop</translation> <translation id="1439919885608649279">Persona con flores</translation> <translation id="1471718551822868769">Eslovaco</translation> -<translation id="1474339897586437869">No se cargó "<ph name="FILENAME" />". No hay suficiente espacio libre en Google Drive.</translation> <translation id="1482884275703521657">Finlandés</translation> <translation id="148466539719134488">Suizo</translation> <translation id="1497522201463361063">No se puede cambiar el nombre de "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">Vaciar la papelera</translation> <translation id="5163869187418756376">Se produjo un error al compartir el contenido. Comprueba tu conexión y vuelve a intentarlo.</translation> <translation id="516592729076796170">Programmer Dvorak, EE. UU.</translation> -<translation id="5170477580121653719">Espacio libre en Google Drive: <ph name="SPACE_AVAILABLE" /></translation> <translation id="5177526793333269655">Vista de miniatura</translation> <translation id="5194713942430106590">Haz clic para ordenar la columna de forma ascendente.</translation> <translation id="5211614973734216083">Feroés</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_es.xtb b/ui/chromeos/translations/ui_chromeos_strings_es.xtb index 4dfe8d1..dea90ed8 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_es.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_es.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Compartir carpeta con Parallels Desktop</translation> <translation id="1439919885608649279">Persona con flores</translation> <translation id="1471718551822868769">Eslovaco</translation> -<translation id="1474339897586437869">No se ha subido <ph name="FILENAME" />. No hay suficiente espacio libre en tu cuenta de Google Drive.</translation> <translation id="1482884275703521657">Finés</translation> <translation id="148466539719134488">Suizo</translation> <translation id="1497522201463361063">No se puede cambiar el nombre del archivo "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Segura</translation> <translation id="2638942478653899953">No se ha podido acceder a Google Drive. <ph name="BEGIN_LINK" />Cierra la sesión<ph name="END_LINK" /> y vuelve a iniciarla.</translation> <translation id="2649120831653069427">Pez arcoíris</translation> +<translation id="2653059201992392941">Te quedan <ph name="RETRIES" /> intentos.</translation> <translation id="2663066752008346276">Birmano (Myanmar/Birmania) con teclado Myansan</translation> <translation id="2664412712123763093">Ubicación del archivo</translation> <translation id="2718540689505416944">Instalar aplicación con Linux</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Vaciar papelera</translation> <translation id="5163869187418756376">Se ha producido un error al compartir contenido. Comprueba la conexión e inténtalo de nuevo más tarde.</translation> <translation id="516592729076796170">Programmer Dvorak de EE. UU.</translation> -<translation id="5170477580121653719">Espacio libre de Google Drive: <ph name="SPACE_AVAILABLE" /></translation> <translation id="5177526793333269655">Vista de miniaturas</translation> <translation id="5194713942430106590">Haz clic para mostrar la columna en orden ascendente.</translation> <translation id="5211614973734216083">Feroés</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">Letón</translation> <translation id="5489965683297092283">El filtro <ph name="FILTER_NAME" /> se ha desactivado.</translation> <translation id="5494920125229734069">Seleccionar todo</translation> +<translation id="5500104704744051184">No podrás usar esta red hasta que escribas el PUK</translation> <translation id="5500122897333236901">Islandés</translation> <translation id="5508696409934741614">Puntos</translation> <translation id="5522908512596376669">La lista de archivos ha cambiado a la vista de lista.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> elementos</translation> <translation id="642282551015776456">Este nombre no se puede utilizar como nombre de archivo de carpeta.</translation> <translation id="6423031066725912715">Vietnamita con teclado TCVN</translation> +<translation id="6430271654280079150">Te queda 1 intento.</translation> <translation id="6485131920355264772">No se ha podido obtener información sobre el espacio.</translation> <translation id="6495925982925244349">Red <ph name="NETWORK_INDEX" /> de <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, intensidad de la señal: <ph name="SIGNAL_STRENGTH" /> %, gestionada por el administrador, detalles</translation> <translation id="649877868557234318">Extrayendo <ph name="FILE_NAME" /> en <ph name="FOLDER_NAME" /></translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903">Sincronizando <ph name="NUMBER_OF_FILES" /> elementos...</translation> <translation id="8600173386174225982">La lista de archivos ha cambiado a la vista de miniaturas.</translation> <translation id="8601932370724196034">Archivo de imagen de Crostini</translation> +<translation id="8608515571837163082">Se ha escrito un PIN incorrecto demasiadas veces. Escribe el código PUK de 8 dígitos proporcionado por tu operador.</translation> <translation id="8609695766746872526">Islandés</translation> <translation id="863903787380594467">PIN incorrecto. Te quedan <ph name="RETRIES" /> intentos.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> (puerto)</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_et.xtb b/ui/chromeos/translations/ui_chromeos_strings_et.xtb index d5f1ac0..97df3516 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_et.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_et.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Kausta jagamine üksusega Parallels Desktop</translation> <translation id="1439919885608649279">Lilledega inimene</translation> <translation id="1471718551822868769">slovaki</translation> -<translation id="1474339897586437869">Faili „<ph name="FILENAME" />” ei laaditud üles. Teie Google Drive’is ei ole piisavalt vaba ruumi.</translation> <translation id="1482884275703521657">soome</translation> <translation id="148466539719134488">Šveitsi</translation> <translation id="1497522201463361063">Faili „<ph name="FILE_NAME" />” ei saa ümber nimetada. <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Kaitstud</translation> <translation id="2638942478653899953">Google Drive'iga ei saadud ühendust. <ph name="BEGIN_LINK" />Logige välja<ph name="END_LINK" /> ja tagasi sisse.</translation> <translation id="2649120831653069427">Vikerkaarekala</translation> +<translation id="2653059201992392941">Teil on veel <ph name="RETRIES" /> katset.</translation> <translation id="2663066752008346276">birma (Myanmar), Myansani klaviatuuriga</translation> <translation id="2664412712123763093">Faili asukoht</translation> <translation id="2718540689505416944">Rakenduse installimine Linuxiga</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Tühjenda prügikast</translation> <translation id="5163869187418756376">Jagamine ebaõnnestus. Kontrollige ühendust ja proovige uuesti.</translation> <translation id="516592729076796170">USA programmeerija Dvorak</translation> -<translation id="5170477580121653719">Google Drive'i allesjäänud ruum: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Pisipildi kuva</translation> <translation id="5194713942430106590">Klõpsake, et veerg kasvavas järjestuses sortida.</translation> <translation id="5211614973734216083">fääri</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">läti</translation> <translation id="5489965683297092283">Filter <ph name="FILTER_NAME" /> on välja lülitatud.</translation> <translation id="5494920125229734069">Valige kõik</translation> +<translation id="5500104704744051184">Te ei saa seda võrku kasutada enne, kui sisestate PUK-i</translation> <translation id="5500122897333236901">islandi keel</translation> <translation id="5508696409934741614">Punktid</translation> <translation id="5522908512596376669">Faililoendi jaoks aktiveeriti loendikuva.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> üksust</translation> <translation id="642282551015776456">Seda nime ei saa faili või kausta nimena kasutada</translation> <translation id="6423031066725912715">vietnami, klaviatuuriga TCVN</translation> +<translation id="6430271654280079150">Teil on veel 1 katse.</translation> <translation id="6485131920355264772">Talletusruumi teabe toomine ebaõnnestus</translation> <translation id="6495925982925244349"><ph name="NETWORK_INDEX" />. võrk <ph name="NETWORK_COUNT" />-st, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, signaalitugevus: <ph name="SIGNAL_STRENGTH" />%, võrku haldab teie administraator, üksikasjad</translation> <translation id="649877868557234318">Faili <ph name="FILE_NAME" /> ekstraktimine kausta <ph name="FOLDER_NAME" /></translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> üksuse sünkroonimine ...</translation> <translation id="8600173386174225982">Faililoendi jaoks aktiveeriti pisipildikuva.</translation> <translation id="8601932370724196034">Crostini pildifail</translation> +<translation id="8608515571837163082">Vale PIN-kood sisestati liiga mitu korda. Sisestage operaatorilt saadud kaheksakohaline isiklik avamisvõti (PUK).</translation> <translation id="8609695766746872526">islandi</translation> <translation id="863903787380594467">Vale PIN-kood. Teil on veel <ph name="RETRIES" /> katset.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> – port</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb index d95a5a57..34d634b 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_eu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_eu.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Partekatu karpeta Parallels Desktop aplikazioarekin</translation> <translation id="1439919885608649279">Pertsona bat loreekin</translation> <translation id="1471718551822868769">Eslovakiarra</translation> -<translation id="1474339897586437869">Ez da kargatu "<ph name="FILENAME" />". Ez dago leku nahikorik Google Drive-n.</translation> <translation id="1482884275703521657">Finlandiarra</translation> <translation id="148466539719134488">Suitzarra</translation> <translation id="1497522201463361063">Ezin da "<ph name="FILE_NAME" />" fitxategiaren izena aldatu. <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Babestuta</translation> <translation id="2638942478653899953">Ezin izan da Google Drive-rekin konektatu. <ph name="BEGIN_LINK" />Amaitu saioa<ph name="END_LINK" /> eta hasi saioa berriro.</translation> <translation id="2649120831653069427">Arrain koloretsua</translation> +<translation id="2653059201992392941"><ph name="RETRIES" /> saiakera gelditzen zaizkizu.</translation> <translation id="2663066752008346276">Birmaniarra, MyanSan teklatuarekin</translation> <translation id="2664412712123763093">Fitxategiaren kokapena</translation> <translation id="2718540689505416944">Instalatu aplikazioa Linux-ekin</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Hustu zaborrontzia</translation> <translation id="5163869187418756376">Ezin izan da partekatu. Egiaztatu konektatuta zaudela eta saiatu berriro geroago.</translation> <translation id="516592729076796170">AEBko programatzaileen Dvorak teklatua</translation> -<translation id="5170477580121653719">Google Drive-n gelditzen den tokia: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Irudi txikien ikuspegia</translation> <translation id="5194713942430106590">Egin klik zutabea goranzko ordenan ezartzeko.</translation> <translation id="5211614973734216083">Faroetarra</translation> @@ -529,6 +528,7 @@ <translation id="5489067830765222292">Letoniarra</translation> <translation id="5489965683297092283"><ph name="FILTER_NAME" /> iragazkia inaktibo dago.</translation> <translation id="5494920125229734069">Hautatu guztiak</translation> +<translation id="5500104704744051184">Ezingo duzu erabili sarea PUKa idatzi arte</translation> <translation id="5500122897333236901">Islandiarra</translation> <translation id="5508696409934741614">Puntuak</translation> <translation id="5522908512596376669">Zerrenda-ikuspegira aldatu da fitxategi-zerrenda.</translation> @@ -634,6 +634,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> elementu</translation> <translation id="642282551015776456">Izena ezin da erabili fitxategi- edo karpeta-izen gisa</translation> <translation id="6423031066725912715">Vietnamdarra, TCVN teklatuarekin</translation> +<translation id="6430271654280079150">Saiakera bat gelditzen zaizu.</translation> <translation id="6485131920355264772">Ezin izan da berreskuratu zuriuneei buruzko informazioa</translation> <translation id="6495925982925244349"><ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" /> sarea. <ph name="NETWORK_NAME" /> (<ph name="SECURITY_STATUS" />; <ph name="CONNECTION_STATUS" />). Seinalearen indarra % <ph name="SIGNAL_STRENGTH" />. Administratzaileak kudeatua. Xehetasunak.</translation> <translation id="649877868557234318"><ph name="FILE_NAME" /> <ph name="FOLDER_NAME" /> karpetara ateratzen</translation> @@ -900,6 +901,7 @@ <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> elementu sinkronizatzen…</translation> <translation id="8600173386174225982">Irudi txikiko ikuspegira aldatu da fitxategi-zerrenda.</translation> <translation id="8601932370724196034">Crostini motako irudi-fitxategia</translation> +<translation id="8608515571837163082">PINa gehiegitan idatzi da oker. Idatzi operadoreak emandako zortzi digituko desblokeatzeko gako pertsonala (PUKa).</translation> <translation id="8609695766746872526">Islandiarra</translation> <translation id="863903787380594467">PINa okerra da. <ph name="RETRIES" /> saiakera gelditzen zaizkizu.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - Ataka</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb index 8aa0325..61dd666 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fa.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fa.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">همرسانی پوشه با Parallels Desktop</translation> <translation id="1439919885608649279">شخصی میان گلها</translation> <translation id="1471718551822868769">اسلوواکی</translation> -<translation id="1474339897586437869">«<ph name="FILENAME" />» بارگذاری نشد. فضای کافی در Google Drive شما وجود ندارد.</translation> <translation id="1482884275703521657">فنلاندی</translation> <translation id="148466539719134488">سوئیسی</translation> <translation id="1497522201463361063">تغییرنام «<ph name="FILE_NAME" />» ممکن نیست.<ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">خالی کردن حذفشدهها</translation> <translation id="5163869187418756376">اشتراکگذاری انجام نشد. اتصال خود را بررسی کرده، بعداً دوباره امتحان کنید.</translation> <translation id="516592729076796170">دووراک آمریکایی برنامهنویسها</translation> -<translation id="5170477580121653719">فضای باقیمانده در Google Drive: <ph name="SPACE_AVAILABLE" /> .</translation> <translation id="5177526793333269655">نمای تصویر کوچک</translation> <translation id="5194713942430106590">کلیک کنید تا ستون بهصورت صعودی مرتب شود.</translation> <translation id="5211614973734216083">فاروئی</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb index 5a55e3d..a819798 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fi.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fi.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Jaa kansio Parallels Desktopille</translation> <translation id="1439919885608649279">Henkilö ja kukkia</translation> <translation id="1471718551822868769">slovakki</translation> -<translation id="1474339897586437869">Tiedostoa <ph name="FILENAME" /> ei lähetetty. Google Drivessasi ei ole riittävästi vapaata tallennustilaa.</translation> <translation id="1482884275703521657">suomi</translation> <translation id="148466539719134488">sveitsiläinen</translation> <translation id="1497522201463361063">Tiedostoa <ph name="FILE_NAME" /> ei voi nimetä uudelleen. <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Suojattu</translation> <translation id="2638942478653899953">Google Driveen ei saada yhteyttä. <ph name="BEGIN_LINK" />Kirjaudu ulos<ph name="END_LINK" /> ja takaisin sisään.</translation> <translation id="2649120831653069427">Kala</translation> +<translation id="2653059201992392941">Sinulla on <ph name="RETRIES" /> yritystä jäljellä.</translation> <translation id="2663066752008346276">burma (Myanmar), myansan-näppäimistö</translation> <translation id="2664412712123763093">Tiedoston sijainti</translation> <translation id="2718540689505416944">Asenna Linux-sovellus</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Tyhjennä roskakori</translation> <translation id="5163869187418756376">Jakaminen epäonnistui. Tarkista internetyhteytesi ja yritä myöhemmin uudelleen.</translation> <translation id="516592729076796170">US, Dvorak ohjelmoijille</translation> -<translation id="5170477580121653719">Google Drive -tallennustilaa jäljellä: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Pikkukuvanäkymä</translation> <translation id="5194713942430106590">Klikkaa, jos haluat lajitella nousevaan järjestykseen.</translation> <translation id="5211614973734216083">fääri</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">latvia</translation> <translation id="5489965683297092283">Suodatin ei käytössä: <ph name="FILTER_NAME" /></translation> <translation id="5494920125229734069">Valitse kaikki</translation> +<translation id="5500104704744051184">Et voi käyttää tätä verkkoa ennen kuin lisäät PUK-koodin</translation> <translation id="5500122897333236901">islanti</translation> <translation id="5508696409934741614">Pisteet</translation> <translation id="5522908512596376669">Tiedostot näkyvät nyt luettelona.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> kohdetta</translation> <translation id="642282551015776456">Tätä nimeä ei voi käyttää tiedoston tai kansion nimenä.</translation> <translation id="6423031066725912715">vietnam, TCVN-näppäimistö</translation> +<translation id="6430271654280079150">Sinulla on 1 yritys jäljellä.</translation> <translation id="6485131920355264772">Tilatietojen noutaminen epäonnistui</translation> <translation id="6495925982925244349">Verkko <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, signaalin vahvuus <ph name="SIGNAL_STRENGTH" /> %, järjestelmänvalvojan hallinnoima, lisätietoja</translation> <translation id="649877868557234318"><ph name="FILE_NAME" /> puretaan tänne: <ph name="FOLDER_NAME" /></translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903">Synkronoidaan <ph name="NUMBER_OF_FILES" /> kohdetta…</translation> <translation id="8600173386174225982">Tiedostot näkyvät nyt pikkukuvina.</translation> <translation id="8601932370724196034">Crostini-kuvatiedosto</translation> +<translation id="8608515571837163082">Väärä PIN-koodi on syötetty liian monta kertaa. Lisää operaattorilta saamasi 8-numeroinen PUK-koodi.</translation> <translation id="8609695766746872526">islanti</translation> <translation id="863903787380594467">Väärä PIN-koodi. Sinulla on <ph name="RETRIES" /> yritystä jäljellä.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> – portti</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fil.xtb b/ui/chromeos/translations/ui_chromeos_strings_fil.xtb index a984cfda..a1bdb6a 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fil.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fil.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Ibahagi ang folder sa Parallels Desktop</translation> <translation id="1439919885608649279">Taong may mga bulaklak</translation> <translation id="1471718551822868769">Slovak</translation> -<translation id="1474339897586437869">Hindi na-upload ang "<ph name="FILENAME" />." Walang sapat na bakanteng espasyo sa iyong Google Drive.</translation> <translation id="1482884275703521657">Finnish</translation> <translation id="148466539719134488">Swiss</translation> <translation id="1497522201463361063">Hindi mapalatan ang pangalan "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Secured</translation> <translation id="2638942478653899953">Hindi maabot ang Google Drive. Mangyaring <ph name="BEGIN_LINK" />mag-log out<ph name="END_LINK" /> at mag-log in muli.</translation> <translation id="2649120831653069427">Rainbowfish</translation> +<translation id="2653059201992392941">Mayroon ka na lang <ph name="RETRIES" /> (na) natitirang pagsubok.</translation> <translation id="2663066752008346276">Burmese/Myanmar na may Myansan keyboard</translation> <translation id="2664412712123763093">Lokasyon ng file</translation> <translation id="2718540689505416944">I-install ang app gamit ang Linux</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Alisin ang laman ng Trash</translation> <translation id="5163869187418756376">Nabigo ang pagbabahagi. Suriin ang iyong koneksyon at subukang muli sa ibang pagkakataon.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> -<translation id="5170477580121653719">Natitirang espasyo sa Google Drive: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">View na thumbnail</translation> <translation id="5194713942430106590">I-click para pagbukud-bukurin ang column sa pataas na pagkakasunud-sunod.</translation> <translation id="5211614973734216083">Faroese</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">Latvian</translation> <translation id="5489965683297092283">Naka-off ang filter na <ph name="FILTER_NAME" />.</translation> <translation id="5494920125229734069">Piliin ang lahat</translation> +<translation id="5500104704744051184">Hindi mo magagamit ang network na ito hanggang sa ilagay mo ang PUK</translation> <translation id="5500122897333236901">Icelandic</translation> <translation id="5508696409934741614">Mga Dot</translation> <translation id="5522908512596376669">Naging list view ang listahan ng file.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> (na) item</translation> <translation id="642282551015776456">Hindi maaaring gamitin ang pangalang ito bilang isang pangalan ng file o folder</translation> <translation id="6423031066725912715">Vietnamese na may TCVN keyboard</translation> +<translation id="6430271654280079150">Mayroon ka na lang 1 natitirang pagsubok.</translation> <translation id="6485131920355264772">Nabigong kunin ang impormasyon ng espasyo</translation> <translation id="6495925982925244349">Network <ph name="NETWORK_INDEX" /> sa <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, Lakas ng Signal <ph name="SIGNAL_STRENGTH" />%, Pinapamahalaan ng iyong Administrator, Mga Detalye</translation> <translation id="649877868557234318">Ine-extract ang <ph name="FILE_NAME" /> sa <ph name="FOLDER_NAME" /></translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903">Nagsi-sync ng <ph name="NUMBER_OF_FILES" /> (na) item...</translation> <translation id="8600173386174225982">Naging thumbnail view ang listahan ng file.</translation> <translation id="8601932370724196034">Crostini image file</translation> +<translation id="8608515571837163082">Napakaraming beses nang naglagay ng maling PIN. Ilagay ang 8 digit na Personal Unblocking Key (PUK) na ibinigay ng carrier.</translation> <translation id="8609695766746872526">Icelandic</translation> <translation id="863903787380594467">Mali ang PIN. Mayroon ka na lang <ph name="RETRIES" /> (na) natitirang pagsubok.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - Port</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb index de0b9c6..2c103a9 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fr-CA.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Partager le dossier avec Parallels Desktop</translation> <translation id="1439919885608649279">Personne avec des fleurs</translation> <translation id="1471718551822868769">Slovaque</translation> -<translation id="1474339897586437869">Le fichier « <ph name="FILENAME" /> » n'a pas été mis à jour. Il n'y a pas suffisamment d'espace libre au sein de votre Google Disque.</translation> <translation id="1482884275703521657">Finnois</translation> <translation id="148466539719134488">Suisse</translation> <translation id="1497522201463361063">Impossible de renommer « <ph name="FILE_NAME" /> ». <ph name="ERROR_MESSAGE" /></translation> @@ -490,7 +489,6 @@ <translation id="5159560892333415631">Vider la corbeille</translation> <translation id="5163869187418756376">Échec du partage. Veuillez vérifier votre connexion et réessayer plus tard.</translation> <translation id="516592729076796170">Dvorak programmeur américain</translation> -<translation id="5170477580121653719">Espace libre dans Google Disque : <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Affichage de miniatures</translation> <translation id="5194713942430106590">Cliquez ici pour trier la colonne par ordre croissant.</translation> <translation id="5211614973734216083">Féroïen</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb index ce00dcf9..a2b091d 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_fr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_fr.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Partager le dossier avec Parallels Desktop</translation> <translation id="1439919885608649279">Personne avec des fleurs</translation> <translation id="1471718551822868769">Slovaque</translation> -<translation id="1474339897586437869">Le fichier "<ph name="FILENAME" />" n'a pas été importé, car l'espace disponible sur Google Drive est insuffisant.</translation> <translation id="1482884275703521657">Finnois</translation> <translation id="148466539719134488">Suisse</translation> <translation id="1497522201463361063">Impossible de renommer "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">Vider la corbeille</translation> <translation id="5163869187418756376">Échec du partage. Veuillez vérifier la connexion, puis réessayer.</translation> <translation id="516592729076796170">Dvorak américain pour programmeurs</translation> -<translation id="5170477580121653719">Espace Google Drive disponible : <ph name="SPACE_AVAILABLE" /></translation> <translation id="5177526793333269655">Afficher les vignettes</translation> <translation id="5194713942430106590">Cliquez pour trier la colonne par ordre croissant.</translation> <translation id="5211614973734216083">Féroïen</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gl.xtb b/ui/chromeos/translations/ui_chromeos_strings_gl.xtb index 11cc7cf..a706cbb 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_gl.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_gl.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Compartir cartafol con Parallels Desktop</translation> <translation id="1439919885608649279">Persoa con flores</translation> <translation id="1471718551822868769">Eslovaco</translation> -<translation id="1474339897586437869">Non se cargou "<ph name="FILENAME" />". Non hai suficiente espazo libre en Google Drive.</translation> <translation id="1482884275703521657">Finés</translation> <translation id="148466539719134488">Suízo</translation> <translation id="1497522201463361063">Non se pode cambiar o nome de "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">Baleirar papeleira</translation> <translation id="5163869187418756376">Non se puido compartir. Comproba a túa conexión e téntao de novo máis tarde.</translation> <translation id="516592729076796170">Dvorak de programador para EUA</translation> -<translation id="5170477580121653719">Espazo restante en Google Drive: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Vista de miniaturas</translation> <translation id="5194713942430106590">Fai clic para organizar a columna en orde ascendente.</translation> <translation id="5211614973734216083">Feroés</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb index a2cda9d..f427493 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_gu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_gu.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Parallels ડેસ્કટૉપ સાથે ફોલ્ડર શેર કરો</translation> <translation id="1439919885608649279">ફૂલો લઈને ઉભેલી વ્યક્તિ</translation> <translation id="1471718551822868769">સ્લોવાક</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" ને અપલોડ કરવામાં આવી ન હતી. તમારી Google ડ્રાઇવમાં પૂરતી ખાલી જગ્યા નથી.</translation> <translation id="1482884275703521657">ફિનિશ</translation> <translation id="148466539719134488">સ્વીસ</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" નું નામ બદલવામાં અક્ષમ. <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">સુરક્ષિત</translation> <translation id="2638942478653899953">Google ડ્રાઇવ પર પહોંચી શકાયું નથી. કૃપા કરીને <ph name="BEGIN_LINK" />લૉગ આઉટ કરો<ph name="END_LINK" /> અને પાછા લૉગ ઇન કરો.</translation> <translation id="2649120831653069427">રેન્બોફીશ</translation> +<translation id="2653059201992392941">તમારા <ph name="RETRIES" /> પ્રયાસ બાકી છે.</translation> <translation id="2663066752008346276">બર્મીઝ/મ્યાનમાર, Myansan કીબોર્ડ સાથે</translation> <translation id="2664412712123763093">ફાઇલનું સ્થાન</translation> <translation id="2718540689505416944">Linux વડે ઍપ ઇન્સ્ટૉલ કરો</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">ટ્રેશ ખાલી કરો</translation> <translation id="5163869187418756376">શેરિંગ નિષ્ફળ થયું. તમારું કનેક્શન તપાસો અને થોડીવાર પછી ફરી પ્રયાસ કરો.</translation> <translation id="516592729076796170">યુએસ પ્રોગ્રામર ડ્વોરેક</translation> -<translation id="5170477580121653719">Google ડ્રાઇવ સ્થાન બાકી: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">થંબનેલ દૃશ્ય</translation> <translation id="5194713942430106590">કૉલમને ચઢતા ક્રમમાં સૉર્ટ કરવા માટે ક્લિક કરો.</translation> <translation id="5211614973734216083">ફૅરોઇઝ</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">લૅતવિયન</translation> <translation id="5489965683297092283"><ph name="FILTER_NAME" /> ફિલ્ટર બંધ છે.</translation> <translation id="5494920125229734069">બધા પસંદ કરો</translation> +<translation id="5500104704744051184">જ્યાં સુધી તમે PUK દાખલ નહીં કરો, ત્યાં સુધી તમે આ નેટવર્કનો ઉપયોગ કરી શકશો નહીં</translation> <translation id="5500122897333236901">આઇસલેન્ડિક</translation> <translation id="5508696409934741614">બિંદુઓ</translation> <translation id="5522908512596376669">ફાઇલ સૂચિને સૂચિ દૃશ્યમાં બદલી છે.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> આઇટમ</translation> <translation id="642282551015776456">આ નામનો ઉપયોગ ફોલ્ડર નામની કોઈ ફાઇલ તરીકે થઈ શકશે નહીં</translation> <translation id="6423031066725912715">વિયેતનામીઝ, TCVN કીબોર્ડ સાથે</translation> +<translation id="6430271654280079150">તમારો 1 પ્રયાસ બાકી છે.</translation> <translation id="6485131920355264772">સ્થાન માહિતી પુનર્પ્રાપ્ત કરવામાં નિષ્ફળ</translation> <translation id="6495925982925244349"><ph name="NETWORK_COUNT" />માંથી નેટવર્ક <ph name="NETWORK_INDEX" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, સિગ્નલની સશક્તતા <ph name="SIGNAL_STRENGTH" />%, તમારા વ્યવસ્થાપક દ્વારા મેનેજ કરવામાં આવે છે, વિગતો</translation> <translation id="649877868557234318"><ph name="FILE_NAME" />ને <ph name="FOLDER_NAME" />માં એક્સટ્રેક્ટ કરી રહ્યાં છીએ</translation> @@ -899,6 +900,7 @@ <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> આઇટમ્સ સમન્વયિત કરી રહ્યાં છે...</translation> <translation id="8600173386174225982">ફાઇલ સૂચિને થંબનેલ દૃશ્યમાં બદલી છે.</translation> <translation id="8601932370724196034">Crostini છબી ફાઇલ</translation> +<translation id="8608515571837163082">ઘણી બધી વખત કોઈ ખોટો પિન દાખલ કરવામાં આવ્યો છે. મોબાઇલ ઑપરેટર દ્વારા આપવામાં આવેલો 8-અંકનો પર્સનલ અનબ્લૉકિંગ કી (PUK) દાખલ કરો.</translation> <translation id="8609695766746872526">આઇસલેન્ડિક</translation> <translation id="863903787380594467">ખોટો પિન. તમારા <ph name="RETRIES" /> પ્રયાસ બાકી છે.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - પોર્ટ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb index 73ce34f..6c816f0 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_hi.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_hi.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Parallels Desktop के साथ फ़ोल्डर शेयर करें</translation> <translation id="1439919885608649279">हाथ में फूल पकड़े खड़ा व्यक्ति</translation> <translation id="1471718551822868769">स्लोवाक</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" को अपलोड नहीं किया गया. आपकी Google डिस्क में काफ़ी जगह नहीं है.</translation> <translation id="1482884275703521657">फ़िनिश</translation> <translation id="148466539719134488">स्विस</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" का नाम बदलने में असमर्थ. <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">ट्रैश को खाली करें</translation> <translation id="5163869187418756376">शेयर नहीं किया जा सका. अपना कनेक्शन जाँचें और बाद में फिर से कोशिश करें.</translation> <translation id="516592729076796170">यूएस प्रोग्रामर ड्वोरक</translation> -<translation id="5170477580121653719">Google डिस्क स्थान शेष: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">थंबनेल व्यू</translation> <translation id="5194713942430106590">स्तंभ को बढ़ते क्रम में लगाने के लिए क्लिक करें.</translation> <translation id="5211614973734216083">फ़ेरोसे</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb index 32b1c73b..efd441d 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_hr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_hr.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Dijeljenje mape s Parallels Desktopom</translation> <translation id="1439919885608649279">Osoba s cvijećem</translation> <translation id="1471718551822868769">slovački</translation> -<translation id="1474339897586437869">Datoteka "<ph name="FILENAME" />" nije prenesena. Nema dovoljno slobodnog prostora na Google disku.</translation> <translation id="1482884275703521657">finski</translation> <translation id="148466539719134488">švicarska</translation> <translation id="1497522201463361063">Nije moguće promijeniti naziv datoteke "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">Isprazni otpad</translation> <translation id="5163869187418756376">Dijeljenje nije uspjelo. Provjerite vezu i pokušajte ponovo kasnije.</translation> <translation id="516592729076796170">Američka programerska Dvorak</translation> -<translation id="5170477580121653719">Preostali prostor na Google disku: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Prikaz minijatura</translation> <translation id="5194713942430106590">Kliknite da biste stavke u stupcu poredali uzlaznim redoslijedom.</translation> <translation id="5211614973734216083">farski</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb index d7133c6..633a9f5 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_hu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_hu.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Mappa megosztása a Parallels Desktoppal</translation> <translation id="1439919885608649279">Ember virágokkal</translation> <translation id="1471718551822868769">szlovák</translation> -<translation id="1474339897586437869">A(z) „<ph name="FILENAME" />” feltöltése nem történt meg. Nincs elegendő szabad terület a Google Drive-on.</translation> <translation id="1482884275703521657">finn</translation> <translation id="148466539719134488">svájci</translation> <translation id="1497522201463361063">A(z) "<ph name="FILE_NAME" />" fájl nem nevezhető át. <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Biztonságos</translation> <translation id="2638942478653899953">A Google Drive nem érhető el. Kérjük, <ph name="BEGIN_LINK" />jelentkezzen ki<ph name="END_LINK" />, majd jelentkezzen be újra.</translation> <translation id="2649120831653069427">Szivárványhal</translation> +<translation id="2653059201992392941"><ph name="RETRIES" /> próbálkozási lehetősége maradt.</translation> <translation id="2663066752008346276">burmai (Mianmar), myansan billentyűzettel</translation> <translation id="2664412712123763093">Fájl helye</translation> <translation id="2718540689505416944">Alkalmazás telepítése a Linux segítségével</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Kuka kiürítése</translation> <translation id="5163869187418756376">Nem sikerült a megosztás. Ellenőrizze a kapcsolatot, és később próbálkozzon újra.</translation> <translation id="516592729076796170">US Dvorak programozó</translation> -<translation id="5170477580121653719">Szabad hely a Google Drive-on: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Indexképnézet</translation> <translation id="5194713942430106590">Kattintson az oszlop növekvő sorrendben való rendezéséhez.</translation> <translation id="5211614973734216083">feröeri</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">lett</translation> <translation id="5489965683297092283">A(z) <ph name="FILTER_NAME" /> szűrő ki van kapcsolva.</translation> <translation id="5494920125229734069">Összes kiválasztása</translation> +<translation id="5500104704744051184">Addig nem tudja használni ezt a hálózatot, amíg meg nem adja a PUK kódot</translation> <translation id="5500122897333236901">izlandi</translation> <translation id="5508696409934741614">Pöttyök</translation> <translation id="5522908512596376669">A fájllista nézete listanézetre változott.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> elem</translation> <translation id="642282551015776456">Ezt a nevet nem lehet mappa fájlneveként használni</translation> <translation id="6423031066725912715">vietnámi, TCVN-billentyűzettel</translation> +<translation id="6430271654280079150">1 próbálkozási lehetősége maradt.</translation> <translation id="6485131920355264772">A helyinformációk lekérése sikertelen</translation> <translation id="6495925982925244349"><ph name="NETWORK_INDEX" />. hálózat (összesen <ph name="NETWORK_COUNT" />), <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, jelerősség: <ph name="SIGNAL_STRENGTH" />%, a rendszergazdája kezeli, részletek</translation> <translation id="649877868557234318"><ph name="FILE_NAME" /> kicsomagolása ide: <ph name="FOLDER_NAME" /></translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> elem szinkronizálása…</translation> <translation id="8600173386174225982">A fájllista nézete indexképnézetre változott.</translation> <translation id="8601932370724196034">Crostini-képfájl</translation> +<translation id="8608515571837163082">Túl sokszor lett megadva helytelen PIN-kód. Adja meg a szolgáltatótól kapott nyolcjegyű személyes feloldókulcsot (PUK kódot).</translation> <translation id="8609695766746872526">izlandi</translation> <translation id="863903787380594467">Helytelen PIN-kód. <ph name="RETRIES" /> próbálkozási lehetősége maradt.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> – port</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_hy.xtb b/ui/chromeos/translations/ui_chromeos_strings_hy.xtb index 1c5ec33..7be3bb5 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_hy.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_hy.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Կիսվեք պանակով Parallels Desktop-ի հետ</translation> <translation id="1439919885608649279">Ծաղիկներով մարդ</translation> <translation id="1471718551822868769">սլովակերեն</translation> -<translation id="1474339897586437869">«<ph name="FILENAME" />» ֆայլը չվերբեռնվեց: Ձեր Google Drive-ում բավարար չափով ազատ տարածություն չկա:</translation> <translation id="1482884275703521657">ֆիններեն</translation> <translation id="148466539719134488">Շվեյցարական</translation> <translation id="1497522201463361063">Հնարավոր չէ վերանվանել «<ph name="FILE_NAME" />»-ը: <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Պաշտպանված է</translation> <translation id="2638942478653899953">Google Drive-ն անհասանելի է: <ph name="BEGIN_LINK" />Դուրս գրվեք<ph name="END_LINK" /> և նորից մուտք գործեք:</translation> <translation id="2649120831653069427">Ձկնիկ</translation> +<translation id="2653059201992392941">Մնաց <ph name="RETRIES" /> փորձ։</translation> <translation id="2663066752008346276">բիրմաներեն (Մյանմա)՝ InScript ստեղնաշարով</translation> <translation id="2664412712123763093">Ֆայլի տեղադրությունը</translation> <translation id="2718540689505416944">Տեղադրեք Լինուքսի հավելված</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Դատարկել աղբարկղը</translation> <translation id="5163869187418756376">Համօգտագործումը չհաջողվեց: Ստուգեք ձեր կապակցումը և փորձեք ավելի ուշ:</translation> <translation id="516592729076796170">ԱՄՆ ծրագրավորող Դվորակ</translation> -<translation id="5170477580121653719">Ազատ տարածքը Google Drive-ի վրա՝ <ph name="SPACE_AVAILABLE" />:</translation> <translation id="5177526793333269655">Մանրապատկերի տեսք</translation> <translation id="5194713942430106590">Սեղմեք՝ սյունակներն ըստ աճման կարգի տեսակավորելու համար։</translation> <translation id="5211614973734216083">ֆարյորերեն</translation> @@ -529,6 +528,7 @@ <translation id="5489067830765222292">լատվիերեն</translation> <translation id="5489965683297092283"><ph name="FILTER_NAME" /> զտիչն անջատված է։</translation> <translation id="5494920125229734069">Ընտրել բոլորը</translation> +<translation id="5500104704744051184">Դուք չեք կարողանա օգտվել այս ցանցից, մինչև չմուտքագրեք PUK կոդը</translation> <translation id="5500122897333236901">Իսլանդական</translation> <translation id="5508696409934741614">Կետեր</translation> <translation id="5522908512596376669">Ֆայլերի ցանկն այժմ ցուցադրված է ցանկի տեսքով:</translation> @@ -634,6 +634,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> տարր</translation> <translation id="642282551015776456">Այս անունը չի կարող լինել ֆայլի կամ պանակի անուն</translation> <translation id="6423031066725912715">վիետնամերեն (TCVN ստեղնաշար)</translation> +<translation id="6430271654280079150">Մնաց 1 փորձ։</translation> <translation id="6485131920355264772">Չհաջողվեց առբերել ազատ տարածքի մասին տեղեկությունները</translation> <translation id="6495925982925244349">Ցանց <ph name="NETWORK_INDEX" />՝ <ph name="NETWORK_COUNT" />-ից, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, ազդանշանի ուժգնությունը՝ <ph name="SIGNAL_STRENGTH" />%, կառավարվում է ձեր ադմինիստրատորի կողմից, մանրամասներ</translation> <translation id="649877868557234318">Ֆայլը (<ph name="FILE_NAME" />) արտահանվում է <ph name="FOLDER_NAME" /> պանակ</translation> @@ -900,6 +901,7 @@ <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> տարրի համաժամացում…</translation> <translation id="8600173386174225982">Ֆայլերի ցանկն այժմ ցուցադրված է մանրապատկերների տեսքով:</translation> <translation id="8601932370724196034">Crostini գրաֆիկական ֆայլ</translation> +<translation id="8608515571837163082">PIN կոդը սխալ է մուտքագրվել չափազանց շատ անգամներ։ Մուտքագրեք ութանիշ անձնական արգելահանման բանալին (PUK), որը տրամադրվել է ձեր օպերատորի կողմից։</translation> <translation id="8609695766746872526">իսլանդերեն</translation> <translation id="863903787380594467">PIN կոդը սխալ է։ Մնաց <ph name="RETRIES" /> փորձ։</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> – Միացք</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_id.xtb b/ui/chromeos/translations/ui_chromeos_strings_id.xtb index fe51bb4..afbd863 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_id.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_id.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Bagikan folder ke Parallels Desktop</translation> <translation id="1439919885608649279">Orang dengan bunga</translation> <translation id="1471718551822868769">Slovakia</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" tidak diupload. Ruang di Google Drive Anda tidak cukup.</translation> <translation id="1482884275703521657">Finlandia</translation> <translation id="148466539719134488">Swiss</translation> <translation id="1497522201463361063">Tidak dapat mengubah nama "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Aman</translation> <translation id="2638942478653899953">Google Drive tidak dapat dibuka. <ph name="BEGIN_LINK" />Keluar<ph name="END_LINK" /> dan masuk lagi.</translation> <translation id="2649120831653069427">Ikan Pelangi</translation> +<translation id="2653059201992392941">Tersisa <ph name="RETRIES" /> upaya lagi.</translation> <translation id="2663066752008346276">Burma/Myanmar dengan keyboard Myansan</translation> <translation id="2664412712123763093">Lokasi file</translation> <translation id="2718540689505416944">Instal aplikasi dengan Linux</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Kosongkan Sampah</translation> <translation id="5163869187418756376">Gagal berbagi. Periksa sambungan Anda dan coba lagi nanti.</translation> <translation id="516592729076796170">Programmer Dvorak AS</translation> -<translation id="5170477580121653719">Sisa ruang Google Drive: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Tampilan thumbnail</translation> <translation id="5194713942430106590">Klik untuk mengurutkan kolom dari atas ke bawah.</translation> <translation id="5211614973734216083">Faroe</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">Latvia</translation> <translation id="5489965683297092283">Filter <ph name="FILTER_NAME" /> nonaktif.</translation> <translation id="5494920125229734069">Pilih semua</translation> +<translation id="5500104704744051184">Anda tidak akan dapat menggunakan jaringan ini hingga Anda memasukkan PUK</translation> <translation id="5500122897333236901">Islandia</translation> <translation id="5508696409934741614">Titik</translation> <translation id="5522908512596376669">Daftar file telah berubah menjadi tampilan daftar.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> item</translation> <translation id="642282551015776456">Nama ini tidak dapat digunakan sebagai nama file atau folder</translation> <translation id="6423031066725912715">Vietnam dengan keyboard TCVN</translation> +<translation id="6430271654280079150">Tersisa 1 upaya lagi.</translation> <translation id="6485131920355264772">Gagal mengambil info ruang</translation> <translation id="6495925982925244349">Jaringan <ph name="NETWORK_INDEX" /> dari <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, Kekuatan Sinyal <ph name="SIGNAL_STRENGTH" />%, Dikelola oleh Administrator Anda, Detail</translation> <translation id="649877868557234318">Mengekstrak <ph name="FILE_NAME" /> ke <ph name="FOLDER_NAME" /></translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903">Menyinkronkan <ph name="NUMBER_OF_FILES" /> item...</translation> <translation id="8600173386174225982">Daftar file telah diubah menjadi tampilan thumbnail.</translation> <translation id="8601932370724196034">File gambar Crostini</translation> +<translation id="8608515571837163082">Terlalu sering memasukkan PIN yang salah. Masukkan Kunci Pembuka Blokir Pribadi (PUK) 8 digit yang diberikan oleh operator.</translation> <translation id="8609695766746872526">Islandia</translation> <translation id="863903787380594467">PIN salah. Tersisa <ph name="RETRIES" /> upaya lagi.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - Port</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_is.xtb b/ui/chromeos/translations/ui_chromeos_strings_is.xtb index c71b7c9..5013fa23 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_is.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_is.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Deila möppu með Parallels Desktop</translation> <translation id="1439919885608649279">Einstaklingur með blóm</translation> <translation id="1471718551822868769">Slóvakíska</translation> -<translation id="1474339897586437869">„<ph name="FILENAME" />“ var ekki hlaðið. Ekki er nægt pláss á Google Drive.</translation> <translation id="1482884275703521657">Finnska</translation> <translation id="148466539719134488">Svissneskt</translation> <translation id="1497522201463361063">Ekki tókst að breyta heiti „<ph name="FILE_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">Tæma ruslið</translation> <translation id="5163869187418756376">Mistókst að deila. Athugaðu nettenginguna og reyndu aftur síðar.</translation> <translation id="516592729076796170">Bandarískt Dvorak-lyklaborð fyrir forritara</translation> -<translation id="5170477580121653719">Geymslurými eftir á Google Drive: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Smámyndayfirlit</translation> <translation id="5194713942430106590">Smelltu til að raða dálkinum í hækkandi röð.</translation> <translation id="5211614973734216083">Færeyska</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_it.xtb b/ui/chromeos/translations/ui_chromeos_strings_it.xtb index f5cd87e..77424715 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_it.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_it.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Condividi cartella con Parallels Desktop</translation> <translation id="1439919885608649279">Persona con fiori</translation> <translation id="1471718551822868769">Slovacco</translation> -<translation id="1474339897586437869">Impossibile caricare "<ph name="FILENAME" />". Lo spazio disponibile su Google Drive non è sufficiente.</translation> <translation id="1482884275703521657">Finlandese</translation> <translation id="148466539719134488">Svizzero</translation> <translation id="1497522201463361063">Impossibile ridenominare "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">Svuota cestino</translation> <translation id="5163869187418756376">Condivisione non riuscita. Controlla la connessione e riprova più tardi.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> -<translation id="5170477580121653719">Spazio libero rimanente su Google Drive: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Visualizzazione Miniature</translation> <translation id="5194713942430106590">Fai clic per ordinare la colonna in ordine decrescente.</translation> <translation id="5211614973734216083">Faroese</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb index e4580e8..7669360 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_iw.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_iw.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">שיתוף תיקייה באמצעות Parallels Desktop</translation> <translation id="1439919885608649279">אדם עם פרחים</translation> <translation id="1471718551822868769">סלובקית</translation> -<translation id="1474339897586437869">הקובץ "<ph name="FILENAME" />" לא הועלה. אין לך מספיק שטח פנוי ב-Google Drive.</translation> <translation id="1482884275703521657">פינית</translation> <translation id="148466539719134488">שווייצרית</translation> <translation id="1497522201463361063">לא ניתן לשנות את השם של "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">ריקון האשפה</translation> <translation id="5163869187418756376">השיתוף נכשל. כדאי לבדוק את החיבור ולנסות שוב מאוחר יותר.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> -<translation id="5170477580121653719">נפח אחסון שנותר ב-Google Drive: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">תצוגת תמונה ממוזערת</translation> <translation id="5194713942430106590">יש ללחוץ כדי למיין את העמודה בסדר עולה.</translation> <translation id="5211614973734216083">פארואזית</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb index ea1e3a29..3c34d9b 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ja.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ja.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Parallels Desktop とのフォルダ共有</translation> <translation id="1439919885608649279">花を持っている人</translation> <translation id="1471718551822868769">スロバキア語</translation> -<translation id="1474339897586437869">「<ph name="FILENAME" />」はアップロードされていません。Google ドライブに十分な空き容量がありません。</translation> <translation id="1482884275703521657">フィンランド語</translation> <translation id="148466539719134488">スイス語</translation> <translation id="1497522201463361063">ファイル「<ph name="FILE_NAME" />」の名前を変更することができません。<ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">保護あり</translation> <translation id="2638942478653899953">Google ドライブにアクセスできませんでした。<ph name="BEGIN_LINK" />ログアウト<ph name="END_LINK" />してもう一度ログインしてください。</translation> <translation id="2649120831653069427">熱帯魚</translation> +<translation id="2653059201992392941">入力できるのはあと <ph name="RETRIES" /> 回です。</translation> <translation id="2663066752008346276">ビルマ語 / ミャンマー語(Myansan)キーボード</translation> <translation id="2664412712123763093">ファイルの場所</translation> <translation id="2718540689505416944">Linux でアプリをインストール</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">ゴミ箱を空にする</translation> <translation id="5163869187418756376">共有できませんでした。接続を確認し、しばらくしてからもう一度お試しください。</translation> <translation id="516592729076796170">US Programmer Dvorak 配列</translation> -<translation id="5170477580121653719">Google ドライブの残容量: <ph name="SPACE_AVAILABLE" /></translation> <translation id="5177526793333269655">サムネイル ビュー</translation> <translation id="5194713942430106590">クリックすると、列が昇順で並べ替えられます。</translation> <translation id="5211614973734216083">フェロー語</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">ラトビア語</translation> <translation id="5489965683297092283"><ph name="FILTER_NAME" /> フィルタがオフになりました。</translation> <translation id="5494920125229734069">すべて選択する</translation> +<translation id="5500104704744051184">PUK を入力するまでこのネットワークは使用できません。</translation> <translation id="5500122897333236901">アイスランド語</translation> <translation id="5508696409934741614">ドット</translation> <translation id="5522908512596376669">ファイルの一覧がリスト表示に切り替わりました。</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> 個のアイテム</translation> <translation id="642282551015776456">この名前はフォルダのファイル名として使用できません</translation> <translation id="6423031066725912715">ベトナム語(TCVN)キーボード</translation> +<translation id="6430271654280079150">入力できるのはあと 1 回です。</translation> <translation id="6485131920355264772">空き容量情報を取得できませんでした</translation> <translation id="6495925982925244349"><ph name="NETWORK_INDEX" /> 番目のネットワーク(全 <ph name="NETWORK_COUNT" /> 件)、<ph name="NETWORK_NAME" />、<ph name="SECURITY_STATUS" />、<ph name="CONNECTION_STATUS" />、信号強度 <ph name="SIGNAL_STRENGTH" />%、管理者によって管理、詳細</translation> <translation id="649877868557234318"><ph name="FILE_NAME" /> を <ph name="FOLDER_NAME" /> に展開しています</translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> 個のアイテムを同期しています...</translation> <translation id="8600173386174225982">ファイルの一覧がサムネイル表示に切り替わりました。</translation> <translation id="8601932370724196034">Crostini 画像ファイル</translation> +<translation id="8608515571837163082">間違った PIN が繰り返し入力されました。携帯通信会社が提供する 8 桁の PIN ブロック解除キー(PUK)を入力してください。</translation> <translation id="8609695766746872526">アイスランド語</translation> <translation id="863903787380594467">PIN が正しくありません。入力できるのはあと <ph name="RETRIES" /> 回です。</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - ポート</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ka.xtb b/ui/chromeos/translations/ui_chromeos_strings_ka.xtb index 1f48b49..54a85bd 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ka.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ka.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">საქაღალდის გაზიარება Parallels Desktop-თან</translation> <translation id="1439919885608649279">პიროვნება ყვავილებით</translation> <translation id="1471718551822868769">სლოვაკური</translation> -<translation id="1474339897586437869">„<ph name="FILENAME" />“ ვერ აიტვირთა. თქვენს Google Drive-ზე არ არის საკმარისი თავისუფალი მეხსიერება.</translation> <translation id="1482884275703521657">ფინური</translation> <translation id="148466539719134488">შვეიცარიული</translation> <translation id="1497522201463361063">„<ph name="FILE_NAME" />“-ის სახელის შეცვლა ვერ მოხერხდა. <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">წაშლილების გასუფთავება</translation> <translation id="5163869187418756376">გაზიარება ვერ მოხერხდა. შეამოწმეთ კავშირი და ხელახლა სცადეთ.</translation> <translation id="516592729076796170">შეერთებული შტატების დვორაკი პროგრამისტებისთვის</translation> -<translation id="5170477580121653719">Google Drive-ზე დარჩენილი ადგილი: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">ესკიზების ხედი</translation> <translation id="5194713942430106590">დააწკაპუნეთ სვეტის ზრდადი მიმდევრობით დასალაგებლად.</translation> <translation id="5211614973734216083">ფარერული</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kk.xtb b/ui/chromeos/translations/ui_chromeos_strings_kk.xtb index 13f2528e..772db8a 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_kk.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_kk.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Қалтаны Parallels Desktop арқылы бөлісу</translation> <translation id="1439919885608649279">Гүл ұстаған адам</translation> <translation id="1471718551822868769">Словак</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" жүктелген жоқ. Google Drive дискінде жеткілікті орын жоқ.</translation> <translation id="1482884275703521657">Фин</translation> <translation id="148466539719134488">Швейцария</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" атын өзгерту мүмкін емес. <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Қорғалған</translation> <translation id="2638942478653899953">Google Drive мазмұнына қол жеткізу мүмкін емес. <ph name="BEGIN_LINK" />Жүйеден шығып<ph name="END_LINK" />, қайта кіріңіз.</translation> <translation id="2649120831653069427">Түрлі түсті балық</translation> +<translation id="2653059201992392941"><ph name="RETRIES" /> мүмкіндік қалды.</translation> <translation id="2663066752008346276">Бирма/Мьянма (Myansan пернетақтасымен)</translation> <translation id="2664412712123763093">Файлдың орналасқан жері</translation> <translation id="2718540689505416944">Қолданбаны Linux жүйесі арқылы орнату</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Себетті босату</translation> <translation id="5163869187418756376">Бөлісу сәтсіз аяқталды. Байланысты тексеріңіз және кейінірек қайталап көріңіз.</translation> <translation id="516592729076796170">АҚШ Бағдарламашы Дворак</translation> -<translation id="5170477580121653719">Google Drive қалған бос орны: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Нобай көрінісі</translation> <translation id="5194713942430106590">Бағанды өсу ретімен сұрыптау үшін басыңыз.</translation> <translation id="5211614973734216083">Фарер</translation> @@ -529,6 +528,7 @@ <translation id="5489067830765222292">Латыш</translation> <translation id="5489965683297092283"><ph name="FILTER_NAME" /> сүзгісі өшірулі.</translation> <translation id="5494920125229734069">Барлығын таңдау</translation> +<translation id="5500104704744051184">PUK кодын енгізбейінше, бұл желіні пайдалана алмайсыз.</translation> <translation id="5500122897333236901">исланд</translation> <translation id="5508696409934741614">Нүктелер</translation> <translation id="5522908512596376669">Файлдар тізім ретінде көрсетілді.</translation> @@ -634,6 +634,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> элемент</translation> <translation id="642282551015776456">Бұл атауды файл немесе қалта атауы ретінде пайдалануға болмайды</translation> <translation id="6423031066725912715">Вьетнам (TCVN пернетақтасымен)</translation> +<translation id="6430271654280079150">1 мүмкіндік қалды.</translation> <translation id="6485131920355264772">Бос орын ақпаратын шығарып алу сәтсіз аяқталды</translation> <translation id="6495925982925244349"><ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" /> желі, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, сигнал күші:<ph name="SIGNAL_STRENGTH" />%, әкімшіңіз басқарады, мәліметтер</translation> <translation id="649877868557234318"><ph name="FILE_NAME" /> файлы <ph name="FOLDER_NAME" /> қалтасына көшірілуде</translation> @@ -900,6 +901,7 @@ <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> элемент синхрондалуда…</translation> <translation id="8600173386174225982">Файлдар нобай ретінде көрсетілді.</translation> <translation id="8601932370724196034">Crostini кескін файлы</translation> +<translation id="8608515571837163082">PIN коды бірнеше рет қате енгізілді. Оператор берген 8 цифрлы Жеке бөгеуден шығару кодын (PUK кодын) енгізіңіз.</translation> <translation id="8609695766746872526">Исланд</translation> <translation id="863903787380594467">PIN коды дұрыс емес. <ph name="RETRIES" /> әрекет қалды.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> – ұяшық</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_km.xtb b/ui/chromeos/translations/ui_chromeos_strings_km.xtb index 7c9c6311a..cc462e0 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_km.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_km.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">ចែករំលែកថតជាមួយ Parallels Desktop</translation> <translation id="1439919885608649279">មនុស្សកាន់ផ្កា</translation> <translation id="1471718551822868769">ភាសាស្លូវ៉ាគី</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" មិនត្រូវបានអាប់ឡូតទេ ពីព្រោះមិនមានទំហំផ្ទុកគ្រប់គ្រាន់នៅក្នុង Google ថាសរបស់អ្នក។</translation> <translation id="1482884275703521657">ភាសាហ្វាំងឡង់</translation> <translation id="148466539719134488">ស្វីស</translation> <translation id="1497522201463361063">មិនអាចប្តូរឈ្មោះ "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">សម្អាតធុងសំរាម</translation> <translation id="5163869187418756376">ការចែករំលែកបានបរាជ័យ។ ពិនិត្យការភ្ជាប់របស់អ្នក ហើយព្យាយាមម្តងទៀត។</translation> <translation id="516592729076796170">អ្នកសរសេរកម្មវិធីអាមេរិក Dvorak</translation> -<translation id="5170477580121653719">ចន្លោះផ្ទុក Google Drive ដែលនៅសល់៖ <ph name="SPACE_AVAILABLE" />។</translation> <translation id="5177526793333269655">មើលរូបតំណាងតូច</translation> <translation id="5194713942430106590">ចុចដើម្បីតម្រៀបជួរឈរតាមលំដាប់កើន។</translation> <translation id="5211614973734216083">ភាសាហ្វារូស</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb index a83bd399..6b0d6f24 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_kn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_kn.xtb
@@ -50,7 +50,6 @@ <translation id="1435838927755162558">Parallels Desktop ಮೂಲಕ ಫೋಲ್ಡರ್ ಹಂಚಿಕೊಳ್ಳಿ</translation> <translation id="1439919885608649279">ಹೂವುಗಳನ್ನು ಹಿಡಿದುಕೊಂಡಿರುವ ವ್ಯಕ್ತಿ</translation> <translation id="1471718551822868769">ಸ್ಲೋವೇಕ್</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" ಅನ್ನು ಅಪ್ಲೋಡ್ ಮಾಡಲಾಗಿಲ್ಲ. ನಿಮ್ಮ Google ಡ್ರೈವ್ನಲ್ಲಿ ಸಾಕಷ್ಟು ಸ್ಥಳಾವಕಾಶವಿಲ್ಲ.</translation> <translation id="1482884275703521657">ಫಿನ್ನಿಷ್</translation> <translation id="148466539719134488">ಸ್ವಿಸ್</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" ಗೆ ಮರುಮರುಹೆಸರಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. <ph name="ERROR_MESSAGE" /></translation> @@ -485,7 +484,6 @@ <translation id="5159560892333415631">ಅನುಪಯುಕ್ತವನ್ನು ಖಾಲಿ ಮಾಡಿ</translation> <translation id="5163869187418756376">ಹಂಚಿಕೆ ವಿಫಲಗೊಂಡಿದೆ. ನಿಮ್ಮ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ ಹಾಗೂ ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.</translation> <translation id="516592729076796170">US ಪ್ರೊಗ್ರಾಮರ್ ಡಿವೊರಾಕ್</translation> -<translation id="5170477580121653719">Google ಡ್ರೈವ್ ಅಂತರ ಉಳಿದಿದೆ: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">ಚಿಕ್ಕಚಿತ್ರ ವೀಕ್ಷಣೆ</translation> <translation id="5194713942430106590">ಕಾಲಮ್ ಅನ್ನು ಮೇಲಿನಿಂದ ಕೆಳಗೆ ಕ್ರಮದಲ್ಲಿ ವಿಂಗಡಿಸಲು ಕ್ಲಿಕ್ ಮಾಡಿ.</translation> <translation id="5211614973734216083">ಫರೋಸೆ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb index 176eb2f0..13b91024 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ko.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ko.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Parallels Desktop과 폴더 공유</translation> <translation id="1439919885608649279">꽃에 둘러싸인 사람</translation> <translation id="1471718551822868769">슬로바키아어</translation> -<translation id="1474339897586437869">'<ph name="FILENAME" />'이(가) 업로드되지 않았습니다. Google Drive에 충분한 여유 공간이 없습니다.</translation> <translation id="1482884275703521657">핀란드어</translation> <translation id="148466539719134488">스위스어</translation> <translation id="1497522201463361063">'<ph name="FILE_NAME" />'의 이름을 변경할 수 없습니다. <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">보안</translation> <translation id="2638942478653899953">Google Drive에 연결할 수 없습니다. <ph name="BEGIN_LINK" />로그아웃<ph name="END_LINK" />한 후 다시 로그인하세요.</translation> <translation id="2649120831653069427">구피</translation> +<translation id="2653059201992392941">기회가 <ph name="RETRIES" />번 남았습니다.</translation> <translation id="2663066752008346276">버마어(미얀마, 미얀산 키보드)</translation> <translation id="2664412712123763093">파일 위치</translation> <translation id="2718540689505416944">Linux 앱 설치</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">휴지통 비우기</translation> <translation id="5163869187418756376">공유하지 못했습니다. 인터넷 연결을 확인하고 나중에 다시 시도해 주세요.</translation> <translation id="516592729076796170">미국 프로그래머 드보락</translation> -<translation id="5170477580121653719">Google Drive에 남은 공간: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">미리보기 이미지 보기</translation> <translation id="5194713942430106590">열을 오름차순으로 정렬하려면 클릭하세요.</translation> <translation id="5211614973734216083">페로어</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">라트비아어</translation> <translation id="5489965683297092283"><ph name="FILTER_NAME" /> 필터가 해제되었습니다.</translation> <translation id="5494920125229734069">모두 선택</translation> +<translation id="5500104704744051184">PUK를 입력할 때까지 이 네트워크를 사용할 수 없습니다.</translation> <translation id="5500122897333236901">아이슬란드어</translation> <translation id="5508696409934741614">점</translation> <translation id="5522908512596376669">파일 목록을 목록 보기로 변경했습니다.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044">항목 <ph name="NUMBER_OF_FILES" />개</translation> <translation id="642282551015776456">폴더 이름의 파일으로 사용할 수 없는 이름입니다.</translation> <translation id="6423031066725912715">베트남어(TCVN 키보드)</translation> +<translation id="6430271654280079150">기회가 1번 남았습니다.</translation> <translation id="6485131920355264772">남은 용량을 알 수 없습니다.</translation> <translation id="6495925982925244349">네트워크 <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, 신호 강도 <ph name="SIGNAL_STRENGTH" />%, 관리자가 관리함, 세부정보</translation> <translation id="649877868557234318"><ph name="FOLDER_NAME" /> 폴더로 <ph name="FILE_NAME" /> 추출 중</translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" />개 항목 동기화 중...</translation> <translation id="8600173386174225982">파일 목록을 미리보기 이미지 뷰로 변경했습니다.</translation> <translation id="8601932370724196034">Crostini 이미지 파일</translation> +<translation id="8608515571837163082">잘못된 PIN을 너무 여러 번 입력했습니다. 이동통신사에서 제공한 8자리 PUK(Personal Unblocking Key)를 입력하세요.</translation> <translation id="8609695766746872526">아이슬란드어</translation> <translation id="863903787380594467">잘못된 PIN입니다. 기회가 <ph name="RETRIES" />번 남았습니다.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - 포트</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ky.xtb b/ui/chromeos/translations/ui_chromeos_strings_ky.xtb index b724d9a..6e2b671 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ky.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ky.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Файлды Parallels Desktop менен бөлүшүү</translation> <translation id="1439919885608649279">Гүл көтөргөн адам</translation> <translation id="1471718551822868769">Словакча</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" жүктөп берилбей калды. Google Drive’да бош орун жетишпейт.</translation> <translation id="1482884275703521657">Финче</translation> <translation id="148466539719134488">Швейцариялык</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" аталышын өзгөртүү мүмкүн болбой жатат. <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">Таштандыны бошотуу</translation> <translation id="5163869187418756376">Бөлүшүлбөй калды. Туташууңузду текшерип туруп, бир аздан кийин кайталап көрүңүз.</translation> <translation id="516592729076796170">АКШ Программачы Dvorak</translation> -<translation id="5170477580121653719"><ph name="SPACE_AVAILABLE" /> Google Drive'да бош орун:</translation> <translation id="5177526793333269655">Бармакбасым көрүнүшү</translation> <translation id="5194713942430106590">Тилкени чоңойгон ыраатта иреттөө үчүн чыкылдатыңыз.</translation> <translation id="5211614973734216083">Фарерче</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lo.xtb b/ui/chromeos/translations/ui_chromeos_strings_lo.xtb index b11fd8a6..78c9771e 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_lo.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_lo.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">ແບ່ງປັນໂຟນເດີກັບ Parallels Desktop</translation> <translation id="1439919885608649279">ຄົນຖືດອກໄມ້</translation> <translation id="1471718551822868769">ພາສາສະໂລແວັກ</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" ບໍ່ຖືກອັບໂຫຼດ. ພື້ນທີ່ຫວ່າງບໍ່ພຽງພໍຢູ່ໃນ Google Drive ຂອງທ່ານ.</translation> <translation id="1482884275703521657">ພາສາຟິນນິຊ</translation> <translation id="148466539719134488">ພາສາສະວິດ</translation> <translation id="1497522201463361063">ບໍ່ສາມາດປ່ຽນຊື່ໄດ້ "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">ລ້າງຖັງຂີ້ເຫຍື້ອ</translation> <translation id="5163869187418756376">ການແຊຣ໌ລົ້ມເຫຼວ.ກວດເບິ່ງການເຊື່ອມຕໍ່ຂອງທ່ານ ແລະລອງໃໝ່ອີກພາຍຫຼັງ.</translation> <translation id="516592729076796170">Dvorak ຜູ້ຂຽນໂປຣແກຣມສະຫະລັດ</translation> -<translation id="5170477580121653719">ຊ່ອງຫວ່າງ Google Drive ຍັງເຫຼືອ: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">ມຸມມອງຮູບນ້ອຍ</translation> <translation id="5194713942430106590">ຄລິກເພື່ອຮຽງລຳດັບຖັນແຕ່ນ້ອຍຫາໃຫຍ່.</translation> <translation id="5211614973734216083">ພາສາຟາໂຣສ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb index abcd81ea..f0d4542d 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_lt.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_lt.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Bendrinkite aplanką su „Parallels Desktop“</translation> <translation id="1439919885608649279">Žmogus su gėlėmis</translation> <translation id="1471718551822868769">Slovakų k.</translation> -<translation id="1474339897586437869">Failas „<ph name="FILENAME" />“ neįkeltas. „Google“ diske nepakanka vietos.</translation> <translation id="1482884275703521657">Suomių k.</translation> <translation id="148466539719134488">Šveicarų</translation> <translation id="1497522201463361063">Nepavyko pervardyti „<ph name="FILE_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">Išvalyti šiukšliadėžę</translation> <translation id="5163869187418756376">Nepavyko bendrinti. Patikrinkite ryšį ir vėliau bandykite dar kartą.</translation> <translation id="516592729076796170">Programuotojų JAV Dvorako</translation> -<translation id="5170477580121653719">Liko vietos „Google“ diske: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Miniatiūros rodinys</translation> <translation id="5194713942430106590">Spustelėkite, kad galėtumėte rūšiuoti stulpelį didėjimo tvarka.</translation> <translation id="5211614973734216083">Fareriečių k.</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb index 54623dfe..5b8655e 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_lv.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_lv.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Mapes kopīgošana ar Parallels Desktop</translation> <translation id="1439919885608649279">Persona ar puķēm</translation> <translation id="1471718551822868769">Slovāku</translation> -<translation id="1474339897586437869">Fails “<ph name="FILENAME" />” netika augšupielādēts. Jūsu Google diskā nepietiek vietas.</translation> <translation id="1482884275703521657">Somu</translation> <translation id="148466539719134488">Šveices</translation> <translation id="1497522201463361063">Failu <ph name="FILE_NAME" /> nevar pārdēvēt. <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">Iztukšot atkritni</translation> <translation id="5163869187418756376">Kopīgošana neizdevās. Pārbaudiet savienojumu un vēlāk mēģiniet vēlreiz.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> -<translation id="5170477580121653719">Pakalpojumā Google disks atlikušās brīvās vietas apjoms: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Sīktēlu skatījums</translation> <translation id="5194713942430106590">Noklikšķiniet, lai kārtotu kolonnas augošā secībā.</translation> <translation id="5211614973734216083">Fēru</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb index f6547f2..3adda06 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_mk.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_mk.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Споделете папка со Parallels Desktop</translation> <translation id="1439919885608649279">Човек со цвеќиња</translation> <translation id="1471718551822868769">словачки</translation> -<translation id="1474339897586437869">„<ph name="FILENAME" />“ не е поставена. Нема доволно простор на Google Drive.</translation> <translation id="1482884275703521657">фински</translation> <translation id="148466539719134488">швајцарски</translation> <translation id="1497522201463361063">Не може да преименува „<ph name="FILE_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">Испразни ја корпата</translation> <translation id="5163869187418756376">Споделувањето не успеа. Проверете ја врската и обидете се повторно подоцна.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> -<translation id="5170477580121653719">Преостанат простор во Google Диск: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Приказ на сликичка</translation> <translation id="5194713942430106590">Кликнете за подредување на колоната по растечки редослед.</translation> <translation id="5211614973734216083">фарски</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb index a8795e92..d825c4d 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ml.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ml.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Parallels Desktop ഉപയോഗിച്ച് ഫോൾഡർ പങ്കിടുക</translation> <translation id="1439919885608649279">പൂക്കൾ പിടിച്ചിരിക്കുന്ന വ്യക്തി</translation> <translation id="1471718551822868769">സ്ലോവാക്</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" അപ്ലോഡുചെയ്തില്ല. നിങ്ങളുടെ Google ഡ്രൈവിൽ മതിയായ ഇടമില്ല.</translation> <translation id="1482884275703521657">ഫിന്നിഷ്</translation> <translation id="148466539719134488">സ്വിസ്സ്</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" എന്നതിന്റെ പേരുമാറ്റാനായില്ല. <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">ട്രാഷിലെ ഇനങ്ങൾ ഇല്ലാതാക്കുക</translation> <translation id="5163869187418756376">പങ്കിടൽ പരാജയപ്പെട്ടു. നിങ്ങളുടെ കണക്ഷൻ പരിശോധിച്ച് പിന്നീട് വീണ്ടും ശ്രമിക്കുക.</translation> <translation id="516592729076796170">യുഎസ് പ്രോഗ്രാമർ ഡൊറാക്ക്</translation> -<translation id="5170477580121653719">Google ഡ്രൈവിൽ ശേഷിക്കുന്ന സ്പെയ്സ്: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">ലഘുചിത്ര കാഴ്ച</translation> <translation id="5194713942430106590">കോളം ആരോഹണക്രമത്തിൽ അടുക്കാൻ ക്ലിക്ക് ചെയ്യുക</translation> <translation id="5211614973734216083">ഫാറോസി</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mn.xtb b/ui/chromeos/translations/ui_chromeos_strings_mn.xtb index 24c7730..137924d 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_mn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_mn.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Фолдерыг Parallels Desktop-тай хуваалцах</translation> <translation id="1439919885608649279">Цэцэгтэй хүн</translation> <translation id="1471718551822868769">Словак</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />"-г байршуулаагүй. Tаны Google Drive-д хангалттай багтаамж алга.</translation> <translation id="1482884275703521657">Финланд</translation> <translation id="148466539719134488">Швейцарь</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" />-ын нэрийг өөрчлөх боломжгүй байна.</translation> @@ -487,7 +486,6 @@ <translation id="5159560892333415631">Хогийн савыг хоослох</translation> <translation id="5163869187418756376">Хуваалцах ажиллагаа амжилтгүй боллоо. Холболтоо шалгаад, дараа дахин оролдож үзнэ үү.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> -<translation id="5170477580121653719">Google Drive-ын үлдсэн зай: <ph name="SPACE_AVAILABLE" /> .</translation> <translation id="5177526793333269655">Хажуугийн талбарт жижгээр харах</translation> <translation id="5194713942430106590">Баганыг өсөх дарааллаар эрэмбэлэхийн тулд товшино уу.</translation> <translation id="5211614973734216083">Фарер</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb index 9217ce0c..c56988a 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_mr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_mr.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Parallels Desktop सोबत फोल्डर शेअर करा</translation> <translation id="1439919885608649279">हातात फुले असलेली व्यक्ती</translation> <translation id="1471718551822868769">स्लोव्हाक</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" अपलोड केली नाही. आपल्या Google ड्राइव्हमध्ये पर्याप्त स्थान नाही.</translation> <translation id="1482884275703521657">फिनिश</translation> <translation id="148466539719134488">स्विस</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" पुनर्नामित करण्यात अक्षम. <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">ट्रॅश रिकामा करा</translation> <translation id="5163869187418756376">सामायिकरण अयशस्वी. तुमचे कनेक्शन तपासा आणि नंतर पुन्हा प्रयत्न करा.</translation> <translation id="516592729076796170">यूएस प्रोग्रामर द्वोराक</translation> -<translation id="5170477580121653719">Google ड्राइव्ह स्थान रिक्त: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">थंबनेल व्ह्यू</translation> <translation id="5194713942430106590">स्तंभाची चढत्या क्रमाने क्रमवारी लावण्यासाठी क्लिक करा.</translation> <translation id="5211614973734216083">फारोसे</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ms.xtb b/ui/chromeos/translations/ui_chromeos_strings_ms.xtb index 5890529..8724ec50 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ms.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ms.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Kongsi folder dengan Parallels Desktop</translation> <translation id="1439919885608649279">Orang dengan bunga</translation> <translation id="1471718551822868769">Slovak</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" tidak dimuat naik. Ruang kosong tidak mencukupi dalam Google Drive anda.</translation> <translation id="1482884275703521657">Finland</translation> <translation id="148466539719134488">Bahasa Switzerland</translation> <translation id="1497522201463361063">Tidak dapat menamakan semula "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Selamat</translation> <translation id="2638942478653899953">Google Drive tidak dapat dicapai. Sila <ph name="BEGIN_LINK" />log keluar<ph name="END_LINK" /> dan log masuk kembali.</translation> <translation id="2649120831653069427">Ikan Pelangi</translation> +<translation id="2653059201992392941">Anda mempunyai <ph name="RETRIES" /> percubaan lagi.</translation> <translation id="2663066752008346276">Burma/Myanmar dengan papan kekunci Myansan</translation> <translation id="2664412712123763093">Lokasi fail</translation> <translation id="2718540689505416944">Pasang apl dengan Linux</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Kosongkan Sampah</translation> <translation id="5163869187418756376">Perkongsian gagal. Periksa sambungan anda dan cuba lagi nanti.</translation> <translation id="516592729076796170">Dvorak Pengatur Cara AS</translation> -<translation id="5170477580121653719">Ruang Google Drive yang tinggal: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Paparan lakaran kenit</translation> <translation id="5194713942430106590">Klik untuk mengisih lajur dalam tertib menaik.</translation> <translation id="5211614973734216083">Faroe</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">Latvia</translation> <translation id="5489965683297092283">Penapis <ph name="FILTER_NAME" /> dimatikan.</translation> <translation id="5494920125229734069">Pilih semua</translation> +<translation id="5500104704744051184">Anda tidak akan dapat menggunakan rangkaian ini sehingga anda memasukkan PUK</translation> <translation id="5500122897333236901">Bahasa Iceland</translation> <translation id="5508696409934741614">Titik</translation> <translation id="5522908512596376669">Senarai fail telah berubah kepada paparan senarai.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> item</translation> <translation id="642282551015776456">Nama ini tidak boleh digunakan sebagai nama fail atau folder</translation> <translation id="6423031066725912715">Vietnam dengan papan kekunci TCVN</translation> +<translation id="6430271654280079150">Anda mempunyai 1 percubaan lagi.</translation> <translation id="6485131920355264772">Gagal mendapatkan maklumat ruang</translation> <translation id="6495925982925244349">Rangkaian <ph name="NETWORK_INDEX" /> daripada <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, Kekuatan Isyarat <ph name="SIGNAL_STRENGTH" />%, Diurus oleh Pentadbir anda, Butiran</translation> <translation id="649877868557234318">Mengekstrak <ph name="FILE_NAME" /> ke <ph name="FOLDER_NAME" /></translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903">Menyegerakkan <ph name="NUMBER_OF_FILES" /> item...</translation> <translation id="8600173386174225982">Senarai fail telah berubah kepada paparan lakaran kecil.</translation> <translation id="8601932370724196034">Fail imej Crostini</translation> +<translation id="8608515571837163082">PIN yang salah telah dimasukkan terlalu banyak kali. Masukkan Kunci Penyahsekat Peribadi (PUK) 8 digit yang diberikan oleh pembawa.</translation> <translation id="8609695766746872526">Iceland</translation> <translation id="863903787380594467">PIN salah. Anda mempunyai <ph name="RETRIES" /> percubaan lagi.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - Port</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_my.xtb b/ui/chromeos/translations/ui_chromeos_strings_my.xtb index 5d607f6..1f1f179 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_my.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_my.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">ဖိုင်တွဲကို Parallels Desktop အား မျှဝေခြင်း</translation> <translation id="1439919885608649279">ပန်းများနှင့်လူ</translation> <translation id="1471718551822868769">ဆလိုဗက်</translation> -<translation id="1474339897586437869">" <ph name="FILENAME" /> " ကို အပ်လုဒ် လုပ်မရခဲ့ပါ။ သင်၏ Google Drive ထဲတွင် နေရာ မလုံလောက်ပါ။</translation> <translation id="1482884275703521657">ဖင်လန်</translation> <translation id="148466539719134488">ဆွစ်</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />"ကို အမည်ပြောင်း မရပါ။ <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">အမှိုက်ပုံး ရှင်းရန်</translation> <translation id="5163869187418756376">မျှဝေခြင်း မအောင်မြင်ပါ။ သင့်ချိတ်ဆက်မှုအား စစ်ဆေးကာ နောက်မှ ထပ်မံကြိုးစားပါ။</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> -<translation id="5170477580121653719">Google Drive နေရာလက်ကျန်: <ph name="SPACE_AVAILABLE" />။</translation> <translation id="5177526793333269655">လက်သည်းပုံ ကြည့်ရန်</translation> <translation id="5194713942430106590">ကော်လံကို ငယ်စဉ်ကြီးလိုက်စီရန် နှိပ်ပါ။</translation> <translation id="5211614973734216083">ဖာရို</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb index 64bfa48..7dd156a 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ne.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ne.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Parallels Desktop सँग फोल्डर सेयर गर्नुहोस्</translation> <translation id="1439919885608649279">फूल बोकिरहेका व्यक्ति</translation> <translation id="1471718551822868769">स्लोभाकियाली</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />"अपलोड गरिएको थिएन। तपाईँको Google ड्राइभमा पर्याप्त खाली ठाउँ छैन।</translation> <translation id="1482884275703521657">फिनिस</translation> <translation id="148466539719134488">स्विस</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" पुन: नामकरण गर्न असक्षम। <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">सुरक्षित पारियो</translation> <translation id="2638942478653899953">Google ड्राइभमा पुग्न सकिएन। कृपया <ph name="BEGIN_LINK" />लग आउट<ph name="END_LINK" /> गर्नुहोस् र फेरि लग इन गर्नुहोस्।</translation> <translation id="2649120831653069427">रेनबोफिस</translation> +<translation id="2653059201992392941">तपाईं अझै <ph name="RETRIES" /> पटक प्रयास गर्न सक्नुहुन्छ।</translation> <translation id="2663066752008346276">बर्मेली/म्यान्मार म्यान्सन किबोर्ड</translation> <translation id="2664412712123763093">फाइल रहेको स्थान</translation> <translation id="2718540689505416944">Linux प्रयोग गरी एप इन्स्टल गर्नुहोस्</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">ट्र्यास खाली गर्नुहोस्</translation> <translation id="5163869187418756376">साझा गर्न असफल। आफ्नो जडान जाँच गर्नुहोस् र पछि फेरि प्रयास गर्नुहोस्।</translation> <translation id="516592729076796170">अमेरिकी प्रोग्रामर भोराक किबोर्ड</translation> -<translation id="5170477580121653719">Google ड्राइभ स्थान बाँकी: <ph name="SPACE_AVAILABLE" /></translation> <translation id="5177526793333269655">थम्बनेल दृश्य</translation> <translation id="5194713942430106590">स्तम्भलाई बढ्दो क्रममा क्रमबद्ध गर्न क्लिक गर्नुहोस्।</translation> <translation id="5211614973734216083">फारोज</translation> @@ -529,6 +528,7 @@ <translation id="5489067830765222292">लात्भियाली</translation> <translation id="5489965683297092283"><ph name="FILTER_NAME" /> फिल्टर अफ छ।</translation> <translation id="5494920125229734069">सबै चयन गर्नुहोस्</translation> +<translation id="5500104704744051184">तपाईंले PUK हालेपछि मात्र तपाईं यो नेटवर्क प्रयोग गर्न सक्नुहुन्छ</translation> <translation id="5500122897333236901">आइसलैंडको</translation> <translation id="5508696409934741614">डटहरू</translation> <translation id="5522908512596376669">फाइलको सूचीको दृश्य परिवर्तन गरी सूची दृश्य बनाइयो।</translation> @@ -634,6 +634,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> वस्तुहरू</translation> <translation id="642282551015776456">नामलाई फाइल वा फोल्डर नामको रूपमा प्रयोग गर्न सकिँदैन</translation> <translation id="6423031066725912715">भियतनामी TCVN किबोर्ड</translation> +<translation id="6430271654280079150">तपाईं अझै १ पटक प्रयास गर्न सक्नुहुन्छ।</translation> <translation id="6485131920355264772">स्पेज जानकारी पुनर्प्राप्त गर्न असफल भयो</translation> <translation id="6495925982925244349"><ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" /> <ph name="SECURITY_STATUS" /> <ph name="CONNECTION_STATUS" /> मध्ये नेटवर्क <ph name="NETWORK_INDEX" />, सिग्नलको क्षमता <ph name="SIGNAL_STRENGTH" />%, तपाईंका प्रशासकले व्यवस्थित गर्नुभएको छ, विवरणहरू</translation> <translation id="649877868557234318"><ph name="FILE_NAME" /> <ph name="FOLDER_NAME" /> मा एक्स्ट्रयाक्ट गरिँदै छ</translation> @@ -900,6 +901,7 @@ <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> वस्तुहरू समक्रमण गर्दै...</translation> <translation id="8600173386174225982">फाइलको सूचीको दृश्य परिवर्तन गरी थम्बनेल दृश्य बनाइयो।</translation> <translation id="8601932370724196034">Crostini छवि फाइल</translation> +<translation id="8608515571837163082">तपाईंले अत्यन्तै धेरै पटक गलत PIN हाल्नुभयो। तपाईंको मोबाइल सेवा प्रदायकले उपलब्ध गराएको ८ अङ्कको पर्सनल अनब्लकिङ की (PUK) हाल्नुहोस्।</translation> <translation id="8609695766746872526">आइसल्यान्डिक</translation> <translation id="863903787380594467">PIN मिलेन। तपाईं अझै <ph name="RETRIES" /> पटक प्रयास गर्न सक्नुहुन्छ।</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - पोर्ट</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb index f730e38..b080bd5 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_nl.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_nl.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Map delen met Parallels Desktop</translation> <translation id="1439919885608649279">Persoon met bloemen</translation> <translation id="1471718551822868769">Slowaaks</translation> -<translation id="1474339897586437869">'<ph name="FILENAME" />' is niet geüpload. Er is onvoldoende ruimte beschikbaar in je Google Drive.</translation> <translation id="1482884275703521657">Fins</translation> <translation id="148466539719134488">Zwitsers</translation> <translation id="1497522201463361063">Kan de naam van '<ph name="FILE_NAME" />' niet wijzigen. <ph name="ERROR_MESSAGE" /></translation> @@ -490,7 +489,6 @@ <translation id="5159560892333415631">Prullenbak leegmaken</translation> <translation id="5163869187418756376">Delen mislukt. Controleer de verbinding en probeer het later opnieuw.</translation> <translation id="516592729076796170">Amerikaans Programmer Dvorak</translation> -<translation id="5170477580121653719">Google Drive-ruimte over: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Miniatuurweergave</translation> <translation id="5194713942430106590">Klik om de kolom in oplopende volgorde te sorteren.</translation> <translation id="5211614973734216083">Faeröers</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_no.xtb b/ui/chromeos/translations/ui_chromeos_strings_no.xtb index f04782b..8637784 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_no.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_no.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Del mappen med Parallels Desktop</translation> <translation id="1439919885608649279">Person med blomster</translation> <translation id="1471718551822868769">Slovakisk</translation> -<translation id="1474339897586437869">«<ph name="FILENAME" />» ble ikke lastet opp. Det er ikke nok ledig plass på Google Disk.</translation> <translation id="1482884275703521657">Finsk</translation> <translation id="148466539719134488">Sveitsisk</translation> <translation id="1497522201463361063">Kunne ikke gi «<ph name="FILE_NAME" />» nytt navn. <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Sikret</translation> <translation id="2638942478653899953">Google Disk kan ikke nås. <ph name="BEGIN_LINK" />Logg av<ph name="END_LINK" /> og på igjen.</translation> <translation id="2649120831653069427">Regnbuefisk</translation> +<translation id="2653059201992392941">Du har <ph name="RETRIES" /> forsøk igjen.</translation> <translation id="2663066752008346276">Burmesisk/myanmarsk med Myansan-tastatur</translation> <translation id="2664412712123763093">Filplassering</translation> <translation id="2718540689505416944">Installér app med Linux</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Tøm papirkurven</translation> <translation id="5163869187418756376">Delingen mislyktes. Sjekk tilkoblingen din og prøv på nytt senere.</translation> <translation id="516592729076796170">Amerikansk programmeringstastatur (Dvorak)</translation> -<translation id="5170477580121653719">Ledig lagringsplass på Google Disk: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Miniatyrbildevisning</translation> <translation id="5194713942430106590">Klikk for å sortere kolonnen i stigende rekkefølge.</translation> <translation id="5211614973734216083">Færøysk</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">Latvisk</translation> <translation id="5489965683297092283"><ph name="FILTER_NAME" />-filteret er av.</translation> <translation id="5494920125229734069">Velg alle</translation> +<translation id="5500104704744051184">Du kan ikke bruke dette nettverket før du har oppgitt PUK-koden</translation> <translation id="5500122897333236901">Islandsk</translation> <translation id="5508696409934741614">Prikker</translation> <translation id="5522908512596376669">Fillisten vises nå i listevisning.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> elementer</translation> <translation id="642282551015776456">Dette navnet kan ikke brukes som fil- eller mappenavn</translation> <translation id="6423031066725912715">Vietnamesisk med TCVN-tastatur</translation> +<translation id="6430271654280079150">Du har ett forsøk igjen.</translation> <translation id="6485131920355264772">Kunne ikke hente informasjon om lagringsplass</translation> <translation id="6495925982925244349">Nettverk <ph name="NETWORK_INDEX" /> av <ph name="NETWORK_COUNT" /> – <ph name="NETWORK_NAME" /> – <ph name="SECURITY_STATUS" /> – <ph name="CONNECTION_STATUS" /> – signalstyrke <ph name="SIGNAL_STRENGTH" /> % – administreres av administratoren din – detaljer</translation> <translation id="649877868557234318">Pakker ut <ph name="FILE_NAME" /> i <ph name="FOLDER_NAME" /></translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903">Synkroniserer <ph name="NUMBER_OF_FILES" /> elementer …</translation> <translation id="8600173386174225982">Fillisten vises nå i miniatyrbildevisning.</translation> <translation id="8601932370724196034">Crostini-bildefil</translation> +<translation id="8608515571837163082">Feil PIN-kode ble tastet inn for mange ganger. Oppgi den åttesifrede PUK-koden fra operatøren.</translation> <translation id="8609695766746872526">Islandsk</translation> <translation id="863903787380594467">Feil PIN-kode. Du har <ph name="RETRIES" /> forsøk igjen.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> – port</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_or.xtb b/ui/chromeos/translations/ui_chromeos_strings_or.xtb index c22ab63..3efe46e 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_or.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_or.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Parallels Desktop ସହ ଫୋଲ୍ଡର ସେୟାର୍ କରନ୍ତୁ</translation> <translation id="1439919885608649279">ଫୁଲଗୁଡ଼ିକ ସହ ଜଣେ ବ୍ୟକ୍ତି</translation> <translation id="1471718551822868769">ସ୍ଲୋଭାକ୍</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" ଅପ୍ଲୋଡ୍ କରାଯାଇନଥିଲା। ଆପଣଙ୍କର Google Driveରେ ଯଥେଷ୍ଟ ମୁକ୍ତ ସ୍ଥାନ ନାହିଁ।</translation> <translation id="1482884275703521657">ଫିନିଶ୍</translation> <translation id="148466539719134488">ସ୍ଵିସ୍</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" ରିନେମ୍ କରିବାକୁ ଅକ୍ଷମ। <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">ସୁରକ୍ଷିତ</translation> <translation id="2638942478653899953">Google Drive ପର୍ଯ୍ୟନ୍ତ ପହଞ୍ଚିହେଲା ନାହିଁ। ଦୟାକରି <ph name="BEGIN_LINK" />ଲଗ୍ ଆଉଟ୍<ph name="END_LINK" /> ଏବଂ ଫେରି ଲଗ୍ ଇନ୍ କରନ୍ତୁ।</translation> <translation id="2649120831653069427">ରେନ୍ବୋଫିସ୍</translation> +<translation id="2653059201992392941">ଆପଣଙ୍କ ପାଖରେ <ph name="RETRIES" />ଟି ପ୍ରଚେଷ୍ଟା ବାକି ଅଛି।</translation> <translation id="2663066752008346276">ମିଆଁସାନ୍ କୀବୋର୍ଡ ସହ ବର୍ମିଜ୍/ମିଆଁମାର୍</translation> <translation id="2664412712123763093">ଫାଇଲ୍ ଲୋକେସନ୍</translation> <translation id="2718540689505416944">Linux ମାଧ୍ୟମରେ ଆପକୁ ଇନଷ୍ଟଲ୍ କରନ୍ତୁ</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">ଟ୍ରାସକୁ ଖାଲି କରନ୍ତୁ</translation> <translation id="5163869187418756376">ସେୟାର୍ ହେଇପାରିଲା ନାହିଁ ନିଜ ସଂଯୋଗ ଯାଞ୍ଚ କରି ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।</translation> <translation id="516592729076796170">US ପ୍ରୋଗ୍ରାମର୍ ଡିଭୋରାକ୍</translation> -<translation id="5170477580121653719">Google ଡ୍ରାଇଭ୍ ଅବଶିଷ୍ଟ ସ୍ଥାନ: <ph name="SPACE_AVAILABLE" />।</translation> <translation id="5177526793333269655">ଥମ୍ଵନେଲ୍ ଦର୍ଶନ</translation> <translation id="5194713942430106590">କଲମ୍କୁ ସାନରୁ ବଡ଼ କ୍ରମରେ ସଜାଇବା ପାଇଁ କ୍ଲିକ୍ କରନ୍ତୁ।</translation> <translation id="5211614973734216083">ଫାରୋସି</translation> @@ -524,6 +523,7 @@ <translation id="5489067830765222292">ଲାତଭିଆନ୍</translation> <translation id="5489965683297092283"><ph name="FILTER_NAME" /> ଫିଲ୍ଟର ବନ୍ଦ ଅଛି।</translation> <translation id="5494920125229734069">ସମସ୍ତ ଚୟନ କରନ୍ତୁ</translation> +<translation id="5500104704744051184">ଆପଣ PUKକୁ ନଲେଖିବା ପର୍ଯ୍ୟନ୍ତ ଏହି ନେଟୱାର୍କକୁ ବ୍ୟବହାର କରିବା ପାଇଁ ସକ୍ଷମ ହେବେ ନାହିଁ</translation> <translation id="5500122897333236901">ଆଇସ୍ଲେଣ୍ଡିକ୍</translation> <translation id="5508696409934741614">ଡଟ୍</translation> <translation id="5522908512596376669">ଫାଇଲ୍ର ତାଲିକା ଭ୍ୟୁ ତାଲିକାରେ ବଦଳି ଯାଇଛି।</translation> @@ -629,6 +629,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" />ଟି ଆଇଟମ୍</translation> <translation id="642282551015776456">ଏହି ନାମ କୌଣସି ଫାଇଲ୍ କିମ୍ବା ଫୋଲ୍ଡର୍ର ନାମ ଭାବେ ବ୍ୟବହାର କରାଯାଇନପାରେ</translation> <translation id="6423031066725912715">TCVN କୀବୋର୍ଡ ସହ ଭିଏତନାମିଜ୍</translation> +<translation id="6430271654280079150">ଆପଣଙ୍କ ପାଖରେ 1ଟି ପ୍ରଚେଷ୍ଟା ବାକି ଅଛି।</translation> <translation id="6485131920355264772">ଯାଗା ସମ୍ବନ୍ଧିତ ତଥ୍ୟ ପୁନରୁଦ୍ଧାର କରିବାରେ ବିଫଳ ହେଲା</translation> <translation id="6495925982925244349"><ph name="NETWORK_COUNT" />ଟିର <ph name="NETWORK_INDEX" /> ନେଟ୍ୱାର୍କ, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, ସିଗ୍ନାଲ୍ର କ୍ଷମତା <ph name="SIGNAL_STRENGTH" />%, ଆପଣଙ୍କର ଆଡ୍ମିନିଷ୍ଟ୍ରେଟର୍ଙ୍କ ଦ୍ୱାରା ପରିଚାଳିତ, ବିବରଣୀ</translation> <translation id="649877868557234318"><ph name="FOLDER_NAME" />କୁ <ph name="FILE_NAME" /> ଏକ୍ସଟ୍ରାକ୍ଟ କରାଯାଉଛି</translation> @@ -895,6 +896,7 @@ <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" />ଟି ଆଇଟମ୍ ସିଙ୍କ୍ ହେଉଛି...</translation> <translation id="8600173386174225982">ଫାଇଲ୍ ତାଲିକାକୁ ଥମ୍ବନେଲ୍ ଭ୍ୟୁରେ ପରିବର୍ତ୍ତନ କରାଯାଇଛି।</translation> <translation id="8601932370724196034">Crostini ଛବି ଫାଇଲ୍</translation> +<translation id="8608515571837163082">ଏକ ଭୁଲ PIN ବହୁତ ଥର ଲେଖାଯାଇଛି। କ୍ୟାରିଅର ଦ୍ୱାରା ପ୍ରଦାନ କରାଯାଇଥିବା 8-ଅଙ୍କ ବିଶିଷ୍ଟ ବ୍ୟକ୍ତିଗତ ଅନବ୍ଲକ କରିବା କୀ (PUK) ଲେଖନ୍ତୁ।</translation> <translation id="8609695766746872526">ଆଇସଲାଣ୍ଡିକ୍</translation> <translation id="863903787380594467">ଭୁଲ PIN। ଆପଣଙ୍କ ପାଖରେ <ph name="RETRIES" />ଟି ପ୍ରଚେଷ୍ଟା ବାକି ଅଛି।</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - ପୋର୍ଟ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pa.xtb b/ui/chromeos/translations/ui_chromeos_strings_pa.xtb index c8a2aff..ebf91aa77 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pa.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pa.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Parallels Desktop ਨਾਲ ਫੋਲਡਰ ਸਾਂਝਾ ਕਰੋ</translation> <translation id="1439919885608649279">ਫੁੱਲਾਂ ਨਾਲ ਵਿਅਕਤੀ</translation> <translation id="1471718551822868769">ਸਲੋਵਾਕ</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" ਅਪਲੋਡ ਨਹੀਂ ਕੀਤੀ ਗਈ ਸੀ। ਤੁਹਾਡੀ Google Drive ਵਿੱਚ ਪੂਰਾ ਖਾਲੀ ਸਪੇਸ ਨਹੀਂ ਹੈ।</translation> <translation id="1482884275703521657">ਫਿਨਿਸ਼</translation> <translation id="148466539719134488">ਸਵਿਸ</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" ਨੂੰ ਮੁੜ ਨਾਮ ਦੇਣ ਵਿੱਚ ਅਸਮਰੱਥ। <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">ਸੁਰੱਖਿਅਤ</translation> <translation id="2638942478653899953">Google Drive 'ਤੇ ਪਹੁੰਚਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ। ਕਿਰਪਾ ਕਰਕੇ <ph name="BEGIN_LINK" />ਲੌਗ ਆਉਟ<ph name="END_LINK" /> ਅਤੇ ਫਿਰ ਲੌਗ ਇਨ ਕਰੋ।</translation> <translation id="2649120831653069427">ਰੈਂਬੋਫ਼ਿਸ਼</translation> +<translation id="2653059201992392941">ਤੁਹਾਡੇ ਕੋਲ <ph name="RETRIES" /> ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ ਹਨ।</translation> <translation id="2663066752008346276">ਮੇਅਨਸਨ ਕੀ-ਬੋਰਡ ਦੇ ਨਾਲ ਬਰਮੀ/ਮਿਆਂਮਾਰ</translation> <translation id="2664412712123763093">ਫ਼ਾਈਲ ਦਾ ਟਿਕਾਣਾ</translation> <translation id="2718540689505416944">Linux ਨਾਲ ਐਪ ਸਥਾਪਤ ਕਰੋ</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">ਰੱਦੀ ਨੂੰ ਖਾਲੀ ਕਰੋ</translation> <translation id="5163869187418756376">ਸਾਂਝਾਕਰਨ ਅਸਫਲ। ਆਪਣੇ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰੋ ਅਤੇ ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> -<translation id="5170477580121653719">Google Drive ਸਪੇਸ ਬਾਕੀ: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">ਲਘੂ-ਚਿੱਤਰ ਦ੍ਰਿਸ਼</translation> <translation id="5194713942430106590">ਕਾਲਮ ਨੂੰ ਵਧਦੇ ਕ੍ਰਮ ਵਿੱਚ ਕ੍ਰਮ-ਬੱਧ ਕਰਨ ਲਈ ਕਲਿੱਕ ਕਰੋ।</translation> <translation id="5211614973734216083">ਫ਼ਰੋਇਸ</translation> @@ -529,6 +528,7 @@ <translation id="5489067830765222292">ਲਾਤਵੀਅਨ</translation> <translation id="5489965683297092283"><ph name="FILTER_NAME" /> ਫਿਲਟਰ ਬੰਦ ਹੈ।</translation> <translation id="5494920125229734069">ਸਾਰੇ ਚੁਣੋ</translation> +<translation id="5500104704744051184">ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ PUK ਦਾਖਲ ਨਹੀਂ ਕਰਦੇ, ਤੁਸੀਂ ਇਸ ਨੈੱਟਵਰਕ ਨੂੰ ਨਹੀਂ ਵਰਤ ਸਕੋਗੇ</translation> <translation id="5500122897333236901">Icelandic</translation> <translation id="5508696409934741614">ਬਿੰਦੀਆਂ</translation> <translation id="5522908512596376669">ਫ਼ਾਈਲ ਸੂਚੀ, ਸੂਚੀ ਦ੍ਰਿਸ਼ ਵਿੱਚ ਬਦਲ ਗਈ ਹੈ।</translation> @@ -634,6 +634,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> ਆਈਟਮਾਂ</translation> <translation id="642282551015776456">ਇਹ ਨਾਮ ਫੋਲਡਰ ਨਾਮ ਦੀ ਇੱਕ ਫਾਈਲ ਦੇ ਤੌਰ ਤੇ ਨਹੀਂ ਵਰਤਿਆ ਜਾ ਸਕਦਾ</translation> <translation id="6423031066725912715">TCVN ਕੀ-ਬੋਰਡ ਨਾਲ ਵੀਅਤਨਾਮੀ</translation> +<translation id="6430271654280079150">ਤੁਹਾਡੇ ਕੋਲ 1 ਕੋਸ਼ਿਸ਼ ਬਾਕੀ ਹੈ।</translation> <translation id="6485131920355264772">ਸਪੇਸ ਜਾਣਕਾਰੀ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰਨ ਵਿੱਚ ਅਸਫਲ</translation> <translation id="6495925982925244349">ਨੈੱਟਵਰਕ <ph name="NETWORK_COUNT" /> ਵਿੱਚੋਂ <ph name="NETWORK_INDEX" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, ਸਿਗਨਲ ਦੀ ਤੀਬਰਤਾ <ph name="SIGNAL_STRENGTH" />%, ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਪ੍ਰਬੰਧਿਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਵੇਰਵੇ</translation> <translation id="649877868557234318"><ph name="FILE_NAME" /> ਨੂੰ <ph name="FOLDER_NAME" /> ਵਿੱਚ ਐਕਸਟਰੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ</translation> @@ -900,6 +901,7 @@ <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> ਆਈਟਮਾਂ ਸਿੰਕ ਕਰ ਰਿਹਾ ਹੈ...</translation> <translation id="8600173386174225982">ਫ਼ਾਈਲ ਸੂਚੀ, ਲਘੂ-ਚਿੱਤਰ ਦ੍ਰਿਸ਼ ਵਿੱਚ ਬਦਲ ਗਈ ਹੈ।</translation> <translation id="8601932370724196034">Crostini ਈਮੇਜ ਫ਼ਾਈਲ</translation> +<translation id="8608515571837163082">ਗਲਤ ਪਿੰਨ ਬਹੁਤ ਵਾਰ ਦਾਖਲ ਕੀਤਾ ਗਿਆ। ਕੈਰੀਅਰ ਵੱਲੋਂ ਮੁਹੱਈਆ ਕਰਵਾਈ 8-ਅੰਕਾਂ ਦੀ ਨਿੱਜੀ ਅਣਬਲਾਕਿੰਗ ਕੁੰਜੀ (PUK) ਦਾਖਲ ਕਰੋ।</translation> <translation id="8609695766746872526">ਆਈਸਲੈਂਡੀ</translation> <translation id="863903787380594467">ਗਲਤ ਪਿੰਨ। ਤੁਹਾਡੇ ਕੋਲ <ph name="RETRIES" /> ਕੋਸ਼ਿਸ਼ਾਂ ਬਾਕੀ ਹਨ।</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - ਪੋਰਟ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb index 6ba03f4..65f8a9f1 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pl.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pl.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Udostępnij folder aplikacji Parallels Desktop</translation> <translation id="1439919885608649279">Osoba z kwiatami</translation> <translation id="1471718551822868769">Słowacki</translation> -<translation id="1474339897586437869">Plik „<ph name="FILENAME" />” nie został przesłany. Za mało wolnego miejsca na Dysku Google.</translation> <translation id="1482884275703521657">Fiński</translation> <translation id="148466539719134488">szwajcarska klawiatura</translation> <translation id="1497522201463361063">Nie można zmienić nazwy pliku „<ph name="FILE_NAME" />”. <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Zabezpieczona</translation> <translation id="2638942478653899953">Nie można uzyskać dostępu do Dysku Google. <ph name="BEGIN_LINK" />Wyloguj się<ph name="END_LINK" /> i ponownie zaloguj.</translation> <translation id="2649120831653069427">Tęczanka</translation> +<translation id="2653059201992392941">Pozostałe próby: <ph name="RETRIES" />.</translation> <translation id="2663066752008346276">Birmański/myanmarski z klawiaturą Myansan</translation> <translation id="2664412712123763093">Lokalizacja pliku</translation> <translation id="2718540689505416944">Zainstaluj za pomocą Linuksa</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Opróżnij kosz</translation> <translation id="5163869187418756376">Niepowodzenie udostępniania. Sprawdź połączenie i spróbuj ponownie później.</translation> <translation id="516592729076796170">Amerykańska dewelopera (Dvorak)</translation> -<translation id="5170477580121653719">Na Dysku Google pozostało <ph name="SPACE_AVAILABLE" /> wolnego miejsca.</translation> <translation id="5177526793333269655">Widok miniatur</translation> <translation id="5194713942430106590">Kliknij, by posortować kolumnę w kolejności rosnącej.</translation> <translation id="5211614973734216083">Farerski</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">Łotewski</translation> <translation id="5489965683297092283">Filtr <ph name="FILTER_NAME" /> jest wyłączony.</translation> <translation id="5494920125229734069">Wybierz wszystko</translation> +<translation id="5500104704744051184">Nie możesz korzystać z tej sieci, dopóki nie podasz kodu PUK</translation> <translation id="5500122897333236901">Islandzki</translation> <translation id="5508696409934741614">Punkty</translation> <translation id="5522908512596376669">Lista plików została przełączona na widok listy.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044">Elementy: <ph name="NUMBER_OF_FILES" /></translation> <translation id="642282551015776456">Tej nazwy nie można używać jako nazwy pliku ani katalogu.</translation> <translation id="6423031066725912715">Wietnamski z klawiaturą TCVN</translation> +<translation id="6430271654280079150">Pozostała 1 próba.</translation> <translation id="6485131920355264772">Pobieranie informacji o wolnym miejscu nie powiodło się</translation> <translation id="6495925982925244349">Sieć <ph name="NETWORK_INDEX" /> z <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, siła sygnału: <ph name="SIGNAL_STRENGTH" />%, zarządzana przez administratora, szczegóły</translation> <translation id="649877868557234318">Rozpakowuję plik <ph name="FILE_NAME" /> do folderu <ph name="FOLDER_NAME" /></translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903">Synchronizuję elementy – <ph name="NUMBER_OF_FILES" />...</translation> <translation id="8600173386174225982">Lista plików została przełączona na widok miniatur.</translation> <translation id="8601932370724196034">Plik graficzny Crostini</translation> +<translation id="8608515571837163082">Zbyt wiele razy podano nieprawidłowy kod PIN. Wpisz 8-cyfrowy kod PUK otrzymany od operatora.</translation> <translation id="8609695766746872526">Islandzki</translation> <translation id="863903787380594467">Nieprawidłowy kod PIN. Pozostałe próby: <ph name="RETRIES" />.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> – port</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb index 45623cb..c802d5d5 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pt-BR.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Compartilhar pasta com o Parallels Desktop</translation> <translation id="1439919885608649279">Pessoa com flores</translation> <translation id="1471718551822868769">Eslovaco</translation> -<translation id="1474339897586437869">Não foi feito o upload de "<ph name="FILENAME" />". Não há espaço livre suficiente no seu Google Drive.</translation> <translation id="1482884275703521657">Finlandês</translation> <translation id="148466539719134488">Suíço</translation> <translation id="1497522201463361063">Não foi possível renomear "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Protegida</translation> <translation id="2638942478653899953">Não foi possível acessar o Google Drive. <ph name="BEGIN_LINK" />Saia<ph name="END_LINK" /> e faça login novamente.</translation> <translation id="2649120831653069427">Peixe arco-íris</translation> +<translation id="2653059201992392941">Você tem <ph name="RETRIES" /> tentativas restantes.</translation> <translation id="2663066752008346276">Birmanês (Mianmar) com teclado Myansan</translation> <translation id="2664412712123763093">Localização do arquivo</translation> <translation id="2718540689505416944">Instalar o app com o Linux</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Esvaziar lixeira</translation> <translation id="5163869187418756376">Falha no compartilhamento. Verifique sua conexão e tente novamente mais tarde.</translation> <translation id="516592729076796170">Programmer Dvorak americano</translation> -<translation id="5170477580121653719">Espaço restante no Google Drive: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Visualização em miniatura</translation> <translation id="5194713942430106590">Clique para classificar a coluna em ordem crescente.</translation> <translation id="5211614973734216083">Faroês</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">Letão</translation> <translation id="5489965683297092283">O filtro <ph name="FILTER_NAME" /> está desativado.</translation> <translation id="5494920125229734069">Selecionar tudo</translation> +<translation id="5500104704744051184">Não será possível usar esta rede até que a PUK seja inserida.</translation> <translation id="5500122897333236901">Islandês</translation> <translation id="5508696409934741614">Pontos</translation> <translation id="5522908512596376669">A lista de arquivos foi alterada para a visualização em lista.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> itens</translation> <translation id="642282551015776456">Este não é um nome válido para arquivos ou pastas.</translation> <translation id="6423031066725912715">Vietnamita com teclado TCVN</translation> +<translation id="6430271654280079150">Você tem 1 tentativa restante.</translation> <translation id="6485131920355264772">Falha ao recuperar informações sobre espaço</translation> <translation id="6495925982925244349">Rede <ph name="NETWORK_INDEX" /> de <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, intensidade do sinal em <ph name="SIGNAL_STRENGTH" />%, gerenciada pelo seu administrador, detalhes</translation> <translation id="649877868557234318">Extraindo <ph name="FILE_NAME" /> para a pasta "<ph name="FOLDER_NAME" />"</translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903">Sincronizando <ph name="NUMBER_OF_FILES" /> itens...</translation> <translation id="8600173386174225982">A lista de arquivos foi alterada para a visualização em miniatura.</translation> <translation id="8601932370724196034">Arquivo de imagem do Crostini</translation> +<translation id="8608515571837163082">Um PIN incorreto foi digitado muitas vezes. Digite a chave de desbloqueio pessoal (PUK) de oito dígitos fornecida pela operadora.</translation> <translation id="8609695766746872526">Islandês</translation> <translation id="863903787380594467">PIN incorreto. Você tem <ph name="RETRIES" /> tentativas restantes.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - Porta</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb index fa99d3d5..b5f9ca7b 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_pt-PT.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Partilhe a pasta com o Parallels Desktop</translation> <translation id="1439919885608649279">Pessoa com flores</translation> <translation id="1471718551822868769">Eslovaco</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" não foi carregado. Não existe espaço livre suficiente no seu Google Drive.</translation> <translation id="1482884275703521657">Finlandês</translation> <translation id="148466539719134488">Suíço</translation> <translation id="1497522201463361063">Não é possível mudar o nome de "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">Esvaziar lixo</translation> <translation id="5163869187418756376">Falha ao partilhar. Verifique a ligação e tente novamente mais tarde.</translation> <translation id="516592729076796170">Dvorak de programador americano</translation> -<translation id="5170477580121653719">Espaço restante no Google Drive: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Vista de miniatura</translation> <translation id="5194713942430106590">Clique para ordenar a coluna por ordem ascendente.</translation> <translation id="5211614973734216083">Faroense</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb index c026542..17ce1b4 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ro.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ro.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Permite accesul Parallels Desktop la dosar</translation> <translation id="1439919885608649279">Persoană cu flori</translation> <translation id="1471718551822868769">Slovacă</translation> -<translation id="1474339897586437869">„<ph name="FILENAME" />” nu s-a încărcat. Nu există spațiu liber suficient în Google Drive.</translation> <translation id="1482884275703521657">Finlandeză</translation> <translation id="148466539719134488">Elvețiană</translation> <translation id="1497522201463361063">Nu s-a putut redenumi „<ph name="FILE_NAME" />”. <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">Golește coșul de gunoi</translation> <translation id="5163869187418756376">Trimiterea nu a reușit. Verificați conexiunea la internet și încercați din nou mai târziu.</translation> <translation id="516592729076796170">Programator S.U.A. Dvorak</translation> -<translation id="5170477580121653719">Spațiu disponibil pe Disc Google: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Vizualizare cu miniaturi</translation> <translation id="5194713942430106590">Dă clic pentru a sorta coloana în ordine crescătoare.</translation> <translation id="5211614973734216083">Faroeză</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb index 13135d5..99facae 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ru.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ru.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Предоставление Parallels Desktop доступа к папке</translation> <translation id="1439919885608649279">Человек с цветами</translation> <translation id="1471718551822868769">Словацкий</translation> -<translation id="1474339897586437869">Не удалось загрузить <ph name="FILENAME" />. Не хватает пространства на Google Диске.</translation> <translation id="1482884275703521657">Финский</translation> <translation id="148466539719134488">Швейцарская</translation> <translation id="1497522201463361063">Не удалось переименовать "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">Очистить корзину</translation> <translation id="5163869187418756376">Не удалось предоставить доступ. Проверьте подключение к сети и повторите попытку.</translation> <translation id="516592729076796170">Клавиатура Дворака для программистов (США)</translation> -<translation id="5170477580121653719">Свободно на Диске Google: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Уменьшенные изображения</translation> <translation id="5194713942430106590">Нажмите, чтобы отсортировать значения в столбце по возрастанию.</translation> <translation id="5211614973734216083">Фарерский</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_si.xtb b/ui/chromeos/translations/ui_chromeos_strings_si.xtb index b62409c..c5381c1 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_si.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_si.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Parallels Desktop සමඟ ෆෝල්ඩරය බෙදා ගන්න</translation> <translation id="1439919885608649279">මල් රැගත් පුද්ගලයා</translation> <translation id="1471718551822868769">ස්ලෝවැක්</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" උඩුගත නොකරන ලදී. ඔබේ Google Drive මත ප්රමාණවත් තරම් හිස් ඉඩ නැත.</translation> <translation id="1482884275703521657">ෆින්ලන්ත</translation> <translation id="148466539719134488">ස්විස්</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />"නැවත නම් කළ නොහැකි විය. <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">කුණු කුඩය හිස් කිරීම</translation> <translation id="5163869187418756376">බෙදාගැනීම අසාර්ථකයි. ඔබේ සබඳතාව පිරික්සා නැවත උත්සහ කරන්න.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> -<translation id="5170477580121653719">Google Drive ඉදිරි ඉඩ: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">කුඩාරූ දසුන</translation> <translation id="5194713942430106590">තීරුව නැඟෙන පිළිවෙළට සැකසීමට ක්ලික් කරන්න.</translation> <translation id="5211614973734216083">ෆාරෝස්</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb index 0bb7a5c6..7264982 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sk.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sk.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Zdieľanie priečinka aplikáciou Parallels Desktop</translation> <translation id="1439919885608649279">Osoba s kvetinami</translation> <translation id="1471718551822868769">Slovenská klávesnica</translation> -<translation id="1474339897586437869">Súbor <ph name="FILENAME" /> nebol nahraný. Na Disku Google nemáte dostatok voľného miesta.</translation> <translation id="1482884275703521657">Fínska klávesnica</translation> <translation id="148466539719134488">Švajčiarska klávesnica</translation> <translation id="1497522201463361063">Súbor <ph name="FILE_NAME" /> sa nepodarilo premenovať. <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Zabezpečená</translation> <translation id="2638942478653899953">Disk Google je nedostupný. <ph name="BEGIN_LINK" />Odhláste sa<ph name="END_LINK" /> a znova sa prihláste.</translation> <translation id="2649120831653069427">Dúhovka</translation> +<translation id="2653059201992392941">Zostáva vám tento počet pokusov: <ph name="RETRIES" />.</translation> <translation id="2663066752008346276">Mjanmarská klávesnica s rozložením Myansan</translation> <translation id="2664412712123763093">Umiestnenie súboru</translation> <translation id="2718540689505416944">Inštalovať aplikáciu pomocou systému Linux</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Vyprázdniť kôš</translation> <translation id="5163869187418756376">Zdieľanie zlyhalo. Skontrolujte pripojenie a skúste to neskôr.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> -<translation id="5170477580121653719">Voľné miesto v službe Disk Google: <ph name="SPACE_AVAILABLE" /></translation> <translation id="5177526793333269655">Zobrazenie miniatúr</translation> <translation id="5194713942430106590">Kliknutím zoradíte stĺpec vo vzostupnom poradí.</translation> <translation id="5211614973734216083">Faerská klávesnica</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">Lotyšská klávesnica</translation> <translation id="5489965683297092283">Filter <ph name="FILTER_NAME" /> je vypnutý.</translation> <translation id="5494920125229734069">Vybrať všetko</translation> +<translation id="5500104704744051184">Túto sieť budete môcť používať, až keď zadáte PUK</translation> <translation id="5500122897333236901">Islandčina</translation> <translation id="5508696409934741614">Bodky</translation> <translation id="5522908512596376669">Zoznam súborov sa zmenil na zobrazenie zoznamu.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044">Počet položiek: <ph name="NUMBER_OF_FILES" /></translation> <translation id="642282551015776456">Tento názov nie je možné použiť na pomenovanie súboru ani priečinka.</translation> <translation id="6423031066725912715">Vietnamská klávesnica s rozložením TCVN</translation> +<translation id="6430271654280079150">Zostáva vám jeden pokus.</translation> <translation id="6485131920355264772">Nepodarilo sa získať informácie o voľnom mieste</translation> <translation id="6495925982925244349"><ph name="NETWORK_INDEX" />. sieť z <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, sila signálu <ph name="SIGNAL_STRENGTH" /> ovládaná správcom, podrobnosti</translation> <translation id="649877868557234318">Rozbaľuje sa súbor <ph name="FILE_NAME" /> do priečinka <ph name="FOLDER_NAME" /></translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903">Synchronizujú sa položky (počet: <ph name="NUMBER_OF_FILES" />)...</translation> <translation id="8600173386174225982">Zoznam súborov sa zmenil na zobrazenie miniatúr.</translation> <translation id="8601932370724196034">Súbor obrázka Crostini</translation> +<translation id="8608515571837163082">Príliš veľakrát bol zadaný nesprávny PIN. Zadajte osemmiestny PUK od operátora.</translation> <translation id="8609695766746872526">Islandská klávesnica</translation> <translation id="863903787380594467">Nesprávny kód PIN. Zostáva vám tento počet pokusov: <ph name="RETRIES" />.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> – port</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb index 6db42f9..3b59ca9 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sl.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sl.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Deljenje mape s programom Parallels Desktop</translation> <translation id="1439919885608649279">Oseba z rožami</translation> <translation id="1471718551822868769">slovaščina</translation> -<translation id="1474339897586437869">Datoteka »<ph name="FILENAME" />« ni bila naložena. V Googlu Drive nimate dovolj razpoložljivega prostora.</translation> <translation id="1482884275703521657">finščina</translation> <translation id="148466539719134488">švicarska</translation> <translation id="1497522201463361063">Datoteke »<ph name="FILE_NAME" />« ni mogoče preimenovati. <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Varno</translation> <translation id="2638942478653899953">Google Drive ni dosegljiv. <ph name="BEGIN_LINK" />Odjavite se<ph name="END_LINK" /> in se znova prijavite.</translation> <translation id="2649120831653069427">Riba mavričarka</translation> +<translation id="2653059201992392941">Imate še toliko poskusov: <ph name="RETRIES" />.</translation> <translation id="2663066752008346276">burmanščina/mjanmarščina s tipkovnico za mjanmarščino</translation> <translation id="2664412712123763093">Mesto datoteke</translation> <translation id="2718540689505416944">Namestitev aplikacije z Linuxom</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Izprazni smetnjak</translation> <translation id="5163869187418756376">Souporaba ni uspela. Preverite povezavo in poskusite znova.</translation> <translation id="516592729076796170">Angleška tipkovnica Dvorak za programerje (ZDA)</translation> -<translation id="5170477580121653719">Preostali prostor v Google Driveu: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Pogled sličic</translation> <translation id="5194713942430106590">Kliknite, če želite razvrstiti elemente stolpca v naraščajočem vrstnem redu.</translation> <translation id="5211614973734216083">ferščina</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">latvijščina</translation> <translation id="5489965683297092283">Filter <ph name="FILTER_NAME" /> je izklopljen.</translation> <translation id="5494920125229734069">Izberi vse</translation> +<translation id="5500104704744051184">Tega omrežja ne bo mogoče uporabljati, dokler ne vnesete kode PUK.</translation> <translation id="5500122897333236901">islandščina</translation> <translation id="5508696409934741614">Pike</translation> <translation id="5522908512596376669">Seznam datotek je spremenjen na prikaz seznama.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044">Št. datotek: <ph name="NUMBER_OF_FILES" /></translation> <translation id="642282551015776456">Tega imena ne morete uporabiti kot ime za datoteko ali mapo</translation> <translation id="6423031066725912715">vietnamščina s tipkovnico TCVN</translation> +<translation id="6430271654280079150">Imate še 1 poskus.</translation> <translation id="6485131920355264772">Podatkov o prostoru ni bilo mogoče prenesti</translation> <translation id="6495925982925244349">Omrežje <ph name="NETWORK_INDEX" /> od <ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, moč signala je <ph name="SIGNAL_STRENGTH" /> %, upravlja ga vaš skrbnik, podrobnosti</translation> <translation id="649877868557234318">Razširjanje datoteke <ph name="FILE_NAME" /> v mapo <ph name="FOLDER_NAME" /></translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903">Sinhroniziranje datotek (<ph name="NUMBER_OF_FILES" />) ...</translation> <translation id="8600173386174225982">Seznam datotek je spremenjen na pogled sličic.</translation> <translation id="8601932370724196034">Slikovna datoteka za Crostini</translation> +<translation id="8608515571837163082">Prevečkrat ste vnesli napačno kodo PIN. Vnesite 8-mestno osebno kodo za odblokiranje (PUK), ki jo dobite od operaterja.</translation> <translation id="8609695766746872526">islandščina</translation> <translation id="863903787380594467">Napačna koda PIN. Imate še toliko poskusov: <ph name="RETRIES" />.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> – vrata</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sq.xtb b/ui/chromeos/translations/ui_chromeos_strings_sq.xtb index 3c335c9..a2e49c1 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sq.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sq.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Ndaje dosjen me Parallels Desktop</translation> <translation id="1439919885608649279">Person me lule</translation> <translation id="1471718551822868769">Sllovakisht</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" nuk u ngarkua. Nuk ka hapësirë të mjaftueshme në "Diskun e Google".</translation> <translation id="1482884275703521657">Finlandisht</translation> <translation id="148466539719134488">Zvicerane</translation> <translation id="1497522201463361063">Është i pamundur riemërtimi i "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">Boshatis "Koshin"</translation> <translation id="5163869187418756376">Ndarja dështoi. Kontrollo lidhjen dhe provo përsëri më vonë.</translation> <translation id="516592729076796170">Amerikane Dvorak për programues</translation> -<translation id="5170477580121653719">Hapësira e mbetur në "Diskun e Google": <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Pamje miniaturë</translation> <translation id="5194713942430106590">Kliko për të renditur kolonën në rend ngjitës.</translation> <translation id="5211614973734216083">Faroisht</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb index 2830b20..73e1502 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sr-Latn.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Delite direktorijum sa Parallels Desktop-om</translation> <translation id="1439919885608649279">Osoba sa cvećem</translation> <translation id="1471718551822868769">slovački</translation> -<translation id="1474339897586437869">Datoteka „<ph name="FILENAME" />“ nije otpremljena. Nije bilo dovoljno slobodnog mesta na Google disku.</translation> <translation id="1482884275703521657">finski</translation> <translation id="148466539719134488">švajcarska</translation> <translation id="1497522201463361063">Nije moguće preimenovati datoteku „<ph name="FILE_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">Isprazni Otpad</translation> <translation id="5163869187418756376">Deljenje nije uspelo. Proverite vezu i pokušajte ponovo kasnije.</translation> <translation id="516592729076796170">Američka Dvorak tastatura za programere</translation> -<translation id="5170477580121653719">Preostali prostor na Google disku: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Prikaz sličica</translation> <translation id="5194713942430106590">Kliknite da biste sortirali stavke u koloni po rastućem redosledu.</translation> <translation id="5211614973734216083">farski</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb index b3720ea59..277432a 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sr.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Делите директоријум са Parallels Desktop-ом</translation> <translation id="1439919885608649279">Особа са цвећем</translation> <translation id="1471718551822868769">словачки</translation> -<translation id="1474339897586437869">Датотека „<ph name="FILENAME" />“ није отпремљена. Није било довољно слободног места на Google диску.</translation> <translation id="1482884275703521657">фински</translation> <translation id="148466539719134488">швајцарска</translation> <translation id="1497522201463361063">Није могуће преименовати датотеку „<ph name="FILE_NAME" />“. <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">Испразни Отпад</translation> <translation id="5163869187418756376">Дељење није успело. Проверите везу и покушајте поново касније.</translation> <translation id="516592729076796170">Америчка Дворак тастатура за програмере</translation> -<translation id="5170477580121653719">Преостали простор на Google диску: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Приказ сличица</translation> <translation id="5194713942430106590">Кликните да бисте сортирали ставке у колони по растућем редоследу.</translation> <translation id="5211614973734216083">фарски</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb index 84f9a78..4543b54 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sv.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sv.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Dela mappen med Parallels Desktop</translation> <translation id="1439919885608649279">Person med blommor</translation> <translation id="1471718551822868769">slovakiska</translation> -<translation id="1474339897586437869"><ph name="FILENAME" /> laddades inte upp. Det fanns inte tillräckligt mycket ledigt utrymme på Google Drive.</translation> <translation id="1482884275703521657">finska</translation> <translation id="148466539719134488">Schweiziska</translation> <translation id="1497522201463361063">Det gick inte att byta namn på <ph name="FILE_NAME" />. <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">Töm papperskorgen</translation> <translation id="5163869187418756376">Delningen misslyckades. Kontrollera anslutningen och försök igen senare.</translation> <translation id="516592729076796170">Dvorak för programmerare i USA</translation> -<translation id="5170477580121653719">Lagringsutrymme som finns kvar i Google Drive: <ph name="SPACE_AVAILABLE" /> .</translation> <translation id="5177526793333269655">Miniatyrvy</translation> <translation id="5194713942430106590">Klicka här om kolumnen ska sorteras i stigande ordning.</translation> <translation id="5211614973734216083">färöiska</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb index 877c51db..795dbd9 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_sw.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_sw.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Shiriki folda na Parallels Desktop</translation> <translation id="1439919885608649279">Mtu aliye na maua</translation> <translation id="1471718551822868769">Kislovakia</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" haikupakiwa. Hakuna nafasi ya kutosha katika Hifadhi yako ya Google.</translation> <translation id="1482884275703521657">Kifini</translation> <translation id="148466539719134488">Kiswisi</translation> <translation id="1497522201463361063">Haiwezi kulipa jina jipya "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">Futa Kila Kitu Kwenye Tupio</translation> <translation id="5163869187418756376">Kushiriki kumeshindwa. Angalia muunganisho wako na ujaribu tena baadaye.</translation> <translation id="516592729076796170">Kibodi ya Programmer Dvorak, Marekani</translation> -<translation id="5170477580121653719">Nafasi iliyosalia ya Hifadhi ya Google: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Mwonekano wa vijipicha</translation> <translation id="5194713942430106590">Bofya ili upange safu wima katika mpangilio wa kupanda.</translation> <translation id="5211614973734216083">Kifaroe</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb index c2d1c94..423dfb4 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ta.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ta.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Parallels Desktop மூலம் ஃபோல்டரைப் பகிருங்கள்</translation> <translation id="1439919885608649279">பூக்களுடன் இருக்கும் நபர்</translation> <translation id="1471718551822868769">ஸ்லோவாக்</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" ஏற்றப்படவில்லை. உங்கள் Google இயக்ககத்தில் போதுமான காலியிடம் இல்லை.</translation> <translation id="1482884275703521657">ஃபின்னிஷ்</translation> <translation id="148466539719134488">சுவிஸ்</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" க்கு மறுபெயரிட முடியவில்லை. <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">பாதுகாக்கப்பட்ட வைஃபை நெட்வொர்க்</translation> <translation id="2638942478653899953">Google இயக்ககத்தை அடைய முடியவில்லை. <ph name="BEGIN_LINK" />வெளியேறி<ph name="END_LINK" /> திரும்பவும் உள்நுழையவும்.</translation> <translation id="2649120831653069427">ரெய்ன்போஃபிஷ்</translation> +<translation id="2653059201992392941"><ph name="RETRIES" /> வாய்ப்புகள் மீதமுள்ளன.</translation> <translation id="2663066752008346276">பர்மீஸ்/மியான்மர் - மியான்சன் கீபோர்டு</translation> <translation id="2664412712123763093">ஃபைலின் இடம்</translation> <translation id="2718540689505416944">Linux ஆப்ஸை நிறுவுதல்</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">‘நீக்கியவையில்’ உள்ளவற்றை நீக்கு</translation> <translation id="5163869187418756376">பகிர்வு தோல்வியடைந்தது. உங்கள் இணைப்பைச் சரிபார்த்து, பிறகு மீண்டும் முயற்சிக்கவும்.</translation> <translation id="516592729076796170">US புரோகிராமர் டிவோரக்</translation> -<translation id="5170477580121653719">Google இயக்ககத்தில் காலியாக உள்ள இடம்: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">சிறுபட காட்சி</translation> <translation id="5194713942430106590">நெடுவரிசையை ஏறுவரிசைப்படுத்த கிளிக் செய்யவும்.</translation> <translation id="5211614973734216083">ஃபாரோசே</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">லாட்வியன்</translation> <translation id="5489965683297092283"><ph name="FILTER_NAME" /> வடிப்பான் முடக்கப்பட்டுள்ளது.</translation> <translation id="5494920125229734069">எல்லாவற்றையும் தேர்ந்தெடு</translation> +<translation id="5500104704744051184">PUKவை வழங்கினால் மட்டுமே இந்த நெட்வொர்க்கைப் பயன்படுத்த முடியும்</translation> <translation id="5500122897333236901">ஐஸ்லாண்டிக்</translation> <translation id="5508696409934741614">புள்ளிகள்</translation> <translation id="5522908512596376669">ஃபைல் பட்டியல் 'பட்டியல் காட்சிக்கு' மாறியுள்ளது.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> ஃபைல்கள் </translation> <translation id="642282551015776456">ஃபோல்டர் பெயரின் ஃபைலாக இந்தப் பெயரைப் பயன்பட முடியாமல் போகக்கூடும்</translation> <translation id="6423031066725912715">வியட்நாமிஸ் - TCVN கீபோர்டு</translation> +<translation id="6430271654280079150">1 வாய்ப்பு மீதமுள்ளது.</translation> <translation id="6485131920355264772">இடத் தகவலை மீட்டெடுப்பதில் தோல்வி</translation> <translation id="6495925982925244349">நெட்வொர்க்: <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, சிக்னல் வலிமை: <ph name="SIGNAL_STRENGTH" />%, உங்கள் நிர்வாகி நிர்வகிக்கிறார், விவரங்கள்</translation> <translation id="649877868557234318"><ph name="FILE_NAME" /> ஃபைல் <ph name="FOLDER_NAME" /> ஃபோல்டருக்குப் பிரித்தெடுக்கப்படுகிறது</translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> உருப்படிகளை ஒத்திசைக்கிறது...</translation> <translation id="8600173386174225982">ஃபைல் பட்டியல் சிறுபடக் காட்சிக்கு மாறியுள்ளது.</translation> <translation id="8601932370724196034">Crostini பட ஃபைல்</translation> +<translation id="8608515571837163082">பலமுறை தவறான பின்னை (PIN) வழங்கிவிட்டீர்கள். மொபைல் நெட்வொர்க் நிறுவனம் வழங்கிய, தடுப்பை நீக்குவதற்கான 8 இலக்கத் தனிப்பட்ட குறியீட்டை (PUK) வழங்கவும்.</translation> <translation id="8609695766746872526">ஐஸ்லாண்டிக்</translation> <translation id="863903787380594467">தவறான பின். <ph name="RETRIES" /> முயற்சிகள் மீதமுள்ளன.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - போர்ட்</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_te.xtb b/ui/chromeos/translations/ui_chromeos_strings_te.xtb index 8cc51ec..4eeef38f2 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_te.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_te.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Parallels Desktopతో ఫోల్డర్ను షేర్ చేయండి</translation> <translation id="1439919885608649279">పూలను పట్టుకున్న వ్యక్తి</translation> <translation id="1471718551822868769">స్లోవాక్</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" అప్లోడ్ కాలేదు. మీ Google Driveలో తగినంత ఖాళీ స్థలం లేదు.</translation> <translation id="1482884275703521657">ఫిన్నిష్</translation> <translation id="148466539719134488">స్విస్</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" పేరు మార్చడం సాధ్యపడలేదు. <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">సురక్షితమైంది</translation> <translation id="2638942478653899953">Google Driveను చేరుకోవడం సాధ్యపడలేదు. దయచేసి <ph name="BEGIN_LINK" />లాగ్ అవుట్<ph name="END_LINK" /> చేసి, తిరిగి లాగిన్ చేయండి.</translation> <translation id="2649120831653069427">రెయిన్బోఫిష్</translation> +<translation id="2653059201992392941">మీకు <ph name="RETRIES" /> ప్రయత్నాలు మిగిలి ఉన్నాయి.</translation> <translation id="2663066752008346276">మయన్సన్ కీబోర్డ్తో బర్మీస్/మయన్మార్</translation> <translation id="2664412712123763093">ఫైల్ లొకేషన్</translation> <translation id="2718540689505416944">Linuxతో యాప్ను ఇన్స్టాల్ చేయండి</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">ట్రాష్ను ఖాళీ చేయి</translation> <translation id="5163869187418756376">షేర్ చేయడం విఫలమైంది. మీ కనెక్షన్ను తనిఖీ చేసి, తర్వాత మళ్లీ ప్రయత్నించండి.</translation> <translation id="516592729076796170">US ప్రోగ్రామర్ డ్వోరక్</translation> -<translation id="5170477580121653719">Google Driveలో మిగిలి ఉన్న ఖాళీ: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">సూక్ష్మచిత్ర వీక్షణ</translation> <translation id="5194713942430106590">నిలువు వరుసను ఆరోహణ క్రమంలో వర్గీకరించడానికి క్లిక్ చేయండి.</translation> <translation id="5211614973734216083">ఫారోస్</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">లాత్వియన్</translation> <translation id="5489965683297092283"><ph name="FILTER_NAME" /> ఫిల్టర్ ఆఫ్లో ఉంది.</translation> <translation id="5494920125229734069">అన్నీ ఎంచుకోండి</translation> +<translation id="5500104704744051184">మీరు PUKను ఎంటర్ చేసే వరకు మీరు ఈ నెట్వర్క్ను ఉపయోగించలేరు</translation> <translation id="5500122897333236901">ఐస్లాండిక్</translation> <translation id="5508696409934741614">చుక్కలు</translation> <translation id="5522908512596376669">ఫైల్ లిస్ట్, "లిస్ట్ వీక్షణ"కు మార్చబడింది.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> అంశాలు</translation> <translation id="642282551015776456">ఈ పేరును ఫైల్ యొక్క ఫోల్డర్ పేరుగా ఉపయోగించలేము.</translation> <translation id="6423031066725912715">TCVN కీబోర్డ్తో వియత్నామీస్</translation> +<translation id="6430271654280079150">మీకు 1 ప్రయత్నం మిగిలి ఉంది.</translation> <translation id="6485131920355264772">ఖాళీ సమాచారాన్ని తిరిగి పొందడం విఫలమైంది</translation> <translation id="6495925982925244349"><ph name="NETWORK_COUNT" />లో <ph name="NETWORK_INDEX" /> నెట్వర్క్, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, సిగ్నల్ సామర్థ్యం <ph name="SIGNAL_STRENGTH" />%, మీ అడ్మినిస్ట్రేటర్ ద్వారా నిర్వహించబడుతోంది, వివరాలు</translation> <translation id="649877868557234318"><ph name="FILE_NAME" /> <ph name="FOLDER_NAME" />కు సంగ్రహించబడుతోంది</translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> అంశాలను సింక్ చేస్తోంది...</translation> <translation id="8600173386174225982">ఫైల్ లిస్ట్, "సూక్ష్మచిత్ర వీక్షణ"కు మార్చబడింది.</translation> <translation id="8601932370724196034">Crostini చిత్రం ఫైల్</translation> +<translation id="8608515571837163082">చాలా ఎక్కువ సార్లు తప్పు PIN ఎంటర్ చేయబడింది. క్యారియర్ అందించిన 8-అంకెల వ్యక్తిగత అన్బ్లాకింగ్ కీ (PUK)ని ఎంటర్ చేయండి.</translation> <translation id="8609695766746872526">ఐస్లాండిక్</translation> <translation id="863903787380594467">పిన్ తప్పు. మీకు <ph name="RETRIES" /> ప్రయత్నాలు మిగిలి ఉన్నాయి.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - పోర్ట్</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_th.xtb b/ui/chromeos/translations/ui_chromeos_strings_th.xtb index deb93f1..3811ec9f 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_th.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_th.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">แชร์โฟลเดอร์กับ Parallels Desktop</translation> <translation id="1439919885608649279">คนกับดอกไม้</translation> <translation id="1471718551822868769">สโลวัก</translation> -<translation id="1474339897586437869">ไม่ได้อัปโหลด "<ph name="FILENAME" />" มีพื้นที่ว่างไม่เพียงพอใน Google ไดรฟ์ของคุณ</translation> <translation id="1482884275703521657">ฟินแลนด์</translation> <translation id="148466539719134488">สวิส</translation> <translation id="1497522201463361063">ไม่สามารถเปลี่ยนชื่อ "<ph name="FILE_NAME" />" <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">ล้างถังขยะ</translation> <translation id="5163869187418756376">การแชร์ล้มเหลว ตรวจสอบการเชื่อมต่อของคุณและพยายามอีกครั้งในภายหลัง</translation> <translation id="516592729076796170">ดีโวรักโปรแกรมเมอร์สหรัฐอเมริกา</translation> -<translation id="5170477580121653719">พื้นที่ของ Google ไดรฟ์ที่ยังเหลือ: <ph name="SPACE_AVAILABLE" /></translation> <translation id="5177526793333269655">มุมมองรูปภาพขนาดย่อ</translation> <translation id="5194713942430106590">คลิกเพื่อจัดเรียงคอลัมน์จากน้อยไปหามาก</translation> <translation id="5211614973734216083">แฟโร</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb index 0d47c0e..2001345 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_tr.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_tr.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Parallels Desktop ile klasör paylaşın</translation> <translation id="1439919885608649279">Çiçek tutan bir kişi</translation> <translation id="1471718551822868769">Slovakça</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" yüklenmedi. Google Drive'ınızda yeterli boş alan yok.</translation> <translation id="1482884275703521657">Fince</translation> <translation id="148466539719134488">İsviçre dili</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" yeniden adlandırılamıyor. <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">Çöp Kutusunu Boşalt</translation> <translation id="5163869187418756376">Paylaşılamadı. Bağlantınızı kontrol edin ve daha sonra tekrar deneyin.</translation> <translation id="516592729076796170">ABD Programcı Dvorak</translation> -<translation id="5170477580121653719">Kalan Google Drive alanı: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Küçük resim görünümü</translation> <translation id="5194713942430106590">Sütunu artan düzende sıralamak için tıklayın.</translation> <translation id="5211614973734216083">Faroe dili</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_uk.xtb b/ui/chromeos/translations/ui_chromeos_strings_uk.xtb index 91c38c4..2fbdb6c 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_uk.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_uk.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Надати додатку Parallels Desktop доступ до папки</translation> <translation id="1439919885608649279">Людина з квітами</translation> <translation id="1471718551822868769">Словацька</translation> -<translation id="1474339897586437869">Файл "<ph name="FILENAME" />" не додано. Замало вільного місця на Google Диску.</translation> <translation id="1482884275703521657">Фінська</translation> <translation id="148466539719134488">Швейцарська</translation> <translation id="1497522201463361063">Не вдається перейменувати "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">Очистити кошик</translation> <translation id="5163869187418756376">Помилка надання доступу. Перевірте з’єднання та повторіть спробу пізніше.</translation> <translation id="516592729076796170">Розкладка Дворака для програмістів (США)</translation> -<translation id="5170477580121653719">Вільне місце на Диску Google: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Перегляд ескізів</translation> <translation id="5194713942430106590">Натисніть, щоб відсортувати стовпці в порядку зростання.</translation> <translation id="5211614973734216083">Фарерська</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb index 2efbd06..a7ce5172 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_ur.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_ur.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Parallels ڈیسک ٹاپ کے ساتھ فولڈر کا اشتراک کریں</translation> <translation id="1439919885608649279">پھول لیے ہوئے شخص</translation> <translation id="1471718551822868769">سلاواکی</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" کو اپ لوڈ نہیں کیا گیا۔ آپ کے Google Drive میں کافی خالی جگہ نہیں ہے۔</translation> <translation id="1482884275703521657">فنّش</translation> <translation id="148466539719134488">سوئس</translation> <translation id="1497522201463361063">"<ph name="FILE_NAME" />" کا نام بدلنے سے قاصر۔ <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">محفوظ ہے</translation> <translation id="2638942478653899953">Google Drive تک رسائی حاصل نہیں ہو سکی۔ براہ کرم <ph name="BEGIN_LINK" />لاگ آؤٹ کریں<ph name="END_LINK" /> اور دوبارہ لاگ ان کریں۔</translation> <translation id="2649120831653069427">رینبو فش</translation> +<translation id="2653059201992392941">آپ کے پاس <ph name="RETRIES" /> کوششیں بچی ہیں۔</translation> <translation id="2663066752008346276">میانسان کی بورڈ کے ساتھ برمی/میانمار</translation> <translation id="2664412712123763093">فائل کا مقام</translation> <translation id="2718540689505416944">Linux والی ایپ انسٹال کریں</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">کوڑے دان خالی کریں</translation> <translation id="5163869187418756376">اشتراک ناکام ہو گیا۔ اپنا کنکشن چیک کریں او بعد میں دوبارہ کوشش کریں۔</translation> <translation id="516592729076796170">US پروگرامر ڈووراک</translation> -<translation id="5170477580121653719">Google Drive کی باقی جگہ: <ph name="SPACE_AVAILABLE" />۔</translation> <translation id="5177526793333269655">تھمب نیل کا منظر</translation> <translation id="5194713942430106590">صعودی ترتیب میں کالم کو ترتیب دینے کے لیے کلک کریں۔</translation> <translation id="5211614973734216083">فروئز</translation> @@ -529,6 +528,7 @@ <translation id="5489067830765222292">لیٹویائی</translation> <translation id="5489965683297092283"><ph name="FILTER_NAME" /> فلٹر آف ہے۔</translation> <translation id="5494920125229734069">سبھی کو منتخب کریں</translation> +<translation id="5500104704744051184">جب تک آپ PUK درج نہیں کرتے ہیں تب تک آپ اس نیٹ ورک کا استعمال نہیں کر سکیں گے</translation> <translation id="5500122897333236901">آئس لینڈک</translation> <translation id="5508696409934741614">نقطے</translation> <translation id="5522908512596376669">فائل کی فہرست کو فہرست منظر پر تبدیل کر دیا گيا ہے۔</translation> @@ -634,6 +634,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> آئٹمز</translation> <translation id="642282551015776456">یہ نام کسی فائل یا فولڈر نام کے بطور استعمال نہیں کیا جا سکتا ہے</translation> <translation id="6423031066725912715">TCVN کی بورڈ کے ساتھ ویتنامی</translation> +<translation id="6430271654280079150">آپ کے پاس 1 کوشش بچی ہے۔</translation> <translation id="6485131920355264772">اسپیس کی معلومات کی بازيابی میں ناکام ہوگیا</translation> <translation id="6495925982925244349"><ph name="NETWORK_COUNT" /> میں سے <ph name="NETWORK_INDEX" /> نیٹ ورک، <ph name="NETWORK_NAME" />، <ph name="SECURITY_STATUS" />، <ph name="CONNECTION_STATUS" />، سگنل کی مضبوطی <ph name="SIGNAL_STRENGTH" />%، آپ کے منتظم کے زیر انتظام ہے، تفصیلات</translation> <translation id="649877868557234318"><ph name="FILE_NAME" /> کو <ph name="FOLDER_NAME" /> میں اخذ کیا جا رہا ہے</translation> @@ -900,6 +901,7 @@ <translation id="8579285237314169903"><ph name="NUMBER_OF_FILES" /> آئٹمز کی مطابقت پذیری ہو رہی ہے…</translation> <translation id="8600173386174225982">فائل فہرست کو تھمب نیل منظر میں تبدیل کر دیا گیا ہے۔</translation> <translation id="8601932370724196034">Crostini تصویر فائل</translation> +<translation id="8608515571837163082">ایک غلط PIN کئی مرتبہ درج کیا گیا۔ کیرئیر کے ذریعے فراہم کردہ 8 ہندسوں کی غیر مسدود کرنے کی ذاتی کلید (PUK) درج کریں۔</translation> <translation id="8609695766746872526">آئس لینڈک</translation> <translation id="863903787380594467">غلط PIN۔ آپ کے پاس <ph name="RETRIES" /> کوششیں بچی ہیں۔</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - پورٹ</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_uz.xtb b/ui/chromeos/translations/ui_chromeos_strings_uz.xtb index 1cb693e..6fc3722 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_uz.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_uz.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Jildni Parallels Desktopga ulashish</translation> <translation id="1439919885608649279">Gullari bor odam</translation> <translation id="1471718551822868769">Slovak</translation> -<translation id="1474339897586437869"><ph name="FILENAME" /> faylini yuklab bo‘lmadi. Google Drive omborida yetarli bo‘sh joy yo‘q.</translation> <translation id="1482884275703521657">Fin</translation> <translation id="148466539719134488">Shveytsariya</translation> <translation id="1497522201463361063">“<ph name="FILE_NAME" />” faylini qayta nomlab bo‘lmadi. <ph name="ERROR_MESSAGE" /></translation> @@ -489,7 +488,6 @@ <translation id="5159560892333415631">Chiqitdonni boʻshatish</translation> <translation id="5163869187418756376">Ulashish amalga oshmadi. Ulanishni tekshirib ko‘rib, qayta urining.</translation> <translation id="516592729076796170">Dasturchilar uchun Dvorak klaviaturasi</translation> -<translation id="5170477580121653719">Google Diskdagi bo‘sh joy hajmi: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Kichiklashtirilgan rasmlar</translation> <translation id="5194713942430106590">Ustundagi fayllar roʻyxatini oʻsish boʻyicha tartiblash.</translation> <translation id="5211614973734216083">Farer</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb index de14155d..a89a4e9 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_vi.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_vi.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Chia sẻ thư mục với ứng dụng Parallels Desktop</translation> <translation id="1439919885608649279">Người với hoa</translation> <translation id="1471718551822868769">Tiếng Slovak</translation> -<translation id="1474339897586437869">"<ph name="FILENAME" />" không được tải lên. Không có đủ dung lượng trống trong Google Drive của bạn.</translation> <translation id="1482884275703521657">Tiếng Phần Lan</translation> <translation id="148466539719134488">Tiếng Thụy Sĩ</translation> <translation id="1497522201463361063">Không thể đổi tên "<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">Đã bảo mật</translation> <translation id="2638942478653899953">Không thể truy cập Google Drive. Vui lòng <ph name="BEGIN_LINK" />đăng xuất<ph name="END_LINK" /> và đăng nhập lại.</translation> <translation id="2649120831653069427">Cá cầu vồng</translation> +<translation id="2653059201992392941">Bạn còn <ph name="RETRIES" /> lần nhập.</translation> <translation id="2663066752008346276">Tiếng Miến Điện/Myanmar bằng bàn phím Myansan</translation> <translation id="2664412712123763093">Vị trí tệp</translation> <translation id="2718540689505416944">Cài đặt ứng dụng Linux</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">Dọn sạch thùng rác</translation> <translation id="5163869187418756376">Chia sẻ không thành công. Hãy kiểm tra kết nối và thử lại sau.</translation> <translation id="516592729076796170">US Programmer Dvorak</translation> -<translation id="5170477580121653719">Dung lượng Google Drive còn lại: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Chế độ xem hình thu nhỏ</translation> <translation id="5194713942430106590">Nhấp để sắp xếp cột theo thứ tự tăng dần.</translation> <translation id="5211614973734216083">Tiếng Faroe</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">Tiếng Latvia</translation> <translation id="5489965683297092283">Đang tắt bộ lọc <ph name="FILTER_NAME" />.</translation> <translation id="5494920125229734069">Chọn tất cả</translation> +<translation id="5500104704744051184">Bạn chỉ có thể sử dụng mạng này khi đã nhập PUK</translation> <translation id="5500122897333236901">Tiếng Ai-xơ-len</translation> <translation id="5508696409934741614">Dấu chấm</translation> <translation id="5522908512596376669">Danh sách tệp đã thay đổi thành chế độ xem danh sách.</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> mục</translation> <translation id="642282551015776456">Không thể sử dụng tên này làm tên tệp trong thư mục</translation> <translation id="6423031066725912715">Tiếng Việt bằng bàn phím TCVN</translation> +<translation id="6430271654280079150">Bạn còn 1 lần nhập.</translation> <translation id="6485131920355264772">Không thể truy xuất thông tin dung lượng</translation> <translation id="6495925982925244349">Mạng <ph name="NETWORK_INDEX" />/<ph name="NETWORK_COUNT" />, <ph name="NETWORK_NAME" />, <ph name="SECURITY_STATUS" />, <ph name="CONNECTION_STATUS" />, Cường độ tín hiệu <ph name="SIGNAL_STRENGTH" />%, Do quản trị viên của bạn quản lý, Thông tin chi tiết</translation> <translation id="649877868557234318">Đang giải nén <ph name="FILE_NAME" /> vào <ph name="FOLDER_NAME" /></translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903">Đang đồng bộ hóa <ph name="NUMBER_OF_FILES" /> mục...</translation> <translation id="8600173386174225982">Danh sách tệp đã thay đổi thành chế độ xem hình thu nhỏ.</translation> <translation id="8601932370724196034">Tệp hình ảnh Crostini</translation> +<translation id="8608515571837163082">Bạn đã nhập sai mã PIN quá nhiều lần. Nhập Khoá mở khoá cá nhân (PUK) gồm 8 chữ số do nhà mạng cung cấp.</translation> <translation id="8609695766746872526">Tiếng Iceland</translation> <translation id="863903787380594467">Mã PIN không chính xác. Bạn còn <ph name="RETRIES" /> lần nhập.</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> – Cổng</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb index b94a9d6..4387ffd 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_zh-CN.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">与 Parallels Desktop 共享文件夹</translation> <translation id="1439919885608649279">一个人捧着鲜花</translation> <translation id="1471718551822868769">斯洛伐克语</translation> -<translation id="1474339897586437869">未上传“<ph name="FILENAME" />”,因为您的 Google 云端硬盘没有足够的可用空间。</translation> <translation id="1482884275703521657">芬兰语</translation> <translation id="148466539719134488">瑞士语</translation> <translation id="1497522201463361063">无法重命名“<ph name="FILE_NAME" />”。<ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">受保护</translation> <translation id="2638942478653899953">无法访问 Google 云端硬盘。请先<ph name="BEGIN_LINK" />退出<ph name="END_LINK" />,然后再重新登录。</translation> <translation id="2649120831653069427">彩虹鱼</translation> +<translation id="2653059201992392941">您还有 <ph name="RETRIES" /> 次尝试机会。</translation> <translation id="2663066752008346276">缅甸语 Myansan 键盘</translation> <translation id="2664412712123763093">文件位置</translation> <translation id="2718540689505416944">通过 Linux 安装应用</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">清空回收站</translation> <translation id="5163869187418756376">共享失败。请检查连接是否正常,然后重试。</translation> <translation id="516592729076796170">美式 Programmer Dvorak 键盘</translation> -<translation id="5170477580121653719">Google 云端硬盘可用存储空间:<ph name="SPACE_AVAILABLE" />。</translation> <translation id="5177526793333269655">缩略图视图</translation> <translation id="5194713942430106590">点击即可按升序对此列排序。</translation> <translation id="5211614973734216083">法罗语</translation> @@ -525,6 +524,7 @@ <translation id="5489067830765222292">拉脱维亚语</translation> <translation id="5489965683297092283"><ph name="FILTER_NAME" />过滤器已关闭。</translation> <translation id="5494920125229734069">全选</translation> +<translation id="5500104704744051184">在输入正确的 PUK 之前,您将无法使用此网络</translation> <translation id="5500122897333236901">冰岛语</translation> <translation id="5508696409934741614">圆点</translation> <translation id="5522908512596376669">文件列表已切换到列表视图。</translation> @@ -630,6 +630,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> 项内容</translation> <translation id="642282551015776456">该名称可能无法用作文件名或文件夹名</translation> <translation id="6423031066725912715">越南语 TCVN 键盘</translation> +<translation id="6430271654280079150">您还有 1 次尝试机会。</translation> <translation id="6485131920355264772">检索存储空间信息失败</translation> <translation id="6495925982925244349">第 <ph name="NETWORK_INDEX" /> 个网络(共 <ph name="NETWORK_COUNT" /> 个),<ph name="NETWORK_NAME" />,<ph name="SECURITY_STATUS" />,<ph name="CONNECTION_STATUS" />,信号强度为 <ph name="SIGNAL_STRENGTH" />%,由您的管理员管理,详细信息</translation> <translation id="649877868557234318">正在将文件“<ph name="FILE_NAME" />”提取到文件夹“<ph name="FOLDER_NAME" />”</translation> @@ -896,6 +897,7 @@ <translation id="8579285237314169903">正在同步 <ph name="NUMBER_OF_FILES" /> 个文件…</translation> <translation id="8600173386174225982">文件列表已切换到缩略图视图。</translation> <translation id="8601932370724196034">Crostini 映像文件</translation> +<translation id="8608515571837163082">您输错 PIN 码的次数过多。请输入运营商提供的 8 位数个人解锁密钥 (PUK)。</translation> <translation id="8609695766746872526">冰岛语</translation> <translation id="863903787380594467">PIN 码不正确。您还有 <ph name="RETRIES" /> 次尝试机会。</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - 端口</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb index f5f216c..79f5ede 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_zh-HK.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">與 Parallels Desktop 共用資料夾</translation> <translation id="1439919885608649279">拿著花的人</translation> <translation id="1471718551822868769">斯洛伐克文</translation> -<translation id="1474339897586437869">尚未上載 <ph name="FILENAME" />。「Google 雲端硬碟」沒有足夠空間。</translation> <translation id="1482884275703521657">芬蘭文</translation> <translation id="148466539719134488">瑞士文</translation> <translation id="1497522201463361063">無法重新命名「<ph name="FILE_NAME" />」。<ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">已受保護</translation> <translation id="2638942478653899953">無法連上「Google 雲端硬碟」。請<ph name="BEGIN_LINK" />登出<ph name="END_LINK" />並重新登入帳戶。</translation> <translation id="2649120831653069427">彩虹魚</translation> +<translation id="2653059201992392941">你還有 <ph name="RETRIES" /> 次重試機會。</translation> <translation id="2663066752008346276">緬甸文,Myansan 鍵盤</translation> <translation id="2664412712123763093">檔案位置</translation> <translation id="2718540689505416944">透過 Linux 安裝應用程式</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">清空垃圾桶</translation> <translation id="5163869187418756376">共用失敗。請檢查連線狀態,然後再試一次。</translation> <translation id="516592729076796170">Programmer Dvorak 美式</translation> -<translation id="5170477580121653719">「Google 雲端硬碟」剩餘空間:<ph name="SPACE_AVAILABLE" />。</translation> <translation id="5177526793333269655">縮圖檢視</translation> <translation id="5194713942430106590">按一下即可遞增排序欄位。</translation> <translation id="5211614973734216083">法羅文</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">拉脫維亞文</translation> <translation id="5489965683297092283"><ph name="FILTER_NAME" />篩選器閂咗。</translation> <translation id="5494920125229734069">全部選取</translation> +<translation id="5500104704744051184">你必須先輸入 PUK,才能使用這個網路</translation> <translation id="5500122897333236901">冰島文</translation> <translation id="5508696409934741614">圓點</translation> <translation id="5522908512596376669">檔案清單改咗做清單檢視模式。</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> 個項目</translation> <translation id="642282551015776456">無法使用這個名稱作為檔案名稱或資料夾名稱</translation> <translation id="6423031066725912715">越南文 (TCVN 鍵盤)</translation> +<translation id="6430271654280079150">你只剩 1 次重試機會。</translation> <translation id="6485131920355264772">無法擷取空間資料</translation> <translation id="6495925982925244349">第 <ph name="NETWORK_INDEX" /> 個網絡,一共有 <ph name="NETWORK_COUNT" /> 個網絡,<ph name="NETWORK_NAME" />,<ph name="SECURITY_STATUS" />,<ph name="CONNECTION_STATUS" />,訊號強度係 <ph name="SIGNAL_STRENGTH" />%,由管理員管理,詳情</translation> <translation id="649877868557234318">正在將「<ph name="FILE_NAME" />」解壓縮至「<ph name="FOLDER_NAME" />」</translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903">正在同步處理 <ph name="NUMBER_OF_FILES" /> 個項目…</translation> <translation id="8600173386174225982">檔案清單改咗做縮圖檢視模式。</translation> <translation id="8601932370724196034">Crostini 圖像檔案</translation> +<translation id="8608515571837163082">輸入錯誤 PIN 碼的次數太多。輸入電信業者提供的 8 位數個人解鎖金鑰 (PUK)。</translation> <translation id="8609695766746872526">冰島文</translation> <translation id="863903787380594467">PIN 不正確。您還可嘗試 <ph name="RETRIES" /> 次。</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - 連接埠</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb index 95a648e..4c11b25 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_zh-TW.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">與 Parallels Desktop 共用資料夾</translation> <translation id="1439919885608649279">拿花的人</translation> <translation id="1471718551822868769">斯洛伐克文</translation> -<translation id="1474339897586437869">您的 Google 雲端硬碟的可用空間不足,因此無法上傳「<ph name="FILENAME" />」。</translation> <translation id="1482884275703521657">芬蘭文</translation> <translation id="148466539719134488">瑞士文</translation> <translation id="1497522201463361063">無法重新命名「<ph name="FILE_NAME" />」。<ph name="ERROR_MESSAGE" /></translation> @@ -194,6 +193,7 @@ <translation id="2621713457727696555">已受到安全保護</translation> <translation id="2638942478653899953">無法連上 Google 雲端硬碟。請<ph name="BEGIN_LINK" />登出<ph name="END_LINK" />並重新登入帳戶。</translation> <translation id="2649120831653069427">彩虹魚</translation> +<translation id="2653059201992392941">你還有 <ph name="RETRIES" /> 次重試機會。</translation> <translation id="2663066752008346276">緬甸文搭配 Myansan 鍵盤</translation> <translation id="2664412712123763093">檔案位置</translation> <translation id="2718540689505416944">透過 Linux 安裝應用程式</translation> @@ -488,7 +488,6 @@ <translation id="5159560892333415631">清空垃圾桶</translation> <translation id="5163869187418756376">共用失敗。請檢查連線狀態,然後再試一次。</translation> <translation id="516592729076796170">Programmer Dvorak 美式配置</translation> -<translation id="5170477580121653719">Google 雲端硬碟剩餘空間:<ph name="SPACE_AVAILABLE" />。</translation> <translation id="5177526793333269655">縮圖檢視</translation> <translation id="5194713942430106590">按一下即可依遞增順序排列資料欄。</translation> <translation id="5211614973734216083">法羅文</translation> @@ -530,6 +529,7 @@ <translation id="5489067830765222292">拉脫維亞文</translation> <translation id="5489965683297092283"><ph name="FILTER_NAME" /> 篩選器已關閉。</translation> <translation id="5494920125229734069">全選</translation> +<translation id="5500104704744051184">你必須先輸入 PUK,才能使用這個網路</translation> <translation id="5500122897333236901">冰島文</translation> <translation id="5508696409934741614">圓點</translation> <translation id="5522908512596376669">檔案清單已變更為清單檢視模式。</translation> @@ -635,6 +635,7 @@ <translation id="6395575651121294044"><ph name="NUMBER_OF_FILES" /> 個項目</translation> <translation id="642282551015776456">無法使用這個名稱做為檔案名稱或資料夾名稱</translation> <translation id="6423031066725912715">越南文搭配 TCVN 鍵盤</translation> +<translation id="6430271654280079150">你只剩 1 次重試機會。</translation> <translation id="6485131920355264772">無法擷取空間資訊</translation> <translation id="6495925982925244349">第 <ph name="NETWORK_INDEX" /> 個網路 (共 <ph name="NETWORK_COUNT" /> 個),<ph name="NETWORK_NAME" />,<ph name="SECURITY_STATUS" />,<ph name="CONNECTION_STATUS" />,訊號強度 <ph name="SIGNAL_STRENGTH" />%,由系統管理員管理,詳細資料</translation> <translation id="649877868557234318">將 <ph name="FILE_NAME" /> 解壓縮至 <ph name="FOLDER_NAME" /></translation> @@ -901,6 +902,7 @@ <translation id="8579285237314169903">正在同步處理 <ph name="NUMBER_OF_FILES" /> 個項目...</translation> <translation id="8600173386174225982">檔案清單已變更為縮圖檢視模式。</translation> <translation id="8601932370724196034">Crostini 圖片檔</translation> +<translation id="8608515571837163082">輸入錯誤 PIN 碼的次數太多。輸入電信業者提供的 8 位數個人解鎖金鑰 (PUK)。</translation> <translation id="8609695766746872526">冰島文</translation> <translation id="863903787380594467">PIN 碼不正確,你還有 <ph name="RETRIES" /> 次重試機會。</translation> <translation id="8639391553632924850"><ph name="INPUT_LABEL" /> - 連接埠</translation>
diff --git a/ui/chromeos/translations/ui_chromeos_strings_zu.xtb b/ui/chromeos/translations/ui_chromeos_strings_zu.xtb index 660afdf5..ea791dc 100644 --- a/ui/chromeos/translations/ui_chromeos_strings_zu.xtb +++ b/ui/chromeos/translations/ui_chromeos_strings_zu.xtb
@@ -54,7 +54,6 @@ <translation id="1435838927755162558">Yabelana ngefolda ne-Parallels Desktop</translation> <translation id="1439919885608649279">Umuntu onezimbali</translation> <translation id="1471718551822868769">Isi-Slovak</translation> -<translation id="1474339897586437869">I-"<ph name="FILENAME" />" ayizange ilayishwe. Asikho isikhala esanele esikhululekile ku-Google Drayivu yakho.</translation> <translation id="1482884275703521657">Finnish</translation> <translation id="148466539719134488">I-Swiss</translation> <translation id="1497522201463361063">Ayikwazi ukuqamba kabusha i-"<ph name="FILE_NAME" />". <ph name="ERROR_MESSAGE" /></translation> @@ -488,7 +487,6 @@ <translation id="5159560892333415631">Sula konke ku-Udoti</translation> <translation id="5163869187418756376">Ukwabelana kuhlulekile. Hlola ukuxhumeka kwakho uphinde uzame futhi emuva kwesikhathi.</translation> <translation id="516592729076796170">Umhleli wase-US we-Dvorak</translation> -<translation id="5170477580121653719">Isikhala esisele se-Google Drayivu: <ph name="SPACE_AVAILABLE" />.</translation> <translation id="5177526793333269655">Ukubuka kwesithombe esincane</translation> <translation id="5194713942430106590">Chofoza ukuze uhlunge ikholomu nge-oda elikhuphukayo.</translation> <translation id="5211614973734216083">Isi-Faroese</translation>
diff --git a/ui/gfx/android/java_bitmap.cc b/ui/gfx/android/java_bitmap.cc index 1b9d9e02..6aadd5b 100644 --- a/ui/gfx/android/java_bitmap.cc +++ b/ui/gfx/android/java_bitmap.cc
@@ -133,7 +133,7 @@ // compositor relies on this. SkPixmap src = WrapJavaBitmapAsPixmap(jbitmap); const size_t min_row_bytes = src.info().minRowBytes(); - const size_t row_bytes = base::bits::AlignUp(min_row_bytes, 4u); + const size_t row_bytes = base::bits::AlignUp(min_row_bytes, size_t{4}); SkBitmap skbitmap; skbitmap.allocPixels(src.info(), row_bytes);
diff --git a/ui/gfx/mac/io_surface.cc b/ui/gfx/mac/io_surface.cc index e030f01..8bdb9fa 100644 --- a/ui/gfx/mac/io_surface.cc +++ b/ui/gfx/mac/io_surface.cc
@@ -253,12 +253,13 @@ const size_t plane_width = (size.width() + factor - 1) / factor; const size_t plane_height = (size.height() + factor - 1) / factor; const size_t plane_bytes_per_element = BytesPerElement(format, plane); - const size_t plane_bytes_per_row = IOSurfaceAlignProperty( - kIOSurfacePlaneBytesPerRow, - base::bits::AlignUp(plane_width, 2) * plane_bytes_per_element); + const size_t plane_bytes_per_row = + IOSurfaceAlignProperty(kIOSurfacePlaneBytesPerRow, + base::bits::AlignUp(plane_width, size_t{2}) * + plane_bytes_per_element); const size_t plane_bytes_alloc = IOSurfaceAlignProperty( kIOSurfacePlaneSize, - base::bits::AlignUp(plane_height, 2) * plane_bytes_per_row); + base::bits::AlignUp(plane_height, size_t{2}) * plane_bytes_per_row); const size_t plane_offset = IOSurfaceAlignProperty(kIOSurfacePlaneOffset, total_bytes_alloc);
diff --git a/ui/views/accessibility/view_ax_platform_node_delegate_mac.h b/ui/views/accessibility/view_ax_platform_node_delegate_mac.h index 2a47e180..d554b50 100644 --- a/ui/views/accessibility/view_ax_platform_node_delegate_mac.h +++ b/ui/views/accessibility/view_ax_platform_node_delegate_mac.h
@@ -26,9 +26,6 @@ // |ViewAccessibility| overrides: void OverrideNativeWindowTitle(const std::string& title) override; - - // |AXPlatformNodeDelegate| overrides: - const std::string& GetName() const override; }; } // namespace views
diff --git a/ui/views/accessibility/view_ax_platform_node_delegate_mac.mm b/ui/views/accessibility/view_ax_platform_node_delegate_mac.mm index 863bd14..ce3ef4a 100644 --- a/ui/views/accessibility/view_ax_platform_node_delegate_mac.mm +++ b/ui/views/accessibility/view_ax_platform_node_delegate_mac.mm
@@ -55,35 +55,6 @@ return window_host->GetNativeViewAccessibleForNSView(); } -const std::string& ViewAXPlatformNodeDelegateMac::GetName() const { - // By default, the kDialog name is the title of the window. NSAccessibility - // then applies that name to the native NSWindow. This causes VoiceOver to - // double-speak the name. In the case of some dialogs, such as the one - // associated with a JavaScript alert, we set the accessible description - // to the message contents. For screen readers which prefer the description - // over the displayed text, this causes both the title and message to be - // presented to the user. At the present time, VoiceOver is not one of those - // screen readers. Therefore if we have a dialog whose name is the same as - // the window title, and we also have an explicitly-provided description, set - // the name of the dialog to that description. This causes VoiceOver to read - // both the title and the displayed text. Note that in order for this to - // work, it is necessary for the View to also call OverrideNativeWindowTitle. - // Otherwise, NSAccessibility will set the window title to the message text. - const std::string& name = ViewAXPlatformNodeDelegate::GetName(); - if (!ui::IsDialog(GetRole()) || - !HasStringAttribute(ax::mojom::StringAttribute::kDescription) || - GetStringAttribute(ax::mojom::StringAttribute::kDescription).empty()) - return name; - - if (auto* widget = view()->GetWidget()) { - if (auto* widget_delegate = widget->widget_delegate()) { - if (base::UTF16ToUTF8(widget_delegate->GetWindowTitle()) == name) - return GetStringAttribute(ax::mojom::StringAttribute::kDescription); - } - } - return name; -} - void ViewAXPlatformNodeDelegateMac::OverrideNativeWindowTitle( const std::string& title) { if (gfx::NativeViewAccessible ax_window = GetNSWindow()) {
diff --git a/ui/views/accessibility/view_ax_platform_node_delegate_mac_unittest.cc b/ui/views/accessibility/view_ax_platform_node_delegate_mac_unittest.cc index 0cff30d..04de0a84 100644 --- a/ui/views/accessibility/view_ax_platform_node_delegate_mac_unittest.cc +++ b/ui/views/accessibility/view_ax_platform_node_delegate_mac_unittest.cc
@@ -80,14 +80,14 @@ }; TEST_F(ViewAXPlatformNodeDelegateMacTest, - GetNameReturnsNodeDescriptionWhenNameAndTitleAreEqual) { - EXPECT_EQ(view_->GetPlatformNodeDelegate()->GetName(), + GetNameReturnsNodeNameWhenNameAndTitleAreEqual) { + EXPECT_NE(view_->GetPlatformNodeDelegate()->GetName(), *view_->GetDescription()); } TEST_F(ViewAXPlatformNodeDelegateMacTest, GetNameReturnsNodeNameWhenNameAndTitleAreDifferent) { - EXPECT_EQ(view_->GetPlatformNodeDelegate()->GetName(), + EXPECT_NE(view_->GetPlatformNodeDelegate()->GetName(), *view_->GetDescription()); view_->SetName(kDifferentNodeName); @@ -96,7 +96,7 @@ } TEST_F(ViewAXPlatformNodeDelegateMacTest, GetNameReturnsNodeNameForNonDialog) { - EXPECT_EQ(view_->GetPlatformNodeDelegate()->GetName(), + EXPECT_NE(view_->GetPlatformNodeDelegate()->GetName(), *view_->GetDescription()); view_->SetRole(ax::mojom::Role::kDesktop); @@ -106,7 +106,7 @@ TEST_F(ViewAXPlatformNodeDelegateMacTest, GetNameReturnsNodeNameWhenDescriptionIsNotSet) { - EXPECT_EQ(view_->GetPlatformNodeDelegate()->GetName(), + EXPECT_NE(view_->GetPlatformNodeDelegate()->GetName(), *view_->GetDescription()); view_->SetDescription(absl::nullopt); @@ -116,7 +116,7 @@ TEST_F(ViewAXPlatformNodeDelegateMacTest, GetNameReturnsNodeNameWhenDescriptionIsAnEmptyString) { - EXPECT_EQ(view_->GetPlatformNodeDelegate()->GetName(), + EXPECT_NE(view_->GetPlatformNodeDelegate()->GetName(), *view_->GetDescription()); view_->SetDescription("");
diff --git a/ui/views/animation/animation_delegate_views.cc b/ui/views/animation/animation_delegate_views.cc index 98ee17f..541f94f5 100644 --- a/ui/views/animation/animation_delegate_views.cc +++ b/ui/views/animation/animation_delegate_views.cc
@@ -81,11 +81,14 @@ } void AnimationDelegateViews::ClearAnimationRunner() { + // `compositor_animation_runner_` holds a pointer owned by `container_`, so + // we need to release it before `container_` actually releases the memory it + // points to. + compositor_animation_runner_ = nullptr; // TODO(https://crbug.com/960621): make sure the container has a correct // compositor-assisted runner. if (container_) container_->SetAnimationRunner(nullptr); - compositor_animation_runner_ = nullptr; } } // namespace views